summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CTAN.sites3
-rw-r--r--FILES.byname1069
-rw-r--r--FILES.byname.gzbin2562204 -> 2558239 bytes
-rw-r--r--FILES.last07days475
-rw-r--r--biblio/ctan-bibdata/ctan.bib14
-rw-r--r--graphics/pgf/contrib/argumentation/README.md2
-rw-r--r--graphics/pgf/contrib/argumentation/argumentation-doc.pdfbin183613 -> 275801 bytes
-rw-r--r--graphics/pgf/contrib/argumentation/argumentation-doc.tex450
-rw-r--r--graphics/pgf/contrib/argumentation/argumentation.sty147
-rw-r--r--graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.pdfbin481429 -> 540950 bytes
-rw-r--r--graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.tex81
-rw-r--r--graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.pdfbin520790 -> 582871 bytes
-rw-r--r--graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.tex93
-rw-r--r--graphics/pgf/contrib/scrabble/tex/Scrabble.sty104
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/README.md42
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex363
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex55
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex227
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex55
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-parallelogram.tex151
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex544
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex160
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex298
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex103
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-square.tex163
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex261
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes.tex158
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex77
-rw-r--r--[-rwxr-xr-x]macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex1126
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-howtouse.tex193
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex702
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex50
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex230
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex61
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex145
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex207
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdfbin436012 -> 532726 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdfbin7613 -> 16392 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex71
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty32
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua (renamed from macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circles.lua)82
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua (renamed from macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipses.lua)64
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua17
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua8
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua15
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua25
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua39
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua27
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua9
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua319
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_lines.lua202
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua55
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua48
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua56
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua163
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_points.lua98
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua62
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua102
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua72
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua81
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua (renamed from macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangles.lua)86
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua (renamed from macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vectors.lua)22
-rw-r--r--obsolete/macros/latex/contrib/iwhdp/Back_2015.pdf (renamed from macros/latex/contrib/iwhdp/Back_2015.pdf)bin7156 -> 7156 bytes
-rw-r--r--obsolete/macros/latex/contrib/iwhdp/Deckblatt_2015.pdf (renamed from macros/latex/contrib/iwhdp/Deckblatt_2015.pdf)bin33111 -> 33111 bytes
-rw-r--r--obsolete/macros/latex/contrib/iwhdp/README (renamed from macros/latex/contrib/iwhdp/README)0
-rw-r--r--obsolete/macros/latex/contrib/iwhdp/iwhdp.cls (renamed from macros/latex/contrib/iwhdp/iwhdp.cls)0
-rw-r--r--obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.bib (renamed from macros/latex/contrib/iwhdp/iwhdp_Manual.bib)0
-rw-r--r--obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.pdf (renamed from macros/latex/contrib/iwhdp/iwhdp_Manual.pdf)bin420610 -> 420610 bytes
-rw-r--r--obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.tex (renamed from macros/latex/contrib/iwhdp/iwhdp_Manual.tex)0
-rw-r--r--obsolete/macros/latex/contrib/iwhdp/iwhdp_paper.bib (renamed from macros/latex/contrib/iwhdp/iwhdp_paper.bib)0
-rw-r--r--obsolete/macros/latex/contrib/iwhdp/iwhdp_paper.tex (renamed from macros/latex/contrib/iwhdp/iwhdp_paper.tex)0
-rw-r--r--support/texlab/CHANGELOG.md12
-rw-r--r--support/texlab/Cargo.lock527
-rw-r--r--support/texlab/crates/base-db/Cargo.toml11
-rw-r--r--support/texlab/crates/base-db/src/document.rs40
-rw-r--r--support/texlab/crates/base-db/src/graph.rs5
-rw-r--r--support/texlab/crates/base-db/src/util.rs2
-rw-r--r--support/texlab/crates/base-db/src/workspace.rs72
-rw-r--r--support/texlab/crates/bibfmt/Cargo.toml19
-rw-r--r--support/texlab/crates/bibfmt/src/lib.rs193
-rw-r--r--support/texlab/crates/bibfmt/src/tests.rs144
-rw-r--r--support/texlab/crates/bibtex-utils/Cargo.toml4
-rw-r--r--support/texlab/crates/citeproc/Cargo.toml6
-rw-r--r--support/texlab/crates/commands/Cargo.toml12
-rw-r--r--support/texlab/crates/commands/src/clean.rs11
-rw-r--r--support/texlab/crates/commands/src/fwd_search.rs3
-rw-r--r--support/texlab/crates/completion-data/Cargo.toml8
-rw-r--r--support/texlab/crates/completion/Cargo.toml9
-rw-r--r--support/texlab/crates/completion/benches/bench_main.rs3
-rw-r--r--support/texlab/crates/definition/Cargo.toml4
-rw-r--r--support/texlab/crates/definition/src/citation.rs5
-rw-r--r--support/texlab/crates/definition/src/command.rs5
-rw-r--r--support/texlab/crates/definition/src/include.rs7
-rw-r--r--support/texlab/crates/definition/src/label.rs7
-rw-r--r--support/texlab/crates/definition/src/lib.rs16
-rw-r--r--support/texlab/crates/definition/src/string_ref.rs5
-rw-r--r--support/texlab/crates/definition/src/tests.rs35
-rw-r--r--support/texlab/crates/diagnostics/Cargo.toml7
-rw-r--r--support/texlab/crates/diagnostics/src/build_log.rs22
-rw-r--r--support/texlab/crates/diagnostics/src/citations.rs3
-rw-r--r--support/texlab/crates/diagnostics/src/tests.rs4
-rw-r--r--support/texlab/crates/distro/src/language.rs5
-rw-r--r--support/texlab/crates/folding/Cargo.toml2
-rw-r--r--support/texlab/crates/folding/src/tests.rs3
-rw-r--r--support/texlab/crates/highlights/Cargo.toml18
-rw-r--r--support/texlab/crates/highlights/src/label.rs26
-rw-r--r--support/texlab/crates/highlights/src/lib.rs31
-rw-r--r--support/texlab/crates/highlights/src/tests.rs41
-rw-r--r--support/texlab/crates/hover/Cargo.toml2
-rw-r--r--support/texlab/crates/hover/src/citation.rs12
-rw-r--r--support/texlab/crates/hover/src/entry_type.rs4
-rw-r--r--support/texlab/crates/hover/src/field_type.rs4
-rw-r--r--support/texlab/crates/hover/src/label.rs9
-rw-r--r--support/texlab/crates/hover/src/lib.rs34
-rw-r--r--support/texlab/crates/hover/src/package.rs4
-rw-r--r--support/texlab/crates/hover/src/string_ref.rs4
-rw-r--r--support/texlab/crates/hover/src/tests.rs9
-rw-r--r--support/texlab/crates/inlay-hints/Cargo.toml4
-rw-r--r--support/texlab/crates/inlay-hints/src/lib.rs3
-rw-r--r--support/texlab/crates/inlay-hints/src/tests.rs108
-rw-r--r--support/texlab/crates/line-index/Cargo.toml14
-rw-r--r--support/texlab/crates/line-index/src/lib.rs (renamed from support/texlab/crates/base-db/src/util/line_index.rs)18
-rw-r--r--support/texlab/crates/links/Cargo.toml17
-rw-r--r--support/texlab/crates/links/src/include.rs26
-rw-r--r--support/texlab/crates/links/src/lib.rs12
-rw-r--r--support/texlab/crates/links/src/tests.rs57
-rw-r--r--support/texlab/crates/parser/Cargo.toml7
-rw-r--r--support/texlab/crates/parser/src/bibtex.rs15
-rw-r--r--support/texlab/crates/parser/src/bibtex/tests.rs3994
-rw-r--r--support/texlab/crates/parser/src/build_log.rs12
-rw-r--r--support/texlab/crates/parser/src/build_log/tests.rs1228
-rw-r--r--support/texlab/crates/parser/src/latex.rs17
-rw-r--r--support/texlab/crates/parser/src/latex/tests.rs3523
-rw-r--r--support/texlab/crates/parser/src/latexmkrc.rs52
-rw-r--r--support/texlab/crates/parser/src/lib.rs6
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@comment.txt.snap10
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_809.txt.snap32
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_945.txt.snap27
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@preamble.txt.snap17
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aho_2006.txt.snap132
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aksin_2006.txt.snap258
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__almendro_1998.txt.snap246
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__averroes_1998.txt.snap351
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__betram_1996.txt.snap208
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__blom_2021.txt.snap223
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__combi_2004.txt.snap251
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__erwin_2007.txt.snap239
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__jain_1999.txt.snap267
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap302
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__knuth_1984.txt.snap320
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__matuz_1990.txt.snap176
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap368
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__rivest_1978.txt.snap232
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@001.txt.snap27
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@002.txt.snap20
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@003.txt.snap25
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@004.txt.snap31
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@005.txt.snap30
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@006.txt.snap69
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@007.txt.snap20
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@block_comments.txt.snap30
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default.txt.snap26
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default_error.txt.snap25
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_figure.txt.snap30
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal.txt.snap21
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal_error.txt.snap20
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_empty.txt.snap13
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_missing_brace.txt.snap14
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap19
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote.txt.snap20
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap25
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap17
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_star.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_definition_simple.txt.snap29
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_reference_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error1.txt.snap33
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error2.txt.snap23
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error3.txt.snap18
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error4.txt.snap10
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_simple.txt.snap38
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap19
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap14
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap13
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap29
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap25
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap39
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap14
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap19
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_asymptote.txt.snap41
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition.txt.snap40
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap35
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested.txt.snap41
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap42
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_simple.txt.snap29
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation.txt.snap17
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation_missing_begin.txt.snap32
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_args.txt.snap20
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_empty.txt.snap10
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_escape.txt.snap10
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_declaration.txt.snap50
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap47
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap29
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_package.txt.snap30
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap30
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap34
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap33
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path.txt.snap18
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_command.txt.snap23
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_options.txt.snap23
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_missing_end.txt.snap14
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__equation_missing_end.txt.snap32
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__escaped_brackets.txt.snap18
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_braces.txt.snap12
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets.txt.snap12
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@hello_world.txt.snap12
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_options.txt.snap31
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__bibtex_include_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_empty.txt.snap13
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_options.txt.snap38
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_command.txt.snap31
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap26
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_options.txt.snap26
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_incomplete.txt.snap14
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_simple.txt.snap20
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_options.txt.snap26
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap17
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap19
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_empty.txt.snap13
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_multiple.txt.snap19
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_options.txt.snap38
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_options.txt.snap26
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__verbatim_include_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline.txt.snap26
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline_double_dollar.txt.snap26
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_568.txt.snap28
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_745.txt.snap131
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_789.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_828.txt.snap22
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_853.txt.snap62
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_857.txt.snap33
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_874.txt.snap28
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_919.txt.snap61
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_931.txt.snap16
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_line_break.txt.snap19
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_number.txt.snap23
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_equation.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_incomplete.txt.snap32
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_multiple.txt.snap19
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_error.txt.snap19
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_simple.txt.snap20
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_simple.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter.txt.snap10
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter_error.txt.snap10
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__paragraphs.txt.snap67
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_enum_item.txt.snap47
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap23
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_nested.txt.snap57
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_siblings.txt.snap29
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap30
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap20
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap20
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap25
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap15
-rw-r--r--support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_thmtools.txt.snap35
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/comment.txt6
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/issue_809.txt3
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/issue_945.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/preamble.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/aho_2006.txt8
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/aksin_2006.txt16
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/almendro_1998.txt14
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/averroes_1998.txt21
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/betram_1996.txt16
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/blom_2021.txt20
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/combi_2004.txt16
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/erwin_2007.txt14
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/jain_1999.txt18
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/kastenholz_2006.txt20
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/knuth_1984.txt22
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/matuz_1990.txt14
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/nietzsche_1998.txt24
-rw-r--r--support/texlab/crates/parser/src/test_data/bibtex/samples/rivest_1978.txt17
-rw-r--r--support/texlab/crates/parser/src/test_data/build_log/001.txt83
-rw-r--r--support/texlab/crates/parser/src/test_data/build_log/002.txt64
-rw-r--r--support/texlab/crates/parser/src/test_data/build_log/003.txt65
-rw-r--r--support/texlab/crates/parser/src/test_data/build_log/004.txt83
-rw-r--r--support/texlab/crates/parser/src/test_data/build_log/005.txt385
-rw-r--r--support/texlab/crates/parser/src/test_data/build_log/006.txt122
-rw-r--r--support/texlab/crates/parser/src/test_data/build_log/007.txt176
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/block_comments.txt9
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/caption/caption_default.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/caption/caption_default_error.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/caption/caption_figure.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal_error.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/citation/citation_empty.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/citation/citation_missing_brace.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/citation/citation_multiple_keys.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote_postnote.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/citation/citation_redundant_comma.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/citation/citation_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/citation/citation_star.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/color/color_definition_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/color/color_reference_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error1.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error2.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error3.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error4.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_argc.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl_error.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_optional.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_with_begin.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_no_impl.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/environment/environment_asymptote.txt3
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/environment/environment_definition.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/environment/environment_definition_optional_arg.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/environment/environment_nested.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/environment/environment_nested_missing_braces.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/environment/environment_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/equation.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/equation_missing_begin.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/generic_command_args.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/generic_command_empty.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/generic_command_escape.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/glossary/acronym_declaration.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/glossary/acronym_package.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_definition_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/graphics_path.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/graphics_path_command.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/graphics_path_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/group/curly_group_missing_end.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/group/curly_group_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/group/equation_missing_end.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/group/escaped_brackets.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/group/unmatched_braces.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets_with_group.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/hello_world.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/bibtex_include_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/class_include_empty.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/class_include_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/class_include_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/graphics_include_command.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/graphics_include_complicated_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/graphics_include_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/graphics_include_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/import_incomplete.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/import_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/latex_include_equality_sign.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/latex_include_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/latex_input_path_brackets.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/package_include_empty.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/package_include_multiple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/package_include_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/package_include_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/pgf_library_import_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/svg_include_options.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/svg_include_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/tikz_library_import_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/include/verbatim_include_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/inline.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/inline_double_dollar.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/issue_568.txt2
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/issue_745.txt21
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/issue_789.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/issue_828.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/issue_853.txt8
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/issue_857.txt3
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/issue_874.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/issue_919.txt11
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/issue_931.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_definition_line_break.txt2
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_definition_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_number.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_reference_equation.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_reference_incomplete.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_reference_multiple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_error.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_incomplete.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/label/label_reference_simple.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/parameter.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/parameter_error.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/structure/paragraphs.txt11
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/structure/structure_enum_item.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/structure/structure_invalid_nesting.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/structure/structure_nested.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/structure/structure_siblings.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_full.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_only_name.txt1
-rw-r--r--support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_thmtools.txt1
-rw-r--r--support/texlab/crates/references/Cargo.toml2
-rw-r--r--support/texlab/crates/references/src/entry.rs15
-rw-r--r--support/texlab/crates/references/src/label.rs9
-rw-r--r--support/texlab/crates/references/src/lib.rs23
-rw-r--r--support/texlab/crates/references/src/string_def.rs9
-rw-r--r--support/texlab/crates/references/src/tests.rs25
-rw-r--r--support/texlab/crates/rename/Cargo.toml2
-rw-r--r--support/texlab/crates/rename/src/command.rs4
-rw-r--r--support/texlab/crates/rename/src/entry.rs4
-rw-r--r--support/texlab/crates/rename/src/label.rs4
-rw-r--r--support/texlab/crates/rename/src/lib.rs16
-rw-r--r--support/texlab/crates/rename/src/tests.rs20
-rw-r--r--support/texlab/crates/symbols/Cargo.toml9
-rw-r--r--support/texlab/crates/symbols/src/document.rs1
-rw-r--r--support/texlab/crates/symbols/src/workspace/sort.rs3
-rw-r--r--support/texlab/crates/symbols/src/workspace/tests.rs10
-rw-r--r--support/texlab/crates/syntax/Cargo.toml4
-rw-r--r--support/texlab/crates/syntax/src/latexmkrc.rs5
-rw-r--r--support/texlab/crates/syntax/src/lib.rs1
-rw-r--r--support/texlab/crates/test-utils/Cargo.toml5
-rw-r--r--support/texlab/crates/test-utils/src/fixture.rs46
-rw-r--r--support/texlab/crates/texlab/Cargo.toml25
-rw-r--r--support/texlab/crates/texlab/benches/bench_main.rs5
-rw-r--r--support/texlab/crates/texlab/src/features/completion.rs18
-rw-r--r--support/texlab/crates/texlab/src/features/definition.rs57
-rw-r--r--support/texlab/crates/texlab/src/features/folding.rs40
-rw-r--r--support/texlab/crates/texlab/src/features/formatting.rs6
-rw-r--r--support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs199
-rw-r--r--support/texlab/crates/texlab/src/features/formatting/latexindent.rs2
-rw-r--r--support/texlab/crates/texlab/src/features/highlight.rs25
-rw-r--r--support/texlab/crates/texlab/src/features/highlight/label.rs37
-rw-r--r--support/texlab/crates/texlab/src/features/hover.rs19
-rw-r--r--support/texlab/crates/texlab/src/features/inlay_hint.rs4
-rw-r--r--support/texlab/crates/texlab/src/features/inlay_hint/label.rs41
-rw-r--r--support/texlab/crates/texlab/src/features/link.rs40
-rw-r--r--support/texlab/crates/texlab/src/features/link/include.rs22
-rw-r--r--support/texlab/crates/texlab/src/features/reference.rs35
-rw-r--r--support/texlab/crates/texlab/src/features/rename.rs19
-rw-r--r--support/texlab/crates/texlab/src/features/symbols.rs21
-rw-r--r--support/texlab/crates/texlab/src/server.rs43
-rw-r--r--support/texlab/crates/texlab/src/util/diagnostics.rs15
-rw-r--r--support/texlab/crates/texlab/src/util/line_index_ext.rs44
-rw-r--r--support/texlab/crates/texlab/tests/lsp/fixture.rs271
-rw-r--r--support/texlab/crates/texlab/tests/lsp/main.rs3
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document.rs5
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/document_highlight.rs51
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/document_link.rs52
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs45
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/formatting.rs135
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/inlay_hint.rs57
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap31
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap16
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap31
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap31
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap31
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap31
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap10
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap21
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_883.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_885.snap18
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap36
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap31
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap31
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap26
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap11
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap16
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap19
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap19
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__smoke.snap103
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap7
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap7
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap7
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap15
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap6
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap5
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap5
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap7
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap9
-rw-r--r--support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap38
-rw-r--r--support/texlab/crates/texlab/tests/lsp/workspace.rs1
-rw-r--r--support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__smoke.snap78
-rw-r--r--support/texlab/crates/texlab/tests/lsp/workspace/symbol.rs48
-rw-r--r--support/texlab/texlab.14
-rw-r--r--support/texlab/texlab.pdfbin26718 -> 26374 bytes
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl1
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb26
-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.xzbin2494036 -> 2492912 bytes
-rw-r--r--timestamp2
-rw-r--r--web/c_cpp/cweb/Makefile27
-rw-r--r--web/c_cpp/cweb/README1
-rw-r--r--web/c_cpp/cweb/comm-mac.ch4
-rw-r--r--web/c_cpp/cweb/comm-ql.ch20
-rw-r--r--web/c_cpp/cweb/common.c151
-rw-r--r--web/c_cpp/cweb/common.h6
-rw-r--r--web/c_cpp/cweb/common.w45
-rw-r--r--web/c_cpp/cweb/ctang-bs.ch10
-rw-r--r--web/c_cpp/cweb/ctang-pc.ch4
-rw-r--r--web/c_cpp/cweb/ctang-ql.ch8
-rw-r--r--web/c_cpp/cweb/ctang-vms.ch4
-rw-r--r--web/c_cpp/cweb/ctang-w32.ch4
-rw-r--r--web/c_cpp/cweb/ctangle.c297
-rw-r--r--web/c_cpp/cweb/ctangle.w76
-rw-r--r--web/c_cpp/cweb/cweav-bs.ch10
-rw-r--r--web/c_cpp/cweb/cweav-pc.ch4
-rw-r--r--web/c_cpp/cweb/cweav-ql.ch8
-rw-r--r--web/c_cpp/cweb/cweav-vms.ch4
-rw-r--r--web/c_cpp/cweb/cweav-w32.ch4
-rw-r--r--web/c_cpp/cweb/cweave.w141
-rw-r--r--web/c_cpp/cweb/cweb.14
-rw-r--r--web/c_cpp/cweb/cwebacromac.tex175
-rw-r--r--web/c_cpp/cweb/cwebmac.tex206
-rw-r--r--web/c_cpp/cweb/cwebman.pdfbin346283 -> 347143 bytes
-rw-r--r--web/c_cpp/cweb/cwebman.tex65
-rw-r--r--web/c_cpp/cweb/prod.w2
-rw-r--r--web/pwebmac/README.md18
-rw-r--r--web/pwebmac/index.md2
-rwxr-xr-xweb/pwebmac/makeall176
-rw-r--r--web/pwebmac/pwebmac.tex39
-rw-r--r--web/pwebmac/webman.ch328
590 files changed, 17592 insertions, 15705 deletions
diff --git a/CTAN.sites b/CTAN.sites
index 6a6889aea1..86e247d145 100644
--- a/CTAN.sites
+++ b/CTAN.sites
@@ -138,9 +138,6 @@ by country):
URL: http://ring.airnet.ne.jp/archives/text/CTAN/
- cran.asia (Korea)
- URL: https://cran.asia/tex/
-
ftp.ktug.org (Korea)
URL: http://ftp.ktug.org/tex-archive/
URL: ftp://ftp.ktug.org/tex-archive/
diff --git a/FILES.byname b/FILES.byname
index 5e9c68ca3f..466cb3bda1 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -2063,12 +2063,12 @@
2023/10/05 | 1710 | biblio/citation-style-language/README.md
2023/10/05 | 12878 | biblio/citation-style-language/vancouver.csl
2023/10/05 | 4531754 | biblio/citation-style-language.zip
-2023/12/02 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/12/03 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx
-2023/12/02 | 2830633 | biblio/ctan-bibdata/ctan.bib
-2023/12/02 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2023/12/03 | 2830630 | biblio/ctan-bibdata/ctan.bib
+2023/12/03 | 3708800 | biblio/ctan-bibdata/ctan.pdf
2023/01/16 | 1489 | biblio/ctan-bibdata/README
-2023/12/02 | 4113762 | biblio/ctan-bibdata.zip
+2023/12/03 | 4113768 | 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
@@ -5429,7 +5429,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
-2023/12/02 | 32864 | FILES.last07days
+2023/12/03 | 44547 | 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
@@ -159769,11 +159769,11 @@
2014/01/12 | 86721 | graphics/pgf/contrib/aobs-tikz/aobs-tikz.pdf
2014/01/12 | 686 | graphics/pgf/contrib/aobs-tikz/README
2014/01/12 | 92515 | graphics/pgf/contrib/aobs-tikz.zip
-2023/11/05 | 183613 | graphics/pgf/contrib/argumentation/argumentation-doc.pdf
-2023/11/05 | 14471 | graphics/pgf/contrib/argumentation/argumentation-doc.tex
-2023/11/05 | 4359 | graphics/pgf/contrib/argumentation/argumentation.sty
-2023/11/05 | 302 | graphics/pgf/contrib/argumentation/README.md
-2023/11/05 | 184154 | graphics/pgf/contrib/argumentation.zip
+2023/12/02 | 275801 | graphics/pgf/contrib/argumentation/argumentation-doc.pdf
+2023/12/02 | 23227 | graphics/pgf/contrib/argumentation/argumentation-doc.tex
+2023/12/02 | 5829 | graphics/pgf/contrib/argumentation/argumentation.sty
+2023/12/02 | 302 | graphics/pgf/contrib/argumentation/README.md
+2023/12/03 | 273805 | graphics/pgf/contrib/argumentation.zip
2013/02/23 | 12732 | graphics/pgf/contrib/battleship/battleship.sty
2013/02/23 | 82593 | graphics/pgf/contrib/battleship/doc/battleship.pdf
2013/02/23 | 14781 | graphics/pgf/contrib/battleship/doc/battleship.tex
@@ -161114,13 +161114,13 @@
2023/10/03 | 10492 | graphics/pgf/contrib/schemabloc/schemabloc.sty
2023/10/03 | 37203 | graphics/pgf/contrib/schemabloc/schemabloc.tex
2023/10/03 | 216866 | graphics/pgf/contrib/schemabloc.zip
-2023/01/10 | 481429 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.pdf
-2023/01/10 | 9210 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.tex
-2023/01/10 | 520790 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.pdf
-2023/01/10 | 11038 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.tex
+2023/12/03 | 540950 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.pdf
+2023/12/03 | 11379 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.tex
+2023/12/03 | 582871 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.pdf
+2023/12/03 | 13554 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.tex
2023/01/10 | 683 | graphics/pgf/contrib/scrabble/README.md
-2023/01/10 | 11293 | graphics/pgf/contrib/scrabble/tex/Scrabble.sty
-2023/01/10 | 979819 | graphics/pgf/contrib/scrabble.zip
+2023/12/03 | 15061 | graphics/pgf/contrib/scrabble/tex/Scrabble.sty
+2023/12/03 | 1097420 | graphics/pgf/contrib/scrabble.zip
2023/02/23 | 1338 | graphics/pgf/contrib/scsnowman/LICENSE
2023/02/23 | 817 | graphics/pgf/contrib/scsnowman/README.md
2023/02/23 | 8805 | graphics/pgf/contrib/scsnowman/scsnowman-normal.def
@@ -227107,16 +227107,6 @@
2007/04/03 | 147656 | macros/latex/contrib/itnumpar/itnumpar.pdf
2007/04/03 | 801 | macros/latex/contrib/itnumpar/README
2007/04/04 | 137617 | macros/latex/contrib/itnumpar.zip
-2015/05/06 | 7156 | macros/latex/contrib/iwhdp/Back_2015.pdf
-2015/05/18 | 33111 | macros/latex/contrib/iwhdp/Deckblatt_2015.pdf
-2015/06/01 | 32899 | macros/latex/contrib/iwhdp/iwhdp.cls
-2015/06/02 | 2527 | macros/latex/contrib/iwhdp/iwhdp_Manual.bib
-2015/06/02 | 420610 | macros/latex/contrib/iwhdp/iwhdp_Manual.pdf
-2015/06/02 | 22470 | macros/latex/contrib/iwhdp/iwhdp_Manual.tex
-2015/06/02 | 61 | macros/latex/contrib/iwhdp/iwhdp_paper.bib
-2015/06/02 | 1406 | macros/latex/contrib/iwhdp/iwhdp_paper.tex
-2015/06/01 | 939 | macros/latex/contrib/iwhdp/README
-2015/06/02 | 438057 | macros/latex/contrib/iwhdp.zip
2023/09/01 | 743 | macros/latex/contrib/iwonamath/iwonamath.bib
2023/09/01 | 13586 | macros/latex/contrib/iwonamath/iwonamath.dtx
2023/08/31 | 466 | macros/latex/contrib/iwonamath/iwonamath.ins
@@ -241099,46 +241089,60 @@
2021/01/20 | 65 | macros/latex/contrib/tkz/tkz-berge/NamedGraphs/examples/tkzpreamblenamed.ltx
2021/01/20 | 1990 | macros/latex/contrib/tkz/tkz-berge/README.md
2021/01/21 | 1065010 | macros/latex/contrib/tkz/tkz-berge.zip
-2023/11/10 | 12584 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
-2023/11/10 | 12904 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
-2023/11/10 | 14840 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
-2023/11/10 | 11420 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex
-2023/11/10 | 7866 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
-2023/10/23 | 4960 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes.tex
-2023/11/10 | 9334 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
-2023/10/26 | 6799 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex
-2023/11/10 | 126618 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
-2023/10/26 | 7623 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-howtouse.tex
-2023/11/10 | 9798 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex
-2023/11/10 | 7738 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
-2023/10/26 | 8379 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
-2023/11/10 | 436012 | macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
+2023/12/03 | 12874 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
+2023/12/02 | 12731 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
+2023/12/03 | 16324 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
+2023/12/02 | 11620 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex
+2023/12/03 | 4240 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-parallelogram.tex
+2023/12/02 | 16788 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
+2023/12/03 | 4646 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex
+2023/12/03 | 8147 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex
+2023/12/02 | 3109 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
+2023/12/03 | 5108 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-square.tex
+2023/12/02 | 3258 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes.tex
+2023/12/03 | 13724 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
+2023/12/02 | 5052 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex
+2023/12/03 | 119095 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
+2023/12/03 | 20100 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex
+2023/12/01 | 9766 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex
+2023/12/03 | 8756 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
+2023/11/28 | 9079 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
+2023/11/30 | 2777 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
+2023/12/01 | 4369 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex
+2023/11/28 | 9282 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex
+2023/12/03 | 532726 | macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
2023/10/25 | 20611 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdf
2023/10/26 | 1491 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex
-2023/10/25 | 7613 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
-2023/10/25 | 2248 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
+2023/12/02 | 16392 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
+2023/12/02 | 1647 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
2023/10/25 | 17158 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdf
2023/10/25 | 2359 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex
2023/11/09 | 11343 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdf
2023/10/31 | 807 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex
-2023/11/10 | 5397 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circles.lua
-2023/10/23 | 1271 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
-2023/11/10 | 3784 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipses.lua
-2023/11/10 | 2909 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
-2023/11/10 | 6454 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
-2023/11/10 | 2819 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
-2023/11/10 | 2722 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
-2023/11/10 | 1894 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
-2023/11/10 | 8281 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
-2023/11/10 | 5288 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_lines.lua
-2023/11/10 | 1464 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
-2023/11/10 | 4305 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
-2023/11/10 | 2471 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_points.lua
-2023/11/10 | 1786 | macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
-2023/11/10 | 10224 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangles.lua
-2023/11/10 | 1155 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vectors.lua
-2023/11/10 | 3179 | macros/latex/contrib/tkz/tkz-elements/README.md
-2023/11/10 | 556899 | macros/latex/contrib/tkz/tkz-elements.zip
+2023/12/03 | 6101 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
+2023/12/03 | 1305 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
+2023/12/03 | 3901 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
+2023/12/03 | 2549 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
+2023/12/03 | 6462 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
+2023/12/03 | 3019 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
+2023/12/03 | 2665 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
+2023/12/03 | 2527 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
+2023/12/03 | 996 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
+2023/12/03 | 8242 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
+2023/12/03 | 8239 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
+2023/12/03 | 1453 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
+2023/12/03 | 1658 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
+2023/12/03 | 2040 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
+2023/12/03 | 7858 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
+2023/12/03 | 2134 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
+2023/12/03 | 3489 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
+2023/12/03 | 2326 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
+2023/12/03 | 3049 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
+2023/12/03 | 1691 | macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
+2023/12/03 | 11471 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
+2023/12/03 | 1254 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
+2023/12/03 | 3669 | macros/latex/contrib/tkz/tkz-elements/README.md
+2023/12/03 | 682587 | macros/latex/contrib/tkz/tkz-elements.zip
2023/01/17 | 10308 | macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
2022/06/11 | 5093 | macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex
2023/10/14 | 11711 | macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex
@@ -273953,6 +273957,16 @@
2008/11/22 | 14732 | obsolete/macros/latex/contrib/gmeometric/gmeometric.sty
2008/08/06 | 2387 | obsolete/macros/latex/contrib/gmeometric/README
2011/11/10 | 62632 | obsolete/macros/latex/contrib/gmeometric.zip
+2015/05/06 | 7156 | obsolete/macros/latex/contrib/iwhdp/Back_2015.pdf
+2015/05/18 | 33111 | obsolete/macros/latex/contrib/iwhdp/Deckblatt_2015.pdf
+2015/06/01 | 32899 | obsolete/macros/latex/contrib/iwhdp/iwhdp.cls
+2015/06/02 | 2527 | obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.bib
+2015/06/02 | 420610 | obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.pdf
+2015/06/02 | 22470 | obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.tex
+2015/06/02 | 61 | obsolete/macros/latex/contrib/iwhdp/iwhdp_paper.bib
+2015/06/02 | 1406 | obsolete/macros/latex/contrib/iwhdp/iwhdp_paper.tex
+2015/06/01 | 939 | obsolete/macros/latex/contrib/iwhdp/README
+2015/06/02 | 438057 | obsolete/macros/latex/contrib/iwhdp.zip
2020/07/22 | 4612 | obsolete/macros/latex/contrib/koma-script-obsolete/README
2020/07/22 | 108995 | obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.dtx
2020/07/22 | 3382 | obsolete/macros/latex/contrib/koma-script-obsolete/scrlettr.ins
@@ -287512,567 +287526,211 @@
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
-2023/11/05 | 50741 | support/texlab/Cargo.lock
-2023/11/05 | 347 | support/texlab/Cargo.toml
-2023/11/05 | 32608 | support/texlab/CHANGELOG.md
-2023/11/05 | 181 | support/texlab/CONTRIBUTING.md
-2023/11/05 | 515 | support/texlab/crates/base-db/Cargo.toml
-2023/11/05 | 4412 | support/texlab/crates/base-db/src/config.rs
-2023/11/05 | 58408 | support/texlab/crates/base-db/src/data.rs
-2023/11/05 | 5374 | support/texlab/crates/base-db/src/document.rs
-2023/11/05 | 5838 | support/texlab/crates/base-db/src/graph.rs
-2023/11/05 | 560 | support/texlab/crates/base-db/src/lib.rs
-2023/11/05 | 1170 | support/texlab/crates/base-db/src/semantics/auxiliary.rs
-2023/11/05 | 2371 | support/texlab/crates/base-db/src/semantics/bib.rs
-2023/11/05 | 1112 | support/texlab/crates/base-db/src/semantics.rs
-2023/11/05 | 11078 | support/texlab/crates/base-db/src/semantics/tex.rs
-2023/11/05 | 5900 | support/texlab/crates/base-db/src/util/label.rs
-2023/11/05 | 6477 | support/texlab/crates/base-db/src/util/line_index.rs
-2023/11/05 | 5553 | support/texlab/crates/base-db/src/util/queries.rs
-2023/11/05 | 445 | support/texlab/crates/base-db/src/util/regex_filter.rs
-2023/11/05 | 244 | support/texlab/crates/base-db/src/util.rs
-2023/11/05 | 10197 | support/texlab/crates/base-db/src/workspace.rs
-2023/11/05 | 492 | support/texlab/crates/bibtex-utils/Cargo.toml
-2023/11/05 | 2074 | support/texlab/crates/bibtex-utils/src/field/author.rs
-2023/11/05 | 2665 | support/texlab/crates/bibtex-utils/src/field/date.rs
-2023/11/05 | 1626 | support/texlab/crates/bibtex-utils/src/field/number.rs
-2023/11/05 | 60 | support/texlab/crates/bibtex-utils/src/field.rs
-2023/11/05 | 8955 | support/texlab/crates/bibtex-utils/src/field/text.rs
-2023/11/05 | 15 | support/texlab/crates/bibtex-utils/src/lib.rs
-2023/11/05 | 489 | support/texlab/crates/citeproc/Cargo.toml
-2023/11/05 | 22204 | support/texlab/crates/citeproc/src/driver.rs
-2023/11/05 | 4730 | support/texlab/crates/citeproc/src/entry.rs
-2023/11/05 | 875 | support/texlab/crates/citeproc/src/lib.rs
-2023/11/05 | 1760 | support/texlab/crates/citeproc/src/output.rs
-2023/11/05 | 15622 | support/texlab/crates/citeproc/src/tests.rs
-2023/11/05 | 558 | support/texlab/crates/commands/Cargo.toml
-2023/11/05 | 3838 | support/texlab/crates/commands/src/build.rs
-2023/11/05 | 987 | support/texlab/crates/commands/src/change_env.rs
-2023/11/05 | 1820 | support/texlab/crates/commands/src/clean.rs
-2023/11/05 | 1590 | support/texlab/crates/commands/src/dep_graph.rs
-2023/11/05 | 3093 | support/texlab/crates/commands/src/find_envs.rs
-2023/11/05 | 3207 | support/texlab/crates/commands/src/fwd_search.rs
-2023/11/05 | 389 | support/texlab/crates/commands/src/lib.rs
-2023/11/05 | 1583 | support/texlab/crates/commands/src/placeholders.rs
-2023/11/05 | 1023 | support/texlab/crates/completion/benches/bench_main.rs
-2023/11/05 | 688 | support/texlab/crates/completion/Cargo.toml
-2023/11/05 | 356 | support/texlab/crates/completion-data/Cargo.toml
-2023/11/05 | 6970534 | support/texlab/crates/completion-data/data/completion.json.gz
-2023/11/05 | 3265 | support/texlab/crates/completion-data/src/lib.rs
-2023/11/05 | 5533 | support/texlab/crates/completion/src/lib.rs
-2023/11/05 | 2493 | support/texlab/crates/completion/src/providers/argument.rs
-2023/11/05 | 2276 | support/texlab/crates/completion/src/providers/citations.rs
-2023/11/05 | 1553 | support/texlab/crates/completion/src/providers/color_model.rs
-2023/11/05 | 2107 | support/texlab/crates/completion/src/providers/color.rs
-2023/11/05 | 4254 | support/texlab/crates/completion/src/providers/command.rs
-2023/11/05 | 1118 | support/texlab/crates/completion/src/providers/entry_type.rs
-2023/11/05 | 4297 | support/texlab/crates/completion/src/providers/environment.rs
-2023/11/05 | 2369 | support/texlab/crates/completion/src/providers/field.rs
-2023/11/05 | 2612 | support/texlab/crates/completion/src/providers/glossary.rs
-2023/11/05 | 2481 | support/texlab/crates/completion/src/providers/import.rs
-2023/11/05 | 4755 | support/texlab/crates/completion/src/providers/include.rs
-2023/11/05 | 3501 | support/texlab/crates/completion/src/providers/label.rs
-2023/11/05 | 699 | support/texlab/crates/completion/src/providers.rs
-2023/11/05 | 3301 | support/texlab/crates/completion/src/providers/tikz_library.rs
-2023/11/05 | 44178 | support/texlab/crates/completion/src/tests.rs
-2023/11/05 | 1382 | support/texlab/crates/completion/src/util/builder.rs
-2023/11/05 | 1025 | support/texlab/crates/completion/src/util/matchers.rs
-2023/11/05 | 2320 | support/texlab/crates/completion/src/util/patterns.rs
-2023/11/05 | 967 | support/texlab/crates/completion/src/util.rs
-2023/11/05 | 378 | support/texlab/crates/definition/Cargo.toml
-2023/11/05 | 844 | support/texlab/crates/definition/src/citation.rs
-2023/11/05 | 1348 | support/texlab/crates/definition/src/command.rs
-2023/11/05 | 1056 | support/texlab/crates/definition/src/include.rs
-2023/11/05 | 1146 | support/texlab/crates/definition/src/label.rs
-2023/11/05 | 1250 | support/texlab/crates/definition/src/lib.rs
-2023/11/05 | 1048 | support/texlab/crates/definition/src/string_ref.rs
-2023/11/05 | 2998 | support/texlab/crates/definition/src/tests.rs
-2023/11/05 | 394 | support/texlab/crates/diagnostics/Cargo.toml
-2023/11/05 | 3263 | support/texlab/crates/diagnostics/src/build_log.rs
-2023/11/05 | 3027 | support/texlab/crates/diagnostics/src/citations.rs
-2023/11/05 | 3218 | support/texlab/crates/diagnostics/src/grammar/bib.rs
-2023/11/05 | 79 | support/texlab/crates/diagnostics/src/grammar.rs
-2023/11/05 | 4144 | support/texlab/crates/diagnostics/src/grammar/tex.rs
-2023/11/05 | 3021 | support/texlab/crates/diagnostics/src/labels.rs
-2023/11/05 | 2322 | support/texlab/crates/diagnostics/src/lib.rs
-2023/11/05 | 3288 | support/texlab/crates/diagnostics/src/tests.rs
-2023/11/05 | 770 | support/texlab/crates/diagnostics/src/types.rs
-2023/11/05 | 750 | support/texlab/crates/diagnostics/src/util.rs
-2023/11/05 | 227 | support/texlab/crates/distro/Cargo.toml
-2023/11/05 | 1917 | support/texlab/crates/distro/src/file_name_db.rs
-2023/11/05 | 710 | support/texlab/crates/distro/src/kpsewhich.rs
-2023/11/05 | 1124 | support/texlab/crates/distro/src/language.rs
-2023/11/05 | 2543 | support/texlab/crates/distro/src/lib.rs
-2023/11/05 | 2467 | support/texlab/crates/distro/src/miktex.rs
-2023/11/05 | 820 | support/texlab/crates/distro/src/texlive.rs
-2023/11/05 | 355 | support/texlab/crates/folding/Cargo.toml
-2023/11/05 | 3225 | support/texlab/crates/folding/src/lib.rs
-2023/11/05 | 1749 | support/texlab/crates/folding/src/tests.rs
-2023/11/05 | 483 | support/texlab/crates/hover/Cargo.toml
-2023/11/05 | 1225 | support/texlab/crates/hover/src/citation.rs
-2023/11/05 | 535 | support/texlab/crates/hover/src/entry_type.rs
-2023/11/05 | 612 | support/texlab/crates/hover/src/field_type.rs
-2023/11/05 | 818 | support/texlab/crates/hover/src/label.rs
-2023/11/05 | 1432 | support/texlab/crates/hover/src/lib.rs
-2023/11/05 | 720 | support/texlab/crates/hover/src/package.rs
-2023/11/05 | 1059 | support/texlab/crates/hover/src/string_ref.rs
-2023/11/05 | 7215 | support/texlab/crates/hover/src/tests.rs
-2023/11/05 | 358 | support/texlab/crates/inlay-hints/Cargo.toml
-2023/11/05 | 1798 | support/texlab/crates/inlay-hints/src/label.rs
-2023/11/05 | 789 | support/texlab/crates/inlay-hints/src/lib.rs
-2023/11/05 | 407 | support/texlab/crates/parser/Cargo.toml
-2023/11/05 | 11483 | support/texlab/crates/parser/src/bibtex.rs
-2023/11/05 | 5684 | support/texlab/crates/parser/src/build_log.rs
-2023/11/05 | 3009 | support/texlab/crates/parser/src/config.rs
-2023/11/05 | 5386 | support/texlab/crates/parser/src/latex/lexer/commands.rs
-2023/11/05 | 2040 | support/texlab/crates/parser/src/latex/lexer.rs
-2023/11/05 | 2834 | support/texlab/crates/parser/src/latex/lexer/types.rs
-2023/11/05 | 35324 | support/texlab/crates/parser/src/latex.rs
-2023/11/05 | 148 | support/texlab/crates/parser/src/lib.rs
-2023/11/05 | 234 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@comment.txt.snap
-2023/11/05 | 761 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_809.txt.snap
-2023/11/05 | 637 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_945.txt.snap
-2023/11/05 | 373 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@preamble.txt.snap
-2023/11/05 | 3667 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aho_2006.txt.snap
-2023/11/05 | 7531 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aksin_2006.txt.snap
-2023/11/05 | 7322 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__almendro_1998.txt.snap
-2023/11/05 | 10380 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__averroes_1998.txt.snap
-2023/11/05 | 5864 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__betram_1996.txt.snap
-2023/11/05 | 6644 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__blom_2021.txt.snap
-2023/11/05 | 7157 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__combi_2004.txt.snap
-2023/11/05 | 6836 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__erwin_2007.txt.snap
-2023/11/05 | 7528 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__jain_1999.txt.snap
-2023/11/05 | 8868 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap
-2023/11/05 | 9479 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__knuth_1984.txt.snap
-2023/11/05 | 5060 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__matuz_1990.txt.snap
-2023/11/05 | 11015 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap
-2023/11/05 | 6472 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__rivest_1978.txt.snap
-2023/11/05 | 716 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@001.txt.snap
-2023/11/05 | 448 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@002.txt.snap
-2023/11/05 | 673 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@003.txt.snap
-2023/11/05 | 975 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@004.txt.snap
-2023/11/05 | 953 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@005.txt.snap
-2023/11/05 | 1672 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@006.txt.snap
-2023/11/05 | 464 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@007.txt.snap
-2023/11/05 | 746 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@block_comments.txt.snap
-2023/11/05 | 626 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default_error.txt.snap
-2023/11/05 | 647 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default.txt.snap
-2023/11/05 | 772 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_figure.txt.snap
-2023/11/05 | 499 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal_error.txt.snap
-2023/11/05 | 520 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal.txt.snap
-2023/11/05 | 295 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_empty.txt.snap
-2023/11/05 | 321 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_missing_brace.txt.snap
-2023/11/05 | 453 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap
-2023/11/05 | 608 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap
-2023/11/05 | 472 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote.txt.snap
-2023/11/05 | 404 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap
-2023/11/05 | 344 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_simple.txt.snap
-2023/11/05 | 342 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_star.txt.snap
-2023/11/05 | 734 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_definition_simple.txt.snap
-2023/11/05 | 356 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_reference_simple.txt.snap
-2023/11/05 | 849 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error1.txt.snap
-2023/11/05 | 588 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error2.txt.snap
-2023/11/05 | 457 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error3.txt.snap
-2023/11/05 | 248 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error4.txt.snap
-2023/11/05 | 980 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_simple.txt.snap
-2023/11/05 | 504 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap
-2023/11/05 | 356 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap
-2023/11/05 | 377 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap
-2023/11/05 | 760 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap
-2023/11/05 | 645 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap
-2023/11/05 | 1177 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap
-2023/11/05 | 376 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap
-2023/11/05 | 502 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap
-2023/11/05 | 1074 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_asymptote.txt.snap
-2023/11/05 | 911 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap
-2023/11/05 | 1103 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition.txt.snap
-2023/11/05 | 1191 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap
-2023/11/05 | 1121 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested.txt.snap
-2023/11/05 | 742 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_simple.txt.snap
-2023/11/05 | 814 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation_missing_begin.txt.snap
-2023/11/05 | 379 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation.txt.snap
-2023/11/05 | 460 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_args.txt.snap
-2023/11/05 | 216 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_empty.txt.snap
-2023/11/05 | 215 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_escape.txt.snap
-2023/11/05 | 1464 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_declaration.txt.snap
-2023/11/05 | 1359 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap
-2023/11/05 | 758 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap
-2023/11/05 | 760 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_package.txt.snap
-2023/11/05 | 815 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap
-2023/11/05 | 372 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap
-2023/11/05 | 965 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap
-2023/11/05 | 911 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap
-2023/11/05 | 365 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap
-2023/11/05 | 624 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_command.txt.snap
-2023/11/05 | 552 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_options.txt.snap
-2023/11/05 | 447 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path.txt.snap
-2023/11/05 | 312 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_missing_end.txt.snap
-2023/11/05 | 332 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_simple.txt.snap
-2023/11/05 | 821 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__equation_missing_end.txt.snap
-2023/11/05 | 384 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__escaped_brackets.txt.snap
-2023/11/05 | 242 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_braces.txt.snap
-2023/11/05 | 244 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets.txt.snap
-2023/11/05 | 330 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap
-2023/11/05 | 242 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@hello_world.txt.snap
-2023/11/05 | 861 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_options.txt.snap
-2023/11/05 | 386 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_simple.txt.snap
-2023/11/05 | 376 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__bibtex_include_simple.txt.snap
-2023/11/05 | 323 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_empty.txt.snap
-2023/11/05 | 1066 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_options.txt.snap
-2023/11/05 | 375 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_simple.txt.snap
-2023/11/05 | 900 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_command.txt.snap
-2023/11/05 | 762 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap
-2023/11/05 | 717 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_options.txt.snap
-2023/11/05 | 387 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_simple.txt.snap
-2023/11/05 | 316 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_incomplete.txt.snap
-2023/11/05 | 470 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_simple.txt.snap
-2023/11/05 | 703 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_options.txt.snap
-2023/11/05 | 373 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_simple.txt.snap
-2023/11/05 | 429 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap
-2023/11/05 | 363 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_simple.txt.snap
-2023/11/05 | 477 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap
-2023/11/05 | 324 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_empty.txt.snap
-2023/11/05 | 483 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_multiple.txt.snap
-2023/11/05 | 1067 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_options.txt.snap
-2023/11/05 | 376 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_simple.txt.snap
-2023/11/05 | 382 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap
-2023/11/05 | 702 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_options.txt.snap
-2023/11/05 | 372 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_simple.txt.snap
-2023/11/05 | 384 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap
-2023/11/05 | 385 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__verbatim_include_simple.txt.snap
-2023/11/05 | 649 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline_double_dollar.txt.snap
-2023/11/05 | 631 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline.txt.snap
-2023/11/05 | 728 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_568.txt.snap
-2023/11/05 | 4300 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_745.txt.snap
-2023/11/05 | 347 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_789.txt.snap
-2023/11/05 | 526 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_828.txt.snap
-2023/11/05 | 1791 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_853.txt.snap
-2023/11/05 | 904 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_857.txt.snap
-2023/11/05 | 745 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_874.txt.snap
-2023/11/05 | 1846 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_919.txt.snap
-2023/11/05 | 392 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_931.txt.snap
-2023/11/05 | 452 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_line_break.txt.snap
-2023/11/05 | 356 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_simple.txt.snap
-2023/11/05 | 563 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_number.txt.snap
-2023/11/05 | 361 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_equation.txt.snap
-2023/11/05 | 825 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_incomplete.txt.snap
-2023/11/05 | 456 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_multiple.txt.snap
-2023/11/05 | 479 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_error.txt.snap
-2023/11/05 | 380 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap
-2023/11/05 | 507 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_simple.txt.snap
-2023/11/05 | 349 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_simple.txt.snap
-2023/11/05 | 187 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter_error.txt.snap
-2023/11/05 | 182 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter.txt.snap
-2023/11/05 | 1883 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__paragraphs.txt.snap
-2023/11/05 | 1260 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_enum_item.txt.snap
-2023/11/05 | 565 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap
-2023/11/05 | 1745 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_nested.txt.snap
-2023/11/05 | 706 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_siblings.txt.snap
-2023/11/05 | 778 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap
-2023/11/05 | 533 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap
-2023/11/05 | 676 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap
-2023/11/05 | 533 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap
-2023/11/05 | 394 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap
-2023/11/05 | 998 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_thmtools.txt.snap
-2023/11/05 | 82 | support/texlab/crates/parser/src/test_data/bibtex/comment.txt
-2023/11/05 | 50 | support/texlab/crates/parser/src/test_data/bibtex/issue_809.txt
-2023/11/05 | 33 | support/texlab/crates/parser/src/test_data/bibtex/issue_945.txt
-2023/11/05 | 25 | support/texlab/crates/parser/src/test_data/bibtex/preamble.txt
-2023/11/05 | 314 | support/texlab/crates/parser/src/test_data/bibtex/samples/aho_2006.txt
-2023/11/05 | 679 | support/texlab/crates/parser/src/test_data/bibtex/samples/aksin_2006.txt
-2023/11/05 | 706 | support/texlab/crates/parser/src/test_data/bibtex/samples/almendro_1998.txt
-2023/11/05 | 1008 | support/texlab/crates/parser/src/test_data/bibtex/samples/averroes_1998.txt
-2023/11/05 | 556 | support/texlab/crates/parser/src/test_data/bibtex/samples/betram_1996.txt
-2023/11/05 | 860 | support/texlab/crates/parser/src/test_data/bibtex/samples/blom_2021.txt
-2023/11/05 | 674 | support/texlab/crates/parser/src/test_data/bibtex/samples/combi_2004.txt
-2023/11/05 | 615 | support/texlab/crates/parser/src/test_data/bibtex/samples/erwin_2007.txt
-2023/11/05 | 674 | support/texlab/crates/parser/src/test_data/bibtex/samples/jain_1999.txt
-2023/11/05 | 898 | support/texlab/crates/parser/src/test_data/bibtex/samples/kastenholz_2006.txt
-2023/11/05 | 993 | support/texlab/crates/parser/src/test_data/bibtex/samples/knuth_1984.txt
-2023/11/05 | 517 | support/texlab/crates/parser/src/test_data/bibtex/samples/matuz_1990.txt
-2023/11/05 | 1112 | support/texlab/crates/parser/src/test_data/bibtex/samples/nietzsche_1998.txt
-2023/11/05 | 557 | support/texlab/crates/parser/src/test_data/bibtex/samples/rivest_1978.txt
-2023/11/05 | 3194 | support/texlab/crates/parser/src/test_data/build_log/001.txt
-2023/11/05 | 2455 | support/texlab/crates/parser/src/test_data/build_log/002.txt
-2023/11/05 | 2515 | support/texlab/crates/parser/src/test_data/build_log/003.txt
-2023/11/05 | 3057 | support/texlab/crates/parser/src/test_data/build_log/004.txt
-2023/11/05 | 13353 | support/texlab/crates/parser/src/test_data/build_log/005.txt
-2023/11/05 | 4130 | support/texlab/crates/parser/src/test_data/build_log/006.txt
-2023/11/05 | 7762 | support/texlab/crates/parser/src/test_data/build_log/007.txt
-2023/11/05 | 48 | support/texlab/crates/parser/src/test_data/latex/block_comments.txt
-2023/11/05 | 26 | support/texlab/crates/parser/src/test_data/latex/caption/caption_default_error.txt
-2023/11/05 | 27 | support/texlab/crates/parser/src/test_data/latex/caption/caption_default.txt
-2023/11/05 | 39 | support/texlab/crates/parser/src/test_data/latex/caption/caption_figure.txt
-2023/11/05 | 21 | support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal_error.txt
-2023/11/05 | 22 | support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal.txt
-2023/11/05 | 7 | support/texlab/crates/parser/src/test_data/latex/citation/citation_empty.txt
-2023/11/05 | 9 | support/texlab/crates/parser/src/test_data/latex/citation/citation_missing_brace.txt
-2023/11/05 | 15 | support/texlab/crates/parser/src/test_data/latex/citation/citation_multiple_keys.txt
-2023/11/05 | 20 | support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote_postnote.txt
-2023/11/05 | 15 | support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote.txt
-2023/11/05 | 12 | support/texlab/crates/parser/src/test_data/latex/citation/citation_redundant_comma.txt
-2023/11/05 | 10 | support/texlab/crates/parser/src/test_data/latex/citation/citation_simple.txt
-2023/11/05 | 10 | support/texlab/crates/parser/src/test_data/latex/citation/citation_star.txt
-2023/11/05 | 33 | support/texlab/crates/parser/src/test_data/latex/color/color_definition_simple.txt
-2023/11/05 | 13 | support/texlab/crates/parser/src/test_data/latex/color/color_reference_simple.txt
-2023/11/05 | 39 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error1.txt
-2023/11/05 | 30 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error2.txt
-2023/11/05 | 25 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error3.txt
-2023/11/05 | 15 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error4.txt
-2023/11/05 | 44 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_simple.txt
-2023/11/05 | 22 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_argc.txt
-2023/11/05 | 16 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl_error.txt
-2023/11/05 | 17 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl.txt
-2023/11/05 | 29 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_optional.txt
-2023/11/05 | 23 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_simple.txt
-2023/11/05 | 80 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_with_begin.txt
-2023/11/05 | 26 | support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_no_impl.txt
-2023/11/05 | 31 | support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_simple.txt
-2023/11/05 | 50 | support/texlab/crates/parser/src/test_data/latex/environment/environment_asymptote.txt
-2023/11/05 | 44 | support/texlab/crates/parser/src/test_data/latex/environment/environment_definition_optional_arg.txt
-2023/11/05 | 47 | support/texlab/crates/parser/src/test_data/latex/environment/environment_definition.txt
-2023/11/05 | 52 | support/texlab/crates/parser/src/test_data/latex/environment/environment_nested_missing_braces.txt
-2023/11/05 | 43 | support/texlab/crates/parser/src/test_data/latex/environment/environment_nested.txt
-2023/11/05 | 33 | support/texlab/crates/parser/src/test_data/latex/environment/environment_simple.txt
-2023/11/05 | 28 | support/texlab/crates/parser/src/test_data/latex/equation_missing_begin.txt
-2023/11/05 | 13 | support/texlab/crates/parser/src/test_data/latex/equation.txt
-2023/11/05 | 14 | support/texlab/crates/parser/src/test_data/latex/generic_command_args.txt
-2023/11/05 | 4 | support/texlab/crates/parser/src/test_data/latex/generic_command_empty.txt
-2023/11/05 | 2 | support/texlab/crates/parser/src/test_data/latex/generic_command_escape.txt
-2023/11/05 | 64 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_declaration.txt
-2023/11/05 | 76 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_options.txt
-2023/11/05 | 44 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_simple.txt
-2023/11/05 | 35 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_package.txt
-2023/11/05 | 32 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_options.txt
-2023/11/05 | 19 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_simple.txt
-2023/11/05 | 39 | support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_definition_simple.txt
-2023/11/05 | 25 | support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_options.txt
-2023/11/05 | 9 | support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_simple.txt
-2023/11/05 | 32 | support/texlab/crates/parser/src/test_data/latex/graphics_path_command.txt
-2023/11/05 | 33 | support/texlab/crates/parser/src/test_data/latex/graphics_path_options.txt
-2023/11/05 | 28 | support/texlab/crates/parser/src/test_data/latex/graphics_path.txt
-2023/11/05 | 12 | support/texlab/crates/parser/src/test_data/latex/group/curly_group_missing_end.txt
-2023/11/05 | 13 | support/texlab/crates/parser/src/test_data/latex/group/curly_group_simple.txt
-2023/11/05 | 28 | support/texlab/crates/parser/src/test_data/latex/group/equation_missing_end.txt
-2023/11/05 | 6 | support/texlab/crates/parser/src/test_data/latex/group/escaped_brackets.txt
-2023/11/05 | 2 | support/texlab/crates/parser/src/test_data/latex/group/unmatched_braces.txt
-2023/11/05 | 2 | support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets.txt
-2023/11/05 | 4 | support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets_with_group.txt
-2023/11/05 | 12 | support/texlab/crates/parser/src/test_data/latex/hello_world.txt
-2023/11/05 | 42 | support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_options.txt
-2023/11/05 | 28 | support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_simple.txt
-2023/11/05 | 22 | support/texlab/crates/parser/src/test_data/latex/include/bibtex_include_simple.txt
-2023/11/05 | 16 | support/texlab/crates/parser/src/test_data/latex/include/class_include_empty.txt
-2023/11/05 | 44 | support/texlab/crates/parser/src/test_data/latex/include/class_include_options.txt
-2023/11/05 | 23 | support/texlab/crates/parser/src/test_data/latex/include/class_include_simple.txt
-2023/11/05 | 52 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_command.txt
-2023/11/05 | 39 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_complicated_options.txt
-2023/11/05 | 39 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_options.txt
-2023/11/05 | 29 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_simple.txt
-2023/11/05 | 11 | support/texlab/crates/parser/src/test_data/latex/include/import_incomplete.txt
-2023/11/05 | 17 | support/texlab/crates/parser/src/test_data/latex/include/import_simple.txt
-2023/11/05 | 30 | support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_options.txt
-2023/11/05 | 20 | support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_simple.txt
-2023/11/05 | 17 | support/texlab/crates/parser/src/test_data/latex/include/latex_include_equality_sign.txt
-2023/11/05 | 17 | support/texlab/crates/parser/src/test_data/latex/include/latex_include_simple.txt
-2023/11/05 | 20 | support/texlab/crates/parser/src/test_data/latex/include/latex_input_path_brackets.txt
-2023/11/05 | 13 | support/texlab/crates/parser/src/test_data/latex/include/package_include_empty.txt
-2023/11/05 | 28 | support/texlab/crates/parser/src/test_data/latex/include/package_include_multiple.txt
-2023/11/05 | 41 | support/texlab/crates/parser/src/test_data/latex/include/package_include_options.txt
-2023/11/05 | 20 | support/texlab/crates/parser/src/test_data/latex/include/package_include_simple.txt
-2023/11/05 | 19 | support/texlab/crates/parser/src/test_data/latex/include/pgf_library_import_simple.txt
-2023/11/05 | 34 | support/texlab/crates/parser/src/test_data/latex/include/svg_include_options.txt
-2023/11/05 | 24 | support/texlab/crates/parser/src/test_data/latex/include/svg_include_simple.txt
-2023/11/05 | 20 | support/texlab/crates/parser/src/test_data/latex/include/tikz_library_import_simple.txt
-2023/11/05 | 27 | support/texlab/crates/parser/src/test_data/latex/include/verbatim_include_simple.txt
-2023/11/05 | 21 | support/texlab/crates/parser/src/test_data/latex/inline_double_dollar.txt
-2023/11/05 | 19 | support/texlab/crates/parser/src/test_data/latex/inline.txt
-2023/11/05 | 51 | support/texlab/crates/parser/src/test_data/latex/issue_568.txt
-2023/11/05 | 271 | support/texlab/crates/parser/src/test_data/latex/issue_745.txt
-2023/11/05 | 19 | support/texlab/crates/parser/src/test_data/latex/issue_789.txt
-2023/11/05 | 51 | support/texlab/crates/parser/src/test_data/latex/issue_828.txt
-2023/11/05 | 135 | support/texlab/crates/parser/src/test_data/latex/issue_853.txt
-2023/11/05 | 55 | support/texlab/crates/parser/src/test_data/latex/issue_857.txt
-2023/11/05 | 37 | support/texlab/crates/parser/src/test_data/latex/issue_874.txt
-2023/11/05 | 217 | support/texlab/crates/parser/src/test_data/latex/issue_919.txt
-2023/11/05 | 31 | support/texlab/crates/parser/src/test_data/latex/issue_931.txt
-2023/11/05 | 19 | support/texlab/crates/parser/src/test_data/latex/label/label_definition_line_break.txt
-2023/11/05 | 11 | support/texlab/crates/parser/src/test_data/latex/label/label_definition_simple.txt
-2023/11/05 | 21 | support/texlab/crates/parser/src/test_data/latex/label/label_number.txt
-2023/11/05 | 11 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_equation.txt
-2023/11/05 | 47 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_incomplete.txt
-2023/11/05 | 14 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_multiple.txt
-2023/11/05 | 19 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_error.txt
-2023/11/05 | 15 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_incomplete.txt
-2023/11/05 | 20 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_simple.txt
-2023/11/05 | 9 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_simple.txt
-2023/11/05 | 1 | support/texlab/crates/parser/src/test_data/latex/parameter_error.txt
-2023/11/05 | 2 | support/texlab/crates/parser/src/test_data/latex/parameter.txt
-2023/11/05 | 134 | support/texlab/crates/parser/src/test_data/latex/structure/paragraphs.txt
-2023/11/05 | 60 | support/texlab/crates/parser/src/test_data/latex/structure/structure_enum_item.txt
-2023/11/05 | 27 | support/texlab/crates/parser/src/test_data/latex/structure/structure_invalid_nesting.txt
-2023/11/05 | 90 | support/texlab/crates/parser/src/test_data/latex/structure/structure_nested.txt
-2023/11/05 | 35 | support/texlab/crates/parser/src/test_data/latex/structure/structure_siblings.txt
-2023/11/05 | 31 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_full.txt
-2023/11/05 | 21 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt
-2023/11/05 | 26 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt
-2023/11/05 | 21 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt
-2023/11/05 | 16 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_only_name.txt
-2023/11/05 | 41 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_thmtools.txt
-2023/11/05 | 336 | support/texlab/crates/references/Cargo.toml
-2023/11/05 | 1409 | support/texlab/crates/references/src/entry.rs
-2023/11/05 | 901 | support/texlab/crates/references/src/label.rs
-2023/11/05 | 1070 | support/texlab/crates/references/src/lib.rs
-2023/11/05 | 1266 | support/texlab/crates/references/src/string_def.rs
-2023/11/05 | 3491 | support/texlab/crates/references/src/tests.rs
-2023/11/05 | 353 | support/texlab/crates/rename/Cargo.toml
-2023/11/05 | 1236 | support/texlab/crates/rename/src/command.rs
-2023/11/05 | 1506 | support/texlab/crates/rename/src/entry.rs
-2023/11/05 | 844 | support/texlab/crates/rename/src/label.rs
-2023/11/05 | 1064 | support/texlab/crates/rename/src/lib.rs
-2023/11/05 | 1462 | support/texlab/crates/rename/src/tests.rs
-2023/11/05 | 459 | support/texlab/crates/symbols/Cargo.toml
-2023/11/05 | 1974 | support/texlab/crates/symbols/src/document/bib.rs
-2023/11/05 | 1509 | support/texlab/crates/symbols/src/document.rs
-2023/11/05 | 14338 | support/texlab/crates/symbols/src/document/tests.rs
-2023/11/05 | 9070 | support/texlab/crates/symbols/src/document/tex.rs
-2023/11/05 | 175 | support/texlab/crates/symbols/src/lib.rs
-2023/11/05 | 2610 | support/texlab/crates/symbols/src/types.rs
-2023/11/05 | 1321 | support/texlab/crates/symbols/src/workspace.rs
-2023/11/05 | 5645 | support/texlab/crates/symbols/src/workspace/sort.rs
-2023/11/05 | 9169 | support/texlab/crates/symbols/src/workspace/tests.rs
-2023/11/05 | 227 | support/texlab/crates/syntax/Cargo.toml
-2023/11/05 | 6963 | support/texlab/crates/syntax/src/bibtex/cst.rs
-2023/11/05 | 640 | support/texlab/crates/syntax/src/bibtex/kind.rs
-2023/11/05 | 694 | support/texlab/crates/syntax/src/bibtex.rs
-2023/11/05 | 18098 | support/texlab/crates/syntax/src/latex/cst.rs
-2023/11/05 | 1708 | support/texlab/crates/syntax/src/latex/kind.rs
-2023/11/05 | 689 | support/texlab/crates/syntax/src/latex.rs
-2023/11/05 | 485 | support/texlab/crates/syntax/src/lib.rs
-2023/11/05 | 291 | support/texlab/crates/test-utils/Cargo.toml
-2023/11/05 | 4432 | support/texlab/crates/test-utils/src/fixture.rs
-2023/11/05 | 17 | support/texlab/crates/test-utils/src/lib.rs
-2023/11/05 | 1595 | support/texlab/crates/texlab/benches/bench_main.rs
-2023/11/05 | 1968 | support/texlab/crates/texlab/Cargo.toml
-2023/11/05 | 3223 | support/texlab/crates/texlab/src/client.rs
-2023/11/05 | 14808 | support/texlab/crates/texlab/src/features/completion.rs
-2023/11/05 | 1304 | support/texlab/crates/texlab/src/features/definition.rs
-2023/11/05 | 1328 | support/texlab/crates/texlab/src/features/folding.rs
-2023/11/05 | 7202 | support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs
-2023/11/05 | 2068 | support/texlab/crates/texlab/src/features/formatting/latexindent.rs
-2023/11/05 | 1083 | support/texlab/crates/texlab/src/features/formatting.rs
-2023/11/05 | 1119 | support/texlab/crates/texlab/src/features/highlight/label.rs
-2023/11/05 | 536 | support/texlab/crates/texlab/src/features/highlight.rs
-2023/11/05 | 1660 | support/texlab/crates/texlab/src/features/hover.rs
-2023/11/05 | 1330 | support/texlab/crates/texlab/src/features/inlay_hint/label.rs
-2023/11/05 | 2468 | support/texlab/crates/texlab/src/features/inlay_hint.rs
-2023/11/05 | 555 | support/texlab/crates/texlab/src/features/link/include.rs
-2023/11/05 | 932 | support/texlab/crates/texlab/src/features/link.rs
-2023/11/05 | 988 | support/texlab/crates/texlab/src/features/reference.rs
-2023/11/05 | 1534 | support/texlab/crates/texlab/src/features/rename.rs
-2023/11/05 | 197 | support/texlab/crates/texlab/src/features.rs
-2023/11/05 | 4126 | support/texlab/crates/texlab/src/features/symbols.rs
-2023/11/05 | 108 | support/texlab/crates/texlab/src/lib.rs
-2023/11/05 | 1732 | support/texlab/crates/texlab/src/main.rs
-2023/11/05 | 2411 | support/texlab/crates/texlab/src/server/dispatch.rs
-2023/11/05 | 2609 | support/texlab/crates/texlab/src/server/extensions.rs
-2023/11/05 | 8854 | support/texlab/crates/texlab/src/server/options.rs
-2023/11/05 | 1412 | support/texlab/crates/texlab/src/server/progress.rs
-2023/11/05 | 42618 | support/texlab/crates/texlab/src/server.rs
-2023/11/05 | 6018 | support/texlab/crates/texlab/src/util/capabilities.rs
-2023/11/05 | 4047 | support/texlab/crates/texlab/src/util/chktex.rs
-2023/11/05 | 8249 | support/texlab/crates/texlab/src/util/diagnostics.rs
-2023/11/05 | 1611 | support/texlab/crates/texlab/src/util/line_index_ext.rs
-2023/11/05 | 4004 | support/texlab/crates/texlab/src/util/lsp_enums.rs
-2023/11/05 | 1496 | support/texlab/crates/texlab/src/util.rs
-2023/11/05 | 8469 | support/texlab/crates/texlab/tests/lsp/fixture.rs
-2023/11/05 | 47 | support/texlab/crates/texlab/tests/lsp/main.rs
-2023/11/05 | 1322 | support/texlab/crates/texlab/tests/lsp/text_document/document_highlight.rs
-2023/11/05 | 1157 | support/texlab/crates/texlab/tests/lsp/text_document/document_link.rs
-2023/11/05 | 1505 | support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs
-2023/11/05 | 3009 | support/texlab/crates/texlab/tests/lsp/text_document/formatting.rs
-2023/11/05 | 1737 | support/texlab/crates/texlab/tests/lsp/text_document/inlay_hint.rs
-2023/11/05 | 96 | support/texlab/crates/texlab/tests/lsp/text_document.rs
-2023/11/05 | 226 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap
-2023/11/05 | 265 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap
-2023/11/05 | 278 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap
-2023/11/05 | 279 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap
-2023/11/05 | 399 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap
-2023/11/05 | 404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap
-2023/11/05 | 211 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap
-2023/11/05 | 550 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap
-2023/11/05 | 323 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap
-2023/11/05 | 301 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap
-2023/11/05 | 279 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap
-2023/11/05 | 561 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap
-2023/11/05 | 407 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap
-2023/11/05 | 403 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap
-2023/11/05 | 404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap
-2023/11/05 | 408 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap
-2023/11/05 | 404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap
-2023/11/05 | 405 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap
-2023/11/05 | 414 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap
-2023/11/05 | 594 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap
-2023/11/05 | 583 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap
-2023/11/05 | 494 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap
-2023/11/05 | 257 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap
-2023/11/05 | 279 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap
-2023/11/05 | 544 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap
-2023/11/05 | 223 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap
-2023/11/05 | 194 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap
-2023/11/05 | 186 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap
-2023/11/05 | 384 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap
-2023/11/05 | 182 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap
-2023/11/05 | 185 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap
-2023/11/05 | 179 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap
-2023/11/05 | 205 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap
-2023/11/05 | 421 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap
-2023/11/05 | 420 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap
-2023/11/05 | 441 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap
-2023/11/05 | 486 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap
-2023/11/05 | 485 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap
-2023/11/05 | 263 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap
-2023/11/05 | 264 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap
-2023/11/05 | 459 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap
-2023/11/05 | 464 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap
-2023/11/05 | 449 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap
-2023/11/05 | 448 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap
-2023/11/05 | 512 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap
-2023/11/05 | 313 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap
-2023/11/05 | 247 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_883.snap
-2023/11/05 | 1076 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_885.snap
-2023/11/05 | 1814 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap
-2023/11/05 | 699 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap
-2023/11/05 | 711 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap
-2023/11/05 | 250 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap
-2023/11/05 | 255 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap
-2023/11/05 | 452 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap
-2023/11/05 | 451 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap
-2023/11/05 | 273 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap
-2023/11/05 | 351 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap
-2023/11/05 | 368 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap
-2023/11/05 | 355 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap
-2023/11/05 | 2586 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__smoke.snap
-2023/11/05 | 167 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap
-2023/11/05 | 157 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap
-2023/11/05 | 181 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap
-2023/11/05 | 946 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap
-2023/11/05 | 132 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap
-2023/11/05 | 160 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap
-2023/11/05 | 143 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap
-2023/11/05 | 157 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap
-2023/11/05 | 520 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap
-2023/11/05 | 1608 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap
-2023/11/05 | 12 | support/texlab/crates/texlab/tests/lsp/workspace.rs
-2023/11/05 | 1922 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__smoke.snap
-2023/11/05 | 1051 | support/texlab/crates/texlab/tests/lsp/workspace/symbol.rs
-2023/11/05 | 380190 | support/texlab/images/demo.gif
-2023/11/05 | 35149 | support/texlab/LICENSE
-2023/11/05 | 3828 | support/texlab/README.md
-2023/11/05 | 620 | support/texlab/texlab.1
-2023/11/05 | 26718 | support/texlab/texlab.pdf
-2023/11/05 | 2586 | support/texlab/texlab.tex
-2023/11/05 | 7736038 | support/texlab.zip
+2023/12/03 | 43806 | support/texlab/Cargo.lock
+2023/12/03 | 347 | support/texlab/Cargo.toml
+2023/12/03 | 33205 | support/texlab/CHANGELOG.md
+2023/12/03 | 181 | support/texlab/CONTRIBUTING.md
+2023/12/03 | 555 | support/texlab/crates/base-db/Cargo.toml
+2023/12/03 | 4412 | support/texlab/crates/base-db/src/config.rs
+2023/12/03 | 58408 | support/texlab/crates/base-db/src/data.rs
+2023/12/03 | 6210 | support/texlab/crates/base-db/src/document.rs
+2023/12/03 | 5727 | support/texlab/crates/base-db/src/graph.rs
+2023/12/03 | 560 | support/texlab/crates/base-db/src/lib.rs
+2023/12/03 | 1170 | support/texlab/crates/base-db/src/semantics/auxiliary.rs
+2023/12/03 | 2371 | support/texlab/crates/base-db/src/semantics/bib.rs
+2023/12/03 | 1112 | support/texlab/crates/base-db/src/semantics.rs
+2023/12/03 | 11078 | support/texlab/crates/base-db/src/semantics/tex.rs
+2023/12/03 | 5900 | support/texlab/crates/base-db/src/util/label.rs
+2023/12/03 | 5553 | support/texlab/crates/base-db/src/util/queries.rs
+2023/12/03 | 445 | support/texlab/crates/base-db/src/util/regex_filter.rs
+2023/12/03 | 176 | support/texlab/crates/base-db/src/util.rs
+2023/12/03 | 11137 | support/texlab/crates/base-db/src/workspace.rs
+2023/12/03 | 352 | support/texlab/crates/bibfmt/Cargo.toml
+2023/12/03 | 6870 | support/texlab/crates/bibfmt/src/lib.rs
+2023/12/03 | 3486 | support/texlab/crates/bibfmt/src/tests.rs
+2023/12/03 | 492 | support/texlab/crates/bibtex-utils/Cargo.toml
+2023/12/03 | 2074 | support/texlab/crates/bibtex-utils/src/field/author.rs
+2023/12/03 | 2665 | support/texlab/crates/bibtex-utils/src/field/date.rs
+2023/12/03 | 1626 | support/texlab/crates/bibtex-utils/src/field/number.rs
+2023/12/03 | 60 | support/texlab/crates/bibtex-utils/src/field.rs
+2023/12/03 | 8955 | support/texlab/crates/bibtex-utils/src/field/text.rs
+2023/12/03 | 15 | support/texlab/crates/bibtex-utils/src/lib.rs
+2023/12/03 | 488 | support/texlab/crates/citeproc/Cargo.toml
+2023/12/03 | 22204 | support/texlab/crates/citeproc/src/driver.rs
+2023/12/03 | 4730 | support/texlab/crates/citeproc/src/entry.rs
+2023/12/03 | 875 | support/texlab/crates/citeproc/src/lib.rs
+2023/12/03 | 1760 | support/texlab/crates/citeproc/src/output.rs
+2023/12/03 | 15622 | support/texlab/crates/citeproc/src/tests.rs
+2023/12/03 | 558 | support/texlab/crates/commands/Cargo.toml
+2023/12/03 | 3838 | support/texlab/crates/commands/src/build.rs
+2023/12/03 | 987 | support/texlab/crates/commands/src/change_env.rs
+2023/12/03 | 1740 | support/texlab/crates/commands/src/clean.rs
+2023/12/03 | 1590 | support/texlab/crates/commands/src/dep_graph.rs
+2023/12/03 | 3093 | support/texlab/crates/commands/src/find_envs.rs
+2023/12/03 | 3139 | support/texlab/crates/commands/src/fwd_search.rs
+2023/12/03 | 389 | support/texlab/crates/commands/src/lib.rs
+2023/12/03 | 1583 | support/texlab/crates/commands/src/placeholders.rs
+2023/12/03 | 1033 | support/texlab/crates/completion/benches/bench_main.rs
+2023/12/03 | 691 | support/texlab/crates/completion/Cargo.toml
+2023/12/03 | 356 | support/texlab/crates/completion-data/Cargo.toml
+2023/12/03 | 6970534 | support/texlab/crates/completion-data/data/completion.json.gz
+2023/12/03 | 3265 | support/texlab/crates/completion-data/src/lib.rs
+2023/12/03 | 5533 | support/texlab/crates/completion/src/lib.rs
+2023/12/03 | 2493 | support/texlab/crates/completion/src/providers/argument.rs
+2023/12/03 | 2276 | support/texlab/crates/completion/src/providers/citations.rs
+2023/12/03 | 1553 | support/texlab/crates/completion/src/providers/color_model.rs
+2023/12/03 | 2107 | support/texlab/crates/completion/src/providers/color.rs
+2023/12/03 | 4254 | support/texlab/crates/completion/src/providers/command.rs
+2023/12/03 | 1118 | support/texlab/crates/completion/src/providers/entry_type.rs
+2023/12/03 | 4297 | support/texlab/crates/completion/src/providers/environment.rs
+2023/12/03 | 2369 | support/texlab/crates/completion/src/providers/field.rs
+2023/12/03 | 2612 | support/texlab/crates/completion/src/providers/glossary.rs
+2023/12/03 | 2481 | support/texlab/crates/completion/src/providers/import.rs
+2023/12/03 | 4755 | support/texlab/crates/completion/src/providers/include.rs
+2023/12/03 | 3501 | support/texlab/crates/completion/src/providers/label.rs
+2023/12/03 | 699 | support/texlab/crates/completion/src/providers.rs
+2023/12/03 | 3301 | support/texlab/crates/completion/src/providers/tikz_library.rs
+2023/12/03 | 44178 | support/texlab/crates/completion/src/tests.rs
+2023/12/03 | 1382 | support/texlab/crates/completion/src/util/builder.rs
+2023/12/03 | 1025 | support/texlab/crates/completion/src/util/matchers.rs
+2023/12/03 | 2320 | support/texlab/crates/completion/src/util/patterns.rs
+2023/12/03 | 967 | support/texlab/crates/completion/src/util.rs
+2023/12/03 | 378 | support/texlab/crates/definition/Cargo.toml
+2023/12/03 | 880 | support/texlab/crates/definition/src/citation.rs
+2023/12/03 | 1384 | support/texlab/crates/definition/src/command.rs
+2023/12/03 | 1078 | support/texlab/crates/definition/src/include.rs
+2023/12/03 | 1175 | support/texlab/crates/definition/src/label.rs
+2023/12/03 | 1104 | support/texlab/crates/definition/src/lib.rs
+2023/12/03 | 1077 | support/texlab/crates/definition/src/string_ref.rs
+2023/12/03 | 2600 | support/texlab/crates/definition/src/tests.rs
+2023/12/03 | 433 | support/texlab/crates/diagnostics/Cargo.toml
+2023/12/03 | 3298 | support/texlab/crates/diagnostics/src/build_log.rs
+2023/12/03 | 3060 | support/texlab/crates/diagnostics/src/citations.rs
+2023/12/03 | 3218 | support/texlab/crates/diagnostics/src/grammar/bib.rs
+2023/12/03 | 79 | support/texlab/crates/diagnostics/src/grammar.rs
+2023/12/03 | 4144 | support/texlab/crates/diagnostics/src/grammar/tex.rs
+2023/12/03 | 3021 | support/texlab/crates/diagnostics/src/labels.rs
+2023/12/03 | 2322 | support/texlab/crates/diagnostics/src/lib.rs
+2023/12/03 | 3274 | support/texlab/crates/diagnostics/src/tests.rs
+2023/12/03 | 770 | support/texlab/crates/diagnostics/src/types.rs
+2023/12/03 | 750 | support/texlab/crates/diagnostics/src/util.rs
+2023/12/03 | 227 | support/texlab/crates/distro/Cargo.toml
+2023/12/03 | 1917 | support/texlab/crates/distro/src/file_name_db.rs
+2023/12/03 | 710 | support/texlab/crates/distro/src/kpsewhich.rs
+2023/12/03 | 1287 | support/texlab/crates/distro/src/language.rs
+2023/12/03 | 2543 | support/texlab/crates/distro/src/lib.rs
+2023/12/03 | 2467 | support/texlab/crates/distro/src/miktex.rs
+2023/12/03 | 820 | support/texlab/crates/distro/src/texlive.rs
+2023/12/03 | 355 | support/texlab/crates/folding/Cargo.toml
+2023/12/03 | 3225 | support/texlab/crates/folding/src/lib.rs
+2023/12/03 | 1698 | support/texlab/crates/folding/src/tests.rs
+2023/12/03 | 326 | support/texlab/crates/highlights/Cargo.toml
+2023/12/03 | 806 | support/texlab/crates/highlights/src/label.rs
+2023/12/03 | 612 | support/texlab/crates/highlights/src/lib.rs
+2023/12/03 | 900 | support/texlab/crates/highlights/src/tests.rs
+2023/12/03 | 483 | support/texlab/crates/hover/Cargo.toml
+2023/12/03 | 1244 | support/texlab/crates/hover/src/citation.rs
+2023/12/03 | 541 | support/texlab/crates/hover/src/entry_type.rs
+2023/12/03 | 617 | support/texlab/crates/hover/src/field_type.rs
+2023/12/03 | 850 | support/texlab/crates/hover/src/label.rs
+2023/12/03 | 1044 | support/texlab/crates/hover/src/lib.rs
+2023/12/03 | 725 | support/texlab/crates/hover/src/package.rs
+2023/12/03 | 1064 | support/texlab/crates/hover/src/string_ref.rs
+2023/12/03 | 7091 | support/texlab/crates/hover/src/tests.rs
+2023/12/03 | 348 | support/texlab/crates/inlay-hints/Cargo.toml
+2023/12/03 | 1798 | support/texlab/crates/inlay-hints/src/label.rs
+2023/12/03 | 814 | support/texlab/crates/inlay-hints/src/lib.rs
+2023/12/03 | 3530 | support/texlab/crates/inlay-hints/src/tests.rs
+2023/12/03 | 233 | support/texlab/crates/line-index/Cargo.toml
+2023/12/03 | 6528 | support/texlab/crates/line-index/src/lib.rs
+2023/12/03 | 303 | support/texlab/crates/links/Cargo.toml
+2023/12/03 | 668 | support/texlab/crates/links/src/include.rs
+2023/12/03 | 251 | support/texlab/crates/links/src/lib.rs
+2023/12/03 | 1145 | support/texlab/crates/links/src/tests.rs
+2023/12/03 | 375 | support/texlab/crates/parser/Cargo.toml
+2023/12/03 | 11103 | support/texlab/crates/parser/src/bibtex.rs
+2023/12/03 | 158845 | support/texlab/crates/parser/src/bibtex/tests.rs
+2023/12/03 | 5385 | support/texlab/crates/parser/src/build_log.rs
+2023/12/03 | 44454 | support/texlab/crates/parser/src/build_log/tests.rs
+2023/12/03 | 3009 | support/texlab/crates/parser/src/config.rs
+2023/12/03 | 5386 | support/texlab/crates/parser/src/latex/lexer/commands.rs
+2023/12/03 | 2040 | support/texlab/crates/parser/src/latex/lexer.rs
+2023/12/03 | 2834 | support/texlab/crates/parser/src/latex/lexer/types.rs
+2023/12/03 | 1780 | support/texlab/crates/parser/src/latexmkrc.rs
+2023/12/03 | 34893 | support/texlab/crates/parser/src/latex.rs
+2023/12/03 | 99949 | support/texlab/crates/parser/src/latex/tests.rs
+2023/12/03 | 202 | support/texlab/crates/parser/src/lib.rs
+2023/12/03 | 336 | support/texlab/crates/references/Cargo.toml
+2023/12/03 | 1498 | support/texlab/crates/references/src/entry.rs
+2023/12/03 | 988 | support/texlab/crates/references/src/label.rs
+2023/12/03 | 899 | support/texlab/crates/references/src/lib.rs
+2023/12/03 | 1329 | support/texlab/crates/references/src/string_def.rs
+2023/12/03 | 3116 | support/texlab/crates/references/src/tests.rs
+2023/12/03 | 353 | support/texlab/crates/rename/Cargo.toml
+2023/12/03 | 1240 | support/texlab/crates/rename/src/command.rs
+2023/12/03 | 1510 | support/texlab/crates/rename/src/entry.rs
+2023/12/03 | 848 | support/texlab/crates/rename/src/label.rs
+2023/12/03 | 1046 | support/texlab/crates/rename/src/lib.rs
+2023/12/03 | 1247 | support/texlab/crates/rename/src/tests.rs
+2023/12/03 | 499 | support/texlab/crates/symbols/Cargo.toml
+2023/12/03 | 1974 | support/texlab/crates/symbols/src/document/bib.rs
+2023/12/03 | 1546 | support/texlab/crates/symbols/src/document.rs
+2023/12/03 | 14338 | support/texlab/crates/symbols/src/document/tests.rs
+2023/12/03 | 9070 | support/texlab/crates/symbols/src/document/tex.rs
+2023/12/03 | 175 | support/texlab/crates/symbols/src/lib.rs
+2023/12/03 | 2610 | support/texlab/crates/symbols/src/types.rs
+2023/12/03 | 1321 | support/texlab/crates/symbols/src/workspace.rs
+2023/12/03 | 5657 | support/texlab/crates/symbols/src/workspace/sort.rs
+2023/12/03 | 9194 | support/texlab/crates/symbols/src/workspace/tests.rs
+2023/12/03 | 227 | support/texlab/crates/syntax/Cargo.toml
+2023/12/03 | 6963 | support/texlab/crates/syntax/src/bibtex/cst.rs
+2023/12/03 | 640 | support/texlab/crates/syntax/src/bibtex/kind.rs
+2023/12/03 | 694 | support/texlab/crates/syntax/src/bibtex.rs
+2023/12/03 | 18098 | support/texlab/crates/syntax/src/latex/cst.rs
+2023/12/03 | 1708 | support/texlab/crates/syntax/src/latex/kind.rs
+2023/12/03 | 128 | support/texlab/crates/syntax/src/latexmkrc.rs
+2023/12/03 | 689 | support/texlab/crates/syntax/src/latex.rs
+2023/12/03 | 504 | support/texlab/crates/syntax/src/lib.rs
+2023/12/03 | 330 | support/texlab/crates/test-utils/Cargo.toml
+2023/12/03 | 5283 | support/texlab/crates/test-utils/src/fixture.rs
+2023/12/03 | 17 | support/texlab/crates/test-utils/src/lib.rs
+2023/12/03 | 1602 | support/texlab/crates/texlab/benches/bench_main.rs
+2023/12/03 | 1897 | support/texlab/crates/texlab/Cargo.toml
+2023/12/03 | 3223 | support/texlab/crates/texlab/src/client.rs
+2023/12/03 | 14836 | support/texlab/crates/texlab/src/features/completion.rs
+2023/12/03 | 1522 | support/texlab/crates/texlab/src/features/definition.rs
+2023/12/03 | 1432 | support/texlab/crates/texlab/src/features/folding.rs
+2023/12/03 | 822 | support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs
+2023/12/03 | 2069 | support/texlab/crates/texlab/src/features/formatting/latexindent.rs
+2023/12/03 | 1137 | support/texlab/crates/texlab/src/features/formatting.rs
+2023/12/03 | 1125 | support/texlab/crates/texlab/src/features/highlight.rs
+2023/12/03 | 1755 | support/texlab/crates/texlab/src/features/hover.rs
+2023/12/03 | 2470 | support/texlab/crates/texlab/src/features/inlay_hint.rs
+2023/12/03 | 644 | support/texlab/crates/texlab/src/features/link.rs
+2023/12/03 | 1166 | support/texlab/crates/texlab/src/features/reference.rs
+2023/12/03 | 1587 | support/texlab/crates/texlab/src/features/rename.rs
+2023/12/03 | 197 | support/texlab/crates/texlab/src/features.rs
+2023/12/03 | 4202 | support/texlab/crates/texlab/src/features/symbols.rs
+2023/12/03 | 108 | support/texlab/crates/texlab/src/lib.rs
+2023/12/03 | 1732 | support/texlab/crates/texlab/src/main.rs
+2023/12/03 | 2411 | support/texlab/crates/texlab/src/server/dispatch.rs
+2023/12/03 | 2609 | support/texlab/crates/texlab/src/server/extensions.rs
+2023/12/03 | 8854 | support/texlab/crates/texlab/src/server/options.rs
+2023/12/03 | 1412 | support/texlab/crates/texlab/src/server/progress.rs
+2023/12/03 | 42741 | support/texlab/crates/texlab/src/server.rs
+2023/12/03 | 6018 | support/texlab/crates/texlab/src/util/capabilities.rs
+2023/12/03 | 4047 | support/texlab/crates/texlab/src/util/chktex.rs
+2023/12/03 | 8251 | support/texlab/crates/texlab/src/util/diagnostics.rs
+2023/12/03 | 1732 | support/texlab/crates/texlab/src/util/line_index_ext.rs
+2023/12/03 | 4004 | support/texlab/crates/texlab/src/util/lsp_enums.rs
+2023/12/03 | 1496 | support/texlab/crates/texlab/src/util.rs
+2023/12/03 | 380190 | support/texlab/images/demo.gif
+2023/12/03 | 35149 | support/texlab/LICENSE
+2023/12/03 | 3828 | support/texlab/README.md
+2023/12/03 | 620 | support/texlab/texlab.1
+2023/12/03 | 26374 | support/texlab/texlab.pdf
+2023/12/03 | 2586 | support/texlab/texlab.tex
+2023/12/03 | 7581826 | 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
@@ -293997,8 +293655,8 @@
2022/06/08 | 280968 | systems/texlive/tlnet/archive/coverpage.doc.r63509.tar.xz
2022/06/08 | 3712 | systems/texlive/tlnet/archive/coverpage.r63509.tar.xz
2022/06/08 | 10324 | systems/texlive/tlnet/archive/coverpage.source.r63509.tar.xz
-2023/06/26 | 572316 | systems/texlive/tlnet/archive/covington.doc.r67472.tar.xz
-2023/06/26 | 12220 | systems/texlive/tlnet/archive/covington.r67472.tar.xz
+2023/12/03 | 577676 | systems/texlive/tlnet/archive/covington.doc.r69019.tar.xz
+2023/12/03 | 12344 | systems/texlive/tlnet/archive/covington.r69019.tar.xz
2019/02/28 | 5548 | systems/texlive/tlnet/archive/c-pascal.doc.r18337.tar.xz
2019/02/28 | 4988 | systems/texlive/tlnet/archive/c-pascal.r18337.tar.xz
2019/02/28 | 584752 | systems/texlive/tlnet/archive/cprotect.doc.r21209.tar.xz
@@ -303325,7 +302983,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
-2023/12/02 | 430588 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69012.tar.xz
+2023/12/03 | 430588 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69016.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
@@ -303347,7 +303005,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
-2023/12/02 | 114260 | systems/texlive/tlnet/archive/texlive-scripts.r69012.tar.xz
+2023/12/03 | 114260 | systems/texlive/tlnet/archive/texlive-scripts.r69016.tar.xz
2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz
2023/05/14 | 60312 | systems/texlive/tlnet/archive/texlive-scripts.windows.r67095.tar.xz
2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz
@@ -305233,16 +304891,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
2023/08/07 | 125713 | systems/texlive/tlnet/install-tl
-2023/12/02 | 5739967 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2023/12/02 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2023/12/02 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/12/03 | 5741860 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/12/03 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/12/03 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2023/05/13 | 5083 | systems/texlive/tlnet/install-tl-windows.bat
-2023/12/02 | 21031359 | systems/texlive/tlnet/install-tl-windows.exe
-2023/12/02 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2023/12/02 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/12/02 | 26029654 | systems/texlive/tlnet/install-tl.zip
-2023/12/02 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2023/12/02 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/12/03 | 21035788 | systems/texlive/tlnet/install-tl-windows.exe
+2023/12/03 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/12/03 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/12/03 | 26029643 | systems/texlive/tlnet/install-tl.zip
+2023/12/03 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/12/03 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2023/03/19 | 1229 | systems/texlive/tlnet/README.md
2023/03/19 | 0 | systems/texlive/tlnet/TEXLIVE_2023
2023/01/17 | 8401 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
@@ -305252,7 +304910,7 @@
2023/01/17 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg
2023/09/20 | 50622 | systems/texlive/tlnet/tlpkg/installer/config.guess
2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt
-2023/11/29 | 7453 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+2023/12/02 | 7403 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/08/23 | 221470 | 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
@@ -305294,12 +304952,12 @@
2023/02/21 | 20371 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2021/12/21 | 5429 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2023/12/02 | 18371739 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2023/12/02 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/12/03 | 18371739 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/12/03 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2023/10/16 | 87924 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2023/12/02 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2023/12/02 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/12/02 | 2494036 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/12/03 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/12/03 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/12/03 | 2492912 | 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
@@ -316282,7 +315940,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
-2023/12/03 | 186 | timestamp
+2023/12/04 | 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
@@ -317718,62 +317376,63 @@
2002/01/14 | 1029 | web/c_cpp/ctie/Makefile
2003/04/20 | 3026 | web/c_cpp/ctie/README
2011/04/16 | 35484 | web/c_cpp/ctie.zip
-2023/08/19 | 1674 | web/c_cpp/cweb/c++lib.w
-2023/08/19 | 502 | web/c_cpp/cweb/comm-amiga.ch
-2023/08/19 | 5971 | web/c_cpp/cweb/comm-bs.ch
-2023/08/19 | 5303 | web/c_cpp/cweb/comm-mac.ch
-2023/08/19 | 782 | web/c_cpp/cweb/comm-man.ch
-2023/08/19 | 25212 | web/c_cpp/cweb/common.c
-2023/08/19 | 11447 | web/c_cpp/cweb/common.h
-2023/08/19 | 47809 | web/c_cpp/cweb/common.w
-2023/08/19 | 659 | web/c_cpp/cweb/comm-os2.ch
-2023/08/19 | 896 | web/c_cpp/cweb/comm-pc.ch
-2023/08/19 | 7994 | web/c_cpp/cweb/comm-ql.ch
-2023/08/19 | 3318 | web/c_cpp/cweb/comm-vms.ch
-2023/08/19 | 2633 | web/c_cpp/cweb/comm-w32.ch
-2023/08/19 | 5291 | web/c_cpp/cweb/ctang-bs.ch
-2023/08/19 | 32677 | web/c_cpp/cweb/ctangle.c
-2023/08/19 | 55659 | web/c_cpp/cweb/ctangle.w
-2023/08/19 | 783 | web/c_cpp/cweb/ctang-man.ch
-2023/08/19 | 988 | web/c_cpp/cweb/ctang-pc.ch
-2023/08/19 | 455 | web/c_cpp/cweb/ctang-ql.ch
-2023/08/19 | 1556 | web/c_cpp/cweb/ctang-vms.ch
-2023/08/19 | 897 | web/c_cpp/cweb/ctang-w32.ch
-2023/08/19 | 6976 | web/c_cpp/cweb/cweav-bs.ch
-2023/08/19 | 177691 | web/c_cpp/cweb/cweave.w
-2023/08/19 | 783 | web/c_cpp/cweb/cweav-man.ch
-2023/08/19 | 956 | web/c_cpp/cweb/cweav-pc.ch
-2023/08/19 | 479 | web/c_cpp/cweb/cweav-ql.ch
-2023/08/19 | 1650 | web/c_cpp/cweb/cweav-vms.ch
-2023/08/19 | 653 | web/c_cpp/cweb/cweav-w32.ch
-2023/08/19 | 3973 | web/c_cpp/cweb/cweb.1
-2023/08/19 | 8687 | web/c_cpp/cweb/cweb.el
-2023/08/19 | 28048 | web/c_cpp/cweb/cwebmac.tex
-2023/08/19 | 346283 | web/c_cpp/cweb/cwebman.pdf
-2023/08/19 | 85076 | web/c_cpp/cweb/cwebman.tex
-2023/08/19 | 578 | web/c_cpp/cweb/examples/extex.ch
-2023/08/19 | 12672 | web/c_cpp/cweb/examples/extex.w
-2023/08/19 | 10549 | web/c_cpp/cweb/examples/kspell.el
-2023/08/19 | 961 | web/c_cpp/cweb/examples/Makefile
-2023/08/19 | 8023 | web/c_cpp/cweb/examples/oemacs.el
-2023/08/19 | 38418 | web/c_cpp/cweb/examples/oemacs.w
-2023/08/19 | 2946 | web/c_cpp/cweb/examples/README
-2023/08/19 | 6835 | web/c_cpp/cweb/examples/treeprint.w
-2023/08/19 | 217 | web/c_cpp/cweb/examples/wc-dos.ch
-2023/08/19 | 9029 | web/c_cpp/cweb/examples/wc.w
-2023/08/19 | 25355 | web/c_cpp/cweb/examples/wmerge.w
-2023/08/19 | 599 | web/c_cpp/cweb/examples/wmerg-pc.ch
-2023/08/19 | 581 | web/c_cpp/cweb/examples/wmer-os2.ch
-2023/08/19 | 20913 | web/c_cpp/cweb/examples/wordtest.w
-2023/08/19 | 1858 | web/c_cpp/cweb/examples/xlib_types.w
-2023/08/19 | 5811 | web/c_cpp/cweb/examples/xview_types.w
-2023/08/19 | 2176 | web/c_cpp/cweb/iso_types.w
-2023/08/19 | 5556 | web/c_cpp/cweb/Makefile
-2023/08/19 | 1542 | web/c_cpp/cweb/makefile.bs
+2023/12/03 | 1674 | web/c_cpp/cweb/c++lib.w
+2023/12/03 | 502 | web/c_cpp/cweb/comm-amiga.ch
+2023/12/03 | 5971 | web/c_cpp/cweb/comm-bs.ch
+2023/12/03 | 5303 | web/c_cpp/cweb/comm-mac.ch
+2023/12/03 | 782 | web/c_cpp/cweb/comm-man.ch
+2023/12/03 | 25232 | web/c_cpp/cweb/common.c
+2023/12/03 | 11454 | web/c_cpp/cweb/common.h
+2023/12/03 | 47873 | web/c_cpp/cweb/common.w
+2023/12/03 | 659 | web/c_cpp/cweb/comm-os2.ch
+2023/12/03 | 896 | web/c_cpp/cweb/comm-pc.ch
+2023/12/03 | 8114 | web/c_cpp/cweb/comm-ql.ch
+2023/12/03 | 3318 | web/c_cpp/cweb/comm-vms.ch
+2023/12/03 | 2633 | web/c_cpp/cweb/comm-w32.ch
+2023/12/03 | 4971 | web/c_cpp/cweb/ctang-bs.ch
+2023/12/03 | 32721 | web/c_cpp/cweb/ctangle.c
+2023/12/03 | 55655 | web/c_cpp/cweb/ctangle.w
+2023/12/03 | 783 | web/c_cpp/cweb/ctang-man.ch
+2023/12/03 | 988 | web/c_cpp/cweb/ctang-pc.ch
+2023/12/03 | 455 | web/c_cpp/cweb/ctang-ql.ch
+2023/12/03 | 1556 | web/c_cpp/cweb/ctang-vms.ch
+2023/12/03 | 897 | web/c_cpp/cweb/ctang-w32.ch
+2023/12/03 | 6656 | web/c_cpp/cweb/cweav-bs.ch
+2023/12/03 | 177295 | web/c_cpp/cweb/cweave.w
+2023/12/03 | 783 | web/c_cpp/cweb/cweav-man.ch
+2023/12/03 | 956 | web/c_cpp/cweb/cweav-pc.ch
+2023/12/03 | 479 | web/c_cpp/cweb/cweav-ql.ch
+2023/12/03 | 1650 | web/c_cpp/cweb/cweav-vms.ch
+2023/12/03 | 653 | web/c_cpp/cweb/cweav-w32.ch
+2023/12/03 | 3990 | web/c_cpp/cweb/cweb.1
+2023/12/03 | 8074 | web/c_cpp/cweb/cwebacromac.tex
+2023/12/03 | 8687 | web/c_cpp/cweb/cweb.el
+2023/12/03 | 20966 | web/c_cpp/cweb/cwebmac.tex
+2023/12/03 | 347143 | web/c_cpp/cweb/cwebman.pdf
+2023/12/03 | 85327 | web/c_cpp/cweb/cwebman.tex
+2023/12/03 | 578 | web/c_cpp/cweb/examples/extex.ch
+2023/12/03 | 12672 | web/c_cpp/cweb/examples/extex.w
+2023/12/03 | 10549 | web/c_cpp/cweb/examples/kspell.el
+2023/12/03 | 961 | web/c_cpp/cweb/examples/Makefile
+2023/12/03 | 8023 | web/c_cpp/cweb/examples/oemacs.el
+2023/12/03 | 38418 | web/c_cpp/cweb/examples/oemacs.w
+2023/12/03 | 2946 | web/c_cpp/cweb/examples/README
+2023/12/03 | 6835 | web/c_cpp/cweb/examples/treeprint.w
+2023/12/03 | 217 | web/c_cpp/cweb/examples/wc-dos.ch
+2023/12/03 | 9029 | web/c_cpp/cweb/examples/wc.w
+2023/12/03 | 25355 | web/c_cpp/cweb/examples/wmerge.w
+2023/12/03 | 599 | web/c_cpp/cweb/examples/wmerg-pc.ch
+2023/12/03 | 581 | web/c_cpp/cweb/examples/wmer-os2.ch
+2023/12/03 | 20913 | web/c_cpp/cweb/examples/wordtest.w
+2023/12/03 | 1858 | web/c_cpp/cweb/examples/xlib_types.w
+2023/12/03 | 5811 | web/c_cpp/cweb/examples/xview_types.w
+2023/12/03 | 2176 | web/c_cpp/cweb/iso_types.w
+2023/12/03 | 5755 | web/c_cpp/cweb/Makefile
+2023/12/03 | 1542 | web/c_cpp/cweb/makefile.bs
1992/09/07 | 254049 | web/c_cpp/cweb-p/cweb-p.tar.gz
-2023/08/19 | 18576 | web/c_cpp/cweb/prod.w
-2023/08/19 | 3940 | web/c_cpp/cweb/README
-2023/08/19 | 2858 | web/c_cpp/cweb/readme.ql
+2023/12/03 | 18578 | web/c_cpp/cweb/prod.w
+2023/12/03 | 3956 | web/c_cpp/cweb/README
+2023/12/03 | 2858 | web/c_cpp/cweb/readme.ql
1996/09/18 | 23499 | web/c_cpp/cwebx/common.c
1997/09/23 | 2809 | web/c_cpp/cwebx/common.h
1994/12/19 | 9852 | web/c_cpp/cwebx/common.inc
@@ -317801,7 +317460,7 @@
1998/02/10 | 39270 | web/c_cpp/cwebx/rules.w
1998/01/13 | 40083 | web/c_cpp/cwebx/sample.ps
2006/03/21 | 667661 | web/c_cpp/cwebx.zip
-2023/08/19 | 580183 | web/c_cpp/cweb.zip
+2023/12/03 | 581774 | web/c_cpp/cweb.zip
1993/02/22 | 37233 | web/clip/clip_ann.ps
1993/02/24 | 32049 | web/clip/clip_style_a.ps
1993/02/24 | 9202 | web/clip/clip_style_b.ps
@@ -319668,14 +319327,14 @@
2016/07/04 | 11025 | web/protex/ProTex.sty
2016/07/04 | 16066 | web/protex/README
2016/07/04 | 22227 | web/protex.zip
-2023/10/07 | 5052 | web/pwebmac/index.md
-2023/10/07 | 13853 | web/pwebmac/makeall
-2023/10/07 | 23456 | web/pwebmac/pwebmac.tex
-2023/10/07 | 2366 | web/pwebmac/README.md
-2023/10/07 | 233 | web/pwebmac/trapman.ch
-2023/10/07 | 11763 | web/pwebmac/webman.ch
-2023/10/07 | 1514 | web/pwebmac/Xerrorlog.tex
-2023/10/07 | 21621 | web/pwebmac.zip
+2023/12/03 | 5052 | web/pwebmac/index.md
+2023/12/03 | 13909 | web/pwebmac/makeall
+2023/12/03 | 23656 | web/pwebmac/pwebmac.tex
+2023/12/03 | 2538 | web/pwebmac/README.md
+2023/12/03 | 233 | web/pwebmac/trapman.ch
+2023/12/03 | 23278 | web/pwebmac/webman.ch
+2023/12/03 | 1514 | web/pwebmac/Xerrorlog.tex
+2023/12/03 | 26279 | web/pwebmac.zip
1998/01/02 | 51534 | web/reduce/rweb/appl/integrator.web
1998/01/02 | 2014 | web/reduce/rweb/appl/liesuperconvert.web
1998/01/02 | 199508 | web/reduce/rweb/appl/liesuper.web
diff --git a/FILES.byname.gz b/FILES.byname.gz
index b80433742e..55c2b1a123 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 21386d94c2..1d5ea8ad04 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,3 +1,337 @@
+2023/12/03 | 99949 | support/texlab/crates/parser/src/latex/tests.rs
+2023/12/03 | 996 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
+2023/12/03 | 988 | web/c_cpp/cweb/ctang-pc.ch
+2023/12/03 | 988 | support/texlab/crates/references/src/label.rs
+2023/12/03 | 987 | support/texlab/crates/commands/src/change_env.rs
+2023/12/03 | 967 | support/texlab/crates/completion/src/util.rs
+2023/12/03 | 961 | web/c_cpp/cweb/examples/Makefile
+2023/12/03 | 956 | web/c_cpp/cweb/cweav-pc.ch
+2023/12/03 | 9194 | support/texlab/crates/symbols/src/workspace/tests.rs
+2023/12/03 | 9070 | support/texlab/crates/symbols/src/document/tex.rs
+2023/12/03 | 9029 | web/c_cpp/cweb/examples/wc.w
+2023/12/03 | 900 | support/texlab/crates/highlights/src/tests.rs
+2023/12/03 | 899 | support/texlab/crates/references/src/lib.rs
+2023/12/03 | 897 | web/c_cpp/cweb/ctang-w32.ch
+2023/12/03 | 896 | web/c_cpp/cweb/comm-pc.ch
+2023/12/03 | 8955 | support/texlab/crates/bibtex-utils/src/field/text.rs
+2023/12/03 | 8854 | support/texlab/crates/texlab/src/server/options.rs
+2023/12/03 | 880 | support/texlab/crates/definition/src/citation.rs
+2023/12/03 | 875 | support/texlab/crates/citeproc/src/lib.rs
+2023/12/03 | 8756 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
+2023/12/03 | 8687 | web/c_cpp/cweb/cweb.el
+2023/12/03 | 85327 | web/c_cpp/cweb/cwebman.tex
+2023/12/03 | 850 | support/texlab/crates/hover/src/label.rs
+2023/12/03 | 848 | support/texlab/crates/rename/src/label.rs
+2023/12/03 | 8251 | support/texlab/crates/texlab/src/util/diagnostics.rs
+2023/12/03 | 8242 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
+2023/12/03 | 8239 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
+2023/12/03 | 822 | support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs
+2023/12/03 | 820 | support/texlab/crates/distro/src/texlive.rs
+2023/12/03 | 814 | support/texlab/crates/inlay-hints/src/lib.rs
+2023/12/03 | 8147 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex
+2023/12/03 | 8114 | web/c_cpp/cweb/comm-ql.ch
+2023/12/03 | 8074 | web/c_cpp/cweb/cwebacromac.tex
+2023/12/03 | 806 | support/texlab/crates/highlights/src/label.rs
+2023/12/03 | 8023 | web/c_cpp/cweb/examples/oemacs.el
+2023/12/03 | 79 | support/texlab/crates/diagnostics/src/grammar.rs
+2023/12/03 | 7858 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
+2023/12/03 | 783 | web/c_cpp/cweb/cweav-man.ch
+2023/12/03 | 783 | web/c_cpp/cweb/ctang-man.ch
+2023/12/03 | 782 | web/c_cpp/cweb/comm-man.ch
+2023/12/03 | 770 | support/texlab/crates/diagnostics/src/types.rs
+2023/12/03 | 7581826 | support/texlab.zip
+2023/12/03 | 750 | support/texlab/crates/diagnostics/src/util.rs
+2023/12/03 | 725 | support/texlab/crates/hover/src/package.rs
+2023/12/03 | 710 | support/texlab/crates/distro/src/kpsewhich.rs
+2023/12/03 | 7091 | support/texlab/crates/hover/src/tests.rs
+2023/12/03 | 699 | support/texlab/crates/completion/src/providers.rs
+2023/12/03 | 6970534 | support/texlab/crates/completion-data/data/completion.json.gz
+2023/12/03 | 6963 | support/texlab/crates/syntax/src/bibtex/cst.rs
+2023/12/03 | 694 | support/texlab/crates/syntax/src/bibtex.rs
+2023/12/03 | 691 | support/texlab/crates/completion/Cargo.toml
+2023/12/03 | 689 | support/texlab/crates/syntax/src/latex.rs
+2023/12/03 | 6870 | support/texlab/crates/bibfmt/src/lib.rs
+2023/12/03 | 6835 | web/c_cpp/cweb/examples/treeprint.w
+2023/12/03 | 682587 | macros/latex/contrib/tkz/tkz-elements.zip
+2023/12/03 | 668 | support/texlab/crates/links/src/include.rs
+2023/12/03 | 6656 | web/c_cpp/cweb/cweav-bs.ch
+2023/12/03 | 659 | web/c_cpp/cweb/comm-os2.ch
+2023/12/03 | 653 | web/c_cpp/cweb/cweav-w32.ch
+2023/12/03 | 6528 | support/texlab/crates/line-index/src/lib.rs
+2023/12/03 | 6462 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
+2023/12/03 | 644 | support/texlab/crates/texlab/src/features/link.rs
+2023/12/03 | 640 | support/texlab/crates/syntax/src/bibtex/kind.rs
+2023/12/03 | 6210 | support/texlab/crates/base-db/src/document.rs
+2023/12/03 | 620 | support/texlab/texlab.1
+2023/12/03 | 617 | support/texlab/crates/hover/src/field_type.rs
+2023/12/03 | 612 | support/texlab/crates/highlights/src/lib.rs
+2023/12/03 | 6101 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
+2023/12/03 | 60 | support/texlab/crates/bibtex-utils/src/field.rs
+2023/12/03 | 6018 | support/texlab/crates/texlab/src/util/capabilities.rs
+2023/12/03 | 599 | web/c_cpp/cweb/examples/wmerg-pc.ch
+2023/12/03 | 5971 | web/c_cpp/cweb/comm-bs.ch
+2023/12/03 | 5900 | support/texlab/crates/base-db/src/util/label.rs
+2023/12/03 | 58408 | support/texlab/crates/base-db/src/data.rs
+2023/12/03 | 582871 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.pdf
+2023/12/03 | 581 | web/c_cpp/cweb/examples/wmer-os2.ch
+2023/12/03 | 581774 | web/c_cpp/cweb.zip
+2023/12/03 | 5811 | web/c_cpp/cweb/examples/xview_types.w
+2023/12/03 | 578 | web/c_cpp/cweb/examples/extex.ch
+2023/12/03 | 577676 | systems/texlive/tlnet/archive/covington.doc.r69019.tar.xz
+2023/12/03 | 5755 | web/c_cpp/cweb/Makefile
+2023/12/03 | 5741860 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2023/12/03 | 5727 | support/texlab/crates/base-db/src/graph.rs
+2023/12/03 | 5657 | support/texlab/crates/symbols/src/workspace/sort.rs
+2023/12/03 | 560 | support/texlab/crates/base-db/src/lib.rs
+2023/12/03 | 558 | support/texlab/crates/commands/Cargo.toml
+2023/12/03 | 55655 | web/c_cpp/cweb/ctangle.w
+2023/12/03 | 555 | support/texlab/crates/base-db/Cargo.toml
+2023/12/03 | 5553 | support/texlab/crates/base-db/src/util/queries.rs
+2023/12/03 | 5533 | support/texlab/crates/completion/src/lib.rs
+2023/12/03 | 541 | support/texlab/crates/hover/src/entry_type.rs
+2023/12/03 | 540950 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.pdf
+2023/12/03 | 5386 | support/texlab/crates/parser/src/latex/lexer/commands.rs
+2023/12/03 | 5385 | support/texlab/crates/parser/src/build_log.rs
+2023/12/03 | 532726 | macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
+2023/12/03 | 5303 | web/c_cpp/cweb/comm-mac.ch
+2023/12/03 | 5283 | support/texlab/crates/test-utils/src/fixture.rs
+2023/12/03 | 5108 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-square.tex
+2023/12/03 | 5052 | web/pwebmac/index.md
+2023/12/03 | 504 | support/texlab/crates/syntax/src/lib.rs
+2023/12/03 | 502 | web/c_cpp/cweb/comm-amiga.ch
+2023/12/03 | 499 | support/texlab/crates/symbols/Cargo.toml
+2023/12/03 | 4971 | web/c_cpp/cweb/ctang-bs.ch
+2023/12/03 | 492 | support/texlab/crates/bibtex-utils/Cargo.toml
+2023/12/03 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2023/12/03 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2023/12/03 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2023/12/03 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2023/12/03 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2023/12/03 | 488 | support/texlab/crates/citeproc/Cargo.toml
+2023/12/03 | 483 | support/texlab/crates/hover/Cargo.toml
+2023/12/03 | 479 | web/c_cpp/cweb/cweav-ql.ch
+2023/12/03 | 47873 | web/c_cpp/cweb/common.w
+2023/12/03 | 4755 | support/texlab/crates/completion/src/providers/include.rs
+2023/12/03 | 4730 | support/texlab/crates/citeproc/src/entry.rs
+2023/12/03 | 4646 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex
+2023/12/03 | 455 | web/c_cpp/cweb/ctang-ql.ch
+2023/12/03 | 445 | support/texlab/crates/base-db/src/util/regex_filter.rs
+2023/12/03 | 44454 | support/texlab/crates/parser/src/build_log/tests.rs
+2023/12/03 | 44178 | support/texlab/crates/completion/src/tests.rs
+2023/12/03 | 4412 | support/texlab/crates/base-db/src/config.rs
+2023/12/03 | 43806 | support/texlab/Cargo.lock
+2023/12/03 | 433 | support/texlab/crates/diagnostics/Cargo.toml
+2023/12/03 | 430588 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69016.tar.xz
+2023/12/03 | 4297 | support/texlab/crates/completion/src/providers/environment.rs
+2023/12/03 | 42741 | support/texlab/crates/texlab/src/server.rs
+2023/12/03 | 4254 | support/texlab/crates/completion/src/providers/command.rs
+2023/12/03 | 4240 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-parallelogram.tex
+2023/12/03 | 4202 | support/texlab/crates/texlab/src/features/symbols.rs
+2023/12/03 | 4144 | support/texlab/crates/diagnostics/src/grammar/tex.rs
+2023/12/03 | 4113768 | biblio/ctan-bibdata.zip
+2023/12/03 | 4047 | support/texlab/crates/texlab/src/util/chktex.rs
+2023/12/03 | 4004 | support/texlab/crates/texlab/src/util/lsp_enums.rs
+2023/12/03 | 3990 | web/c_cpp/cweb/cweb.1
+2023/12/03 | 3956 | web/c_cpp/cweb/README
+2023/12/03 | 3901 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
+2023/12/03 | 389 | support/texlab/crates/commands/src/lib.rs
+2023/12/03 | 38418 | web/c_cpp/cweb/examples/oemacs.w
+2023/12/03 | 3838 | support/texlab/crates/commands/src/build.rs
+2023/12/03 | 3828 | support/texlab/README.md
+2023/12/03 | 380190 | support/texlab/images/demo.gif
+2023/12/03 | 378 | support/texlab/crates/definition/Cargo.toml
+2023/12/03 | 375 | support/texlab/crates/parser/Cargo.toml
+2023/12/03 | 3708800 | biblio/ctan-bibdata/ctan.pdf
+2023/12/03 | 3669 | macros/latex/contrib/tkz/tkz-elements/README.md
+2023/12/03 | 356 | support/texlab/crates/completion-data/Cargo.toml
+2023/12/03 | 355 | support/texlab/crates/folding/Cargo.toml
+2023/12/03 | 353 | support/texlab/crates/rename/Cargo.toml
+2023/12/03 | 3530 | support/texlab/crates/inlay-hints/src/tests.rs
+2023/12/03 | 352 | support/texlab/crates/bibfmt/Cargo.toml
+2023/12/03 | 35149 | support/texlab/LICENSE
+2023/12/03 | 3501 | support/texlab/crates/completion/src/providers/label.rs
+2023/12/03 | 348 | support/texlab/crates/inlay-hints/Cargo.toml
+2023/12/03 | 3489 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
+2023/12/03 | 34893 | support/texlab/crates/parser/src/latex.rs
+2023/12/03 | 3486 | support/texlab/crates/bibfmt/src/tests.rs
+2023/12/03 | 347 | support/texlab/Cargo.toml
+2023/12/03 | 347143 | web/c_cpp/cweb/cwebman.pdf
+2023/12/03 | 336 | support/texlab/crates/references/Cargo.toml
+2023/12/03 | 33205 | support/texlab/CHANGELOG.md
+2023/12/03 | 3318 | web/c_cpp/cweb/comm-vms.ch
+2023/12/03 | 330 | support/texlab/crates/test-utils/Cargo.toml
+2023/12/03 | 3301 | support/texlab/crates/completion/src/providers/tikz_library.rs
+2023/12/03 | 3298 | support/texlab/crates/diagnostics/src/build_log.rs
+2023/12/03 | 3274 | support/texlab/crates/diagnostics/src/tests.rs
+2023/12/03 | 32721 | web/c_cpp/cweb/ctangle.c
+2023/12/03 | 326 | support/texlab/crates/highlights/Cargo.toml
+2023/12/03 | 3265 | support/texlab/crates/completion-data/src/lib.rs
+2023/12/03 | 3225 | support/texlab/crates/folding/src/lib.rs
+2023/12/03 | 3223 | support/texlab/crates/texlab/src/client.rs
+2023/12/03 | 3218 | support/texlab/crates/diagnostics/src/grammar/bib.rs
+2023/12/03 | 3139 | support/texlab/crates/commands/src/fwd_search.rs
+2023/12/03 | 3116 | support/texlab/crates/references/src/tests.rs
+2023/12/03 | 3093 | support/texlab/crates/commands/src/find_envs.rs
+2023/12/03 | 3060 | support/texlab/crates/diagnostics/src/citations.rs
+2023/12/03 | 3049 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
+2023/12/03 | 303 | support/texlab/crates/links/Cargo.toml
+2023/12/03 | 3021 | support/texlab/crates/diagnostics/src/labels.rs
+2023/12/03 | 3019 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
+2023/12/03 | 3009 | support/texlab/crates/parser/src/config.rs
+2023/12/03 | 2946 | web/c_cpp/cweb/examples/README
+2023/12/03 | 2858 | web/c_cpp/cweb/readme.ql
+2023/12/03 | 2834 | support/texlab/crates/parser/src/latex/lexer/types.rs
+2023/12/03 | 2830630 | biblio/ctan-bibdata/ctan.bib
+2023/12/03 | 273805 | graphics/pgf/contrib/argumentation.zip
+2023/12/03 | 2665 | support/texlab/crates/bibtex-utils/src/field/date.rs
+2023/12/03 | 2665 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
+2023/12/03 | 26374 | support/texlab/texlab.pdf
+2023/12/03 | 2633 | web/c_cpp/cweb/comm-w32.ch
+2023/12/03 | 26279 | web/pwebmac.zip
+2023/12/03 | 2612 | support/texlab/crates/completion/src/providers/glossary.rs
+2023/12/03 | 2610 | support/texlab/crates/symbols/src/types.rs
+2023/12/03 | 2609 | support/texlab/crates/texlab/src/server/extensions.rs
+2023/12/03 | 26029643 | systems/texlive/tlnet/install-tl.zip
+2023/12/03 | 2600 | support/texlab/crates/definition/src/tests.rs
+2023/12/03 | 2586 | support/texlab/texlab.tex
+2023/12/03 | 2549 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
+2023/12/03 | 2543 | support/texlab/crates/distro/src/lib.rs
+2023/12/03 | 2538 | web/pwebmac/README.md
+2023/12/03 | 25355 | web/c_cpp/cweb/examples/wmerge.w
+2023/12/03 | 2527 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
+2023/12/03 | 25232 | web/c_cpp/cweb/common.c
+2023/12/03 | 251 | support/texlab/crates/links/src/lib.rs
+2023/12/03 | 2493 | support/texlab/crates/completion/src/providers/argument.rs
+2023/12/03 | 2492912 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2023/12/03 | 2481 | support/texlab/crates/completion/src/providers/import.rs
+2023/12/03 | 2470 | support/texlab/crates/texlab/src/features/inlay_hint.rs
+2023/12/03 | 2467 | support/texlab/crates/distro/src/miktex.rs
+2023/12/03 | 2411 | support/texlab/crates/texlab/src/server/dispatch.rs
+2023/12/03 | 2371 | support/texlab/crates/base-db/src/semantics/bib.rs
+2023/12/03 | 2369 | support/texlab/crates/completion/src/providers/field.rs
+2023/12/03 | 23656 | web/pwebmac/pwebmac.tex
+2023/12/03 | 233 | web/pwebmac/trapman.ch
+2023/12/03 | 233 | support/texlab/crates/line-index/Cargo.toml
+2023/12/03 | 23278 | web/pwebmac/webman.ch
+2023/12/03 | 2326 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
+2023/12/03 | 2322 | support/texlab/crates/diagnostics/src/lib.rs
+2023/12/03 | 2320 | support/texlab/crates/completion/src/util/patterns.rs
+2023/12/03 | 227 | support/texlab/crates/syntax/Cargo.toml
+2023/12/03 | 227 | support/texlab/crates/distro/Cargo.toml
+2023/12/03 | 2276 | support/texlab/crates/completion/src/providers/citations.rs
+2023/12/03 | 22204 | support/texlab/crates/citeproc/src/driver.rs
+2023/12/03 | 217 | web/c_cpp/cweb/examples/wc-dos.ch
+2023/12/03 | 2176 | web/c_cpp/cweb/iso_types.w
+2023/12/03 | 2134 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
+2023/12/03 | 2107 | support/texlab/crates/completion/src/providers/color.rs
+2023/12/03 | 21035788 | systems/texlive/tlnet/install-tl-windows.exe
+2023/12/03 | 20966 | web/c_cpp/cweb/cwebmac.tex
+2023/12/03 | 20913 | web/c_cpp/cweb/examples/wordtest.w
+2023/12/03 | 2074 | support/texlab/crates/bibtex-utils/src/field/author.rs
+2023/12/03 | 2069 | support/texlab/crates/texlab/src/features/formatting/latexindent.rs
+2023/12/03 | 2040 | support/texlab/crates/parser/src/latex/lexer.rs
+2023/12/03 | 2040 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
+2023/12/03 | 202 | support/texlab/crates/parser/src/lib.rs
+2023/12/03 | 20100 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex
+2023/12/03 | 197 | support/texlab/crates/texlab/src/features.rs
+2023/12/03 | 1974 | support/texlab/crates/symbols/src/document/bib.rs
+2023/12/03 | 1917 | support/texlab/crates/distro/src/file_name_db.rs
+2023/12/03 | 1897 | support/texlab/crates/texlab/Cargo.toml
+2023/12/03 | 1858 | web/c_cpp/cweb/examples/xlib_types.w
+2023/12/03 | 18578 | web/c_cpp/cweb/prod.w
+2023/12/03 | 18371739 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2023/12/03 | 181 | support/texlab/CONTRIBUTING.md
+2023/12/03 | 18098 | support/texlab/crates/syntax/src/latex/cst.rs
+2023/12/03 | 17 | support/texlab/crates/test-utils/src/lib.rs
+2023/12/03 | 1798 | support/texlab/crates/inlay-hints/src/label.rs
+2023/12/03 | 1780 | support/texlab/crates/parser/src/latexmkrc.rs
+2023/12/03 | 177295 | web/c_cpp/cweb/cweave.w
+2023/12/03 | 176 | support/texlab/crates/base-db/src/util.rs
+2023/12/03 | 1760 | support/texlab/crates/citeproc/src/output.rs
+2023/12/03 | 175 | support/texlab/crates/symbols/src/lib.rs
+2023/12/03 | 1755 | support/texlab/crates/texlab/src/features/hover.rs
+2023/12/03 | 1740 | support/texlab/crates/commands/src/clean.rs
+2023/12/03 | 1732 | support/texlab/crates/texlab/src/util/line_index_ext.rs
+2023/12/03 | 1732 | support/texlab/crates/texlab/src/main.rs
+2023/12/03 | 1708 | support/texlab/crates/syntax/src/latex/kind.rs
+2023/12/03 | 1698 | support/texlab/crates/folding/src/tests.rs
+2023/12/03 | 1691 | macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
+2023/12/03 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/12/03 | 1674 | web/c_cpp/cweb/c++lib.w
+2023/12/03 | 1658 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
+2023/12/03 | 1650 | web/c_cpp/cweb/cweav-vms.ch
+2023/12/03 | 16324 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
+2023/12/03 | 1626 | support/texlab/crates/bibtex-utils/src/field/number.rs
+2023/12/03 | 1602 | support/texlab/crates/texlab/benches/bench_main.rs
+2023/12/03 | 15 | support/texlab/crates/bibtex-utils/src/lib.rs
+2023/12/03 | 1590 | support/texlab/crates/commands/src/dep_graph.rs
+2023/12/03 | 158845 | support/texlab/crates/parser/src/bibtex/tests.rs
+2023/12/03 | 1587 | support/texlab/crates/texlab/src/features/rename.rs
+2023/12/03 | 1583 | support/texlab/crates/commands/src/placeholders.rs
+2023/12/03 | 15622 | support/texlab/crates/citeproc/src/tests.rs
+2023/12/03 | 1556 | web/c_cpp/cweb/ctang-vms.ch
+2023/12/03 | 1553 | support/texlab/crates/completion/src/providers/color_model.rs
+2023/12/03 | 1546 | support/texlab/crates/symbols/src/document.rs
+2023/12/03 | 1542 | web/c_cpp/cweb/makefile.bs
+2023/12/03 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2023/12/03 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2023/12/03 | 1522 | support/texlab/crates/texlab/src/features/definition.rs
+2023/12/03 | 1514 | web/pwebmac/Xerrorlog.tex
+2023/12/03 | 1510 | support/texlab/crates/rename/src/entry.rs
+2023/12/03 | 15061 | graphics/pgf/contrib/scrabble/tex/Scrabble.sty
+2023/12/03 | 1498 | support/texlab/crates/references/src/entry.rs
+2023/12/03 | 1496 | support/texlab/crates/texlab/src/util.rs
+2023/12/03 | 14836 | support/texlab/crates/texlab/src/features/completion.rs
+2023/12/03 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2023/12/03 | 1453 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
+2023/12/03 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2023/12/03 | 14338 | support/texlab/crates/symbols/src/document/tests.rs
+2023/12/03 | 1432 | support/texlab/crates/texlab/src/features/folding.rs
+2023/12/03 | 1412 | support/texlab/crates/texlab/src/server/progress.rs
+2023/12/03 | 13909 | web/pwebmac/makeall
+2023/12/03 | 1384 | support/texlab/crates/definition/src/command.rs
+2023/12/03 | 1382 | support/texlab/crates/completion/src/util/builder.rs
+2023/12/03 | 13724 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
+2023/12/03 | 13554 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.tex
+2023/12/03 | 1329 | support/texlab/crates/references/src/string_def.rs
+2023/12/03 | 1321 | support/texlab/crates/symbols/src/workspace.rs
+2023/12/03 | 1305 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
+2023/12/03 | 128 | support/texlab/crates/syntax/src/latexmkrc.rs
+2023/12/03 | 1287 | support/texlab/crates/distro/src/language.rs
+2023/12/03 | 12874 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
+2023/12/03 | 12672 | web/c_cpp/cweb/examples/extex.w
+2023/12/03 | 1254 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
+2023/12/03 | 1247 | support/texlab/crates/rename/src/tests.rs
+2023/12/03 | 1244 | support/texlab/crates/hover/src/citation.rs
+2023/12/03 | 1240 | support/texlab/crates/rename/src/command.rs
+2023/12/03 | 12344 | systems/texlive/tlnet/archive/covington.r69019.tar.xz
+2023/12/03 | 119095 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
+2023/12/03 | 1175 | support/texlab/crates/definition/src/label.rs
+2023/12/03 | 1170 | support/texlab/crates/base-db/src/semantics/auxiliary.rs
+2023/12/03 | 1166 | support/texlab/crates/texlab/src/features/reference.rs
+2023/12/03 | 11471 | macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
+2023/12/03 | 1145 | support/texlab/crates/links/src/tests.rs
+2023/12/03 | 11454 | web/c_cpp/cweb/common.h
+2023/12/03 | 114260 | systems/texlive/tlnet/archive/texlive-scripts.r69016.tar.xz
+2023/12/03 | 1137 | support/texlab/crates/texlab/src/features/formatting.rs
+2023/12/03 | 11379 | graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.tex
+2023/12/03 | 1125 | support/texlab/crates/texlab/src/features/highlight.rs
+2023/12/03 | 1118 | support/texlab/crates/completion/src/providers/entry_type.rs
+2023/12/03 | 11137 | support/texlab/crates/base-db/src/workspace.rs
+2023/12/03 | 1112 | support/texlab/crates/base-db/src/semantics.rs
+2023/12/03 | 11103 | support/texlab/crates/parser/src/bibtex.rs
+2023/12/03 | 11078 | support/texlab/crates/base-db/src/semantics/tex.rs
+2023/12/03 | 1104 | support/texlab/crates/definition/src/lib.rs
+2023/12/03 | 1097420 | graphics/pgf/contrib/scrabble.zip
+2023/12/03 | 108 | support/texlab/crates/texlab/src/lib.rs
+2023/12/03 | 1078 | support/texlab/crates/definition/src/include.rs
+2023/12/03 | 1077 | support/texlab/crates/definition/src/string_ref.rs
+2023/12/03 | 1064 | support/texlab/crates/hover/src/string_ref.rs
+2023/12/03 | 10549 | web/c_cpp/cweb/examples/kspell.el
+2023/12/03 | 1046 | support/texlab/crates/rename/src/lib.rs
+2023/12/03 | 1044 | support/texlab/crates/hover/src/lib.rs
+2023/12/03 | 1033 | support/texlab/crates/completion/benches/bench_main.rs
+2023/12/03 | 1025 | support/texlab/crates/completion/src/util/matchers.rs
2023/12/02 | 97044 | systems/win32/miktex/tm/packages/cjs-rcs-article__source.tar.lzma
2023/12/02 | 9674 | macros/latex/contrib/ufrgscca/latex/ufrgscca-cover-ptBR.tex
2023/12/02 | 9459 | systems/win32/miktex/tm/packages/cidarticle.tar.lzma
@@ -25,6 +359,7 @@
2023/12/02 | 76201 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
2023/12/02 | 759221 | systems/win32/miktex/tm/packages/yquant__doc.tar.lzma
2023/12/02 | 75111 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2023/12/02 | 7403 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/12/02 | 73400 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
2023/12/02 | 73388 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
2023/12/02 | 73351 | systems/win32/miktex/tm/packages/yamlvars__doc.tar.lzma
@@ -55,9 +390,9 @@
2023/12/02 | 588902 | macros/latex/contrib/ufrgscca/doc/ufrgscca.pdf
2023/12/02 | 5871 | systems/win32/miktex/tm/packages/penlightplus__source.tar.lzma
2023/12/02 | 586706 | macros/latex/contrib/ufrgscca.zip
+2023/12/02 | 5829 | graphics/pgf/contrib/argumentation/argumentation.sty
2023/12/02 | 57990 | systems/win32/miktex/tm/packages/yquant.tar.lzma
2023/12/02 | 57938 | systems/win32/miktex/tm/packages/penlightplus__doc.tar.lzma
-2023/12/02 | 5739967 | systems/texlive/tlnet/install-tl-unx.tar.gz
2023/12/02 | 568 | systems/texlive/tlnet/archive/install-latex-guide-zh-cn.r69014.tar.xz
2023/12/02 | 55920 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
2023/12/02 | 558128 | macros/latex/contrib/covington/covington.pdf
@@ -68,16 +403,12 @@
2023/12/02 | 530354 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
2023/12/02 | 52669 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
2023/12/02 | 507865 | systems/win32/miktex/tm/packages/ufrgscca__doc.tar.lzma
+2023/12/02 | 5052 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex
2023/12/02 | 499568 | systems/win32/miktex/tm/packages/next/miktex-ptex-bin-x64.tar.lzma
2023/12/02 | 497788 | systems/win32/miktex/tm/packages/mandi__doc.tar.lzma
2023/12/02 | 49726 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
2023/12/02 | 4919 | systems/win32/miktex/tm/packages/antique-spanish-units__source.tar.lzma
2023/12/02 | 4904 | systems/win32/miktex/tm/packages/trivialpursuit.tar.lzma
-2023/12/02 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2023/12/02 | 488 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2023/12/02 | 488 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2023/12/02 | 488 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2023/12/02 | 488 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2023/12/02 | 48206 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
2023/12/02 | 479238 | systems/win32/miktex/tm/packages/vectorlogos__doc.tar.lzma
2023/12/02 | 47444 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
@@ -96,19 +427,16 @@
2023/12/02 | 4364 | systems/win32/miktex/tm/packages/pdfannotations__doc.tar.lzma
2023/12/02 | 4342 | systems/win32/miktex/tm/packages/texblend__source.tar.lzma
2023/12/02 | 43139 | systems/win32/miktex/tm/packages/next/miktex-patgen-bin-x64.tar.lzma
-2023/12/02 | 430588 | systems/texlive/tlnet/archive/texlive-scripts.doc.r69012.tar.xz
2023/12/02 | 4239 | systems/win32/miktex/tm/packages/pdfannotations__source.tar.lzma
2023/12/02 | 4178 | systems/win32/miktex/tm/packages/trivialpursuit__source.tar.lzma
2023/12/02 | 415709 | systems/win32/miktex/tm/packages/hyperref__source.tar.lzma
2023/12/02 | 41268 | macros/latex/contrib/ufrgscca/latex/ufrgscca-forms.tex
-2023/12/02 | 4113762 | biblio/ctan-bibdata.zip
2023/12/02 | 40382 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2023/12/02 | 395233 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2023/12/02 | 3831 | systems/win32/miktex/tm/packages/coolfn__source.tar.lzma
2023/12/02 | 3791 | systems/win32/miktex/tm/packages/texblend.tar.lzma
2023/12/02 | 379171 | systems/win32/miktex/tm/packages/lni__doc.tar.lzma
2023/12/02 | 37628 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2023/12/02 | 3708800 | biblio/ctan-bibdata/ctan.pdf
2023/12/02 | 3698 | systems/win32/miktex/tm/packages/vectorlogos__source.tar.lzma
2023/12/02 | 36950 | systems/win32/miktex/tm/packages/catoptions.tar.lzma
2023/12/02 | 36844 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
@@ -124,13 +452,16 @@
2023/12/02 | 33464 | systems/win32/miktex/tm/packages/ufrgscca.tar.lzma
2023/12/02 | 329750 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
2023/12/02 | 32873 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2023/12/02 | 3258 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes.tex
2023/12/02 | 323901 | systems/win32/miktex/tm/packages/cjs-rcs-article__doc.tar.lzma
2023/12/02 | 32091 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
2023/12/02 | 3207425 | systems/win32/miktex/tm/packages/simpleicons.tar.lzma
2023/12/02 | 3177312 | systems/texlive/tlnet/archive/simpleicons.r69013.tar.xz
2023/12/02 | 31588 | systems/win32/miktex/tm/packages/mandi__source.tar.lzma
2023/12/02 | 31567 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2023/12/02 | 3109 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
2023/12/02 | 305581 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2023/12/02 | 302 | graphics/pgf/contrib/argumentation/README.md
2023/12/02 | 2967 | systems/win32/miktex/tm/packages/affilauthor.tar.lzma
2023/12/02 | 2954 | systems/win32/miktex/tm/packages/affilauthor__source.tar.lzma
2023/12/02 | 29152 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
@@ -139,14 +470,13 @@
2023/12/02 | 287601 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
2023/12/02 | 28573 | systems/win32/miktex/tm/packages/lni__source.tar.lzma
2023/12/02 | 2844254 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2023/12/02 | 2830633 | biblio/ctan-bibdata/ctan.bib
2023/12/02 | 28021 | systems/win32/miktex/tm/packages/kantlipsum__source.tar.lzma
+2023/12/02 | 275801 | graphics/pgf/contrib/argumentation/argumentation-doc.pdf
2023/12/02 | 27427 | macros/latex/contrib/ufrgscca/latex/ufrgscca-coord.sty
2023/12/02 | 272342 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
2023/12/02 | 27221 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
2023/12/02 | 2677 | systems/win32/miktex/tm/packages/pdfannotations.tar.lzma
2023/12/02 | 266070 | systems/win32/miktex/tm/packages/profmaquette__doc.tar.lzma
-2023/12/02 | 26029654 | systems/texlive/tlnet/install-tl.zip
2023/12/02 | 259095 | systems/win32/miktex/tm/packages/xcharter-math.tar.lzma
2023/12/02 | 25618 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
2023/12/02 | 25609 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
@@ -155,13 +485,13 @@
2023/12/02 | 251434 | systems/win32/miktex/tm/packages/euler-math.tar.lzma
2023/12/02 | 250604 | systems/win32/miktex/tm/packages/affilauthor__doc.tar.lzma
2023/12/02 | 24987 | systems/win32/miktex/tm/packages/biblatex-oxref.tar.lzma
-2023/12/02 | 2494036 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2023/12/02 | 249351 | systems/win32/miktex/tm/packages/next/miktex-hitex-bin-x64.tar.lzma
2023/12/02 | 245898 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
2023/12/02 | 24206 | systems/win32/miktex/tm/packages/kantlipsum.tar.lzma
2023/12/02 | 24133 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
2023/12/02 | 23480 | macros/latex/contrib/ufrgscca/latex/ufrgscca-ppc.sty
2023/12/02 | 2325193 | systems/win32/miktex/tm/packages/simpleicons__doc.tar.lzma
+2023/12/02 | 23227 | graphics/pgf/contrib/argumentation/argumentation-doc.tex
2023/12/02 | 232151 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
2023/12/02 | 2316904 | systems/texlive/tlnet/archive/simpleicons.doc.r69013.tar.xz
2023/12/02 | 227406 | systems/win32/miktex/tm/packages/antique-spanish-units.tar.lzma
@@ -169,7 +499,6 @@
2023/12/02 | 221461 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
2023/12/02 | 218912 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
2023/12/02 | 217012 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2023/12/02 | 21031359 | systems/texlive/tlnet/install-tl-windows.exe
2023/12/02 | 2072725 | systems/win32/miktex/tm/packages/biblatex-oxref__doc.tar.lzma
2023/12/02 | 20693 | systems/win32/miktex/tm/packages/kpfonts-otf__source.tar.lzma
2023/12/02 | 2059 | macros/latex/contrib/ufrgscca/latex/ufrgscca-base-en.def
@@ -190,27 +519,24 @@
2023/12/02 | 1896 | macros/latex/contrib/ufrgscca/latex/ufrgscca-base-ptBR.def
2023/12/02 | 18948 | systems/win32/miktex/tm/packages/cidarticle__source.tar.lzma
2023/12/02 | 18861 | systems/win32/miktex/tm/packages/unbtex.tar.lzma
-2023/12/02 | 18371739 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
2023/12/02 | 182732 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
2023/12/02 | 18135 | macros/latex/contrib/ufrgscca/latex/ufrgscca-core.sty
2023/12/02 | 174111 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
2023/12/02 | 1727 | systems/win32/miktex/tm/packages/coolfn.tar.lzma
2023/12/02 | 1704639 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
2023/12/02 | 1704409 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2023/12/02 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx
+2023/12/02 | 16788 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
+2023/12/02 | 1647 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
+2023/12/02 | 16392 | macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
2023/12/02 | 16371 | macros/latex/contrib/ufrgscca/latex/ufrgscca-terms-ptBR.tex
2023/12/02 | 1633069 | systems/win32/miktex/tm/packages/proflycee__source.tar.lzma
2023/12/02 | 159975 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
2023/12/02 | 1598898 | systems/win32/miktex/tm/packages/euler-math__doc.tar.lzma
-2023/12/02 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
2023/12/02 | 1531285 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2023/12/02 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
2023/12/02 | 1484 | systems/win32/miktex/tm/packages/catoptions__doc.tar.lzma
2023/12/02 | 1475832 | systems/win32/miktex/tm/packages/proflycee__doc.tar.lzma
-2023/12/02 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
2023/12/02 | 14595 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2023/12/02 | 14580 | systems/win32/miktex/tm/packages/cjs-rcs-article.tar.lzma
-2023/12/02 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
2023/12/02 | 1440789 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
2023/12/02 | 141943 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
2023/12/02 | 14136 | systems/win32/miktex/tm/packages/erewhon-math__source.tar.lzma
@@ -221,13 +547,14 @@
2023/12/02 | 1341622 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
2023/12/02 | 12939 | systems/win32/miktex/tm/packages/xcharter-math__source.tar.lzma
2023/12/02 | 12866 | systems/win32/miktex/tm/packages/lni.tar.lzma
+2023/12/02 | 12731 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
2023/12/02 | 12111 | systems/win32/miktex/tm/packages/concmath-otf__source.tar.lzma
2023/12/02 | 11999 | systems/win32/miktex/tm/packages/profmaquette__source.tar.lzma
2023/12/02 | 117811 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
2023/12/02 | 1172470 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2023/12/02 | 11620 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex
2023/12/02 | 1150 | systems/win32/miktex/tm/packages/next/pr.ini
2023/12/02 | 11444 | systems/win32/miktex/tm/packages/mandi.tar.lzma
-2023/12/02 | 114260 | systems/texlive/tlnet/archive/texlive-scripts.r69012.tar.xz
2023/12/02 | 112482 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
2023/12/02 | 1123854 | systems/win32/miktex/tm/packages/kpfonts-otf.tar.lzma
2023/12/02 | 11230 | macros/latex/contrib/ufrgscca/latex/ufrgscca.cls
@@ -240,6 +567,7 @@
2023/12/02 | 104102 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
2023/12/02 | 103552 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
2023/12/02 | 10260 | systems/win32/miktex/tm/packages/penlightplus.tar.lzma
+2023/12/01 | 9766 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex
2023/12/01 | 848616 | info/install-latex-guide-zh-cn.zip
2023/12/01 | 808756 | info/install-latex-guide-zh-cn/install-latex-guide-zh-cn.pdf
2023/12/01 | 61788 | systems/texlive/tlnet/archive/vectorlogos.r69010.tar.xz
@@ -249,6 +577,7 @@
2023/12/01 | 479052 | systems/texlive/tlnet/archive/vectorlogos.doc.r69010.tar.xz
2023/12/01 | 47452 | systems/texlive/tlnet/archive/cjs-rcs-article.source.r69006.tar.xz
2023/12/01 | 46848 | systems/texlive/tlnet/archive/proflycee.r69008.tar.xz
+2023/12/01 | 4369 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex
2023/12/01 | 375192 | systems/texlive/tlnet/archive/cjs-rcs-article.doc.r69006.tar.xz
2023/12/01 | 3088828 | systems/texlive/tlnet/archive/proflycee.doc.r69008.tar.xz
2023/12/01 | 2849 | fonts/simpleicons/enc/simpleiconsone.enc
@@ -322,6 +651,7 @@
2023/11/30 | 3155520 | macros/latex/contrib/proflycee.zip
2023/11/30 | 2888 | info/biblio/texjourn.ltx
2023/11/30 | 2824 | systems/texlive/tlnet/archive/affilauthor.r68996.tar.xz
+2023/11/30 | 2777 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
2023/11/30 | 252240 | systems/texlive/tlnet/archive/affilauthor.doc.r68996.tar.xz
2023/11/30 | 23106 | fonts/concmath-otf/concmath-otf.ltx
2023/11/30 | 229004 | systems/texlive/tlnet/archive/antique-spanish-units.doc.r68998.tar.xz
@@ -342,7 +672,6 @@
2023/11/29 | 882 | info/spanish/antique-spanish-units/README
2023/11/29 | 8147 | macros/latex/contrib/cjs-rcs-article/README.md
2023/11/29 | 7916 | macros/latex/contrib/coolfn/coolfndocumentation.tex
-2023/11/29 | 7453 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
2023/11/29 | 652 | macros/latex/contrib/coolfn/README
2023/11/29 | 615 | macros/latex/contrib/fvextra/README
2023/11/29 | 597479 | macros/latex/contrib/affilauthor.zip
@@ -373,6 +702,8 @@
2023/11/29 | 112323 | macros/latex/contrib/cjs-rcs-article/cjs-rcs-article-fr.pdf
2023/11/29 | 11131 | macros/latex/contrib/affilauthor/affilauthor.sty
2023/11/29 | 10870 | macros/latex/contrib/cjs-rcs-article/cjs-rcs-english.mbs
+2023/11/28 | 9282 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex
+2023/11/28 | 9079 | macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
2023/11/28 | 8978 | fonts/erewhon-math/fourier-otf.sty
2023/11/28 | 8063 | fonts/erewhon-math/README.md
2023/11/28 | 77596 | macros/latex/contrib/affilauthor/affilauthor-image1.pdf
@@ -435,8 +766,6 @@
2023/11/27 | 9260 | systems/texlive/tlnet/archive/cidarticle.r68976.tar.xz
2023/11/27 | 916 | macros/latex/contrib/kantlipsum/README.md
2023/11/27 | 89892 | systems/texlive/tlnet/archive/hyperref.r68972.tar.xz
-2023/11/27 | 8734 | fonts/libertine/latex/libertineRoman.sty
-2023/11/27 | 8634 | fonts/libertine/latex/biolinum.sty
2023/11/27 | 78688 | systems/texlive/tlnet/archive/yamlvars.doc.r68974.tar.xz
2023/11/27 | 786192 | macros/latex/contrib/lni.zip
2023/11/27 | 724741 | macros/latex/contrib/unbtex.zip
@@ -446,7 +775,6 @@
2023/11/27 | 6398 | macros/latex/contrib/lni/lni-paper-example-de.tex
2023/11/27 | 62280 | systems/texlive/tlnet/archive/penlightplus.doc.r68973.tar.xz
2023/11/27 | 5956 | systems/texlive/tlnet/archive/yamlvars.r68974.tar.xz
-2023/11/27 | 5770 | fonts/libertine/doc/libertine-samples.tex
2023/11/27 | 4744 | systems/texlive/tlnet/archive/trivialpursuit.r68971.tar.xz
2023/11/27 | 463412 | systems/texlive/tlnet/archive/trivialpursuit.doc.r68971.tar.xz
2023/11/27 | 446252 | systems/texlive/tlnet/archive/cidarticle.doc.r68976.tar.xz
@@ -456,112 +784,13 @@
2023/11/27 | 377740 | macros/latex/contrib/lni/lni.pdf
2023/11/27 | 3663268 | systems/texlive/tlnet/archive/hyperref.doc.r68972.tar.xz
2023/11/27 | 3586 | info/biblio/tugboat.ltx
-2023/11/27 | 3500 | fonts/libertine/README
2023/11/27 | 2370 | macros/latex/contrib/lni/CONTRIBUTING.md
2023/11/27 | 2150 | macros/latex/contrib/lni/lni-paper-example-de.bib
2023/11/27 | 2035752 | systems/texlive/tlnet/archive/kpfonts-otf.doc.r68970.tar.xz
2023/11/27 | 203013 | macros/latex/contrib/kantlipsum/kantlipsum.dtx
2023/11/27 | 1995 | macros/latex/contrib/lni/README.md
-2023/11/27 | 19701133 | install/fonts/libertine.tds.zip
-2023/11/27 | 195885 | fonts/libertine/doc/libertine-samples.pdf
2023/11/27 | 19514589 | fonts/libertine.zip
-2023/11/27 | 19358 | fonts/libertine/latex/libertine.sty
2023/11/27 | 1928 | macros/latex/contrib/lni/lni-author-template.tex
2023/11/27 | 17664 | systems/texlive/tlnet/archive/cidarticle.source.r68976.tar.xz
2023/11/27 | 1115636 | systems/texlive/tlnet/archive/kpfonts-otf.r68970.tar.xz
2023/11/27 | 10004 | systems/texlive/tlnet/archive/penlightplus.r68973.tar.xz
-2023/11/26 | 94820 | fonts/kpfonts-otf/fonts/KpSans-BoldItalic.otf
-2023/11/26 | 94764 | fonts/kpfonts-otf/fonts/KpSans-Italic.otf
-2023/11/26 | 92 | fonts/kpfonts-otf/tex/KpMath-Light.fontspec
-2023/11/26 | 928 | macros/latex/contrib/hyperref/doc/hyperref-doc2.html
-2023/11/26 | 91 | fonts/kpfonts-otf/tex/KpMath-Sans.fontspec
-2023/11/26 | 90 | fonts/kpfonts-otf/tex/KpMath-Regular.fontspec
-2023/11/26 | 882 | macros/latex/contrib/hyperref/doc/hyperref-doc5.html
-2023/11/26 | 873816 | systems/texlive/tlnet/archive/inter.doc.r68966.tar.xz
-2023/11/26 | 873025 | macros/latex/contrib/hyperref/hyperref.dtx
-2023/11/26 | 86976 | fonts/kpfonts-otf/fonts/KpSans-Bold.otf
-2023/11/26 | 86871 | macros/luatex/latex/yamlvars.zip
-2023/11/26 | 85760 | fonts/kpfonts-otf/fonts/KpSans-Regular.otf
-2023/11/26 | 854 | macros/latex/contrib/hyperref/doc/hyperref-doc7.html
-2023/11/26 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc9.html
-2023/11/26 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc8.html
-2023/11/26 | 795 | macros/latex/contrib/hyperref/doc/hyperref-doc3.html
-2023/11/26 | 793 | macros/latex/contrib/hyperref/doc/hyperref-doc6.html
-2023/11/26 | 7536 | macros/latex/contrib/hyperref/hyperref-patches.dtx
-2023/11/26 | 7490 | graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.tex
-2023/11/26 | 74726 | macros/luatex/generic/penlightplus.zip
-2023/11/26 | 69913 | macros/latex/contrib/catoptions/doc/catoptions-guide.tex
-2023/11/26 | 6836 | graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.tex
-2023/11/26 | 64828 | macros/latex/contrib/catoptions.zip
-2023/11/26 | 570566 | graphics/pgf/contrib/trivialpursuit.zip
-2023/11/26 | 5635 | macros/latex/contrib/hyperref/xr-hyper.sty
-2023/11/26 | 52638 | graphics/pgf/contrib/trivialpursuit/tex/TrivialPursuit.sty
-2023/11/26 | 526219 | macros/latex/contrib/hyperref/doc/hyperref-doc.html
-2023/11/26 | 50533 | macros/latex/contrib/hyperref/hluatex.dtx
-2023/11/26 | 5024 | macros/latex/contrib/hyperref/hyperref.ins
-2023/11/26 | 49568 | fonts/kpfonts-otf/fonts/KpMono-Italic.otf
-2023/11/26 | 48260 | fonts/kpfonts-otf/fonts/KpMono-BoldItalic.otf
-2023/11/26 | 48129 | graphics/pgf/contrib/yquant/tex/yquant-draw.tex
-2023/11/26 | 480 | fonts/kpfonts-otf/tex/KpLight.fontspec
-2023/11/26 | 469 | fonts/kpfonts-otf/tex/KpRoman.fontspec
-2023/11/26 | 465517 | macros/latex/contrib/cidarticle.zip
-2023/11/26 | 451264 | fonts/kpfonts-otf/fonts/KpMath-Light.otf
-2023/11/26 | 4479 | macros/latex/contrib/hyperref/README.md
-2023/11/26 | 4465988 | install/macros/latex/contrib/hyperref.tds.zip
-2023/11/26 | 440553 | macros/latex/contrib/hyperref/doc/hyperref-linktarget.pdf
-2023/11/26 | 4387938 | fonts/kpfonts-otf.zip
-2023/11/26 | 4286876 | macros/latex/contrib/hyperref.zip
-2023/11/26 | 425576 | fonts/kpfonts-otf/fonts/KpMath-Regular.otf
-2023/11/26 | 42248 | fonts/kpfonts-otf/fonts/KpMono-Regular.otf
-2023/11/26 | 41096 | fonts/kpfonts-otf/fonts/KpMono-Bold.otf
-2023/11/26 | 384001 | macros/latex/contrib/hyperref/doc/slides.pdf
-2023/11/26 | 35903 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-French.ltx
-2023/11/26 | 33476 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-English.ltx
-2023/11/26 | 318765 | macros/latex/contrib/hyperref/doc/hyperref-doc.pdf
-2023/11/26 | 317283 | graphics/pgf/contrib/yquant/doc/yquant-doc.tex
-2023/11/26 | 3161 | macros/latex/contrib/hyperref/bmhydoc.sty
-2023/11/26 | 293068 | fonts/kpfonts-otf/fonts/KpMath-Sans.otf
-2023/11/26 | 28654 | macros/latex/contrib/hyperref/backref.dtx
-2023/11/26 | 286185 | graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-fr.pdf
-2023/11/26 | 284 | macros/latex/contrib/hyperref/ntheorem-hyper.sty
-2023/11/26 | 284742 | graphics/pgf/contrib/trivialpursuit/doc/TrivialPursuit-doc-en.pdf
-2023/11/26 | 280 | macros/latex/contrib/hyperref/minitoc-hyper.sty
-2023/11/26 | 276964 | systems/texlive/tlnet/archive/profmaquette.doc.r68967.tar.xz
-2023/11/26 | 256952 | fonts/kpfonts-otf/fonts/KpMath-Semibold.otf
-2023/11/26 | 24711 | macros/latex/contrib/hyperref/nameref.dtx
-2023/11/26 | 247116 | macros/latex/contrib/hyperref/paperslides99.zip
-2023/11/26 | 2343397 | macros/latex/contrib/hyperref/doc/hyperref.pdf
-2023/11/26 | 233520 | fonts/kpfonts-otf/fonts/KpMath-Bold.otf
-2023/11/26 | 231 | fonts/kpfonts-otf/tex/KpSans.fontspec
-2023/11/26 | 2176 | graphics/pgf/contrib/yquant/tex/yquant.sty
-2023/11/26 | 206469 | macros/latex/contrib/hyperref/doc/backref.pdf
-2023/11/26 | 20068 | fonts/kpfonts-otf/tex/kpfonts-otf.sty
-2023/11/26 | 196744 | fonts/kpfonts-otf/fonts/KpMath-SansBold.otf
-2023/11/26 | 19488 | systems/texlive/tlnet/archive/profmaquette.r68967.tar.xz
-2023/11/26 | 19445 | macros/latex/contrib/hyperref/hyperref-linktarget.dtx
-2023/11/26 | 1929 | macros/latex/contrib/hyperref/manifest.txt
-2023/11/26 | 187536 | macros/latex/contrib/catoptions/tex/catoptions.sty
-2023/11/26 | 185 | fonts/kpfonts-otf/tex/KpMono.fontspec
-2023/11/26 | 1840190 | fonts/kpfonts-otf/doc/unimath-kpfonts.pdf
-2023/11/26 | 18311 | CTAN.sites
-2023/11/26 | 180166 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-French.pdf
-2023/11/26 | 176737 | fonts/kpfonts-otf/doc/Kpfonts-OTF-Doc-English.pdf
-2023/11/26 | 172475 | macros/latex/contrib/hyperref/doc/nameref.pdf
-2023/11/26 | 171919 | macros/latex/contrib/hyperref/doc/hyperref-doc.tex
-2023/11/26 | 16806 | fonts/kpfonts-otf/doc/unimath-kpfonts.ltx
-2023/11/26 | 15673 | macros/latex/contrib/hyperref/doc/hyperref-doc.css
-2023/11/26 | 13459132 | systems/texlive/tlnet/archive/inter.r68966.tar.xz
-2023/11/26 | 132446 | macros/latex/contrib/hyperref/doc/paper.pdf
-2023/11/26 | 1313 | macros/latex/contrib/catoptions/README.md
-2023/11/26 | 127129 | macros/latex/contrib/hyperref/ChangeLog.txt
-2023/11/26 | 126664 | fonts/kpfonts-otf/fonts/KpRoman-BoldItalic.otf
-2023/11/26 | 124228 | fonts/kpfonts-otf/fonts/KpRoman-SemiboldItalic.otf
-2023/11/26 | 117168 | fonts/kpfonts-otf/fonts/KpRoman-Italic.otf
-2023/11/26 | 116696 | fonts/kpfonts-otf/fonts/KpRoman-LightItalic.otf
-2023/11/26 | 116612 | fonts/kpfonts-otf/fonts/KpRoman-Bold.otf
-2023/11/26 | 114500 | fonts/kpfonts-otf/fonts/KpRoman-Regular.otf
-2023/11/26 | 114088 | fonts/kpfonts-otf/fonts/KpRoman-Light.otf
-2023/11/26 | 113644 | fonts/kpfonts-otf/fonts/KpRoman-Semibold.otf
-2023/11/26 | 10539 | fonts/kpfonts-otf/README.md
-2023/11/26 | 1030 | macros/latex/contrib/hyperref/doc/hyperref-doc4.html
-2023/11/26 | 1024472 | graphics/pgf/contrib/yquant/doc/yquant-doc.pdf
diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib
index cf5161c50b..82002e6927 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 02-12-2023, 02:00:04
+%% created at 03-12-2023, 02:00:04
%%
%% This file is provided under the terms of the LPPL v1.3 or
@@ -15935,8 +15935,8 @@
title = {The \texttt{covington} package},
subtitle = {LaTeX macros for Linguistics},
author = {Jürgen Spitzmüller and Michael Covington and Robin Fairbairns},
- date = {2023-06-25},
- version = {2.12},
+ date = {2023-12-02},
+ version = {2.13},
license = {lppl1.3},
mirror = {https://mirror.ctan.org/macros/latex/contrib/covington},
url = {https://ctan.org/pkg/covington},
@@ -72326,9 +72326,9 @@
@manual{ctan-trivialpursuit,
title = {The \texttt{TrivialPursuit} package},
- subtitle = {Insert Trivial Pursuit boarding game},
+ subtitle = {Insert Trivial Pursuit board game},
author = {Cédric Pierquet},
- date = {2023-11-26},
+ date = {2023-12-02},
version = {0.1.1},
license = {lppl1.3c},
mirror = {https://mirror.ctan.org/graphics/pgf/contrib/trivialpursuit},
@@ -73417,8 +73417,8 @@
title = {The \texttt{ufrgscca} package},
subtitle = {A bundle for undergraduate students final work/report (tcc) at UFRGS/EE},
author = {Alceu Frigeri},
- date = {2023-11-30},
- version = {2.1},
+ date = {2023-12-02},
+ version = {2.2},
license = {lppl1.3c,gpl},
mirror = {https://mirror.ctan.org/macros/latex/contrib/ufrgscca},
url = {https://ctan.org/pkg/ufrgscca},
diff --git a/graphics/pgf/contrib/argumentation/README.md b/graphics/pgf/contrib/argumentation/README.md
index 1bc1c6bd18..3e6a97e5ec 100644
--- a/graphics/pgf/contrib/argumentation/README.md
+++ b/graphics/pgf/contrib/argumentation/README.md
@@ -4,5 +4,5 @@ The argumentation package provides utility to create abstract argumentation fram
For bug reports and feedback, please contact:
Lars Bengel <lars.bengel@fernuni-hagen.de>
-Version: 1.0 [2023/11/05]
+Version: 1.1 [2023/12/03]
This package is subject to the LaTeX Project Public License 1.3c \ No newline at end of file
diff --git a/graphics/pgf/contrib/argumentation/argumentation-doc.pdf b/graphics/pgf/contrib/argumentation/argumentation-doc.pdf
index 61331279c4..39c89e37e3 100644
--- a/graphics/pgf/contrib/argumentation/argumentation-doc.pdf
+++ b/graphics/pgf/contrib/argumentation/argumentation-doc.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/argumentation/argumentation-doc.tex b/graphics/pgf/contrib/argumentation/argumentation-doc.tex
index 5af926f031..128765d43c 100644
--- a/graphics/pgf/contrib/argumentation/argumentation-doc.tex
+++ b/graphics/pgf/contrib/argumentation/argumentation-doc.tex
@@ -1,15 +1,23 @@
\documentclass{article}
-\title{The \texttt{argumentation} Package}
-\author{Lars Bengel\\\small lars.bengel@fernuni-hagen.de}
-%\date{}
+\title{The \argumentation Package}
+\author{Lars Bengel\footnote{Please report any issues at \url{https://github.com/aig-hagen/tikz_argumentation}}\\\small lars.bengel@fernuni-hagen.de}
+\date{Version 1.1 [2023/12/03]}
%%%%%%%%% IMPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\usepackage{argumentation}
-\usepackage{amsmath}
-
+\usepackage[]{argumentation} % Main Package
+\usepackage{amsmath} % For example environment
+\usepackage{xspace} % For dynamic spacing after commands
+\usepackage{xcolor} % Coloring
+\usepackage[hidelinks]{hyperref} % Hyperlinks
+\usepackage{subcaption} % For two-part figures
+
+\newcommand{\tikzname}{Ti\emph{k}Z\xspace}
+\newcommand{\argumentation}{\texttt{argumentation}\xspace}
+\newcommand{\opt}[2][red]{\ensuremath{\textcolor{#1}{\langle #2\rangle}}}
\newtheorem{example}{Example}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
\begin{document}
\maketitle
@@ -25,31 +33,33 @@
\argument[right=of args1]{args2}{b}
\argument[right=of args2]{args3}{c}
\argument[right=of args3]{args4}{d}
- \argument[right=of args4]{args5}{e}
+ \argument[right=of args4,incomplete]{args5}{e}
\argument[below=of args1]{args6}{f}
\argument[inactive,right=of args6]{args7}{g}
\argument[inactive,argin,right=of args7]{args8}{h}
\argument[right=of args8]{args9}{i}
\argument[right=of args9]{args10}{j}
+ %\annotation[right]{args5}{$a\lor b$}
+
\afname[left of=args1,yshift=-0.8cm,xshift=-0.2cm]{cap}{\textbf{F:}}
\selfattack{args1}
- \dualattack[]{args1}{args6}
+ \dualattack{args1}{args6}
\dualattack[inactive]{args6}{args7}
\attack[inactive]{args8}{args7}
\attack[inactive]{args7}{args2}
- \attack[]{args3}{args2}
- \attack[]{args4}{args5}
- \attack[]{args5}{args10}
- \attack[]{args10}{args9}
- \attack[]{args9}{args4}
-
- \support[]{args4}{args3}
- \support[]{args9}{args3}
+ \annotatedattack{args3}{args2}{$3$}
+ \attack[incomplete]{args4}{args5}
+ \attack{args5}{args10}
+ \attack{args10}{args9}
+ \attack{args9}{args4}
+
+ \support{args4}{args3}
+ \support{args9}{args3}
\end{af}
- \caption{An exemplary AF created with the \textsf{argumentation} package.}
+ \caption{An exemplary AF created with the \argumentation package.}
\label{fig:example}
\end{figure}
\vspace{-0.4cm}
@@ -62,7 +72,7 @@
\argument[right=of args1]{args2}{b}
\argument[right=of args2]{args3}{c}
\argument[right=of args3]{args4}{d}
- \argument[right=of args4]{args5}{e}
+ \argument[right=of args4,incomplete]{args5}{e}
\argument[below=of args1]{args6}{f}
\argument[inactive,right=of args6]{args7}{g}
\argument[inactive,argin,right=of args7]{args8}{h}
@@ -72,67 +82,139 @@
\afname[left of=args1,yshift=-0.8cm,xshift=-0.2cm]{cap}{\textbf{F:}}
\selfattack{args1}
- \dualattack[]{args1}{args6}
+ \dualattack{args1}{args6}
\dualattack[inactive]{args6}{args7}
\attack[inactive]{args8}{args7}
\attack[inactive]{args7}{args2}
- \attack[]{args3}{args2}
- \attack[]{args4}{args5}
- \attack[]{args5}{args10}
- \attack[]{args10}{args9}
- \attack[]{args9}{args4}
-
- \support[]{args4}{args3}
- \support[]{args9}{args3}
+ \annotatedattack{args3}{args2}{$3$}
+ \attack[incomplete]{args4}{args5}
+ \attack{args5}{args10}
+ \attack{args10}{args9}
+ \attack{args9}{args4}
+
+ \support{args4}{args3}
+ \support{args9}{args3}
\end{af}
- \caption{An exemplary AF created with the \textsf{argumentation} package.}
+ \caption{An exemplary AF created with the \argumentation package.}
\label{fig:example}
\end{figure}
\end{verbatim}
-\section{Documentation for Version 1.0 [2023/11/05]}
-In the following, we provide an overview over the functionality of the \textsf{argumentation} package.
+\section{Documentation for Version 1.1 [2023/12/03]}
+In the following, we give an overview over the functionality of the \argumentation package.
+In general, the functionality provided by this package is fully compatible with \tikzname.
+Meaning every command from this package can be used inside the \textsf{tikzpicture} environment and every \tikzname command or option can be used inside the \texttt{af} environment or in context of the argument nodes and attack edges.
\subsection{Package Options}
- Three options are provided to customize the look of the argumentation framework: \textsf{namestyle}, \textsf{argumentstyle} and \textsf{attackstyle}.
- The \textsf{namestyle} option accepts three different values
+ The \argumentation package can be imported via the command
+
+ \noindent
+ \verb|\usepackage{argumentation}|
+
+ Alternatively, one can also adjust the appearance by providing some package options via
+
+ \noindent
+ \verb|\usepackage[|\opt{options}\verb|]{argumentation}|
+
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item The package provides the following \emph{optional} options to customize the look of the argumentation frameworks.
+ \end{list}
\begin{align*}
+ \mathsf{namestyle} &\quad \text{Customizes the font of the argument names.}\\
+ \mathsf{argumentstyle} &\quad \text{Customizes the appearance of the argument nodes.}\\
+ \mathsf{attackstyle} &\quad \text{Customizes the appearance of the attack edges.}\\
+ \mathsf{supportstyle} &\quad \text{Customizes the appearance of the support edges.}\\
+ \end{align*}
+
+ In the following, we list the available options for each of the style parameters.\\
+
+\noindent\texttt{namestyle=}\opt{option}
+
+ The \textsf{namestyle} parameter accepts three different options
+ \begin{align*}
+ \mathsf{normal} &\quad \text{(default) The argument name is rendered normally.}\\
\mathsf{italics} &\quad \text{The argument name is rendered in \emph{italics}.}\\
\mathsf{bold} &\quad \text{The argument name is rendered in \textbf{bold}.}\\
- \mathsf{bolditalics} &\quad \text{(default) The argument name is rendered with \textbf{\emph{both}}.}\\
+ \mathsf{bolditalics} &\quad \text{The argument name is rendered with \textbf{\emph{both}}.}\\
+ \mathsf{monospace} &\quad \text{The argument name is rendered in \texttt{monospace} font.}\\
\end{align*}
- The \textsf{argumentstyle} option controls the style of the argument nodes and accepts two values
- \begin{align*}
- \mathsf{standard} &\quad \text{(default) Standard style for the argument nodes.}\\
- \mathsf{retro} &\quad \text{Alternative style, node size may vary for large argument names.}
- \end{align*}
+\noindent\texttt{argumentstyle=}\opt{option}
- The \textsf{attackstyle} option controls the style of the attack arrows and accepts two values
+ The \textsf{argumentstyle} parameter accepts two options
+ \begin{align*}
+ \mathsf{standard} &\quad \text{(default) Standard style for the argument nodes.}\\
+ %\mathsf{retro} &\quad \text{Thicker outline and slightly larger nodes.}\\
+ \end{align*}
+
+\newpage
+\noindent\texttt{attackstyle=}\opt{option}
+
+ The \textsf{attackstyle} parameter accepts two options
\begin{align*}
\mathsf{standard} &\quad \text{(default) Standard style for the attack arrow tips.}\\
- \mathsf{retro} &\quad \text{Alternative style, arrow tip is smaller and flatter.}
+ \mathsf{large} &\quad \text{Alternative style, arrow tip is larger and sharper.}\\
\end{align*}
+
+\noindent\texttt{supportstyle=}\opt{option}
+ The \textsf{supportstyle} parameter accepts three options
+ \begin{align*}
+ \mathsf{standard} &\quad \text{(default) Standard style for the attack arrow tips.}\\
+ \mathsf{dashed} &\quad \text{Dashed arrow line, same tip.}\\
+ \mathsf{double} &\quad \text{Double arrow line and large flat tip.}\\
+ \end{align*}
-\subsection{Environments}
-The package provides two environments for creating abstract argumentation frameworks and bipolar argumentation frameworks in \LaTeX-documents.
+You can override the \textsf{argumentstyle}, \textsf{attackstyle} and \textsf{supportstyle} parameters and set a custom style via the following commands respectively.
-\subsubsection{\textsf{af}-Environment}
- The \textsf{argumentation} package provides the \textsf{af} environment for creating abstract argumentation framework.
- The \textsf{af} environment extends the \textsf{tikzpicture} environment, meaning all \textsf{tikzpicture}-parameters can be used inside the \textsf{af} environment as well.
- The most relevant parameter is \verb|node distance|, which is set to \verb|1cm| per default.
-
-\subsubsection{\textsf{miniaf}-Environment}
- The \textsf{miniaf} environment can be used to create argumentation frameworks using less space.
- Especially useful for two-column layout documents.
- It provides essentially the same as the \textsf{af} environment, but with \verb|node distance=0.5cm| and for each node \verb|minimum size=0.5cm|, \verb|font=\small|.
+\noindent
+\verb|\setargumentstyle{|\opt{style}\verb|}|
+
+\noindent
+\verb|\setattackstyle{|\opt{style}\verb|}|
+
+\noindent
+\verb|\setsupportstyle{|\opt{style}\verb|}|
+
+\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item
+ where \opt{style} is a list of \tikzname style parameters.
+\end{list}
+\subsection{The \texttt{af} Environment}
+The \argumentation package provides an environment for creating abstract argumentation frameworks and bipolar argumentation frameworks in \LaTeX-documents.\\
+
+\noindent
+\verb|\begin{af}[|\opt{options}\verb|]|
+
+\opt[green]{environment~content}
+
+\noindent
+\verb|\end{af}|
+
+\begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item
+ The \argumentation package provides the \texttt{af} environment for creating abstract argumentation framework.
+ The \texttt{af} environment extends the \textsf{tikzpicture} environment, meaning all \tikzname commands can be used inside the \texttt{af} environment as well.
+ Furthermore, all options for the \textsf{tikzpicture} environment can be used for the \texttt{af} environment as well.
+ For instance, the option parameter \verb|node distance|, which is set to \verb|1cm| per default.
+
+ If you want to create an argumentation framework with limited space available, you can provide one of the following predefined options for the environment. This is especially useful for two-column layout documents.
+ \begin{align*}
+ \mathsf{tiny} &\quad \text{\textsf{node distance} is set to $0.35cm$ and nodes are smaller.}\\
+ \mathsf{small} &\quad \text{\textsf{node distance} is set to $0.55cm$ and nodes are smaller.}\\
+ \end{align*}
+
+ \begin{example}
+ Consider the two AFs in Figure~\ref{fig:mini_afs} created with the \textsf{small} and \textsf{tiny} option respectively.
+ \end{example}
+\end{list}
\begin{figure}[ht]
- \centering
- \begin{miniaf}
+ \begin{subfigure}{0.48\textwidth}
+ \centering
+ \begin{af}[small]
\argument{args1}{a}
\argument[right=of args1]{args2}{b}
\argument[right=of args2]{args3}{c}
@@ -161,107 +243,156 @@ The package provides two environments for creating abstract argumentation framew
\attack[]{args5}{args10}
\attack[]{args10}{args9}
\attack[]{args9}{args4}
- \end{miniaf}
- \caption{An exemplary Mini-AF created with the \textsf{miniaf} environment.}
- \label{fig:example_mini}
-\end{figure}
+ \end{af}
+ \caption{An exemplary AF created with the \textsf{small} option set.}
+ \label{fig:example_small}
+ \end{subfigure}
+ \hfill
+ \begin{subfigure}{0.48\textwidth}
+ \centering
+ \begin{af}[tiny]
+ \argument{args1}{a}
+ \argument[right=of args1]{args2}{b}
+ \argument[right=of args2]{args3}{c}
+ \argument[right=of args3]{args4}{d}
+ \argument[right=of args4]{args5}{e}
+ \argument[below=of args1]{args6}{f}
+ \argument[inactive,right=of args6]{args7}{g}
+ \argument[inactive,argin,right=of args7]{args8}{h}
+ \argument[right=of args8]{args9}{i}
+ \argument[right=of args9]{args10}{j}
+ \afname[left of=args1,yshift=-0.5cm,xshift=-0.2cm]{cap}{\textbf{F:}}
-\subsection{Arguments}
- Arguments can be created with the following command
+ \selfattack{args1}
+ \dualattack[]{args1}{args6}
+ \dualattack[inactive]{args6}{args7}
+ \attack[inactive]{args8}{args7}
- \verb|\argument{id}{name}|
+ \attack[inactive]{args7}{args2}
+ \attack[]{args3}{args2}
- \noindent
- To create an argument, you must provide a unique identifier \textsf{id} and the \textsf{name} to be displayed in the picture.
- The \textsf{id} of an argument is then referred to when creating attacks as well as for the relative positioning of the other arguments.
+ \support[]{args4}{args3}
+ \support[]{args9}{args3}
- The \textsf{standard} style of an argument is defined with the following parameters, all of which can be overridden if desired.
- \begin{align*}
- \textsf{circle} &\quad \text{the shape of the argument.}\\
- \textsf{minimum~size=0.75cm} &\quad \text{the minimum size of the circle, to ensure consistent}\\
- &\quad \text{argument size.}\\
- \textsf{draw=black} &\quad \text{outline and text color of the argument.}\\
- \textsf{thick} &\quad \text{the outline of the circle is rendered in \textsf{thick} mode.}\\
- \textsf{fill=white} &\quad \text{the background color of the argument.}\\
- \textsf{font=large} &\quad \text{the font size of the argument name.}\\
- \textsf{text~centered} &\quad \text{positioning of the argument name inside the circle.}\\
- \textsf{inner~sep=0} &\quad \text{inner margins of the circle, set to \textsf{0} to optimize space.}
- \end{align*}
- \subsubsection{Relative Positioning}
- This package supports relative placement of the arguments via the \textsf{tikz}-library \textsf{positioning}.
- The relative positioning information is provided as an optional parameter via
-
- \verb|\argument[dir=of arg_id]{id}{name}|
+ \attack[]{args4}{args5}
+ \attack[]{args5}{args10}
+ \attack[]{args10}{args9}
+ \attack[]{args9}{args4}
+ \end{af}
+ \caption{An exemplary AF created with the \textsf{tiny} option set.}
+ \label{fig:example_tiny}
+ \end{subfigure}
+ \caption{Two AFs with smaller nodes, created by using the \textsf{small} and \textsf{tiny} options of the \texttt{af} environment.}
+ \label{fig:mini_afs}
+\end{figure}
+
+While the following commands are intended to be used inside the \texttt{af} environment, they can also be used inside the \textsf{tikzpicture} environment.
+
+\subsection{Arguments}
+ Arguments can be created with the following command\\
+
\noindent
- with \textsf{dir} being one of: \emph{right}, \emph{left}, \emph{below} and \emph{above} and \textsf{arg\_id} being the id of another argument.
+ \verb|\argument{|\opt{id}\verb|}{|\opt{name}\verb|}|
- Additionally, you can adjust the horizontal/vertical position of an argument via the options \textsf{xshift} and \textsf{yshift}.
- You must also specify the distance in one of the following ways
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item\opt{id}~ is the identifier of the new argument
+ \item\opt{name}~ is the displayed name of the argument
+ \item To create an argument, you must provide a unique identifier and the name to be displayed in the picture.
+ The \opt{id} of an argument is then referred to when creating attacks as well as for the relative positioning of other arguments.
- \verb|\argument[xshift=5mm]{id}{name}|
+ \end{list}
- \verb|\argument[xshift=5pt]{id}{name}|
+\subsubsection{Relative Positioning}
+ This package supports relative placement of the arguments via the \tikzname-library \textsf{positioning}.
+ The relative positioning information is provided as an optional parameter via\\
+
+ \noindent
+ \verb|\argument[|\opt{dir}\verb|=of |\opt{arg\_id}\verb|]{|\opt{id}\verb|}{|\opt{name}\verb|}|
+
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item\opt{dir}~ has to be one of: \emph{right}, \emph{left}, \emph{below} and \emph{above}
+ \item\opt{arg\_id}~ is the identifier of another argument
+ \item Additionally, you can adjust the horizontal/vertical position of an argument via the options \verb|xshift=|\opt{v} and \verb|yshift=|\opt{v}.
+ The value \opt{v} is the horizontal/vertical offset, e.\,g., \verb|5pt|, \verb|-3ex| or \verb|0.2cm|.
+ \end{list}
- \verb|\argument[xshift=5ex]{id}{name}|
\begin{example}~
\begin{verbatim}
\begin{af}
\argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \argument[right=of arg2, yshift=-10pt]{arg3}{c}
+ \argument[below=of arg1]{arg2}{b}
+ \argument[right=of arg1, yshift=-24pt,xshift=-8pt]{arg3}{c}
+ \argument[right=of arg3, xshift=-0.5cm]{arg4}{d}
+ \argument[right=of arg4, yshift=5ex]{arg4}{e}
\end{af}
\end{verbatim}
\begin{center}
\begin{af}
\argument{arg1}{a}
- \argument[right=of arg1]{arg2}{b}
- \argument[right=of arg2, yshift=-10pt]{arg3}{c}
+ \argument[below=of arg1]{arg2}{b}
+ \argument[right=of arg1, yshift=-24pt,xshift=-8pt]{arg3}{c}
+ \argument[right=of arg3, xshift=-0.5cm]{arg4}{d}
+ \argument[right=of arg4, yshift=5ex]{arg4}{e}
\end{af}
\end{center}
\end{example}
- \subsubsection{Argument Styles}
+\subsubsection{Argument Styling}
Furthermore, you can provide optional parameters to adjust the style of the argument node.
- For that you can use all \textsf{tikz}-style options and additionally the following pre-defined style parameters:
+ For that you can use all \tikzname-style options and additionally the following predefined style parameters:
\begin{align*}
- \mathsf{inactive} &\quad \text{The argument is displayed in grey and with a dotted outline.}\\
+ \mathsf{inactive} &\quad \text{The argument is displayed with grey outline and text.}\\
+ \mathsf{incomplete} &\quad \text{The argument is displayed with a dotted outline.}\\
+ \mathsf{invisible} &\quad \text{The argument node is completely transparent.}\\
\mathsf{argin} &\quad \text{The argument is displayed with green background color.}\\
\mathsf{argout} &\quad \text{The argument is displayed with red background color.}\\
- \mathsf{argundec} &\quad \text{The argument is displayed with cyan background color.}
+ \mathsf{argundec} &\quad \text{The argument is displayed with cyan background color.}\\
\end{align*}
- \begin{example}
-
- \end{example}
+ %Some relevant \tikzname style-parameters are
+ %\begin{align*}
+ %\textsf{circle} &\quad \text{the shape of the argument.}\\
+ % \textsf{minimum~size=0.75cm} &\quad \text{the minimum size of the circle, to ensure consistent}\\
+ % &\quad \text{argument size.}\\
+ % \textsf{draw=black} &\quad \text{outline and text color of the argument.}\\
+ %\textsf{thick} &\quad \text{the outline of the circle is rendered in \textsf{thick} mode.}\\
+ % \textsf{fill=white} &\quad \text{the background color of the argument.}\\
+ % \textsf{font=large} &\quad \text{the font size of the argument name.}\\
+ %\textsf{text~centered} &\quad \text{positioning of the argument name inside the circle.}\\
+ % \textsf{inner~sep=0} &\quad \text{inner margins of the circle, set to \textsf{0} to optimize space.}
+ %\end{align*}
+
\subsection{Attacks}
- Attacks between two arguments can be created with the command
-
- \verb|\attack{arg1}{arg2}|
+ Attacks between two arguments can be created with the command\\
\noindent
- where \textsf{arg1} and \textsf{arg2} are the identifiers of two previously defined arguments.
- The \textsf{standard} style for attacks is defined with the \textsf{arrows.meta} library as follows
- \begin{align*}
- \texttt{-{Stealth[scale=1.25]}}
- \end{align*}
+ \verb|\attack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}|
+
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments.
+ \end{list}
-\subsubsection{Attack Styles}
+
+\subsubsection{Attack Styling}
To customize an attack you can provide additional optional parameters:
\begin{align*}
- \mathsf{inactive} &\quad \text{The attack is displayed in grey and with a dotted line.}\\
+ \mathsf{inactive} &\quad \text{The attack is displayed in grey.}\\
+ \mathsf{incomplete} &\quad \text{The attack is displayed with a dotted line.}\\
+ \mathsf{invisible} &\quad \text{The attack is completely transparent.}\\
+ \mathsf{selfattack} &\quad \text{Use if source and target of the attack are the same node.}\\
\mathsf{bend~right} &\quad \text{The attack arrow is bent to the right.}\\
&\quad \text{Can additionally provide the angle, e.\,g., \textsf{bend~right=40}.}\\
\mathsf{bend~left} &\quad \text{The attack arrow is bent to the left. Can also provide an angle.}\\
\end{align*}
-
- Furthermore, all \textsf{tikz} style parameters can be used here as well.
+
+ Of course, all \tikzname style parameters can be used here as well.
\begin{example}~
\begin{verbatim}
@@ -290,16 +421,17 @@ The package provides two environments for creating abstract argumentation framew
\end{af}
\end{center}
\end{example}
-
- Additionally, you can create a symmetric attack between two arguments with
+ Additionally, there is a shortcut for creating a symmetric attack between two arguments with
- \verb|\dualattack{arg1}{arg2}|
+ \noindent
+ \verb|\dualattack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}|\\
\noindent
- and a self-attack for an argument with
+ and a shortcut for a self-attack for an argument with
- \verb|\selfattack{arg1}|
+ \noindent
+ \verb|\selfattack{|\opt{arg1}\verb|}|\\
\noindent
For both commands, you can use the same optional parameters as for the \verb|\attack| command.
@@ -328,15 +460,16 @@ The package provides two environments for creating abstract argumentation framew
\subsection{Supports}
- You can create a support relation between two arguments with the command
-
- \verb|\support{arg1}{arg2}|
+ You can create a support relation between two arguments with the command\\
\noindent
- where \verb|arg1| and \verb|arg2| are the identifiers of two previously defined arguments.
+ \verb|\support{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}|
+
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments.
The support arrow use the same tip as the attack arrows, but have a perpendicular mark to distinguish them from attacks.
Supports can be customized in the same way as attacks.
-
+ \end{list}
\begin{example}~
\begin{verbatim}
\begin{af}
@@ -361,15 +494,64 @@ The package provides two environments for creating abstract argumentation framew
\end{center}
\end{example}
+\subsection{Annotated Attacks}
+ Many extensions of the original abstract argumentation framework rely on attacks with an associated value.
+ This may, for instance, be probabilities in the case of probabilistic argumentation frameworks or numerical weights in the case of weighted argumentation frameworks.
+ These annotations can be added manually via \tikzname or via the following command\\
-\subsection{Further Commands}
- If you want to display an identifier for your argumentation framework in the picture, you can use the command
+ \noindent
+ \verb|\annotatedattack{|\opt{arg1}\verb|}{|\opt{arg2}\verb|}{|\opt{value}\verb|}|
+
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item where \opt{arg1} and \opt{arg2} are the identifiers of two previously defined arguments and \opt{value} is the number or string that should be annotated to the attack.
+ With this command, the annotation is placed above the attack arrow.
+ \end{list}
- \verb|\afname{id}{name}|
+ \begin{example}~
+ \begin{verbatim}
+ \begin{af}
+ \argument{arg1}{a}
+ \argument[right=of arg1]{arg2}{b}
+ \argument[right=of arg2]{arg3}{c}
+
+ \annotatedattack{arg1}{arg2}{$x$}
+ \annotatedattack[bend right]{arg2}{arg3}{$0.6$}
+ \end{af}
+ \end{verbatim}
+
+ \begin{center}
+ \begin{af}
+ \argument{arg1}{a}
+ \argument[right=of arg1]{arg2}{b}
+ \argument[right=of arg2]{arg3}{c}
+
+ \annotatedattack{arg1}{arg2}{$x$}
+ \annotatedattack[bend right]{arg2}{arg3}{$0.6$}
+ \end{af}
+ \end{center}
+ \end{example}
+
+\subsection{Further Commands}
+ If you want to display an identifier for your argumentation framework in the picture, you can use the command\\
\noindent
- where \verb|id| is an identifier for the created node and \verb|name| is the text displayed in the picture.
+ \verb|\afname{|\opt{id}\verb|}{|\opt{name}\verb|}|
+
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item where \opt{id} is an identifier for the created node and \opt{name} is the text displayed in the picture.
Additionally, positioning information can be provided via the optional parameters.
+ \end{list}
+
+ \noindent
+ To create an annotation, e.\,g., an acceptance condition or a weight, next to an argument, the following command can be used.\\
+
+ \noindent
+ \verb|\annotation{|\opt{arg\_id}\verb|}{|\opt{text}\verb|}|
+
+ \begin{list}{}{\leftmargin=\parindent\rightmargin=0pt}
+ \item where \opt{arg\_id} is the identifier of some argument and \opt{text} is the text to be displayed.
+ Additionally, positioning information, via \textsf{xshift} or \textsf{yshift}, can be provided via the optional parameters.
+ \end{list}
\begin{example}~
\begin{verbatim}
@@ -377,6 +559,7 @@ The package provides two environments for creating abstract argumentation framew
\argument{arg1}{a}
\argument[right=of arg1]{arg2}{b}
\afname[left=of arg1]{caption}{$F:$}
+ \annotation[yshift=-0.4cm,xshift=0.4cm]{arg2}{$\neg a$}
\attack{arg1}{arg2}
\end{af}
@@ -386,12 +569,31 @@ The package provides two environments for creating abstract argumentation framew
\begin{af}
\argument{arg1}{a}
\argument[right=of arg1]{arg2}{b}
- \argument[right=of arg2]{arg3}{c}
\afname[left=of arg1]{caption}{$F:$}
+ \annotation[yshift=-0.4cm,xshift=0.4cm]{arg2}{$\neg a$}
\support{arg1}{arg2}
\end{af}
\end{center}
\end{example}
+%\section{Style Definitions}
+
+\newpage
+\section{Version History}
+
+\subsection*{[v1.0 2023/11/05]}
+\begin{itemize}
+ \item First Version.
+\end{itemize}
+
+\subsection*{[v1.1 2023/12/03]}
+\begin{itemize}
+ \item Adjusted standard styles.
+ \item Added command for creating annotated attacks.
+ \item Now only provides one environment, which can be parameterised.
+ \item Changed option management to pgfkeys.
+ \item Updated and improved documentation.
+\end{itemize}
+
\end{document}
diff --git a/graphics/pgf/contrib/argumentation/argumentation.sty b/graphics/pgf/contrib/argumentation/argumentation.sty
index 80dd5f4c83..7cd678de3c 100644
--- a/graphics/pgf/contrib/argumentation/argumentation.sty
+++ b/graphics/pgf/contrib/argumentation/argumentation.sty
@@ -1,104 +1,109 @@
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{argumentation}[2023/11/05 Argumentation]
-% Author: Lars Bengel
-% E-Mail: lars.bengel@fernuni-hagen.de
-% Version: 1.0
-% License: LaTeX Project Public License 1.3c
-
-%%%%%%%%%%% Package Requirements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\RequirePackage{options} % For managing package options
+\ProvidesPackage{argumentation}[2023/12/03 Argumentation]
+% Author: Lars Bengel
+% E-Mail: lars.bengel@fernuni-hagen.de
+% Version: 1.1
+% Date: 2023/12/03
+% License: LaTeX Project Public License 1.3c
+
+%%%%%%%%%%% Package Requirements %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{pgfopts} % For managing package options
\RequirePackage{tikz} % For drawing the argumentation frameworks
\usetikzlibrary{positioning} % For relative node positioning
\usetikzlibrary{arrows.meta} % For directed edges / attack arrows
+\usetikzlibrary{arrows} % For directed edges / attack arrows
\usetikzlibrary{decorations.markings} % For creating the support edge markings
-\newcommand{\argstyle}[1]{\textbf{\emph{#1}}} % Defines the font style in which argument names are displayed
+\newcommand{\argstyle}[1]{#1} % Defines the font style in which argument names are displayed
+%%%%%%%%%% Package Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfkeys{/argumentation/argumentstyle/.is choice,
+ /argumentation/argumentstyle/standard/.code={\tikzset{argument/.style={circle,draw=black,inner sep=0,outer sep=0}}},
+ /argumentation/argumentstyle/custom/.code={},
+ /argumentation/argumentstyle=standard,
+}
-%%%%%%%%%% Package Options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\options{
- /argumentation/.new family,
- /argumentation/argumentstyle/.new choice = {standard, retro},
- /argumentation/namestyle/.new choice = {normal, italics, bold, bolditalics},
- /argumentation/attackstyle/.new choice = {standard, retro},
- /argumentation/@unknown/.new cmd 2 = \PackageWarning{argumentation}{Unknown option `#1'}
+\pgfkeys{/argumentation/attackstyle/.is choice,
+ /argumentation/attackstyle/standard/.code={\tikzset{attack/.style={-{stealth'}}}},
+ /argumentation/attackstyle/large/.code={\tikzset{attack/.style={-{Stealth[scale=1.25]}}}},
+ /argumentation/attackstyle=standard,
}
-\options@ProcessOptions{/argumentation}
-
-%%%%%%%%%% Preprocessing options %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ifcase\option{/argumentation/namestyle/@ord}\relax
-\or\renewcommand{\argstyle}[1]{\emph{#1}}
-\or\renewcommand{\argstyle}[1]{\textbf{#1}}
-\or\renewcommand{\argstyle}[1]{\textbf{\emph{#1}}}
-\fi
-
-\ifcase\option{/argumentation/argumentstyle/@ord}
-\tikzset{arg/.style={circle, minimum size=0.75cm,draw=black,thick,fill=white,font=\large, text centered, inner sep=0}}
-\or\tikzset{arg/.style={circle, minimum size=0.7cm,draw=black,thick,fill=white}}
-\fi
-
-\ifcase\option{/argumentation/attackstyle/@ord}
-\tikzset{att/.style={-{Stealth[scale=1.25]}}}
-\or\tikzset{att/.style={->}}
-\fi
-
-%%%%%%%%%% Package Content %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\tikzset{ % Basic predefined tikz-styles
- % Self-Loop style
- every loop/.style={min distance=2mm,in=0,out=60,looseness=5},
- % Color shortcuts for labelled arguments and reduced arguments
- inactive/.style={draw=black!30, text=black!40,densely dashed},
- argin/.style={fill=green},
- argout/.style={fill=red},
- argundec/.style={fill=cyan},
- % Style for displaying AF name in Figure
- caption/.style={draw=none},
- % Style for support mark
- support mark/.style = {postaction = {decorate,decoration={markings,mark=at position #1 with {\draw[-] (0,-0.1) -- (0.1,0.1);}}}},
+
+\pgfkeys{/argumentation/supportstyle/.is choice,
+ /argumentation/supportstyle/standard/.code={\tikzset{support/.style = {attack,postaction = {decorate,decoration={markings,mark=at position 0.36 with {\draw[-] (0,-0.1) -- (0.1,0.1);}}}}}},
+ /argumentation/supportstyle/dashed/.code={\tikzset{support/.style = {attack,densely dashed}}},
+ /argumentation/supportstyle/double/.code={\tikzstyle{support}=[-{Classical TikZ Rightarrow},double]},
+ /argumentation/supportstyle=standard,
}
-\newcommand{\setargumentstyle}[1]{\tikzset{arg/.style={#1}}}
-\newcommand{\setattackstyle}[1]{\tikzset{att/.style={#1}}}
-\newcommand{\setloopstyle}[1]{\tikzset{every loop/.style={#1}}}
+\pgfkeys{/argumentation/namestyle/.is choice,
+ /argumentation/namestyle/normal/.code={\relax},
+ /argumentation/namestyle/italics/.code={\renewcommand{\argstyle}[1]{\emph{#1}}},
+ /argumentation/namestyle/bold/.code={\renewcommand{\argstyle}[1]{\textbf{#1}}},
+ /argumentation/namestyle/bolditalics/.code={\renewcommand{\argstyle}[1]{\emph{\textbf{#1}}}},
+ /argumentation/namestyle/monospace/.code={\renewcommand{\argstyle}[1]{\texttt{#1}}},
+ /argumentation/namestyle=normal,
+}
-\newcommand{\adjustargumentstyle}[1]{\tikzset{arg/.append style={#1}}}
-\newcommand{\adjustattackstyle}[1]{\tikzset{att/.append style={#1}}}
+\ProcessPgfPackageOptions{/argumentation}
+%%%%%%%%%% Package Content %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\tikzset{ % global predefined tikz-styles
+ argument size/.style={minimum size=0.7cm}, % Standard size of argument nodes
+ selfattack/.style={loop,min distance=2mm,in=0,out=60,looseness=5}, % Standard style for self-attacks
+ inactive/.style={draw=black!30, text=black!40}, % Make a node or edge inactive, i.e., greyed out
+ incomplete/.style={densely dashed}, % Style for displaying incomplete nodes or attacks
+ argin/.style={fill=green}, % Color an argument that is labelled in
+ argout/.style={fill=red}, % Color an argument that is labelled out
+ argundec/.style={fill=cyan}, % Color an argument that is labelled undecided
+ caption/.style={draw=none}, % Style for displaying AF name in Figure
+ invisible/.style={draw=none,text=black!0}, % Make a node or edge invisible
+ annotation/.style={above,font=\small},
+}
-\newcommand{\resetargumentstyle}{\setargumentstyle{circle, minimum size=0.75cm,draw=black,thick,fill=white,font=\large, text centered, inner sep=0}}
-\newcommand{\resetattackstyle}{\setattackstyle{-{Stealth[scale=1.25]}}}
-\newcommand{\resetloopstyle}{\setloopstyle{min distance=2mm,in=0,out=60,looseness=5}}
+% Commands for setting custom tikz-style parameters (experimental)
+\newcommand{\setargumentstyle}[1]{\tikzset{argument/.style={#1}}}
+\newcommand{\setattackstyle}[1]{\tikzset{attack/.style={#1}}}
+\newcommand{\setsupportstyle}[1]{\tikzset{support/.style={#1}}}
+%\newcommand{\setloopstyle}[1]{\tikzset{selfattack/.style={#1}}}
+%\newcommand{\adjustargumentstyle}[1]{\tikzset{argument/.append style={#1}}}
+%\newcommand{\adjustattackstyle}[1]{\tikzset{attack/.append style={#1}}}
-\newenvironment{af}{
- \tikzpicture
-}{%
- \endtikzpicture
+
+%%%%%%%%%%%%%%% Environment %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\pgfkeys{
+ /tikz/small/.style = {node distance=0.55cm,argument size/.style={minimum size=0.55cm},caption/.append style={font=\small}},
+ /tikz/tiny/.style = {node distance=0.35cm,argument size/.style={font=\small, minimum size=0.4cm},caption/.append style={font=\small}},
}
-\newenvironment{miniaf}[1][]{
- \tikzset{arg/.append style={font=\small, minimum size=0.5cm},
- att/.append style={-{Stealth[scale=0.9]}},
- }
- \tikzpicture[node distance=0.5cm,#1]
+\newenvironment{af}[1][]{
+ \tikzpicture[#1]
}{%
\endtikzpicture
}
+%%%%%%%%%%%%%%%% Commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
% Creates a node displaying the name of the AF
\newcommand{\afname}[3][]{\node[caption,#1](#2){#3};}
+\newcommand{\annotation}[3][]{\node[annotation,above of=#2,#1](an_#2){#3};}
+
% Creates an argument node
-\newcommand{\argument}[3][]{\node[arg,#1](#2){\argstyle{#3}};}
+\newcommand{\argument}[3][]{\node[argument,argument size,#1](#2){\argstyle{#3}};}
% Creates an attack edge
-\newcommand{\attack}[3][]{\path(#2) edge [att,#1] (#3);}
+\newcommand{\attack}[3][]{\path(#2) edge [attack,#1] (#3);}
% Creates a self-attack
-\newcommand{\selfattack}[2][]{\path(#2) edge [att,loop,#1] (#2);}
+\newcommand{\selfattack}[2][]{\path(#2) edge [attack,selfattack,#1] (#2);}
% Creates two symmetric attack edges between two arguments
-\newcommand{\dualattack}[3][]{\path(#2) edge [att, bend right,#1] (#3);\path(#3) edge [att, bend right,#1] (#2);}
+\newcommand{\dualattack}[3][]{\path(#2) edge [attack, bend right,#1] (#3);\path(#3) edge [attack, bend right,#1] (#2);}
+
+% Creates a weighted attack
+\newcommand{\annotatedattack}[4][]{\path(#2) edge [attack,#1] node[annotation](p_#2_#3){#4} (#3);}
% Creates a support edge between two arguments
-\newcommand{\support}[3][]{\path(#2) edge [att,support mark=0.3,#1] (#3);}
+\newcommand{\support}[3][]{\path(#2) edge [support=0.35,#1] (#3);}
diff --git a/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.pdf b/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.pdf
index 4ec7478db8..cf1cabf2cc 100644
--- a/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.pdf
+++ b/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.tex b/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.tex
index 3bbae9eae4..eb6f8d5eaa 100644
--- a/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.tex
+++ b/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-en.tex
@@ -23,7 +23,22 @@
\cfoot{\sffamily\small - \thepage{} -}
\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}}
-\usepackage{hvlogos}
+\usepackage{hologo}
+\usepackage{xspace}
+\newcommand\tikzlogo{Ti\textit{k}Z}
+\newcommand\TeXLive{\hologo{TeX}Live\xspace}
+\let\TikZ\tikzlogo
+\newcommand\TableauDocumentation{%
+ \begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}}
+ {\huge \LaTeX} & & & & &\\
+ & {\huge \hologo{pdfLaTeX}} & & & & \\
+ & & {\huge \hologo{LuaLaTeX}} & & & \\
+ & & & {\huge \TikZ} & & \\
+ & & & & {\huge \TeXLive} & \\
+ & & & & & {\huge \hologo{MiKTeX}} \\
+ \end{tblr}
+}
+
\usepackage{hyperref}
\urlstyle{same}
\hypersetup{pdfborder=0 0 0}
@@ -31,8 +46,8 @@
\setlength{\parindent}{0pt}
\definecolor{LightGray}{gray}{0.9}
-\def\TPversion{0.1.3}
-\def\TPdate{09/01/2023}
+\def\TPversion{0.1.4}
+\def\TPdate{03/12/2023}
\usepackage[most]{tcolorbox}
\tcbuselibrary{minted}
@@ -104,7 +119,7 @@
{$\blacktriangleright$~~Ideas from \url{https://tex.stackexchange.com/questions/194780/tikz-drawing-a-rectangle-with-spikes-on-borders}}
-\vspace{0.5cm}
+\vspace{0.15cm}
\begin{center}
\ScrabbleBoard[Scale=0.5]
@@ -133,14 +148,7 @@
\medskip
-\begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}}
-{\huge \LaTeX} & & & & &\\
-& {\huge \pdfLaTeX} & & & & \\
-& & {\huge \LuaLaTeX} & & & \\
-& & & {\huge \TikZ} & & \\
-& & & & {\huge \TeXLive} & \\
-& & & & & {\huge \MiKTeX} \\
-\end{tblr}
+\TableauDocumentation
\medskip
@@ -295,14 +303,61 @@ For putting word on the board :
\end{EnvScrabble}~~~
\begin{EnvScrabble}<ES>[Scale=0.55]
\ScrabblePutWord{LaTeX}{1,14} \ScrabblePutWord[V]{Madrid}{2,15}
- \draw (7,15) node[font=\LARGE\sffamily] {Spanish vesion} ;
+ \draw (7,15) node[font=\LARGE\sffamily] {Spanish version} ;
\end{EnvScrabble}
\end{PresentationCode}
\newpage
+\subsection{\textit{Inline} word}
+
+The idea is to propose a command to insert a word in \textit{online} mode, with automatic adjustment of size and position.
+
+\begin{PresentationCode}{listing only}
+%command to put inline word
+\ScrabbleWord[keys]{word}
+\end{PresentationCode}
+
+The first argument, \textit{optional}, between \texttt{[...]} allows you to configure the \Cle{keys}:
+
+\begin{itemize}
+ \item \Cle{Colback} for the color of the pieces ; \hfill~default: \Cle{yellow!40}
+ \item \Cle{Font} for the font ; \hfill~default: \Cle{\textbackslash bfseries\textbackslash sffamily}
+ \item \Cle{Colfonte} for the color of the characters ; \hfill~default: \Cle{black}
+ \item \Cle{Lang} to choose the language (for the number of points) ; \hfill~default: \Cle{EN}
+ \item \Cle{Offset} to specify horizontal spacing between pieces ; \hfill~default: \Cle{0.1pt}
+ \item \Cle{Scale} to specify a base scale for texts ; \hfill~default: \Cle{0.6}
+ \item \Cle{Score} which is a boolean to display the score of each piece. \hfill~default: \Cle{true}
+\end{itemize}
+
+\textbf{Note 1 :} the code is responsible for positioning the pieces for \textit{satisfactory} alignment and scaling based on the active font.
+
+\smallskip
+
+\textbf{Note 2 :} the \textit{blank} (or \textit{wildcard}) is obtained by the character \texttt{*}.
+
+\begin{PresentationCode}{}
+Online Scrabble word test positioning \ScrabbleWord{TE*ST} to see !
+\end{PresentationCode}
+
+\begin{PresentationCode}{}
+{\Huge\sffamily Test positioning \ScrabbleWord[Colback=teal!5,Colfonte=orange]{PYTHAG*RE} to see !}
+\end{PresentationCode}
+
+\begin{PresentationCode}{}
+\scalebox{3}[3]{Positioning \ScrabbleWord[Lang=DE,Font=\ttfamily,Scale=0.75]{PYTHAG*RE} to see !}
+\end{PresentationCode}
+
+\begin{PresentationCode}{}
+{\LARGE Test positioning \ScrabbleWord[Score=false,Offset=1pt,Colback=orange!50]{PSTRICKS} to see !}
+\end{PresentationCode}
+
+\newpage
+
\part*{History}
+\verb|v0.1.4|~:~~~~Command to insert \textit{inline} words
+
\verb|v0.1.3|~:~~~~Words in uppercase or lowercase, adjusted codes for language (ISO 639-1)
\verb|v0.1.2|~:~~~~Key \textsf{<ScaleLabels>} to modify scale of the cell's names
diff --git a/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.pdf b/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.pdf
index 04bb85d6fc..659b47854a 100644
--- a/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.pdf
+++ b/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.tex b/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.tex
index 05d0ae1f4d..560ad35342 100644
--- a/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.tex
+++ b/graphics/pgf/contrib/scrabble/doc/Scrabble-doc-fr.tex
@@ -23,7 +23,24 @@
\cfoot{\sffamily\small - \thepage{} -}
\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}}
-\usepackage{hvlogos}
+%\usepackage{hvlogos}
+\usepackage{hologo}
+\providecommand\tikzlogo{Ti\textit{k}Z}
+\providecommand\TeXLive{\TeX{}Live\xspace}
+\providecommand\PSTricks{\textsf{PSTricks}\xspace}
+\let\pstricks\PSTricks
+\let\TikZ\tikzlogo
+\newcommand\TableauDocumentation{%
+ \begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}}
+ {\huge \LaTeX} & & & & &\\
+ & {\huge \hologo{pdfLaTeX}} & & & & \\
+ & & {\huge \hologo{LuaLaTeX}} & & & \\
+ & & & {\huge \TikZ} & & \\
+ & & & & {\huge \TeXLive} & \\
+ & & & & & {\huge \hologo{MiKTeX}} \\
+ \end{tblr}
+}
+
\usepackage{hyperref}
\urlstyle{same}
\hypersetup{pdfborder=0 0 0}
@@ -31,8 +48,8 @@
\setlength{\parindent}{0pt}
\definecolor{LightGray}{gray}{0.9}
-\def\TPversion{0.1.3}
-\def\TPdate{9 Janvier 2023}
+\def\TPversion{0.1.4}
+\def\TPdate{3 décembre 2023}
\usepackage[most]{tcolorbox}
\tcbuselibrary{minted}
@@ -102,14 +119,18 @@
\smallskip
+{$\blacktriangleright$~~Possibilité d'insérer un mot en mode \textit{en ligne}.}
+
+\smallskip
+
{$\blacktriangleright$~~Idée(s) venant de \url{https://tex.stackexchange.com/questions/194780/tikz-drawing-a-rectangle-with-spikes-on-borders}}
-\vspace{0.5cm}
+\vspace{0.15cm}
\begin{center}
- \PlateauScrabble[Echelle=0.4]
+ \PlateauScrabble[Echelle=0.5]
~~~~
- \begin{EnvScrabbleFR}[Echelle=0.4]
+ \begin{EnvScrabbleFR}[Echelle=0.5]
\ScrabblePlaceMot{TIKZ}{1,13}
\ScrabblePlaceMot[V]{pstricks}{1,15}
\ScrabblePlaceMot[V]{KaTeX}{3,13}
@@ -135,14 +156,7 @@
\medskip
-\begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\sffamily}}
-{\huge \LaTeX} & & & & &\\
-& {\huge \pdfLaTeX} & & & & \\
-& & {\huge \LuaLaTeX} & & & \\
-& & & {\huge \TikZ} & & \\
-& & & & {\huge \TeXLive} & \\
-& & & & & {\huge \MiKTeX} \\
-\end{tblr}
+\TableauDocumentation
\medskip
@@ -258,8 +272,8 @@ Pour le placement des mots :
\begin{itemize}
\item le premier argument, \textit{optionnel}, entre \texttt{[...]} est l'orientation du mot, à choisir entre \Cle{H} (par défaut) et \Cle{V} (en fait toute autre lettre que \Cle{H} !) ;
- \item le deuxième argument, \textit{mandataire}, entre \texttt{\{...\}}, est le mot à placer, en majuscules ou minuscules ;
- \item le dernier argument, \textit{mandataire}, entre \texttt{\{...\}}, correspond aux coordonnées de la case sur laquelle sera placée le début du mot (la case (1;\,1) étant la case au bord Bas/Gauche).
+ \item le deuxième argument, \textit{obligatoire}, entre \texttt{\{...\}}, est le mot à placer, en majuscules ou minuscules ;
+ \item le dernier argument, \textit{obligatoire}, entre \texttt{\{...\}}, correspond aux coordonnées de la case sur laquelle sera placée le début du mot (la case (1;\,1) étant la case au bord Bas/Gauche).
\end{itemize}
\textbf{Remarque 1 :} la langue choisie permettra également d'avoir les jetons avec le \textit{bon} nombre de points !
@@ -304,6 +318,51 @@ Pour le placement des mots :
\newpage
+\subsection{Mot \textit{en ligne}}
+
+Il s'agit ici de proposer une commande pour insérer un mot en mode \textit{en ligne}, avec ajustement automatique de la taille et de la position.
+
+\begin{PresentationCode}{listing only}
+%commande pour placer un mot en ligne
+\MotScrabble[clés]{mot}
+\end{PresentationCode}
+
+Le premier argument, \textit{optionnel}, entre \texttt{[...]} permet de paramétrer les \Cle{clés} :
+
+\begin{itemize}
+ \item \Cle{CouleurFond} pour la couleur des cases ; \hfill~défaut : \Cle{yellow!40}
+ \item \Cle{Police} pour la police des caractères ; \hfill~défaut : \Cle{\textbackslash bfseries\textbackslash sffamily}
+ \item \Cle{CouleurPolice} pour la couleur des caractères ; \hfill~défaut : \Cle{black}
+ \item \Cle{Langue} pour choisir la langue (pour les nombres de points) ; \hfill~défaut : \Cle{FR}
+ \item \Cle{Offset} pour spécifier un espacement horizontal entre les jetons ; \hfill~défaut : \Cle{0.1pt}
+ \item \Cle{Echelle} pour spécifier une échelle de base pour les textes ; \hfill~défaut : \Cle{0.6}
+ \item \Cle{Score} qui est un booléen pour afficher le score de chaque jeton.\hfill~défaut : \Cle{true}
+\end{itemize}
+
+\textbf{Remarque 1 :} le code se charge de positionner le jeton pour un alignement et une mise à l'échelle \textit{satisfaisants} en fonction de la police active.
+
+\smallskip
+
+\textbf{Remarque 2 :} le \textit{blanc} (ou \textit{joker}) est obtenu par le caractère \texttt{*}.
+
+\begin{PresentationCode}{}
+Essai de mot de Scrabble en ligne \MotScrabble{TE*ST} pour voir !
+\end{PresentationCode}
+
+\begin{PresentationCode}{}
+{\Huge\sffamily En ligne \MotScrabble[CouleurFond=teal!5,CouleurPolice=orange]{PYTHAG*RE} pour voir !}
+\end{PresentationCode}
+
+\begin{PresentationCode}{}
+\scalebox{3}[3]{En ligne \MotScrabble[Langue=EN,Police=\ttfamily,Echelle=0.75]{PYTHAG*RE} pour voir !}
+\end{PresentationCode}
+
+\begin{PresentationCode}{}
+{\LARGE En ligne \MotScrabble[Score=false,Offset=1pt,CouleurFond=orange!50]{PSTRICKS} pour voir !}
+\end{PresentationCode}
+
+\newpage
+
\subsection{Commandes anglaises}
Le package ayant potentiellement une portée \textit{internationale}, les commandes existent également en version \textit{anglaise}. Dans ce cas, les \Cle{clés} sont également à donner en anglais.
@@ -327,6 +386,8 @@ Le package ayant potentiellement une portée \textit{internationale}, les comman
\part*{Historique}
+\verb|v0.1.4|~:~~~~Ajout d'une commande pour placer en \textit{mot} en mode \og en ligne \fg
+
\verb|v0.1.3|~:~~~~Meilleure gestion de la saisie des mots (sans virgule, majuscule ou minuscule)
\verb|v0.1.2|~:~~~~Clé \textsf{<EchelleLabels>} pour modifier l'échelle des noms des cases
diff --git a/graphics/pgf/contrib/scrabble/tex/Scrabble.sty b/graphics/pgf/contrib/scrabble/tex/Scrabble.sty
index 6c87e7e370..0d610ea117 100644
--- a/graphics/pgf/contrib/scrabble/tex/Scrabble.sty
+++ b/graphics/pgf/contrib/scrabble/tex/Scrabble.sty
@@ -4,7 +4,8 @@
% Inspiration : Mark Wibrow in https://tex.stackexchange.com/questions/194780/tikz-drawing-a-rectangle-with-spikes-on-borders
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{Scrabble}[2023/01/09 v0.1.3 Scrabble]
+\ProvidesPackage{Scrabble}[2023/12/03 0.1.4 Scrabble]
+% 0.1.4 Ajout d'un mode inline
% 0.1.3 Refonte des commandes fr/en + gestion mot
% 0.1.2 Clé <EchelleLabels> pour les labels des cases
% 0.1.1 Commandes en/fr
@@ -17,6 +18,7 @@
\RequirePackage{xparse}
\RequirePackage{simplekv}
\RequirePackage{listofitems}
+\RequirePackage{calc}
%librairies tikz
\usetikzlibrary{calc,shapes.geometric}
@@ -312,4 +314,104 @@
\end{tikzpicture}%
}
+%place mot inline
+\newlength{\tmp@scrabword@total@height}
+\newlength{\tmp@scrabword@depth}
+
+\defKV[SCRABBLEWORDINLINEFR]{%
+ CouleurFond=\def\ScrWordInlColFond{#1},%
+ Police=\def\ScrWordInlFonte{#1},%
+ CouleurPolice=\def\ScrWordInlColFonte{#1},%
+ Langue=\def\ScrWordInlLang{#1},%
+ Offset=\def\ScrWordInlOffset{#1},%
+ Echelle=\def\ScrWordInlScale{#1}
+}
+
+\setKVdefault[SCRABBLEWORDINLINEFR]{%
+ CouleurFond=yellow!40,%
+ Police=\bfseries\sffamily,%
+ CouleurPolice=black,%
+ Langue=FR,%
+ Offset=0.1pt,%
+ Score=true,%
+ Echelle=0.6
+}
+
+\NewDocumentCommand\MotScrabble{ O{} m }{%
+ \useKVdefault[SCRABBLEWORDINLINEFR]%
+ \setKV[SCRABBLEWORDINLINEFR]{#1}%
+ \settototalheight{\tmp@scrabword@total@height}{\hbox{ABCDEFGHIJKLMNOPQQRSTUVWXYZabcdefghijklmnopqqrstuvwxyz}}%
+ \settodepth{\tmp@scrabword@depth}{\hbox{q}}%
+ \StrLen{#2}[\lgmot]%
+ \raisebox{-\tmp@scrabword@depth+0.025\tmp@scrabword@total@height}{%
+ \foreach \l in {1,2,...,\lgmot}%
+ {%
+ \StrChar{#2}{\l}[\ll]%
+ \IfStrEq{\ll}{*}%
+ {%
+ {\tikz \filldraw[\ScrWordInlColFond,rounded corners={0.15\tmp@scrabword@total@height}] (0,0) rectangle++ ({0.9\tmp@scrabword@total@height},{0.9\tmp@scrabword@total@height}) ;}%
+ }%
+ {%
+ {\tikz {%
+ \filldraw[\ScrWordInlColFond,rounded corners={0.15\tmp@scrabword@total@height}] (0,0) rectangle++ ({0.9\tmp@scrabword@total@height},{0.9\tmp@scrabword@total@height}) node[inner sep=0pt,midway,font=\ScrWordInlFonte,scale=\ScrWordInlScale,text=\ScrWordInlColFonte] {\expandafter\MakeUppercase\expandafter{\ll}};%
+ \ifboolKV[SCRABBLEWORDINLINEFR]{Score}%
+ {\draw ({0.9\tmp@scrabword@total@height},0) node[inner sep=0pt,above left={0.075\tmp@scrabword@total@height},font=\ScrWordInlFonte,scale={0.25*\ScrWordInlScale},text=\ScrWordInlColFonte] { \scrabblescorelettre[\ScrWordInlLang]{\ll} } ;}
+ {}%
+ }%
+ }%
+ }%
+ \ifnum \l<\lgmot\hspace*{\ScrWordInlOffset}\fi%
+ }%
+ }%
+}
+
+\defKV[SCRABBLEWORDINLINEEN]{%
+ Colback=\def\ScrWordInlColFond{#1},%
+ Font=\def\ScrWordInlFonte{#1},%
+ Colfonte=\def\ScrWordInlColFonte{#1},%
+ Lang=\def\ScrWordInlLang{#1},%
+ Offset=\def\ScrWordInlOffset{#1},%
+ Scale=\def\ScrWordInlScale{#1}
+}
+
+\setKVdefault[SCRABBLEWORDINLINEEN]{%
+ Colback=yellow!40,%
+ Font=\bfseries\sffamily,%
+ Colfonte=black,%
+ Lang=EN,%
+ Offset=0.1pt,%
+ Score=true,%
+ Scale=0.6
+}
+
+\NewDocumentCommand\ScrabbleWord{ O{} m }{%
+ \useKVdefault[SCRABBLEWORDINLINEEN]%
+ \setKV[SCRABBLEWORDINLINEEN]{#1}%
+ \settototalheight{\tmp@scrabword@total@height}{\hbox{ABCDEFGHIJKLMNOPQQRSTUVWXYZabcdefghijklmnopqqrstuvwxyz}}%
+ \settodepth{\tmp@scrabword@depth}{\hbox{q}}%
+ \StrLen{#2}[\lgmot]%
+ \raisebox{-\tmp@scrabword@depth+0.025\tmp@scrabword@total@height}{%
+ \foreach \l in {1,2,...,\lgmot}%
+ {%
+ \StrChar{#2}{\l}[\ll]%
+ \IfStrEq{\ll}{*}%
+ {%
+ {\tikz \filldraw[\ScrWordInlColFond,rounded corners={0.15\tmp@scrabword@total@height}] (0,0) rectangle++ ({0.9\tmp@scrabword@total@height},{0.9\tmp@scrabword@total@height}) ;}%
+ }%
+ {%
+ {\tikz {%
+ \filldraw[\ScrWordInlColFond,rounded corners={0.15\tmp@scrabword@total@height}] (0,0) rectangle++ ({0.9\tmp@scrabword@total@height},{0.9\tmp@scrabword@total@height}) node[inner sep=0pt,midway,font=\ScrWordInlFonte,scale=\ScrWordInlScale,text=\ScrWordInlColFonte] {\expandafter\MakeUppercase\expandafter{\ll}};%
+ \ifboolKV[SCRABBLEWORDINLINEEN]{Score}%
+ {\draw ({0.9\tmp@scrabword@total@height},0) node[inner sep=0pt,above left={0.075\tmp@scrabword@total@height},font=\ScrWordInlFonte,scale={0.25*\ScrWordInlScale},text=\ScrWordInlColFonte] { \scrabblescorelettre[\ScrWordInlLang]{\ll} } ;}
+ {}%
+ }%
+ }%
+ }%
+ \ifnum \l<\lgmot\hspace*{\ScrWordInlOffset}\fi%
+ }%
+ }%
+}
+
+
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/README.md b/macros/latex/contrib/tkz/tkz-elements/README.md
index 96f3746c6e..75744500d4 100644
--- a/macros/latex/contrib/tkz/tkz-elements/README.md
+++ b/macros/latex/contrib/tkz/tkz-elements/README.md
@@ -1,10 +1,10 @@
# tkz-elements — for euclidean geometry
-Release 1.20b 2023/11/10
+Release 1.40c 2023/12/03
## Description
-`tkz-elements` is the first version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`.
+`tkz-elements v.1.40c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`.
The main possibility of programmation proposed is oriented "object programming" with object classes like point, line, triangle, circle and ellipse. For the moment, once the calculations are done, it is `tkz-euclide` or `TikZ` which allows the drawings.
@@ -18,12 +18,12 @@ conditions of the [LaTeX Project Public License](https://www.latex-project.org/l
The package compiles with utf8 and lualatex. You need actually to load:
-- [tikz](https://ctan.org/pkg/tikz)
- [tkz-euclide](https://ctan.org/pkg/tkz-euclide)
+- or [tikz](https://ctan.org/pkg/tikz)
## Installation
-The package `tkz-elements` is (will be) present in TeXLive and MiKTeX, use the package
+The package `tkz-elements` is present in TeXLive and MiKTeX, use the package
manager to install.
You can experiment with the `tkz-elements` package by placing all of the
@@ -39,12 +39,13 @@ To use the package `tkz-elements`, place the following lines in the preamble of
your LaTeX document:
```
-\usepackage{tkz-elements}
+\usepackage{tkz-euclide,tkz-elements}
\begin{document}
\begin{tkzelements}
your code
\end{tkzelements}
\begin{tikzpicture}
+\tkzGetNodes
your code
\end{tikzpicture}
```
@@ -52,20 +53,31 @@ your LaTeX document:
If you use the `xcolor` package, load that package before `tkz-euclide` to avoid
package conflicts.
-## Documentation
-
-Documentation for `tkz-euclide` is available on `CTAN`.
-
## Examples
-All examples given in documentation will be stored on my site : [http://altermundus.fr](http://altermundus.fr) as standalone
-files, ready for compilation.
-
-Other examples, in French, are on my site.
-
+Some examples will be stored on my site : [http://altermundus.fr](http://altermundus.fr).
## History
-
+ - Version 1.40c Restructuring objects
+
+ New version for all transformations. Now, they accept all objects as parameters.
+
+ Symmetry_axial has changed its name to reflection.
+
+ Added scale to north south etc.. (point object).
+
+ Change the "point" method of the objects circle and ellipse. now the parameter is un real t (between 0 and 1) and not an angle
+
+ Added the method `check_equilateral` to know if a triangle is equilateral.
+
+
+ Added option "indirect" to the method equilateral for a line object.
+
+ Correction of the documentation. (Added sections).
+
+
+
+
- Version 1.20 Memory management: tables are emptied when the tkzelements environment is opened.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
index 7c8c94aec4..6eb97c239b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex
@@ -1,31 +1,32 @@
\newpage
-\section{Class circle} % (fold)
+\section{Class \Iclass{circle}} % (fold)
\label{sec:class_circle}
-\subsection{Attributs of a circle} % (fold)
-\label{sub:attributs_of_a_circle}
-This class is also defined by two points, on the one hand the center and on the other hand a point through which the circle passes.
+\subsection{Attributes of a circle} % (fold)
+\label{sub:attributes_of_a_circle}
+This class is also defined by two points: on the one hand, the center and on the other hand, a point through which the circle passes.
+
+\begin{mybox}
+ Creation |C.OA = circle: new (z.O,z.A) |
+\end{mybox}
\bgroup
\catcode`_=12
-
\small
-\begin{center}
-%\caption{Attributes about point circle.}
-\begin{tabular}{ll}
+\captionof{table}{Circle attributes.}
+\begin{tabular}{lll}
\toprule
-\textbf{Attributes} & \textbf{Application}\\
-\Iattr{circle}{center} & |z.A = C.AB.center|\\
-\Iattr{circle}{through} & |z.B = C.AB.through|\\
-\Iattr{circle}{type} & |C.AB.type| \tkzar |C.OA.type = circle|\\
-\Iattr{circle}{radius} & |C.AB.radius| \tkzar |r = C.OA.radius | $r$ real number\\
-\Iattr{circle}{north} & |C.AB.north| \tkzar |z.N = C.OA.north|\\
-\Iattr{circle}{south} & |C.AB.south| \tkzar |z.S = C.OA.south| \\
-\Iattr{circle}{east} & |C.AB.east| \tkzar |z.E = C.OA.east| \\
-\Iattr{circle}{west} & |C.AB.west| \tkzar |z.W = C.OA.west| \\
+\textbf{Attributes} & \textbf{Application} &\\
+\Iattr{circle}{center} & |z.A = C.AB.center| &\\
+\Iattr{circle}{through} & |z.B = C.AB.through| &\\
+\Iattr{circle}{type} & |C.AB.type| &\tkzar |C.OA.type = 'circle'|\\
+\Iattr{circle}{radius} & |C.AB.radius| &\tkzar |r = C.OA.radius | $r$ real number\\
+\Iattr{circle}{north} & |C.AB.north| &\tkzar |z.N = C.OA.north|\\
+\Iattr{circle}{south} & |C.AB.south| & \tkzar |z.S = C.OA.south| \\
+\Iattr{circle}{east} & |C.AB.east| &\tkzar |z.E = C.OA.east| \\
+\Iattr{circle}{west} & |C.AB.west| &\tkzar |z.W = C.OA.west| \\
\bottomrule %
\end{tabular}
-\end{center}
\egroup
\subsubsection{Example: circle attributes} % (fold)
@@ -76,70 +77,94 @@ Three attributes are used (south, west, radius).
\end{tikzpicture}
\hspace*{\fill}
\end{minipage}
-
-% \caption{Class Circle}
% subsubsection example_circle_attributes (end)
+% subsection attributes_of_a_circle (end)
-% subsection attributs_of_a_circle (end)
-
+\newpage
\subsection{Methods of the class circle} % (fold)
\label{sub:methods_of_the_class_circle}
\bgroup
\catcode`_=12
\small
-\begin{center}
-\begin{tabular}{ll}
+\captionof{table}{Circle methods.}
+\begin{tabular}{lll}
\toprule
-\textbf{Methods} & \textbf{Comments} \\
+\textbf{Methods} & \textbf{Comments} & \\
\midrule \\
-\Imeth{circle}{new(O,A)} & |C.OA = circle : new (z.O,z.A)| \tkzar circle center $O$ through $A$\\
-\Imeth{circle}{radius(O,r)} & |C.OA = circle : radius (z.O,2)| \tkzar circle center $O$ radius =2 cm\\
+\Imeth{circle}{new(O,A)} & |C.OA = circle : new (z.O,z.A)| & circle center $O$ through $A$\\
+\Imeth{circle}{radius(O,r)} & |C.OA = circle : radius (z.O,2)| & circle center $O$ radius =2 cm\\
\midrule
- \textbf{Points} &\\
+ \textbf{Points} &&\\
\midrule
-\Imeth{circle}{antipode (pt)} & |z.C = C.OA: antipode (z.B)| \tkzar $[BC]$ is a dimater \\
-\Imeth{circle}{inversion (pt)} & |z.Bp = C.AC:inversion (z.B)|\\
-\Imeth{circle}{set\_inversion (list of pts)} & |z.Bp,z.Ep,z.Cp = C.AC: set_inversion ( z.B, z.E, z.C )|\\
-\Imeth{circle}{midarc (z1,z2)} & |z.D = C.AB: midarc (z.B,z.C)| $D$ is the midarc of $\widearc{AB}$\\
-\Imeth{circle}{point (phi)} & |z.E = C.AB: point (-math.pi/3)|\\
-\Imeth{circle}{random\_pt(lower, upper)} & \\
-\Imeth{circle}{internal\_similitude (C)} & |z.I = C.1 : internal_similitude (C.2)| \\
-\Imeth{circle}{external\_similitude (C)} & |z.J = C.1 : external_similitude (C.2)| \\
+\Imeth{circle}{antipode (pt)} & |z.C = C.OA: antipode (z.B)| & $[BC]$ is a diameter \\
+\Imeth{circle}{inversion (pt)} & |z.Bp = C.AC: inversion (z.B)|&\\
+\Imeth{circle}{midarc (z1,z2)} & |z.D = C.AB: midarc (z.B,z.C)|& $D$ is the midarc of $\widearc{BC}$\\
+\Imeth{circle}{point (t)} & |z.E = C.AB: point (0.25)|& |t| between 0 and 1\\
+\Imeth{circle}{random\_pt(lower, upper)} & &\\
+\Imeth{circle}{internal\_similitude (C)} & |z.I = C.one : internal_similitude (C.two)| &\\
+\Imeth{circle}{external\_similitude (C)} & |z.J = C.one : external_similitude (C.two)| & \\
\midrule
- \textbf{Lines} &\\
+ \textbf{Lines} & & \\
\midrule
-\Imeth{circle}{radical\_axis (C)} & \\
-\Imeth{circle}{tangent\_at (pt)} & |z.P = C.OA: tangent_at (z.M)| $((PM) \perp (OM))$\\
-\Imeth{circle}{tangent\_from (pt)}& |z.M,z.N = C.OA: tangent_from (z.P)| \\
-\Imeth{circle}{inversion (line)} & |L or C = C.AC:inversion (L.EF)|\\
+\Imeth{circle}{radical\_axis (C)} & & \\
+\Imeth{circle}{tangent\_at (pt)} & |z.P = C.OA: tangent_at (z.M)| & $((PM) \perp (OM))$\\
+\Imeth{circle}{tangent\_from (pt)}& |z.M,z.N = C.OA: tangent_from (z.P)| &\\
+\Imeth{circle}{inversion (line)} & |L or C = C.AC: inversion (L.EF)|&\\
\midrule
- \textbf{Circles} &\\
+ \textbf{Circles}& &\\
\midrule
-\Imeth{circle}{orthogonal\_from (pt)} & |C= C.OA: orthogonal_from (z.P)| \\
+\Imeth{circle}{orthogonal\_from (pt)} & |C = C.OA: orthogonal_from (z.P)| & \\
\Imeth{circle}{orthogonal\_through (pta,ptb)} & |C = C.OA: orthogonal_through (z.z1,z.z2)|\\
-\Imeth{circle}{inversion (circle)} & |L or C = C.AC:inversion (C.EF)|\\
+\Imeth{circle}{inversion (circle)} & |L or C = C.AC: inversion (C.EF)|&\\
\midrule
- \textbf{Miscellaneous} &\\
+ \textbf{Miscellaneous} &&\\
\midrule
-\Imeth{circle}{power (pt)} &| p = C.OA: power (z.M)| \tkzar power with respect to a circle \\
-\Imeth{circle}{in\_out (pt)} & |C.OA : in_out (z.M)| \tkzar boolean \\
-\Imeth{circle}{in\_out\_disk (pt)} & |C.OA : in_out_disk (z.M)| \tkzar boolean \\
-\Imeth{circle}{draw ()} & for further use\\
-\bottomrule %
+\Imeth{circle}{power (pt)} &|p = C.OA: power (z.M)| & power with respect to a circle \\
+\Imeth{circle}{in\_out (pt)} & |C.OA : in_out (z.M)| & boolean \\
+\Imeth{circle}{in\_out\_disk (pt)} & |C.OA : in_out_disk (z.M)| & boolean \\
+\Imeth{circle}{draw ()} & for further use &\\
+\bottomrule
\end{tabular}
-\end{center}
\egroup
% subsection methods_circle (end)
-
-
-
\subsubsection{Altshiller} % (fold)
\label{ssub:altshiller}
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
+ z.P = point : new (0,0)
+ z.Q = point : new (5,0)
+ z.I = point : new (3,2)
+ C.QI = circle : new (z.Q,z.I)
+ C.PE = C.QI : orthogonal_from (z.P)
+ z.E = C.PE.through
+ C.QE = circle : new (z.Q,z.E)
+ _,z.F = intersection (C.PE,C.QE)
+ z.A = C.PE: point (1/9)
+ L.AE = line : new (z.A,z.E)
+ _,z.C = intersection (L.AE,C.QE)
+ L.AF = line : new (z.A,z.F)
+ L.CQ = line : new (z.C,z.Q)
+ z.D = intersection (L.AF,L.CQ)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(P,E Q,E)
+ \tkzDrawLines[add=0 and 1](P,Q)
+ \tkzDrawLines[add=0 and 2](A,E)
+ \tkzDrawSegments(P,E E,F F,C A,F C,D)
+ \tkzDrawPoints(P,Q,E,F,A,C,D)
+ \tkzLabelPoints(P,Q,E,F,A,C,D)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\hspace*{\fill}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale =.5
z.P = point : new (0,0)
z.Q = point : new (5,0)
z.I = point : new (3,2)
@@ -148,14 +173,14 @@ Three attributes are used (south, west, radius).
z.E = C.PE.through
C.QE = circle : new (z.Q,z.E)
_,z.F = intersection (C.PE,C.QE)
- z.A = C.PE: point (math.pi/180*80)
+ z.A = C.PE: point (1/9)
L.AE = line : new (z.A,z.E)
_,z.C = intersection (L.AE,C.QE)
L.AF = line : new (z.A,z.F)
L.CQ = line : new (z.C,z.Q)
z.D = intersection (L.AF,L.CQ)
-\end{tkzelements}
-\begin{tikzpicture}
+ \end{tkzelements}
+ \begin{tikzpicture}
\tkzGetNodes
\tkzDrawCircles(P,E Q,E)
\tkzDrawLines[add=0 and 1](P,Q)
@@ -163,44 +188,15 @@ Three attributes are used (south, west, radius).
\tkzDrawSegments(P,E E,F F,C A,F C,D)
\tkzDrawPoints(P,Q,E,F,A,C,D)
\tkzLabelPoints(P,Q,E,F,A,C,D)
-\end{tikzpicture}
-\end{tkzexample}
-
-\begin{tkzelements}
-z.P = point : new (0,0)
-z.Q = point : new (5,0)
-z.I = point : new (3,2)
-C.QI = circle : new (z.Q,z.I)
-C.PE = C.QI : orthogonal_from (z.P)
-z.E = C.PE.through
-C.QE = circle : new (z.Q,z.E)
-_,z.F = intersection (C.PE,C.QE)
-z.A = C.PE: point (math.pi/180*80)
-L.AE = line : new (z.A,z.E)
-_,z.C = intersection (L.AE,C.QE)
-L.AF = line : new (z.A,z.F)
-L.CQ = line : new (z.C,z.Q)
-z.D = intersection (L.AF,L.CQ)
-\end{tkzelements}
-
-
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(P,E Q,E)
-\tkzDrawLines[add=0 and 1](P,Q)
-\tkzDrawLines[add=0 and 2](A,E)
-\tkzDrawSegments(P,E E,F F,C A,F C,D)
-\tkzDrawPoints(P,Q,E,F,A,C,D)
-\tkzLabelPoints(P,Q,E,F,A,C,D)
-\end{tikzpicture}
-\hspace*{\fill}
+ \end{tikzpicture}
+\end{minipage}
%subsubsection altshiller (end)
\subsubsection{Lemoine} % (fold)
\label{ssub:lemoine}
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
scale = 1.6
z.A = point: new (1,0)
@@ -213,7 +209,7 @@ z.D = intersection (L.AF,L.CQ)
L.tB = C.OA: tangent_at (z.B)
L.tC = C.OA: tangent_at (z.C)
z.P = intersection (L.tA,T.bc)
- z.Q = intersection (L.tB,T.ac)
+ z.Q = intersection (L.tB,T.ca)
z.R = intersection (L.tC,T.ab)
\end{tkzelements}
\begin{tikzpicture}
@@ -226,10 +222,12 @@ z.D = intersection (L.AF,L.CQ)
\tkzDrawLines[red](A,P B,Q R,C)
\tkzDrawSegments(A,R C,P C,Q)
\end{tikzpicture}
-\end{tkzexample}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
-scale = 1.25
+scale = .75
z.A = point: new (1,0)
z.B = point: new (5,2)
z.C = point: new (1.2,2)
@@ -239,11 +237,10 @@ C.OA = circle: new (z.O,z.A)
L.tA = C.OA: tangent_at (z.A)
L.tB = C.OA: tangent_at (z.B)
L.tC = C.OA: tangent_at (z.C)
-z.P = intersection (L.tA,T.bc)
-z.Q = intersection (L.tB,T.ac)
z.R = intersection (L.tC,T.ab)
+z.P = intersection (L.tA,T.bc)
+z.Q = intersection (L.tB,T.ca)
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}[rotate=90]
\tkzGetNodes
@@ -255,7 +252,7 @@ z.R = intersection (L.tC,T.ab)
\tkzDrawLines[red](A,P B,Q R,C)
\tkzDrawSegments(A,R C,P C,Q)
\end{tikzpicture}
-\hspace*{\fill}
+\end{minipage}
%\caption{Lemoine line}
% subsubsection lemoine (end)
@@ -269,9 +266,10 @@ The "inversion" method can be used on a point, a line or a circle. Depending on
\label{ssub:inversion_point}
The "inversion" method can be used on a point, a line or a circle. Depending on the type of object, the function determines the correct algorithm to use.
-\begin{tkzexample}[latex=0cm,small,code only]
+
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
- scale = 1.5
z.o = point: new (-1,2)
z.a = point: new (2,1)
C.oa = circle: new (z.o,z.a)
@@ -285,12 +283,14 @@ The "inversion" method can be used on a point, a line or a circle. Depending on
\tkzDrawSegments(o,a o,c)
\tkzDrawPoints(a,o,c,d)
\tkzLabelPoints(a,o,c,d)
- \tkzLabelSegment[sloped,above=1em](c,d){La puissance de c est \tkzUseLua{p}}
+ \tkzLabelSegment[sloped,above=1em](c,d){%
+ Power of c with respect to C is \tkzUseLua{p}}
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
- scale = 1.5
+ scale =.75
z.o = point: new (-1,2)
z.a = point: new (2,1)
C.oa = circle: new (z.o,z.a)
@@ -305,18 +305,19 @@ The "inversion" method can be used on a point, a line or a circle. Depending on
\tkzDrawSegments(o,a o,c)
\tkzDrawPoints(a,o,c,d)
\tkzLabelPoints(a,o,c,d)
- \tkzLabelSegment[sloped,above=1em](c,d){La puissance de c est \tkzUseLua{p}}
+ \tkzLabelSegment[sloped,above=1em](c,d){%
+ La puissance de c est \tkzUseLua{p}}
\end{tikzpicture}
-\hspace*{\fill}
+\end{minipage}
\subsubsection{Inversion: line} % (fold)
\label{ssub:inversion_line}
The result is either a straight line or a circle.
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
- scale = 1
z.o = point: new (-1,1)
z.a = point: new (1,3)
C.oa = circle: new (z.o,z.a)
@@ -333,106 +334,98 @@ The result is either a straight line or a circle.
\tkzDrawPoints(a,o,c,d,H)
\tkzLabelPoints(a,o,c,d,H)
\end{tikzpicture}
-\end{tkzexample}
-
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
- scale = 1
z.o = point: new (-1,1)
z.a = point: new (1,3)
C.oa = circle: new (z.o,z.a)
z.c = point: new (3,2)
z.d = point: new (0,4)
- L.cd = line: new (z.c,z.d)
+ L.cd = line: new (z.c,z.d)
C.OH = C.oa: inversion (L.cd)
z.O,z.H = get_points(C.OH)
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
- \tkzDrawCircles(o,a O,H)
+ \tkzDrawCircles(o,a)
+ \tkzDrawCircles[new](O,H)
\tkzDrawLines(c,d o,H)
\tkzDrawPoints(a,o,c,d,H)
\tkzLabelPoints(a,o,c,d,H)
\end{tikzpicture}
- \hspace*{\fill}
+\end{minipage}
\subsubsection{Inversion: circle} % (fold)
\label{ssub:inversion_circle}
The result is either a straight line or a circle.
-\begin{tkzexample}[latex=0cm,small,code only]
- \begin{tkzelements}
- scale = 1
- z.o = point: new (-1,1)
- z.a = point: new (2,3)
- C.oa = circle: new (z.o,z.a)
- z.c = point: new (-2,1)
- z.e = point: new (-2,8)
- z.d = point: new (-2,5)
- C.ed = circle: new (z.e,z.d)
- C.co = circle: new (z.c,z.o)
- obj = C.oa: inversion (C.co)
- if obj.type == "line"
- then
- z.p,z.q = get_points(obj)
- else
- z.O,z.H = get_points(obj)
- end
- obj = C.oa: inversion(C.ed)
- if obj.type == "line"
- then
- z.p,z.q = get_points(obj)
- else
- z.O,z.H = get_points(obj)
- end
- \end{tkzelements}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(o,a c,o e,d O,H)
- \tkzDrawLines(p,q)
- \tkzDrawPoints(a,o,c,d,e,p,q,O,H)
- \tkzLabelPoints(a,o,c,d,e,p,q,O,H)
- \end{tikzpicture}
-\end{tkzexample}
-
- \begin{tkzelements}
- scale = 1
- z.o = point: new (-1,1)
- z.a = point: new (2,3)
- C.oa = circle: new (z.o,z.a)
- z.c = point: new (-2,1)
- z.e = point: new (-2,8)
- z.d = point: new (-2,5)
- C.ed = circle: new (z.e,z.d)
- C.co = circle: new (z.c,z.o)
- obj = C.oa: inversion (C.co)
- if obj.type == "line"
- then
- z.p,z.q = get_points(obj)
- else
- z.O,z.H = get_points(obj)
- end
- obj = C.oa: inversion(C.ed)
- if obj.type == "line"
- then
- z.p,z.q = get_points(obj)
- else
- z.O,z.H = get_points(obj)
- end
- \end{tkzelements}
+\begin{minipage}{.55\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+scale = .7
+z.o,z.a = point: new (-1,3),point: new (2,3)
+z.c = point: new (-2,1)
+z.e,z.d = point: new (-2,7),point: new (-3,5)
+C.oa = circle: new (z.o,z.a)
+C.ed = circle: new (z.e,z.d)
+C.co = circle: new (z.c,z.o)
+obj = C.oa: inversion (C.co)
+ if obj.type == "line"
+ then z.p,z.q = get_points(obj)
+ else z.f,z.b = get_points(obj) end
+obj = C.oa: inversion(C.ed)
+if obj.type == "line"
+then z.p,z.q = get_points(obj)
+else z.f,z.b = get_points(obj) end
+color = "orange"
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles[black](o,a)
+\tkzDrawCircles[teal](c,o e,d)
+\tkzDrawCircles[\tkzUseLua{color}](f,b)
+\tkzDrawLines[\tkzUseLua{color}](p,q)
+\tkzDrawPoints(a,...,f,o,p,q)
+\tkzLabelPoints(a,...,f,o,p,q)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.45\textwidth}
+ \begin{tkzelements}
+ scale = .7
+ z.o,z.a = point: new (-1,3),point: new (2,3)
+ z.c = point: new (-2,1)
+ z.e,z.d = point: new (-2,7),point: new (-3,5)
+ C.oa = circle: new (z.o,z.a)
+ C.ed = circle: new (z.e,z.d)
+ C.co = circle: new (z.c,z.o)
+ obj = C.oa: inversion (C.co)
+ if obj.type == "line"
+ then z.p,z.q = get_points(obj)
+ else z.f,z.b = get_points(obj) end
+ obj = C.oa: inversion(C.ed)
+ if obj.type == "line"
+ then z.p,z.q = get_points(obj)
+ else z.f,z.b = get_points(obj) end
+ color = "orange"
+ \end{tkzelements}
+ \hspace{\fill}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles[black](o,a)
+ \tkzDrawCircles[teal](c,o e,d)
+ \tkzDrawCircles[\tkzUseLua{color}](f,b)
+ \tkzDrawLines[\tkzUseLua{color}](p,q)
+ \tkzDrawPoints(a,...,f,o,p,q)
+ \tkzLabelPoints(a,...,f,o,p,q)
+ \end{tikzpicture}
+\end{minipage}
+
-\hspace*{\fill}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(o,a c,o e,d O,H)
- \tkzDrawLines(p,q)
- \tkzDrawPoints(a,o,c,d,e,p,q,O,H)
- \tkzLabelPoints(a,o,c,d,e,p,q,O,H)
- \end{tikzpicture}
- \hspace*{\fill}
% subsubsection inversion (end)
% subsection methods_of_the_class_circle (end)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
index 0d5c00b38c..e700019fa3 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex
@@ -1,17 +1,16 @@
\newpage
-\section{Classe ellipse} % (fold)
+\section{Classe \Iclass{ellipse}} % (fold)
\label{sec:classe_ellipse}
-\subsection{Attributs of an ellipse} % (fold)
-\label{sub:attributs_of_an_ellipse}
+\subsection{Attributes of an ellipse} % (fold)
+\label{sub:attributes_of_an_ellipse}
The first attributes are the three points that define the ellipse : \Iattr{ellipse}{center} , \Iattr{ellipse}{vertex} and \Iattr{ellipse}{covertex}. The first method to define an ellipse is to give its center, then the point named \tkzname{vertex} which defines the major axis and finally the point named \tkzname{covertex} which defines the minor axis.
\bgroup
\catcode`_=12
\small
-\begin{center}
-%\caption{Attributes about ellipse class.}
+\captionof{table}{Ellipse attributes.}
\begin{tabular}{ll}
\toprule
\textbf{Attributes} & \textbf{Application}\\
@@ -24,18 +23,17 @@ The first attributes are the three points that define the ellipse : \Iattr{ellip
\Iattr{ellipse}{slope}& Slope of the line passes through the foci\\
\Iattr{ellipse}{Fa}& First focus\\
\Iattr{ellipse}{Fb}& Second focus\\
-\Imeth{ellipse}{south} & See next example \ref{ssub:attributs_of_an_ellipse} \\
-\Imeth{ellipse}{north} & See next example \ref{ssub:attributs_of_an_ellipse} \\
-\Imeth{ellipse}{west} & See next example \ref{ssub:attributs_of_an_ellipse} \\
-\Imeth{ellipse}{east} & See next example \ref{ssub:attributs_of_an_ellipse} \\
+\Imeth{ellipse}{south} & See next example \ref{ssub:attributes_of_an_ellipse} \\
+\Imeth{ellipse}{north} & \\
+\Imeth{ellipse}{west} & \\
+\Imeth{ellipse}{east} & \\
\bottomrule %
\end{tabular}
-\end{center}
\egroup
-\subsubsection{Attributs of an ellipse} % (fold)
-\label{ssub:attributs_of_an_ellipse}
+\subsubsection{Atributes of an ellipse: example} % (fold)
+\label{ssub:attributes_of_an_ellipse}
\begin{tkzexample}[latex=0cm,small,code only]
\begin{tkzelements}
z.C = point: new (3 , 2)
@@ -61,11 +59,13 @@ The first attributes are the three points that define the ellipse : \Iattr{ellip
\pgfkeys{/pgf/number format/.cd,fixed,precision=2}
\tkzGetNodes
\tkzDrawCircles[teal](C,A)
- \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope})
+ \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},
+ \tkzUseLua{slope})
\tkzDrawPoints(C,A,B,b,W,S,F1,F2)
\tkzLabelPoints(C,A,B)
\tkzDrawLine[add = .5 and .5](A,W)
- \tkzLabelSegment[pos=1.5,above,sloped](A,W){slope = \pgfmathprintnumber{\slope}}
+ \tkzLabelSegment[pos=1.5,above,sloped](A,W){%
+ slope = \pgfmathprintnumber{\tkzUseLua{slope}}}
\tkzLabelPoint[below](S){South}
\tkzLabelPoint[below left](F1){Focus 1}
\tkzLabelPoint[below left](F2){Focus 2}
@@ -113,7 +113,7 @@ z.Ve = E.vertex
\end{tikzpicture}
\hspace*{\fill}
% \caption{Class Ellipse}
-% subsection attributs_of_an_ellipse (end)
+% subsection attributes_of_an_ellipse (end)
\subsection{Methods of the class ellipse} % (fold)
@@ -128,8 +128,7 @@ To do this, you'll need to use a \pkg{tkz-elements }function: \Igfct{package}{se
\bgroup
\catcode`_=12
\small
-\begin{center}
-%\caption{elements\_ellipses.lua}
+\captionof{table}{Ellipse methods.}
\begin{tabular}{ll}
\toprule
\textbf{Methods} & \textbf{Example} \\
@@ -141,10 +140,10 @@ To do this, you'll need to use a \pkg{tkz-elements }function: \Igfct{package}{se
\Imeth{ellipse}{in\_out (pt) } & pt in/out of the ellipse \\
\Imeth{ellipse}{tangent\_at (pt) } & see example \ref{ssub:method_point} \\
\Imeth{ellipse}{tangent\_from (pt) } & see example \ref{ssub:method_point} \\
-\Imeth{ellipse}{point (phi) } & vertex = point (0) covertex = point (math.pi/4) ex see \ref{ssub:method_point} \\
+\Imeth{ellipse}{point (t) } & vertex = point (0) covertex = point (0.25) ex see \ref{ssub:method_point} \\
\bottomrule
\end{tabular}
-\end{center}
+
\egroup
\subsubsection{Method \Imeth{ellipse}{new}} % (fold)
@@ -162,12 +161,13 @@ For attributes see \ref{sec:classe_ellipse}
E = ellipse: new (z.C,z.A,z.B)
a = E.Rx
b = E.Ry
- slope = math.deg(E.Sl)
+ slope = math.deg(E.slope)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
\tkzDrawCircles[teal](C,A)
- \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope})
+ \tkzDrawEllipse[red](C,\tkzUseLua{a},
+ \tkzUseLua{b},\tkzUseLua{slope})
\tkzDrawPoints(C,A,B)
\tkzLabelPoints(C,A,B)
\end{tikzpicture}
@@ -235,7 +235,8 @@ The first two points are the foci of the ellipse. The third one is the vertex. W
\tkzDrawPolygon(A,B,C)
\tkzDrawCircles[cyan](O,A N,I)
\tkzDrawSegments(X,R A,X)
- \tkzDrawEllipse[red](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
+ \tkzDrawEllipse[red](N,\tkzUseLua{a},
+ \tkzUseLua{b},\tkzUseLua{ang})
\tkzDrawLines[add=.2 and .5](I,H)
\tkzDrawPoints(A,B,C,N,O,X,H,R,S,I)
\tkzLabelPoints[above](C,X)
@@ -306,8 +307,8 @@ The first two points are the foci of the ellipse. The third one is the vertex. W
E = ellipse: radii (z.C,a,b,-math.pi/4)
z.V = E : point (0)
z.K = E : point (1)
- z.CoV = E : point (math.pi/2)
- z.X = E : point (math.pi)
+ z.CoV = E : point (0.25)
+ z.X = E : point (0.5)
L = E :tangent_at (z.V)
z.x,z.y = get_points(L)
L.ta,L.tb = E :tangent_from (z.A)
@@ -331,7 +332,7 @@ The first two points are the foci of the ellipse. The third one is the vertex. W
\end{minipage}
\begin{minipage}{0.4\textwidth}
\begin{tkzelements}
-scale = .5
+scale = .75
z.C = point: new (2 , 3)
z.A = point: new (6 , 5)
a = value(4)
@@ -340,8 +341,8 @@ ang = math.deg(-math.pi/4)
E = ellipse: radii (z.C,a,b,-math.pi/4)
z.V = E : point (0)
z.K = E : point (1)
-z.CoV = E : point (math.pi/2)
-z.X = E : point (math.pi)
+z.CoV = E : point (0.25)
+z.X = E : point (0.5)
L = E :tangent_at (z.V)
z.x,z.y = get_points(L)
L.ta,L.tb = E :tangent_from (z.A)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
index 62ea40d1f3..099c75a278 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
@@ -1,43 +1,47 @@
\newpage
-\section{Class line} % (fold)
+\section{Class \Iclass{line}} % (fold)
\label{sec:class_line}
-\subsection{Attributs of a line} % (fold)
-\label{sub:attributs_of_a_line}
+\subsection{Attributes of a line} % (fold)
+\label{sub:attributes_of_a_line}
+
+Writing |L.AB = line: new (z.A,z.B)| creates an object of the class \tkzname{line} (the notation is arbitrary for the moment). Geometrically it is, as much ,the line passing through the points $A$ and $B$ as the segment $[AB]$. Thus we can use the midpoint of |L.AB| which is, of course, the midpoint of the segment $[AB]$. This medium is obtained with |L.AB.mid|. Note that |L.AB.pa = z.A| and |L.AB.pb = z.B|. Finally, if a line $L$ is the result of a method, you can obtain the points with |z.A,z.B = get_points (L)| or with the previous remark.
+
+\begin{mybox}
+ Creation |L.AB = line : new ( z.A , z.B ) |
+\end{mybox}
-Writing |L.AB = line: new (z.A,z.B) | creates an object of the class \tkzname{line} (the notation is arbitrary for the moment). Geometrically it is as much the line passing through the points $A$ and $B$ as the segment $[AB]$. Thus we can use the midpoint of |L.AB| which is of course the midpoint of the segment $[AB]$. This medium is obtained with |L.AB.mid|. Note that |L.AB.pa = z.A| and |L.AB.pb = z.B|. Finally, if a line $L$ is the result of a method, you can obtain the points with |z.A,z.B = get_points (L)| or with the previous remark.
The attributes are :
+\vspace{1em}
\bgroup
\catcode`_=12
-
\small
-\begin{center}
-%\caption{Attributes about line class.}
-\begin{tabular}{ll}
+\captionof{table}{Line attributes.}
+\begin{tabular}{lll}
\toprule
-\textbf{Attributes} & \textbf{Application}\\
-\Iattr{line}{pa} & First point of the segment \\
-\Iattr{line}{pb} & Second point of the segment\\
-\Iattr{line}{type} & Type is 'line'\\
-\Iattr{line}{mid} & Middle of the segment |z.M = L.AB.mid|\\
-\Iattr{line}{slope} & Slope of the line obtained with |an = L.AB.slope|\\
-\Iattr{line}{length} & Length of the segment |l = L.AB.length| \\
-\Iattr{line}{north\_pa} & See next example \\
-\Iattr{line}{north\_pb} & \\
-\Iattr{line}{south\_pa} & \\
-\Iattr{line}{south\_pb} & \\
-\Iattr{line}{east} & \\
-\Iattr{line}{west} & \\
+\textbf{Attributes} & \textbf{Application} & \\
+\Iattr{line}{pa} & First point of the segment & |z.A = L.AB.pa| \\
+\Iattr{line}{pb} & Second point of the segment & \\
+\Iattr{line}{type} & Type is 'line' & |L.AB.type = 'line'| \\
+\Iattr{line}{mid} & Middle of the segment& |z.M = L.AB.mid|\\
+\Iattr{line}{slope} & Slope of the line & obtained with |an = L.AB.slope|\\
+\Iattr{line}{length} & Length of the segment& |l = L.AB.length| \\
+\Iattr{line}{north\_pa} & See next example& d(a,north—pa)=d(a,b)=d(east,b) =etc. \\
+\Iattr{line}{north\_pb} & &\\
+\Iattr{line}{south\_pa} & &\\
+\Iattr{line}{south\_pb} & &\\
+\Iattr{line}{east} & &\\
+\Iattr{line}{west} & &\\
\bottomrule
\end{tabular}
-\end{center}
\egroup
\subsubsection{Example: attributes of class line} % (fold)
\label{ssub:example_class_line}
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
scale = .5
z.a = point: new (1, 1)
@@ -61,9 +65,9 @@ The attributes are :
\tkzLabelSegment[sloped](a,b){ab = \tkzUseLua{len}}
\tkzLabelSegment[above=12pt,sloped](a,b){slope of (ab) = \tkzUseLua{sl}}
\end{tikzpicture}
-\end{tkzexample}
-
-\begin{tkzelements}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}\begin{tkzelements}
scale = .5
z.a = point: new (1, 1)
z.b = point: new (5, 4)
@@ -76,26 +80,30 @@ z.s = L.ab.south_pb
sl = L.ab.slope
len = L.ab.length
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawPoints(a,b,m,e,r,s,w)
-\tkzLabelPoints(a,b,e,r,s,w)
-\tkzLabelPoints[above](m)
-\tkzDrawLine(a,b)
-\tkzLabelSegment[sloped](a,b){ab = \tkzUseLua{len}}
-\tkzLabelSegment[above=12pt,sloped](a,b){slope of (ab) = \tkzUseLua{sl}}
+ \tkzGetNodes
+ \tkzDrawPoints(a,b,m,e,r,s,w)
+ \tkzLabelPoints(a,b)
+ \tkzLabelPoint(r){north\_pa}
+ \tkzLabelPoint(s){south\_pb}
+ \tkzLabelPoint[below](m){mid}
+ \tkzLabelPoint[right](w){west}
+ \tkzLabelPoint[left](e){east}
+ \tkzDrawLine(a,b)
+ \tkzLabelSegment[above = 1em,sloped](a,b){ab = \pmpn{\tkzUseLua{len}}}
+ \tkzLabelSegment[above=2em,sloped](a,b){slope of (ab) = \pmpn{\tkzUseLua{sl}}}
\end{tikzpicture}
-\hspace*{\fill}
-% \caption{Class Line}
+\end{minipage}
% subsubsection example_class_line (end)
\subsubsection{Method \Imeth{line}{new} and line attributes}
\label{ssub:example_line_attributes}
Notation |L| or |L.AB| or |L.euler|. The notation is actually free.
-|L.AB| can also represent the segment. With | L.AB = line : new (z.A,z.B)|, a line is defined.
+|L.AB| can also represent the segment.
+
+With | L.AB = line : new (z.A,z.B)|, a line is defined.
\begin{minipage}{0.5\textwidth}
@@ -136,7 +144,7 @@ Notation |L| or |L.AB| or |L.euler|. The notation is actually free.
\end{tikzpicture}
\end{minipage}
% subsubsection example_line_attributes (end)
-% subsection attributs_of_a_line (end)
+% subsection attributes_of_a_line (end)
\clearpage\newpage
\subsection{Methods of the class line} % (fold)
@@ -144,64 +152,64 @@ Notation |L| or |L.AB| or |L.euler|. The notation is actually free.
Here's the list of methods for the \tkzNameObj{line} object. The results are either reals, points, lines, circles or triangles.
\subsubsection{Table of the methods from class line} % (fold)
\label{ssub:table_of_the_methods_from_class_line}
+
+\vspace{1em}
\bgroup
\catcode`_=12
\small
-\begin{center}
-%\caption{Methods from class line}
-\begin{tabular}{ll}
+\captionof{table}{Methods of the class line.}
+\begin{tabular}{lll}
\toprule
-\textbf{Methods} & \textbf{Comments} \\
+\textbf{Methods} & \textbf{Comments} & \\
\midrule
-\Imeth{line}{new(A, B)} & |L.AB = line : new(z.A,z.B)| line through the points $A$ and $B$\\
+\Imeth{line}{new(A, B)} & |L.AB = line : new(z.A,z.B)| line through the points $A$ and $B$&\\
\midrule
- \textbf{Points} &\\
+ \textbf{Points} &&\\
\midrule
-\Imeth{line}{gold\_ratio ()} & |z.C = L.AB : gold_ratio()| \tkzar gold ratio \\
-\Imeth{line}{normalize ()} & |z.C = L.AB : normalize()| \tkzar AC =1 and $C\in (AB)$ \\
-\Imeth{line}{normalize_inv ()} & |z.C = L.AB : normalize_inv()| \tkzar CB =1 and $C\in (AB)$ \\
-\Imeth{line}{barycenter (ka,kb)} & |z.C = L.AB : barycenter (1,2)| $C$ --> barycenter of |{(A,1)(B,2)}|\\
-\Imeth{line}{point (t)} & |z.C = L.AB : point (2)| \tkzar $\overrightarrow{AC} = 2\overrightarrow{AB}$\\
-\Imeth{line}{midpoint ()} & |z.M = L.AB : midpoint ()| \tkzar better is |z.M = L.AB.mid| \\
-\Imeth{line}{harmonic\_int } & |z.D = L.AB : harmonic_int (z.C)| \tkzar $D\in [AB]$ $C\notin [AB]$\\
-\Imeth{line}{harmonic\_ext (pt)} & |z.D = L.AB : harmonic_ext (z.C)| \tkzar $D\notin [AB]$ $C\in [AB]$\\
-\Imeth{line}{harmonic\_both (k)} & |z.C,z.D = L.AB : harmonic_both (tkzphi)| \tkzar ${ {CA/CB}={DA/DB}=t\varphi.}$\\
-\Imeth{line}{projection ( pt )} & |z.H = L.AB : projection (z.C)| \tkzar $CH \perp (AB)$ and $H\in (AB)$\\
-\Imeth{line}{set\_projection (...)} & projection of a list of points \\
-\Imeth{line}{symmetry\_axial ( pt )} & |z.Cp = L.AB : symmetry_axial (z.C)|\\
-\Imeth{line}{set\_symmetry\_axial (...) }&symmetry_axial of a list of points \\
-\Imeth{line}{translation ( pt )} & |z.Cp = L.AB : translation (z.C)|\\
-\Imeth{line}{set\_translation(...) }&translation of a list of points \\
-
-\Imeth{line}{square ()} & |z.C,z.D = L.AB : square () | \tkzar creates 2 points to make a square.\\
+\Imeth{line}{gold\_ratio ()} & |z.C = L.AB : gold_ratio()| & gold ratio \\
+\Imeth{line}{normalize ()} & |z.C = L.AB : normalize()| & AC =1 and $C\in (AB)$ \\
+\Imeth{line}{normalize\_inv ()} & |z.C = L.AB : normalize_inv()| & CB =1 and $C\in (AB)$ \\
+\Imeth{line}{barycenter (ka,kb)} & |z.C = L.AB : barycenter (1,2)| $C$ & barycenter of |{(A,1)(B,2)}|\\
+\Imeth{line}{point (t)} & |z.C = L.AB : point (2)| & $\overrightarrow{AC} = 2\overrightarrow{AB}$\\
+\Imeth{line}{midpoint ()} & |z.M = L.AB : midpoint ()| & better is |z.M = L.AB.mid| \\
+\Imeth{line}{harmonic\_int } & |z.D = L.AB : harmonic_int (z.C)| & $D\in [AB]$ $C\notin [AB]$\\
+\Imeth{line}{harmonic\_ext (pt)} & |z.D = L.AB : harmonic_ext (z.C)| & $D\notin [AB]$ $C\in [AB]$\\
+\Imeth{line}{harmonic\_both (k)} & |z.C,z.D = L.AB : harmonic_both (tkzphi)| & ${ {CA/CB}={DA/DB}=t\varphi.}$\\
+\Imeth{line}{square ()} & |S.AB =(L.AB : square ()) | & create a square |S.AB|.\footnote{ |_,_,z.C,z.D = get_points(S.AB)|}\\
\midrule
- \textbf{Lines} &\\
+ \textbf{Lines} &&\\
\midrule
-\Imeth{line}{ll\_from ( pt )} & |L.CD = L.AB : ll_from (z.C)| \tkzar $(CD) \parallel (AB)$ \\
-\Imeth{line}{ortho\_from ( pt )} & |L.CD = L.AB : ortho_from (z.C)| \tkzar $(CD) \perp (AB)$\\
-\Imeth{line}{mediator ()}&|L.uv = L.AB : mediator ()| \tkzar $(u,v)$ mediator of $(A,B)$\\
+\Imeth{line}{ll\_from ( pt )} & |L.CD = L.AB : ll_from (z.C)| & $(CD) \parallel (AB)$ \\
+\Imeth{line}{ortho\_from ( pt )} & |L.CD = L.AB : ortho_from (z.C)|& $(CD) \perp (AB)$\\
+\Imeth{line}{mediator ()}&|L.uv = L.AB : mediator ()| & $(u,v)$ mediator of $(A,B)$\\
\midrule
- \textbf{Triangles} &\\
+ \textbf{Triangles} &&\\
\midrule
-\Imeth{line}{equilateral ()} & |z.C = L.AB : equilateral_tr ()| $(\overrightarrow{AB},\overrightarrow{AC})>0$ \\
-\Imeth{line}{isosceles (phi)} & |z.C = L.AB : isosceles (math.pi/6)| \\
-\Imeth{line}{gold ()} & |z.C = L.AB : gold ()| \tkzar right in $B$ and $AC = \varphi \times AB $ \\
-\Imeth{line}{euclide ()} & |z.C = L.AB : euclide ()| \tkzar $AB=AC$ and $(\overrightarrow{AB},\overrightarrow{AC}) = math.pi/5$ \\
-\Imeth{line}{golden ()} & |z.C = L.AB : golden ()| $(\overrightarrow{AB},\overrightarrow{AC}) = 2\times math.pi/5$ \\
+\Imeth{line}{equilateral (swap)} & |T.ABC = L.AB : equilateral ()| $(\overrightarrow{AB},\overrightarrow{AC})>0$ & or < with swap \\
+\Imeth{line}{isosceles (phi)} & |T.ABC = L.AB : isosceles (math.pi/6)|& \\
+\Imeth{line}{gold ()} & |T.ABC = L.AB : gold ()| & right in $B$ and $AC = \varphi \times AB $ \\
+\Imeth{line}{euclide ()} & |T.ABC = L.AB : euclide ()| & $AB=AC$ and $(\overrightarrow{AB},\overrightarrow{AC}) = math.pi/5$ \\
+\Imeth{line}{golden ()} & |T.ABC = L.AB : golden ()| & $(\overrightarrow{AB},\overrightarrow{AC}) = 2\times \pi/5$ \\
+\midrule
+ \textbf{Circles} &&\\
+\midrule
+\Imeth{line}{circle ()} & |C.AB = L.AB : circle ()| & center pa through pb \\
+\Imeth{line}{circle\_swap ()} & |C.BA = L.AB : circle\_swap ()|& center pb through pa \\
\midrule
- \textbf{Circles} &\\
+ \textbf{Transformations} &&\\
\midrule
-\Imeth{line}{circle ()} & |C.AB = L.AB : circle ()| circle center pa through pb \\
-\Imeth{line}{circle\_swap ()} & |C.BA = L.AB : circle\_swap ()| circle center pb through pa \\
+\Imeth{line}{reflection ( obj )} & |new obj = L.AB : reflection (obj|&\\
+\Imeth{line}{translation ( obj )} & |new obj = L.AB : translation (obj)|&\\
+\Imeth{line}{projection ( obj )} & |z.H = L.AB : projection (z.C)| & $CH \perp (AB)$ and $H\in (AB)$\\
\midrule
- \textbf{Miscellaneous} &\\
+ \textbf{Miscellaneous} &&\\
\midrule
-\Imeth{line}{distance (pt)} & |d = L.Ab : distance (z.C)| d=CH with H projection of $C$ onto (AB)\\
-\Imeth{line}{in\_out (pt)} & |b = L.AB : in_out (z.C)| $b$ is a boolean b=true if $C\in (AB)$ \\
-\Imeth{line}{slope ()} & |a = L.AB : slope()| \tkzar better is L.AB.slope \\
+\Imeth{line}{distance (pt)} & |d = L.Ab : distance (z.C)| & see \ref{ssub:example_distance_and_projection}\\
+\Imeth{line}{in\_out (pt)} & |b = L.AB : in_out (z.C)| $b$ is a boolean b=true if $C\in (AB)$ &\\
+\Imeth{line}{slope ()} & |a = L.AB : slope()| & better is L.AB.slope \\
\bottomrule
\end{tabular}
-\end{center}
+
\egroup
% subsubsection table_of_the_methods_from_class_line (end)
@@ -270,7 +278,7 @@ _,z.E = get_points ( L.CD: ll_from (z.B))
z.c = point: new (2, 5)
z.d = point: new (5, 2)
L.ab = line: new (z.a,z.b)
- z.cp,z.dp = L.ab: set_projection(z.c,z.d)
+ z.cp,z.dp = L.ab: projection(z.c,z.d)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -288,7 +296,7 @@ z.b = point: new (4, 1)
z.c = point: new (2, 5)
z.d = point: new (5, 2)
L.ab = line: new (z.a,z.b)
-z.cp,z.dp = L.ab : set_projection(z.c,z.d)
+z.cp,z.dp = L.ab : projection(z.c,z.d)
\end{tkzelements}
\hspace*{\fill}
\begin{tikzpicture}
@@ -381,8 +389,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
z.C = point: new (-3,2)
z.D = point: new (0,2)
L.AB = line : new (z.A,z.B)
- -- z.E = L.AB : translation (z.C)
- z.E,z.F = L.AB : set_translation (z.C,z.D)
+ z.E,z.F = L.AB : translation (z.C,z.D)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -399,8 +406,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
z.C = point: new (-3,2)
z.D = point: new (0,2)
L.AB = line : new (z.A,z.B)
- -- z.E = L.AB : translation (z.C)
- z.E,z.F = L.AB : set_translation (z.C,z.D)
+ z.E,z.F = L.AB : translation (z.C,z.D)
\end{tkzelements}
\hspace*{\fill}
\begin{tikzpicture}
@@ -433,7 +439,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
\tkzDrawPoints(A,B,C,H)
\tkzLabelPoints(A,B,C,H)
\tkzLabelSegment[above left,
- draw](C,H){$CH = \tkzUseLua{d}$}
+ draw](C,H){$CH = \tkzUseLua{d}$}
\end{tikzpicture}
\end{tkzexample}
\end{minipage}
@@ -459,6 +465,55 @@ z.a,z.b = L.ab.pa,L.ab.pb
% \caption{Method distance with line object}
% subsubsection example_distance_and_projection (end)
+
+\subsubsection{Reflection of object} % (fold)
+\label{ssub:reflection_of_object}
+
+\begin{minipage}{.5\textwidth}
+ \begin{verbatim}
+ \begin{tkzelements}
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 4 , 1 )
+ z.E = point : new ( 0 , 2 )
+ z.F = point : new ( 3 , 3 )
+ z.G = point : new ( 4 , 2 )
+ L.AB = line : new ( z.A , z.B )
+ T.EFG = triangle : new (z.E,z.F,z.G)
+ T.new = L.AB : reflection (T.EFG)
+ z.Ep,z.Fp,z.Gp = get_points(T.new)
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLine(A,B)
+ \tkzDrawPolygon(E,F,G)
+ \tkzDrawPolygon[new](E',F',G')
+ \tkzDrawSegment[red,dashed](E,E')
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 4 , 1 )
+ z.E = point : new ( 0 , 2 )
+ z.F = point : new ( 3 , 3 )
+ z.G = point : new ( 4 , 2 )
+ L.AB = line : new ( z.A , z.B )
+ T.EFG = triangle : new (z.E,z.F,z.G)
+ T.new = L.AB : reflection (T.EFG)
+ z.Ep,z.Fp,z.Gp = get_points(T.new)
+\end{tkzelements}
+\hspace{\fill}\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLine(A,B)
+ \tkzDrawPolygon(E,F,G)
+ \tkzDrawPolygon[new](E',F',G')
+ \tkzDrawSegment[red,dashed](E,E')
+\end{tikzpicture}
+\end{minipage}
+
+
+% subsubsection reflection_of_object (end)
% subsection methods_from_class_line (end)
% section class_line (end)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex
index 65834bf78e..321444b889 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-misc.tex
@@ -5,8 +5,7 @@
\bgroup
\catcode`_=12
\small
-\begin{center}
-%\caption{functions\_maths.lua }
+\captionof{table}{Math constants and functions.}
\begin{tabular}{ll}
\toprule
\textbf{contants or functions} & \textbf{Comments}\\
@@ -28,9 +27,9 @@
\Igfct{math}{angle\_normalize (a) } & to get a value between 0 and $2\pi$ \\
\Igfct{math}{radical\_center (C1,C2,C3)} & see \ref{sub:radical_center} \\
\Igfct{math}{radical\_circle (C1,C2,C3)} & see \ref{sub:radical_circle} \\
+\Igfct{math}{barycenter (\{z1,n1\},\{z2,n2\}, ...)} & barycenter of list of points \\
\bottomrule
\end{tabular}
-\end{center}
\egroup
\subsubsection{Harmonic division with tkzphi } % (fold)
@@ -132,29 +131,32 @@ If |scale = 1.2| with a = 6 then real(a) = $6 / 1.2 = 5$ .
\subsubsection{Transfer from lua to \TEX} % (fold)
\label{ssub:transfer_from_lua_to_tex}
It's possible to transfer variable from Lua to \TEX{} with
-\Igfct{package}{\textbackslash{tkzUseLua}} in the environment "tikzpicture".
-
-
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
- z.A = point : new (0 , 0)
- z.B = point : new (4 , 3)
- z.C = point : new (2 , 5)
- L.AB = line : new (z.A,z.B)
- d = L.AB : distance (z.C)
- l = L.AB.length
- z.H = L.AB : projection (z.C)
-\end{tkzelements}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines(A,B C,H)
-\tkzDrawPoints(A,B,C,H)
-\tkzLabelPoints(A,B,C,H)
-\tkzLabelSegment[above left,draw](C,H){$CH = \tkzUseLua{d}$}
-\tkzLabelSegment[below left,draw](C,H){$AB = \tkzUseLua{l}$}
-\end{tikzpicture}
-\end{tkzexample}
-
+\Igfct{package}{\textbackslash{tkzUseLua}}.
+
+
+\begin{minipage}{.5\textwidth}
+ \begin{verbatim}
+ \begin{tkzelements}
+ z.A = point : new (0 , 0)
+ z.B = point : new (4 , 3)
+ z.C = point : new (2 , 5)
+ L.AB = line : new (z.A,z.B)
+ d = L.AB : distance (z.C)
+ l = L.AB.length
+ z.H = L.AB : projection (z.C)
+ \end{tkzelements}
+ % possible here \tkzUseLua{L.AB.length}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(A,B C,H)
+ \tkzDrawPoints(A,B,C,H)
+ \tkzLabelPoints(A,B,C,H)
+ \tkzLabelSegment[above left,draw](C,H){$CH = \tkzUseLua{d}$}
+ \tkzLabelSegment[below left,draw](C,H){$AB = \tkzUseLua{l}$}
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
z.A = point : new (0 , 0)
z.B = point : new (4 , 3)
@@ -172,6 +174,7 @@ It's possible to transfer variable from Lua to \TEX{} with
\tkzLabelSegment[above left,draw](C,H){$CH = \tkzUseLua{d}$}
\tkzLabelSegment[below left,draw](C,H){$AB = \tkzUseLua{l}$}
\end{tikzpicture}
+\end{minipage}
% subsubsection transfer_from_lua_to_tex (end)
\subsubsection{Normalized angles : Slope of lines (ab), (ac) and (ad)} % (fold)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-parallelogram.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-parallelogram.tex
new file mode 100644
index 0000000000..372ca334be
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-parallelogram.tex
@@ -0,0 +1,151 @@
+\newpage
+\section{Classe \Iclass{parallelogram}} % (fold)
+
+\subsection{Parallelogram attributes} % (fold)
+\label{sub:parallelogram_attributes}
+
+% subsection square_attributes (end)
+Points are created in the direct direction. A test is performed to check whether the points form a parallelogram, otherwise compilation is blocked.
+
+\begin{mybox}
+Creation | P.new = parallelogram : new (z.A,z.B,z.C,z.D)|
+\end{mybox}
+
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{Parallelogram attributes.}
+\begin{tabular}{lll}
+\toprule
+\textbf{Attributes} & \textbf{Application} & \\
+\Iattr{parallelogram}{pa} & |z.A = P.new.pa| & \\
+\Iattr{parallelogram}{pb} & |z.B = P.new.pb| & \\
+\Iattr{parallelogram}{pc} & |z.C = P.new.pc| & \\
+\Iattr{parallelogram}{pd} & |z.D = P.new.pd| & \\
+\Iattr{parallelogram}{type} & |P.new.type= 'parallelogram'|& \\
+\Iattr{parallelogram}{i} & |z.I = P.new.i| & intersection of diagonals \\
+\Iattr{parallelogram}{ab} & |P.new.ab| & line passing through two vertices \\
+\Iattr{parallelogram}{ac} & |P.new.ca| & idem. \\
+\Iattr{parallelogram}{ad} & |P.new.ad| & idem. \\
+\Iattr{parallelogram}{bc} & |P.new.bc| & idem. \\
+\Iattr{parallelogram}{bd} & |P.new.bd| & idem. \\
+\Iattr{parallelogram}{cd} & |P.new.cd| & idem. \\
+\bottomrule %
+\end{tabular}
+\egroup
+\subsubsection{Example: attributes } % (fold)
+\label{ssub:example_attributes}
+
+% subsubsection example_attributes (end)
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 1 )
+z.C = point : new ( 7 , 5 )
+z.D = point : new ( 3 , 4 )
+P.new = parallelogram : new (z.A,z.B,z.C,z.D)
+z.B = P.new.pb
+z.C = P.new.pc
+z.D = P.new.pd
+z.I = P.new.i
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 1 )
+z.C = point : new ( 7 , 5 )
+z.D = point : new ( 3 , 4 )
+P.new = parallelogram : new (z.A,z.B,z.C,z.D)
+z.B = P.new.pb
+z.C = P.new.pc
+z.D = P.new.pd
+z.I = P.new.i
+\end{tkzelements}
+ \hspace{\fill}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{minipage}
+
+
+\newpage
+
+\subsection{Parallelogram methods} % (fold)
+\label{sub:parallelogram_methods}
+
+% subsection parallelogram_methods (end)
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{Parallelogram methods.}
+\begin{tabular}{ll}
+\toprule
+\textbf{Methods} & \textbf{Comments} \\
+\midrule \\
+\Imeth{parallelogram}{fourth (za,zb,zc)} & completes a triangle by parallelogram (see next example)\\
+\bottomrule %
+\end{tabular}
+\egroup
+
+\subsubsection{parallelogram with fourth method} % (fold)
+\label{ssub:parallelogram_with_fourth_method}
+
+% subsubsection parallelogram_with_fourth_method (end)
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+ scale = .75
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 1 )
+z.C = point : new ( 5 , 3 )
+P.four = parallelogram : fourth (z.A,z.B,z.C)
+z.D = P.four.pd
+z.I = P.four.center
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,D,B,C)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 1 )
+z.C = point : new ( 5 , 3 )
+P.four = parallelogram : fourth (z.A,z.B,z.C)
+z.D = P.four.pd
+z.I = P.four.center
+\end{tkzelements}
+
+\hspace{\fill}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{minipage}
+% subsubsection parallelogram_with_side_method (end)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
index a9a1785ef1..c9b5928ff0 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex
@@ -1,162 +1,351 @@
\newpage
-\section{Class point} % (fold)
+\section{Class \Iclass{point}} % (fold)
\label{sec:class_point}
-The first one is the base of the package, it is the class \tkzname{point}. This class is hybrid in the sense that it is as much about points of a plane as complex numbers. The principle is the following: the plane is provided with an orthonormal basis which allows us to determine the placement of a point using its abscissa and ordinate coordinates; in the same way any complex number can simply be considered as a pair of real numbers (its real part and its imaginary part). We can then designate the plane as the complex plane, and the complex number $x+iy$ is represented by the point of the plane with coordinates $(x,y)$. Thus the point $A$ will have affix $z.A$. This affix will be with Lua stored in the table $z$ in the form of a couple of real numbers $(x_A,y_A)$. The first element being the real part of the complex, and the second the imaginary part. There will be an identification between the and its corresponding affix. More precisely, for Lua the name of the point is the key that allows the table to designate the pair of reals associated to the affix.
+The class on which the whole edifice rests, it's the class \Iclass{point}. This class is hybrid in the sense that it is as much about points of a plane as complex numbers. The principle is the following: the plane is provided with an orthonormal basis which allows us to determine the placement of a point using its abscissa and ordinate coordinates; in the same way any complex number can simply be considered as a pair of real numbers (its real part and its imaginary part). We can then designate the plane as the complex plane, and the complex number $x+iy$ is represented by the point of the plane with coordinates $(x,y)$. Thus the point $A$ will have coordinates stored in the object $z.A$. Coordinates are attributes of the "point" object, like type, argument and modulus.
-Writing |z.A = point: new (2,3) | creates an object of class point where |z.A = 2+3i|.
The creation of a point is done using the following method, but there are other possibilities. If a scaling factor has been given, the method takes it into account.
+\setbox\strutbox=\hbox{\vrule height6.8pt depth3.2pt width0pt}
-\subsection{Attributs of a point} % (fold)
-\label{sub:attributs_of_a_point}
+ \def\size{42mm}
+\begin{tikzpicture}[remember picture]
+ \node[ draw, fill=red!10] (tbl) {%
+ \centering
+ \begin{minipage}{\size}
+ \hspace{\fill} \texttt{Arguments}\hspace{\fill}
+
+ \tikz\node[minimum width=\size,font=\small,
+ draw, fill=cyan!10,
+ rectangle split, rectangle split parts=5
+ ] {
+ \texttt{re (real)\strutbox}
+ \nodepart{two}\texttt{im (real)\strutbox}
+ \nodepart{three}\texttt{type = 'point'\strutbox}
+ \nodepart{four}\texttt{argument (rad)\strutbox}
+ \nodepart{five}\texttt{modulus (cm)\strutbox}
+ };
+
+ \hspace{\fill} \texttt{Methods}\hspace{\fill}
+
+ \tikz\node[minimum width=\size,font=\small,
+ draw, fill=orange!20,sharp corners,
+ rectangle split, rectangle split parts=4
+ ] {
+ \texttt{homothety(coeff,obj)\strutbox}
+ \nodepart{two}\texttt{rotation (angle,object)\strutbox}
+ \nodepart{three}\texttt{symmetry (object)\strutbox}
+ \nodepart{four}\texttt{\ldots}
+ };
+
+ \end{minipage}
+ };
+ \node[ draw, fill=red!10,,minimum height = 2em,
+ rounded corners,anchor=south] (tc) at (tbl.north){Class |Point|};
+\end{tikzpicture}
+\hspace{5cm}\begin{tikzpicture}[remember picture]
+ \node[ draw, fill=red!10] (tbl) {%
+ \centering
+ \begin{minipage}{\size}
+ \hspace{\fill} \texttt{Arguments}\hspace{\fill}
+
+ \tikz\node[minimum width=\size,font=\small,
+ draw, fill=cyan!10,
+ rectangle split, rectangle split parts=5
+ ] {
+ \texttt{re = 1\strutbox}
+ \nodepart{two}\texttt{im = 2\strutbox}
+ \nodepart{three}\texttt{type = 'point'\strutbox}
+ \nodepart{four}\texttt{argument = atan(2)\strutbox}
+ \nodepart{five}\texttt{modulus = $\sqrt{5}$\strutbox}
+ };
+
+ \hspace{\fill} \texttt{Methods}\hspace{\fill}
+
+ \tikz\node[minimum width=\size,font=\small,
+ draw, fill=orange!20,sharp corners,
+ rectangle split, rectangle split parts=4
+ ] {
+ \texttt{homothety(coeff,obj)\strutbox}
+ \nodepart{two}\texttt{rotation (angle,object)\strutbox}
+ \nodepart{three}\texttt{symmetry (object)\strutbox}
+ \nodepart{four}\texttt{\ldots\strutbox}
+ };
+
+ \end{minipage}
+ };
+ \node[ draw, fill=red!10,remember picture,minimum height = 2em,
+ rounded corners,anchor=south] (to) at (tbl.north){object |z.A|};
+\end{tikzpicture}
+
+\begin{tikzpicture}[remember picture,overlay]
+\draw [thick,->](tc.east) -- (to.west);
+\end{tikzpicture}
+
+\subsection{Attributes of a point} % (fold)
+\label{sub:attributes_of_a_point}
% Method \Imeth{point}{new}
-|z.A = point: new (1,2)|. The point $A$ has coordinates $x=1$ and $y=2$. If you use the notation |z.A| then $A$ will be the reference of a node in \TIKZ\ or in \pkg{tkz-euclide}.
+
+\begin{mybox}
+ Creation |z.A = point: new (1,2) |
+\end{mybox}
+ The point $A$ has coordinates $x=1$ and $y=2$. If you use the notation |z.A| then $A$ will be the reference of a node in \TIKZ\ or in \pkg{tkz-euclide}.
This is the creation of a fixed point with coordinates 1 and 2 and which is named $A$. The notation |z.A| indicates that the coordinates will be stored in a table noted |z| (reference to the notation of the affixes of the complex numbers) that A is the name of the point and the key allowing access to the values.
-\bgroup
-\catcode`_=12
+\vspace{1em}
+\bgroup
\small
-\begin{center}
-%\caption{Attributes about point class.}
-\begin{tabular}{ll}
+\catcode`_=12
+\captionof{table}{Point attributes.}
+\begin{tabular}{lll}
\toprule
-\textbf{Attributes} & \textbf{Application}\\
-\Iattr{point}{re} & |z.a.re| \tkzar z.a = point:new (2,3) x = z.a.re -> x=2\\
-\Iattr{point}{im} & |z.a.im| \tkzar z.a = point:new (2,3) y= z.a.im -> y=3\\
-\Iattr{point}{type} & |z.a.type| \tkzar |z.a.type = point|\\
-\Iattr{point}{argument} & |z.a.argument| \tkzar |z.a.argument = 0.78539816339745| if z.a = 1+i\\
-\Iattr{point}{module} & |z.a.module| \tkzar |z.a.module = 1.4142135623731| if z.a = 1+i\\
+\textbf{Attributes} & \textbf{Application}\\
+\Iattr{point}{re} & |z.A.re| &\tkzar |z.A = point:new (1,2) x = z.A.re|=1\\
+\Iattr{point}{im} & |z.A.im| &\tkzar |z.A = point:new (1,2) y= z.A.im|=2\\
+\Iattr{point}{type} & |z.A.type| &\tkzar |z.A.type = 'point'|\\
+\Iattr{point}{argument} & |z.A.argument| &\tkzar |z.A.argument $\approx$ 0.78539816339745|\\
+\Iattr{point}{module} & |z.A.module| &\tkzar |z.A.module| $\approx$ |2.2360...| =$\sqrt{5}$\\
\bottomrule
\end{tabular}
-\end{center}
\egroup
+\newpage
\subsubsection{Example:point attributes} % (fold)
\label{ssub:example_point_attributes}
-\begin{tkzexample}[latex=0cm,small,code only]
+
\begin{tkzelements}
- z.O = point: new (0 , 0)
- z.a = point: new (2, 3)
- x = z.a.re
- y = z.a.im
- ty = z.a.type
- arg = z.a.argument
- m = z.a.modulus
+ z.M = point: new (1,2)
\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzInit[ymax=4,xmax=7]
- \tkzGrid
- \tkzDrawPoints(a,O)
- \tkzLabelPoints[above](O,a)
- \tkzLabelPoint[below](a){
- \begin{minipage} {5cm}
- x=\tkzUseLua{x}\\ y=\tkzUseLua{y}\\ type =\tkzUseLua{ty}\\ argument = \tkzUseLua{arg} \\ module = \tkzUseLua{m}
- \end{minipage}}
-\end{tikzpicture}
-\end{tkzexample}
+\hspace*{\fill}
+
+\begin{verbatim}
\begin{tkzelements}
- z.O = point: new (0 , 0)
- z.a = point: new (2, 3)
- x = z.a.re
- y = z.a.im
- ty = z.a.type
- arg = z.a.argument
- m = z.a.modulus
+ z.M = point: new (1,2)
\end{tkzelements}
+\end{verbatim}
+\pgfkeys{/pgf/number format/.cd,std,precision=2}
+\let\pmpn\pgfmathprintnumber
+\DeleteShortVerb{\|}
- \hspace*{\fill}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzInit[ymax=5,xmax=7]
- \tkzGrid
- \tkzDrawPoints(a,O)
- \tkzLabelPoints[above](O,a)
- \tkzLabelPoint[below right](a){
- \begin{minipage} {5cm}
- x=\tkzUseLua{x}\\ y=\tkzUseLua{y}\\
- type =\tkzUseLua{ty}\\ argument = \tkzUseLua{arg} \\
- module = \tkzUseLua{m}
- \end{minipage}}
+\begin{verbatim}
+\begin{tikzpicture}[scale = 1]
+\pgfkeys{/pgf/number format/.cd,std,precision=2}
+\let\pmpn\pgfmathprintnumber
+\tkzDefPoints{2/4/M,2/0/A,0/0/O,0/4/B}
+\tkzLabelPoints(O)
+\tkzMarkAngle[fill=gray!30,size=1](A,O,M)
+\tkzLabelAngle[pos=1,right](A,O,M){%
+$\theta \approx \pmpn{\tkzUseLua{z.M.argument}}$ rad}
+\tkzDrawSegments(O,M)
+\tkzLabelSegment[above,sloped](O,M){%
+$|z_M| =\sqrt{5}\approx \pmpn{\tkzUseLua{z.M.modulus}}$ cm}
+\tkzLabelPoint[right](M){$M : z_M = 1 + 2i$}
+\tkzDrawPoints(M,A,O,B)
+\tkzPointShowCoord(M)
+\tkzLabelPoint[below,teal](A){$\tkzUseLua{z.M.re}$}
+\tkzLabelPoint[left,teal](B){$\tkzUseLua{z.M.im}$}
+\tkzDrawSegments[->,add = 0 and 0.25](O,B O,A)
+\end{tikzpicture}
+\end{verbatim}
+
+
+\begin{center}
+ \begin{tikzpicture}
+ \pgfkeys{/pgf/number format/.cd,std,precision=2}
+ \let\pmpn\pgfmathprintnumber
+ \tkzDefPoints{2/4/M,2/0/A,0/0/O,0/4/B}
+ \tkzLabelPoints(O)
+ \tkzMarkAngle[fill=gray!30,size=1](A,O,M)
+ \tkzLabelAngle[pos=1,right](A,O,M){%
+ $\theta \approx \pmpn{\tkzUseLua{z.M.argument}}$ rad}
+ \tkzDrawSegments(O,M)
+ \tkzLabelSegment[above,sloped](O,M){%
+ $|z_M| =\sqrt{5}\approx \pmpn{\tkzUseLua{z.M.modulus}}$ cm}
+ \tkzLabelPoint[right](M){$M : z_M = 1 + 2i$}
+ \tkzDrawPoints(M,A,O,B)
+ \tkzPointShowCoord(M)
+ \tkzLabelPoint[below,teal](A){$\tkzUseLua{z.M.re}$}
+ \tkzLabelPoint[left,teal](B){$\tkzUseLua{z.M.im}$}
+ \tkzDrawSegments[->,add = 0 and 0.25](O,B O,A)
+ \begin{scope}[every annotation/.style={fill=lightgray!15,anchor = east}]
+ \node [annotation,font =\small,text width=6cm] at (current bounding box.west) {
+Attributes of \texttt{z.M}
+ \begin{itemize}
+ \item \texttt{z.M.re} = 1
+ \item \texttt{z.M.im} = 2
+ \item \texttt{z.M.type} = 'point'
+ \item \texttt{z.M.argument} = $\theta \approx \pmpn{\tkzUseLua{z.M.argument}}$ rad
+ \item \texttt{z.M.modulus} = $|z_M| =\sqrt{5}\approx \pmpn{\tkzUseLua{z.M.modulus}}$ cm
+ \end{itemize}
+ };
+ \end{scope}
\end{tikzpicture}
+\end{center}
+
+\MakeShortVerb{\|}
\hspace*{\fill}
% \caption{Class Point}
% subsubsection example_point_attributes (end)
-% subsection attributs_of_a_point (end)
+% subsection attributes_of_a_point (end)
+
+\subsubsection{Argand diagram} % (fold)
+\label{ssub:argand_diagram}
+\normalsize
+\begin{minipage}{\textwidth}
+ \begin{verbatim}
+ \begin{tkzelements}
+ z.A = point : new ( 2 , 3 )
+ z.O = point : new ( 0 , 0 )
+ z.I = point : new ( 1 , 0 )
+ \end{tkzelements}
+ \hspace{\fill}\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzInit[xmin=-4,ymin=-4,xmax=4,ymax=4]
+ \tkzDrawCircle[dashed,red](O,A)
+ \tkzPointShowCoord(A)
+ \tkzDrawPoint(A)
+ \tkzLabelPoint[above right](A){\normalsize $a+ib$}
+ \tkzDrawX\tkzDrawY
+ \tkzDrawSegment(O,A)
+ \tkzLabelSegment[above,anchor=south,sloped](O,A){ OA = modulus of $z_A$}
+ \tkzLabelAngle[anchor=west,pos=.5](I,O,A){$\theta$ = argument of $z_A$}
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+
+\begin{minipage}{\textwidth}
+ \begin{tkzelements}
+ z.A = point : new ( 2 , 3 )
+ z.O = point : new ( 0 , 0 )
+ z.I = point : new ( 1 , 0 )
+ \end{tkzelements}
+ \hspace{\fill}\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzInit[xmin=-4,ymin=-4,xmax=4,ymax=4]
+ \tkzDrawCircle[dashed,red](O,A)
+ \tkzPointShowCoord(A)
+ \tkzDrawPoint(A)
+ \tkzLabelPoint[above right](A){\normalsize $a+ib$}
+ \tkzDrawX\tkzDrawY
+ \tkzDrawSegment(O,A)
+ \tkzLabelSegment[above,anchor=south,sloped](O,A){ OA = modulus of $z_A$}
+ \tkzLabelAngle[anchor=west,pos=.5](I,O,A){$\theta$ = argument of $z_A$}
+ \end{tikzpicture}
+ \hspace{\fill}
+\end{minipage}
+
+% subsubsection argand_diagram (end)
+\newpage
\subsection{Methods of the class point} % (fold)
\label{sub:methods_of_the_class_point}
-The methods described in the following table are standard. You'll find them in most of the examples at the end of this documentation. The result of the different methods presented in the following table is a \tkzNameObj{point}. A word about methods beginning with |set_|. The purpose is to be able to apply a method to a list of points.
+The methods described in the following table are standard. You'll find them in most of the examples at the end of this documentation. The result of the different methods presented in the following table is a \tkzNameObj{point}.
+\vspace{1em}
\bgroup
\catcode`_=12
-
\small
-\begin{center}
-%\caption{Methods from elements\_points.lua }
-\begin{tabular}{ll}
+\captionof{table}{Methods of the class point.}
+\begin{tabular}{lll}
\toprule
-\textbf{Methods} & \textbf{Application} \\
+\textbf{Methods} & \textbf{Application}& \\
\midrule
+ new (a,b) & |z.a = point : new(1,2)| &\tkzar affix z.a=1+2i \\
+ polar (radius, phi) & |z.a = point : polar(1,math.pi/3)| &\tkzar affix $cos(\pi/3)+sin(\pi/3)i$ \\
+ polar_deg (radius, phi) & phi in deg &\tkzar polar coordinates phi deg \\
\midrule
- \textbf{Points} &\\
+ \textbf{Points} &&\\
\midrule
- new (a,b) & |z.a = point : new(1,2)| \tkzar affix z.a=1+2i \\
- polar (radius, phi) & |z.a = point : polar(1,math.pi/3)| \tkzar affix $cos(\pi/3)+sin(\pi/3)i$ \\
- polar_deg (radius, phi) & phi in deg \tkzar polar coordinates phi deg \\
- north(d) & see \ref{sub:power_v2} |d| distance to the point 1 if empty \\
+ north(d) & see \ref{sub:power_v2} |d| distance to the point & d=1 1 if empty \\
south(d) & \\
east(d) & \\
west(d) & \\
- symmetry(z) & |z.c = z.a:symmetry(z.b)| \tkzar c symmetry of b with respect to a\\
- set\_symmetry (...) & |z.bp,z.cp = z.a : symmetry(z.b,z.c)| \tkzar list of points\\
- rotation(angle , pt) & |z.c = z.a : rotation (math.pi/2,z.b)| \tkzar affix; rotation center a\\
- set\_rotation (angle,...)& \\
- homothety(k,pt) & |z.c = z.a : homothety (2,z.b)| \\
- set\_homothety (k,...) & \\
- normalize() & |z.b = z.a: normalize () | \tkzar |z.b| = 1 and z.a = k$\times$ z.b \\
+ normalize() & |z.b = z.a: normalize ()| &\tkzar |z.b| = 1 and z.a = k$\times$ z.b \\
+ get_points (obj) & retrieves points from the object & \\
+ \midrule
+ \textbf{Transformations} &&\\
+ \midrule
+ symmetry(obj) & obj : point,line,etc. &\tkzar z.a:symmetry (C.OH) \\
+ rotation(angle , obj) & point,line,etc. &\tkzar rotation center a\\
+ homothety(k,obj) & |z.c = z.a : homothety (2,z.b)| & \\
\bottomrule %
\end{tabular}
-\end{center}
+\egroup
+
+\subsubsection{Example: method \Imeth{point}{north (d)} } % (fold)
+\label{ssub:example_method_imeth_point_north_d}
- \egroup
+If |d| is absent then it is considered equal to 1.
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+ z.O = point : new ( 0, 0 )
+ z.A = z.O : east ()
+ z.Ap = z.O : east (2) : north (2)
+ z.B = z.O : north ()
+ z.C = z.O : west ()
+ z.D = z.O : south ()
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C,D)
+ \tkzDrawPoints(A,B,C,D,O,A')
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale = 1.5
+ z.O = point : new ( 0, 0 )
+ z.A = z.O : east ()
+ z.Ap = z.O : east (2) : north (2)
+ z.B = z.O : north ()
+ z.C = z.O : west ()
+ z.D = z.O : south ()
+\end{tkzelements}
+\hspace{\fill}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C,D)
+ \tkzDrawPoints(A,B,C,D,O,A')
+ \tkzLabelPoints(A,B,C,D,O,A')
+\end{tikzpicture}
+\end{minipage}
+% subsubsection example_method_imeth_point_north_d (end)
\subsubsection{Example: method \Imeth{point}{polar} } % (fold)
\label{ssub:example_polar_method}
\begin{minipage}{0.6\textwidth}
\begin{tkzexample}[latex=0cm,small,code only]
\begin{tkzelements}
- scale = .5
z.O = point: new (0, 0)
z.A = point: new (3, 0)
- z.F = point: polar (3, math.pi/6)
+ z.F = point: polar (3, math.pi/3)
\end{tkzelements}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircle(O,A)
- \tkzDrawSegments[new](O,A)
- \tkzDrawSegments[purple](O,F)
- \tkzDrawPoints(A,O,F)
- \tkzLabelPoints(A,O,F)
- \end{tikzpicture}
- \end{tkzexample}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircle(O,A)
+ \tkzDrawSegments[new](O,A)
+ \tkzDrawSegments[purple](O,F)
+ \tkzDrawPoints(A,O,F)
+ \tkzLabelPoints[below right=6pt](A,O,F)
+\end{tikzpicture}
+\end{tkzexample}
\end{minipage}
\begin{minipage}{0.4\textwidth}
\begin{tkzelements}
- scale = .5
+ scale = .75
z.O = point: new (0, 0)
z.A = point: new (3, 0)
- z.F = point: polar (3, math.pi/6)
+ z.F = point: polar (3, math.pi/3)
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -168,50 +357,153 @@ The methods described in the following table are standard. You'll find them in m
\end{tikzpicture}
\hspace*{\fill}
\end{minipage}
-% \caption{Method polar}
-
% subsubsection example_polar_method (end)
-\subsubsection{Example: rotation of points method \Imeth{point}{set\_rotation}} % (fold)
+\subsubsection{Example: rotation of points} % (fold)
\label{ssub:example_rotation_of_points}
+\begin{minipage}{.6\textwidth}
\begin{tkzexample}[latex=0cm,small,code only]
\begin{tkzelements}
- z.a = point: new(0, -1)
- z.b = point: new(4, 0)
- z.o = point: new(6, -2)
- z.ap,z.bp = z.o : set_rotation (math.pi/2,z.a,z.b)
+ z.a = point: new(0, -1)
+ z.b = point: new(4, 0)
+ z.o = point: new(6, -2)
+ z.ap,z.bp = z.o : rotation (math.pi/2,z.a,z.b)
\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLines(o,a o,a' o,b o,b')
- \tkzDrawPoints(a,a',b,b',o)
- \tkzLabelPoints(a,a',b,b',o)
- \tkzDrawArc(o,a)(a')
- \tkzDrawArc(o,b)(b')
- \end{tikzpicture}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(o,a o,a' o,b o,b')
+ \tkzDrawPoints(a,a',b,b',o)
+ \tkzLabelPoints(b,b',o)
+ \tkzLabelPoints[below left](a,a')
+ \tkzDrawArc(o,a)(a')
+ \tkzDrawArc(o,b)(b')
+ \end{tikzpicture}
\end{tkzexample}
-
+\end{minipage}
+\begin{minipage}{.4\textwidth}
\begin{tkzelements}
- scale = .5
- z.a = point: new(0, -1)
- z.b = point: new(4, 0)
- z.o = point: new(6, -2)
- z.ap,z.bp = z.o : set_rotation (math.pi/2,z.a,z.b)
+ scale = .5
+ z.a = point: new(0, -1)
+ z.b = point: new(4, 0)
+ z.o = point: new(6, -2)
+ z.ap,z.bp = z.o : rotation (math.pi/2,z.a,z.b)
\end{tkzelements}
-
-
\hspace*{\fill}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLines(o,a o,a' o,b o,b')
- \tkzDrawPoints(a,a',b,b',o)
- \tkzLabelPoints(a,a',b,b',o)
- \tkzDrawArc(o,a)(a')
- \tkzDrawArc(o,b)(b')
- \end{tikzpicture}
-\hspace*{\fill}
-%\caption{Rotation of points}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines(o,a o,a' o,b o,b')
+ \tkzDrawPoints(a,a',b,b',o)
+ \tkzLabelPoints(b,b',o)
+ \tkzLabelPoints[below left](a,a')
+ \tkzDrawArc(o,a)(a')
+ \tkzDrawArc(o,b)(b')
+\end{tikzpicture}
+\end{minipage}
% subsubsection example_rotation_of_points (end)
+
+\subsubsection{Object rotation} % (fold)
+\label{ssub:object_rotation}
+Rotate a triangle by an angle of $\pi/6$ around $O$.
+
+\begin{minipage}{.5\textwidth}
+ \begin{verbatim}
+\begin{tkzelements}
+z.O = point : new ( -1 , -1 )
+z.A = point : new ( 2 , 0 )
+z.B = point : new ( 5 , 0 )
+L.AB = line : new (z.A,z.B)
+T.ABC = L.AB : equilateral ()
+S.fig = L.AB : square ()
+_,_,z.E,z.F = get_points ( S.fig )
+S.new = z.O : rotation (math.pi/3,S.fig)
+_,_,z.Ep,z.Fp = get_points ( S.new )
+z.C = T.ABC.pc
+T.ApBpCp = z.O : rotation (math.pi/3,T.ABC)
+z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp)
+\end{tkzelements}
+
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C A',B',C' A,B,E,F A',B',E',F')
+ \tkzDrawPoints (A,B,C,A',B',C',O)
+ \tkzLabelPoints (A,B,C,A',B',C',O)
+ \tkzDrawArc[delta=0,->](O,A)(A')
+\end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.O = point : new ( -1 , -1 )
+z.A = point : new ( 2 , 0 )
+z.B = point : new ( 5 , 0 )
+L.AB = line : new (z.A,z.B)
+T.ABC = L.AB : equilateral ()
+S.fig = L.AB : square ()
+_,_,z.E,z.F = get_points ( S.fig )
+S.new = z.O : rotation (math.pi/3,S.fig)
+_,_,z.Ep,z.Fp = get_points ( S.new )
+z.C = T.ABC.pc
+T.ApBpCp = z.O : rotation (math.pi/3,T.ABC)
+z.Ap,z.Bp,z.Cp = get_points ( T.ApBpCp)
+\end{tkzelements}
+
+\hspace{\fill}\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygons(A,B,C A',B',C' A,B,E,F A',B',E',F')
+ \tkzDrawPoints (A,B,C,A',B',C',O)
+ \tkzLabelPoints (A,B,C,A',B',C',O)
+ \begin{scope}
+ \tkzDrawArc[delta=0,->,dashed,red](O,A)(A')
+ \tkzDrawSegments[dashed,red](O,A O,A')
+ \end{scope}
+
+\end{tikzpicture}
+\end{minipage}
+% subsubsection object_rotation (end)
+
+\subsubsection{Object symmetry} % (fold)
+\label{ssub:object_symmetry}
+\begin{minipage}{.5\textwidth}
+ \begin{verbatim}
+ \begin{tkzelements}
+ z.a = point: new(0,-1)
+ z.b = point: new(2, 0)
+ L.ab = line : new (z.a,z.b)
+ C.ab = circle : new (z.a,z.b)
+ z.o = point: new(1,1)
+ z.ap,z.bp = get_points (z.o: symmetry (C.ab))
+ \end{tkzelements}
+
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(a,b a',b')
+ \tkzDrawLines(a,a' b,b')
+ \tkzDrawLines[red](a,b a',b')
+ \tkzDrawPoints(a,a',b,b',o)
+ \tkzLabelPoints(a,a',b,b',o)
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ z.a = point: new(0, -1)
+ z.b = point: new(2, 0)
+ L.ab = line : new (z.a,z.b)
+ C.ab = circle : new (z.a,z.b)
+ z.o = point: new(1, 1)
+ z.ap,z.bp = get_points (z.o: symmetry (C.ab))
+\end{tkzelements}
+
+\hspace{\fill}\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles(a,b a',b')
+\tkzDrawLines(a,a' b,b')
+\tkzDrawLines[red](a,b a',b')
+\tkzDrawPoints(a,a',b,b',o)
+\tkzLabelPoints(a,a',b,b',o)
+\end{tikzpicture}
+\end{minipage}
+% subsubsection object_symmetry (end)
% subsection methods_of_the_class_point (end)
% section class_point (end)
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex
new file mode 100644
index 0000000000..1e1a23b1d4
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex
@@ -0,0 +1,160 @@
+\newpage
+\section{Classe \Iclass{Quadrilateral}} % (fold)
+
+\subsection{Quadrilateral Attributes} % (fold)
+\label{sub:quadrilateral_attributes}
+
+Points are created in the direct direction. A test is performed to check whether the points form a rectangle, otherwise compilation is blocked.
+
+\begin{mybox}
+Creation | Q.new = rectangle : new (z.A,z.B,z.C,z.D)|
+\end{mybox}
+
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{rectangle attributes.}
+\begin{tabular}{lll}
+\toprule
+\textbf{Attributes} & \textbf{Application} & \\
+\Iattr{quadrilateral}{pa} & |z.A = Q.new.pa| & \\
+\Iattr{quadrilateral}{pb} & |z.B = Q.new.pb| & \\
+\Iattr{quadrilateral}{pc} & |z.C = Q.new.pc| & \\
+\Iattr{quadrilateral}{pd} & |z.D = Q.new.pd| & \\
+\Iattr{quadrilateral}{type} & |Q.new.type= 'quadrilateral'| &\\
+\Iattr{quadrilateral}{i} & |z.I = Q.new.i| & intersection of diagonals\\
+\Iattr{quadrilateral}{g} & |z.G = Q.new.g| & barycenter\\
+\Iattr{quadrilateral}{a} & |AB = Q.new.a| & barycenter\\
+\Iattr{quadrilateral}{b} & |BC = Q.new.b| & barycenter\\
+\Iattr{quadrilateral}{c} & |CD = Q.new.c| & barycenter\\
+\Iattr{quadrilateral}{d} & |DA = Q.new.d| & barycenter\\
+\Iattr{quadrilateral}{ab} & |Q.new.ab| & line passing through two vertices \\
+\Iattr{quadrilateral}{ac} & |Q.new.ca| & idem. \\
+\Iattr{quadrilateral}{ad} & |Q.new.ad| & idem. \\
+\Iattr{quadrilateral}{bc} & |Q.new.bc| & idem. \\
+\Iattr{quadrilateral}{bd} & |Q.new.bd| & idem. \\
+\Iattr{quadrilateral}{cd} & |Q.new.cd| & idem. \\
+\bottomrule
+\end{tabular}
+\egroup
+
+\subsubsection{Quadrilateral attributes} % (fold)
+\label{ssub:quadrilateral_attributes}
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.C = point : new ( 5 , 1 )
+z.D = point : new ( -1 , 4 )
+Q.ABCD = quadrilateral : new ( z.A , z.B , z.C , z.D )
+z.I = Q.ABCD.i
+z.G = Q.ABCD.g
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawSegments(A,C B,D)
+\tkzDrawPoints(A,B,C,D,I,G)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.C = point : new ( 5 , 1 )
+z.D = point : new ( -1 , 4 )
+Q.ABCD = quadrilateral : new ( z.A , z.B , z.C , z.D )
+z.I = Q.ABCD.i
+z.G = Q.ABCD.g
+\end{tkzelements}
+
+\hspace{\fill}\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawSegments(A,C B,D)
+\tkzDrawPoints(A,B,C,D,I,G)
+\end{tikzpicture}
+\end{minipage}
+
+% subsubsection quadrilateral_attributes (end)
+% subsection quadrilateral_attributes (end)
+
+\subsection{Quadrilateral methods} % (fold)
+\label{sub:quadrilateral_methods}
+
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{Quadrilateral methods.}
+\begin{tabular}{ll}
+\toprule
+\textbf{Methods} & \textbf{Comments} \\
+\midrule \\
+\Imeth{quadrilateral}{cyclic ()} & inscribed ? (see next example)\\
+\bottomrule %
+\end{tabular}
+\egroup
+
+\subsubsection{Inscribed quadrilateral} % (fold)
+\label{ssub:inscribed_quadrilateral}
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.D = point : polar ( 4 , 2*math.pi/3 )
+L.DB = line : new (z.D,z.B)
+T.equ = L.DB : equilateral ()
+z.C = T.equ.pc
+Q.new = quadrilateral : new (z.A,z.B,z.C,z.D)
+bool = Q.new : cyclic ()
+if bool == true then
+C.cir = triangle : new (z.A,z.B,z.C): circum_circle ()
+z.O = C.cir.center
+end
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B,C,D)
+\tkzDrawCircle(O,A)
+\ifthenelse{\equal{\tkzUseLua{bool}}{true}}{
+\tkzDrawCircle(O,A)}{}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+scale = .75
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.D = point : polar ( 4 , 2*math.pi/3 )
+L.DB = line : new (z.D,z.B)
+T.equ = L.DB : equilateral ()
+z.C = T.equ.pc
+Q.new = quadrilateral : new (z.A,z.B,z.C,z.D)
+bool = Q.new : cyclic ()
+if bool == true then
+C.cir = triangle : new (z.A,z.B,z.C): circum_circle ()
+z.O = C.cir.center
+end
+\end{tkzelements}
+\hspace{\fill}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B,C,D)
+\tkzDrawCircle(O,A)
+\ifthenelse{\equal{\tkzUseLua{bool}}{true}}{
+\tkzDrawCircle(O,A)}{}
+\end{tikzpicture}
+\end{minipage}
+% subsubsection inscribed_quadrilateral (end)
+
+% subsection quadrilateral_methods (end) \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex
new file mode 100644
index 0000000000..29e9fb89d4
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex
@@ -0,0 +1,298 @@
+\newpage
+\section{Classe \Iclass{rectangle}} % (fold)
+
+\subsection{Rectangle attributes} % (fold)
+\label{sub:rectangle_attributes}
+
+
+Points are created in the direct direction. A test is performed to check whether the points form a rectangle, otherwise compilation is blocked.
+
+\begin{mybox}
+Creation | R.ABCD = rectangle : new (z.A,z.B,z.C,z.D)|
+\end{mybox}
+
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{rectangle attributes.}
+\begin{tabular}{lll}
+\toprule
+\textbf{Attributes} & \textbf{Application} & \\
+\Iattr{rectangle}{pa} & |z.A = R.ABCD.pa| & \\
+\Iattr{rectangle}{pb} & |z.B = R.ABCD.pb| & \\
+\Iattr{rectangle}{pc} & |z.C = R.ABCD.pc| & \\
+\Iattr{rectangle}{pd} & |z.D = R.ABCD.pd| & \\
+\Iattr{rectangle}{type} & |R.ABCD.type= 'rectangle'| &\\
+\Iattr{rectangle}{center} & |z.I = R.ABCD.center| & center of the rectangle\\
+\Iattr{rectangle}{length} & |R.ABCD.length| & the length \\
+\Iattr{rectangle}{width} & |R.ABCD.width| & the width \\
+\Iattr{rectangle}{diagonal} & |R.ABCD.diagonal| & diagonal length\\
+\Iattr{rectangle}{ab} & |R.ABCD.ab| & line passing through two vertices \\
+\Iattr{rectangle}{ac} & |R.ABCD.ca| & idem. \\
+\Iattr{rectangle}{ad} & |R.ABCD.ad| & idem. \\
+\Iattr{rectangle}{bc} & |R.ABCD.bc| & idem. \\
+\Iattr{rectangle}{bd} & |R.ABCD.bd| & idem. \\
+\Iattr{rectangle}{cd} & |R.ABCD.cd| & idem. \\
+\bottomrule
+\end{tabular}
+\egroup
+
+\subsubsection{Example} % (fold)
+\label{ssub:example}
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.C = point : new ( 4 , 4)
+z.D = point : new ( 0 , 4)
+R.new = rectangle : new (z.A,z.B,z.C,z.D)
+z.I = R.new.center
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\hspace{\fill}\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale =1.5
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 4 , 0 )
+ z.C = point : new ( 4 , 2)
+ z.D = point : new ( 0 , 2)
+ R.new = rectangle : new (z.A,z.B,z.C,z.D)
+ z.I = R.new.center
+ \end{tkzelements}
+
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C,D)
+ \tkzDrawSegment[dashed](A,C)
+ \tkzDrawPoints(A,B,C,D)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C,D)
+ \tkzDrawPoints[red](I)
+ \tkzLabelPoint[right = 10pt](I){$I$\\ |R.new.center|}
+ \tkzLabelSegment[sloped,above](C,D){|R.new.length| = \pmpn{\tkzUseLua{R.new.length}}}
+ \tkzLabelSegment[sloped,above](A,C){|R.new.diagonal| = \pmpn{\tkzUseLua{R.new.diagonal}}}
+ % \tkzUseLua{R.new.length} and \tkzUseLua{R.new.diagonal} to get the values.
+\end{tikzpicture}
+\end{minipage}
+% subsubsection example (end)
+% subsection rectangle_attributes (end)
+
+\newpage
+\subsection{Rectangle methods} % (fold)
+\label{sub:rectangle_methods}
+
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{Rectangle methods.}
+\begin{tabular}{lll}
+\toprule
+\textbf{Methods} & \textbf{Comments} & \\
+\midrule
+\Imeth{rectangle}{angle (zi,za,angle)} &|R.ang = rectangle : angle (z.I,z.A)| ; |z.A | &vertex ; ang angle between 2 vertices\\
+\midrule
+\Imeth{rectangle}{gold (za,zb)} & |R.gold = rectangle : gold (z.A,z.B)| &length/width = $\phi$\\
+\midrule
+\Imeth{rectangle}{diagonal (za,zc)} &|R.diag = rectangle : diagonal (z.I,z.A)| &$I$ square center $A$ first vertex\\
+\midrule
+\Imeth{rectangle}{side (za,zb,d)} &|S.IA = rectangle : side (z.I,z.A)|& $I$ square center $A$ first vertex\\
+\midrule
+\Imeth{rectangle}{get\_lengths ()} &|S.IA = rectangle : get_lengths ()|& $I$ square center $A$ first vertex\\
+\bottomrule %
+\end{tabular}
+\egroup
+
+\subsubsection{Angle method} % (fold)
+\label{ssub:angle_method}
+
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+scale = .5
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.C = point : new ( 4 , 3 )
+P.ABCD = rectangle : angle ( z.C , z.A , math.pi/6)
+z.B = P.ABCD.pb
+z.C = P.ABCD.pc
+z.D = P.ABCD.pd
+z.I = P.ABCD.center
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C)
+\tkzLabelPoints(A,B,C,D)
+\tkzDrawPoints[new](I)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+scale = .5
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.C = point : new ( 4 , 3 )
+P.ABCD = rectangle : angle ( z.C , z.A , math.pi/6)
+z.B = P.ABCD.pb
+z.C = P.ABCD.pc
+z.D = P.ABCD.pd
+z.I = P.ABCD.center
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[new](I)
+\tkzLabelSegment[sloped,above](A,B){|rectangle: angle (z.C,z.A,math.pi/6)|}
+\end{tikzpicture}
+\end{minipage}
+% subsubsection angle_method (end)
+
+\subsubsection{Side method} % (fold)
+\label{ssub:side_method}
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 3 )
+R.side = rectangle : side (z.A,z.B,3)
+z.C = R.side.pc
+z.D = R.side.pd
+z.I = R.side.center
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 3 )
+R.side = rectangle : side (z.A,z.B,3)
+z.C = R.side.pc
+z.D = R.side.pd
+z.I = R.side.center
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\tkzLabelSegment[sloped,above](A,B){|rectangle : side (z.A,z.B,3)|}
+\end{tikzpicture}
+\end{minipage}
+% subsubsection side_method (end)
+
+\subsubsection{Diagonal method} % (fold)
+\label{ssub:diagonal_method}
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.E = point : new ( 0 , 0 )
+z.G = point : new ( 4 , 3 )
+R.diag = rectangle : diagonal (z.E,z.G)
+z.F = R.diag.pb
+z.H = R.diag.pd
+z.I = R.diag.center
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(E,F,G,H)
+\tkzDrawPoints(E,F,G,H)
+\tkzLabelPoints((E,F)
+\tkzLabelPoints[above](G,H)
+\tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.C = point : new ( 4 , 3 )
+R.diag = rectangle : diagonal (z.A,z.C)
+z.B = R.diag.pb
+z.D = R.diag.pd
+z.I = R.diag.center
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\tkzLabelSegment[sloped,above](A,B){|rectangle : diagonal (z.A,z.C)|}
+\end{tikzpicture}
+\end{minipage}
+% subsubsection diagonal_method (end)
+
+\subsubsection{Gold method} % (fold)
+\label{ssub:gold_method}
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.X = point : new ( 0 , 0 )
+z.Y = point : new ( 4 , 2 )
+R.gold = rectangle : gold (z.A,z.B)
+z.C = R.gold.pc
+z.D = R.gold.pd
+z.I = R.gold.center
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+z.X = point : new ( 0 , 0 )
+z.Y = point : new ( 4 , 2 )
+R.gold = rectangle : gold (z.X,z.Y)
+z.Z = R.gold.pc
+z.W = R.gold.pd
+z.I = R.gold.center
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(X,Y,Z,W)
+\tkzDrawPoints(X,Y,Z,W)
+\tkzLabelPoints(X,Y)
+\tkzLabelPoints[above](Z,W)
+\tkzDrawPoints[red](I)
+\tkzLabelSegment[sloped,above](X,Y){|rectangle : gold (z.X,z.Y)|}
+\end{tikzpicture}
+\end{minipage}
+% subsubsection gold_method (end)
+% subsection rectangle_methods (end) \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
new file mode 100644
index 0000000000..4a25afdfe5
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-regular.tex
@@ -0,0 +1,103 @@
+\newpage
+\section{Classe \Iclass{Regular Polygon}} % (fold)
+
+\subsection{regular\_polygon attributes} % (fold)
+\label{sub:regular_polygon_attributes}
+
+\begin{mybox}
+Creation | RP.IA = regular_polygon : new (z.I,z.A,6)|
+\end{mybox}
+
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{Regular\_polygon attributes.}
+\begin{tabular}{ll}
+\toprule
+\textbf{Attributes} & \textbf{Application} \\
+\Iattr{square}{center} & |z.I = RP.IA.center| \\
+\Iattr{square}{table} & array containing all vertex affixes \\
+\Iattr{square}{through} & first vertex \\
+\Iattr{square}{circle} & defines the circle with center I passing through A \\
+\Iattr{square}{type} & |RP.IA.type= 'regular\_polygon'| \\
+\Iattr{square}{side} & |s = RP.IA.side| ; s = length of side\\
+\Iattr{square}{exradius}& |S.AB.exradius| ; radius of the circumscribed circle \\
+\Iattr{square}{inradius}& |S.AB.inxradius| ; radius of the inscribed circle \\
+\Iattr{square}{proj} & |RP.IA.proj| ; projection of the center on one side \\
+\Iattr{square}{angle} & |RP.IA.angle| ; angle formed by the center and 2 consecutive vertices \\
+\bottomrule %
+\end{tabular}
+\egroup
+
+\subsubsection{Pentagon} % (fold)
+\label{ssub:pentagon}
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.O = point: new (0,0)
+z.I = point: new (1,3)
+z.A = point: new (2,0)
+RP.five = regular_polygon : new (z.I,z.A,5)
+RP.five : name ("P_")
+C.ins = circle: radius (z.I,RP.five.inradius)
+z.H = RP.five.proj
+\end{tkzelements}
+\begin{tikzpicture}
+\def\nb{\tkzUseLua{RP.five.nb}}
+\tkzGetNodes
+\tkzDrawCircles(I,A I,H)
+\tkzDrawPolygon(P_1,P_...,P_\nb)
+\tkzDrawPoints[red](P_1,P_...,P_\nb,H,I)
+\tkzLabelPoints[red](I,A,H)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ z.O = point: new (0,0)
+ z.I = point: new (1,3)
+ z.A = point: new (2,0)
+ RP.five = regular_polygon : new (z.I,z.A,5)
+ RP.five : name ("P_")
+ C.ins = circle : radius ( z.I , RP.five.inradius )
+ z.H = RP.five.proj
+ \end{tkzelements}
+ \hspace{\fill}
+ \begin{tikzpicture}
+ \def\nb{\tkzUseLua{RP.five.nb}}
+ \tkzGetNodes
+ \tkzDrawCircles(I,A I,H)
+ \tkzDrawPolygon(P_1,P_...,P_\nb)
+ \tkzDrawPoints[red](P_1,P_...,P_\nb,H,I)
+ \tkzLabelPoints[red](I,A,H)
+ \end{tikzpicture}
+\end{minipage}
+% subsubsection pentagon (end)
+% subsection regular_polygon_attributes (end)
+
+\subsection{regular\_polygon methods} % (fold)
+\label{sub:regular_polygon_methods}
+
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{Circle methods.}
+\begin{tabular}{ll}
+\toprule
+\textbf{Methods} & \textbf{Comments} \\
+\midrule \\
+\Imeth{regular\_polygon}{new(O,A,n)} &|RP.five = regular_polygon : new (z.I,z.A,5)| ; I center A first vertex 5 sides \\
+\midrule
+\textbf{Circle} &\\
+\midrule
+\Imeth{regular\_polygon}{incircle ()} & |C.IH = RP.five : incircle ()|\\
+\midrule
+\textbf{Points} &\\
+\midrule
+\Imeth{regular\_polygon}{name (string)} & see\ref{ssub:pentagon} \\
+\bottomrule %
+\end{tabular}
+\egroup
+
+% subsection regular_polygon_methods (end)
+
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-square.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-square.tex
new file mode 100644
index 0000000000..15996c203f
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-square.tex
@@ -0,0 +1,163 @@
+\newpage
+\section{Classe \Iclass{square}} % (fold)
+
+\subsection{Square attributes} % (fold)
+\label{sub:square_attributes}
+
+% subsection square_attributes (end)
+Points are created in the direct direction. A test is performed to check whether the points form a square, otherwise compilation is blocked.
+\begin{mybox}
+Creation | S.AB = square : new (z.A,z.B,z.C,z.D)|
+\end{mybox}
+
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{Square attributes.}
+\begin{tabular}{lll}
+\toprule
+\textbf{Attributes} & \textbf{Application} & \\
+\Iattr{square}{pa} & |z.A = S.AB.pa| & \\
+\Iattr{square}{pb} & |z.B = S.AB.pb| & \\
+\Iattr{square}{pc} & |z.C = S.AB.pc| & \\
+\Iattr{square}{pd} & |z.D = S.AB.pd| & \\
+\Iattr{square}{type} & |S.AB.type= 'square'| & \\
+\Iattr{square}{side} & |s = S.AB.center| & s = length of side \\
+\Iattr{square}{center} & |z.I = S.AB.center| & center of the square \\
+\Iattr{square}{exradius} & |S.AB.exradius| & radius of the circumscribed circle \\
+\Iattr{square}{inradius} & |S.AB.inxradius| & radius of the inscribed circle \\
+\Iattr{square}{proj} & |S.AB.proj| & projection of the center on one side \\
+\Iattr{square}{ab} & |S.AB.ab| & line passing through two vertices \\
+\Iattr{square}{ac} & |S.AB.ca| & idem. \\
+\Iattr{square}{ad} & |S.AB.ad| & idem. \\
+\Iattr{square}{bc} & |S.AB.bc| & idem. \\
+\Iattr{square}{bd} & |S.AB.bd| & idem. \\
+\Iattr{square}{cd} & |S.AB.cd| & idem. \\
+\bottomrule %
+\end{tabular}
+\egroup
+\subsubsection{Example: square attributes } % (fold)
+\label{ssub:example_square_attributes}
+
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 4 , 0 )
+z.C = point : new ( 4 , 4)
+z.D = point : new ( 0 , 4)
+S.new = square : new ( z.A , z.B ,z.C,z.D)
+z.I = S.new.center
+z.H = S.new.proj
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles[orange](I,A I,H)
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D,H,I)
+\tkzLabelPoints(A,B,H,I)
+\tkzLabelPoints[above](C,D)
+\tkzDrawSegments(I,B I,H)
+\tkzLabelSegment[sloped](I,B){\pmpn{\tkzUseLua{S.new.exradius}}}
+\tkzLabelSegment[sloped](I,H){\pmpn{\tkzUseLua{S.new.inradius}}}
+\tkzLabelSegment[sloped](D,C){\pmpn{\tkzUseLua{S.new.side}}}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 4 , 0 )
+ z.C = point : new ( 4 , 4)
+ z.D = point : new ( 0 , 4)
+ S.new = square : new ( z.A , z.B ,z.C,z.D)
+ z.I = S.new.center
+ z.H = S.new.proj
+ \end{tkzelements}
+ \hspace{\fill}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles[orange](I,A I,H)
+ \tkzDrawPolygon(A,B,C,D)
+ \tkzDrawPoints(A,B,C,D,H,I)
+ \tkzLabelPoints(A,B,H,I)
+ \tkzLabelPoints[above](C,D)
+ \tkzDrawSegments(I,B I,H)
+ \tkzLabelSegment[sloped](I,B){\pmpn{\tkzUseLua{S.new.exradius}}}
+ \tkzLabelSegment[sloped](I,H){\pmpn{\tkzUseLua{S.new.inradius}}}
+ \tkzLabelSegment[sloped](D,C){\pmpn{\tkzUseLua{S.new.side}}}
+ \end{tikzpicture}
+\end{minipage}
+
+
+\newpage
+
+\subsection{Square methods} % (fold)
+\label{sub:square_methods}
+
+\bgroup
+\catcode`_=12
+\small
+\captionof{table}{Square methods.}
+\begin{tabular}{lll}
+\toprule
+\textbf{Methods} & \textbf{Comments}& \\
+\midrule
+\Imeth{square}{rotation (zi,za)} &|S.IA = square : rotation (z.I,z.A)| &$I$ square center $A$ first vertex\\
+\midrule
+\Imeth{square}{side (za,zb)} & |S.AB = square : side (z.A,z.B)|& AB is the first side (direct)\\
+\bottomrule %
+\end{tabular}
+\egroup
+
+\subsubsection{Square with side method} % (fold)
+\label{ssub:square_with_side_method}
+%
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+ scale = 2
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 2 , 1 )
+ S.side = square : side (z.A,z.B)
+ z.B = S.side.pb
+ z.C = S.side.pc
+ z.D = S.side.pd
+ z.I = S.side.center
+\end{tkzelements}
+
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C,D)
+ \tkzDrawPoints(A,B,C,D)
+ \tkzLabelPoints(A,B)
+ \tkzLabelPoints[above](C,D)
+ \tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+scale = 2
+z.A = point : new ( 0 , 0 )
+z.B = point : new ( 2 , 1 )
+S.side = square : side (z.A,z.B)
+z.B = S.side.pb
+z.C = S.side.pc
+z.D = S.side.pd
+z.I = S.side.center
+\end{tkzelements}
+\hspace{\fill}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
+\tkzDrawPoints[red](I)
+\end{tikzpicture}
+\end{minipage}
+% subsubsection square_with_side_method (end)
+% subsubsection example_square_attributes (end)
+
+% subsection square_methods (end) \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
index 45515c3b7a..7b051cd723 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-triangle.tex
@@ -1,73 +1,78 @@
\newpage
-\section{Classe triangle} % (fold)
+\section{Classe \Iclass{triangle}} % (fold)
\label{sec:classe_triangle}
-\subsection{Attributs of a triangle} % (fold)
-\label{sub:attributs_of_a_triangle}
-The triangle object is created using the \Imeth{triangle}{new} method, for example with | T.abc = triangle : new (z.a,z.b,z.c)| (See examples: \ref{sub:alternate}; \ref{sub:apollonius_circle}; \ref{sub:excircle} ). Multiple attributes are then created.
+\subsection{Attributes of a triangle} % (fold)
+\label{sub:attributes_of_a_triangle}
+The triangle object is created using the \Imeth{triangle}{new} method, for example with
+\begin{mybox}
+ Creation | T.ABC = triangle : new ( z.A , z.B , z.C ) |
+\end{mybox}
+(See examples: \ref{sub:alternate}; \ref{sub:apollonius_circle}; \ref{sub:excircles} ). Multiple attributes are then created.
\bgroup
\catcode`_=12
\small
-\begin{center}
-%\caption{Attributes about triangle class.}
+\captionof{table}{Triangle attributes.}
\begin{tabular}{ll}
\toprule
\textbf{Attributes} & \textbf{Application}\\
-\Iattr{triangle}{pa} &\\
-\Iattr{triangle}{pb} &\\
-\Iattr{triangle}{pc} &\\
-\Iattr{triangle}{circumcenter} & \\
-\Iattr{triangle}{centroid} &\\
-\Iattr{triangle}{incenter} &\\
-\Iattr{triangle}{orthocenter} &\\
-\Iattr{triangle}{eulercenter} & \\
+\Iattr{triangle}{pa} &T.ABC.pa \\
+\Iattr{triangle}{pb} &T.ABC.pb \\
+\Iattr{triangle}{pc} &T.ABC.pc \\
+\Iattr{triangle}{type} & 'triangle' \\
+\Iattr{triangle}{circumcenter} & T.ABC.circumcenter\\
+\Iattr{triangle}{centroid} &T.ABC.centroid\\
+\Iattr{triangle}{incenter} &T.ABC.incenter\\
+\Iattr{triangle}{orthocenter} &T.ABC.orthocenter\\
+\Iattr{triangle}{eulercenter} &T.ABC.eulercenter \\
+\Iattr{triangle}{spiekercenter} &T.ABC.spiekercenter \\
\Iattr{triangle}{a}& It's the length of the side opposite the first vertex \\
\Iattr{triangle}{b}& It's the length of the side opposite the second verte\\
\Iattr{triangle}{c}& It's the length of the side opposite the third vertex \\
\Iattr{triangle}{alpha}& Vertex angle of the first vertex\\
\Iattr{triangle}{beta}& Vertex angle of the second vertex\\
-\Iattr{triangle}{gamma}& Vertex angle of the third vertex\\
-\Iattr{triangle}{ab}& Line defined by the first two points of the triangle\\
+\Iattr{triangle}{gamma}& Vertex angle of the third vertex\\
+\Iattr{triangle}{ab}& Line defined by the first two points of the triangle\\
\Iattr{triangle}{ac}& Line defined by the first point and the last point\\
\Iattr{triangle}{bc}& Line defined by the last two points of the triangle\\
\bottomrule %
\end{tabular}
-\end{center}
\egroup
\subsubsection{Example: triangle attributes} % (fold)
\label{ssub:example_triangle_attributes}
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
- z.a = point: new (0 , 0)
- z.b = point: new (4 , 0)
- z.c = point: new (0 , 3)
- T.abc = triangle : new (z.a,z.b,z.c)
- z.O = T.abc.circumcenter
- z.I = T.abc.incenter
- z.H = T.abc.orthocenter
- z.G = T.abc.centroid
- a = T.abc.a
- b = T.abc.b
- c = T.abc.c
- alpha = T.abc.alpha
- beta = T.abc.beta
- gamma = T.abc.gamma
-\end{tkzelements}
-
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon(a,b,c)
- \tkzDrawPoints(a,b,c,O,G,I,H)
- \tkzLabelPoints(a,b,c,O,G,I)
- \tkzLabelPoints[above right](H)
- \tkzDrawCircles(O,a)
- \tkzLabelSegment[sloped](a,b){\tkzUseLua{c}}
- \tkzLabelSegment[sloped,above](b,c){\tkzUseLua{a}}
-\end{tikzpicture}
-\end{tkzexample}
-
+\begin{minipage}{.5\textwidth}
+ \begin{verbatim}
+ \begin{tkzelements}
+ z.a = point: new (0 , 0)
+ z.b = point: new (4 , 0)
+ z.c = point: new (0 , 3)
+ T.abc = triangle : new (z.a,z.b,z.c)
+ z.O = T.abc.circumcenter
+ z.I = T.abc.incenter
+ z.H = T.abc.orthocenter
+ z.G = T.abc.centroid
+ a = T.abc.a
+ b = T.abc.b
+ c = T.abc.c
+ alpha = T.abc.alpha
+ beta = T.abc.beta
+ gamma = T.abc.gamma
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(a,b,c)
+ \tkzDrawPoints(a,b,c,O,G,I,H)
+ \tkzLabelPoints(a,b,c,O,G,I)
+ \tkzLabelPoints[above right](H)
+ \tkzDrawCircles(O,a)
+ \tkzLabelSegment[sloped](a,b){\tkzUseLua{c}}
+ \tkzLabelSegment[sloped,above](b,c){\tkzUseLua{a}}
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
scale = 1.2
z.a = point: new (0 , 0)
@@ -85,7 +90,6 @@ The triangle object is created using the \Imeth{triangle}{new} method, for examp
beta = T.abc.beta
gamma = T.abc.gamma
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -97,11 +101,11 @@ The triangle object is created using the \Imeth{triangle}{new} method, for examp
\tkzLabelSegment[sloped](a,b){\tkzUseLua{c}}
\tkzLabelSegment[sloped,above](b,c){\tkzUseLua{a}}
\end{tikzpicture}
-\hspace*{\fill}
-% \caption{Class Triangle}
+\end{minipage}
+
% subsubsection example_triangle_attributes (end)
-% subsection attributs_of_a_triangle (end)
+% subsection attributes_of_a_triangle (end)
\subsection{Methods of the class triangle} % (fold)
\label{sub:methods_of_the_class_triangle}
@@ -110,13 +114,11 @@ The triangle object is created using the \Imeth{triangle}{new} method, for examp
\catcode`_=12
\small
\begin{minipage}{\textwidth}
-\begin{center}
-%\caption{Methods of the class triangle}
+\captionof{table}{triangle methods.}
\begin{tabular}{ll}
\toprule
\textbf{Methods} & \textbf{Comments} \\
\midrule
-triangle = {} class triangle \\
\Imeth{triangle}{new} (a, b ,c) & |T.ABC = triangle : new (z.A,z.B,z.C)| \\
... & |T| or |T.name| with what you want for name, is possible.\\
\midrule
@@ -134,7 +136,7 @@ triangle = {} class triangle \\
\Imeth{triangle}{base (u,v) } & |z.D = T.ABC: base(1,1)| \tkzar ABDC is a parallelogram \\
\Imeth{triangle}{projection (p) } & Projection of a point on the sides \\
\Imeth{triangle}{euler\_points () } & Euler points of euler circle \\
-\Imeth{triangle}{nine\_points () } & Points of the euler circle \\
+\Imeth{triangle}{nine\_points () } & 9 Points of the euler circle \\
\Imeth{triangle}{parallelogram ()} & |z.D = T.ABC : parallelogram ()| \tkzar ABCD is a parallelogram\\
\midrule
\textbf{Lines} &\\
@@ -149,7 +151,6 @@ triangle = {} class triangle \\
\Imeth{triangle}{antiparallel(pt,n)} & n=0 antiparallel through pt to $(BC)$, n=1 to $(AC)$ etc.\\
\bottomrule
\end{tabular}
-\end{center}
\end{minipage}
\egroup
@@ -169,15 +170,13 @@ triangle = {} class triangle \\
\Imeth{triangle}{euler\_circle ()} & C.|NP = T.ABC : euler_circle ()| \tkzar $N$ euler point
\footnote{ The midpoint of each side of the triangle, the foot of each altitude, the midpoint of the line segment from each vertex of the triangle to the orthocenter.} \\
\Imeth{triangle}{circum\_circle ()} & |C.OA = T.ABC : circum ()| Triangle's circumscribed circle \\
-\Imeth{triangle}{in\_circle ()} & Inscribed circle of the triangle\\
-\Imeth{triangle}{ex\_circle (n)} & Circle tangent to three lines defined by the sides of the triangle \\
+\Imeth{triangle}{in\_circle ()} & Inscribed circle of the triangle\\
+\Imeth{triangle}{ex\_circle (n)} & Circle tangent to the three sides of the triangle ; n =1 swap ; n=2 2 swap \\
\Imeth{triangle}{first\_lemoine\_circle ()} & The center is the midpoint between Lemoine point and the circumcenter.\footnote{
Through the Lemoine point draw lines parallel to the triangle's sides. The points where the parallel lines intersect the sides of ABC
then lie on a circle known as the first Lemoine circle. } \\
\Imeth{triangle}{second\_lemoine\_circle ()} & see example \ref{sub:antiparallel_through_lemoine_point}\\
\Imeth{triangle}{spieker\_circle ()} & The incircle of the medial triangle\\
-\Imeth{triangle}{ex\_circle(n) } & |z.o,z.p,z.q,z.r = T.ABC: ex_circle ()|\\
-... & n=0 ex_circle opposed to $A$ p,q,r projections of o on the sides \\
\midrule
\textbf{Triangles} &\\
\midrule
@@ -208,11 +207,151 @@ Through the Lemoine point draw lines parallel to the triangle's sides. The point
\egroup
% subsubsection methods_of_the_class_triangle (end)
+\subsubsection{Euler line} % (fold)
+\label{ssub:euler_line}
+
+\begin{tkzexample}[latex=0cm,small,code only]
+\begin{tkzelements}
+ z.A = point: new (0 , 0)
+ z.B = point: new (6 , 0)
+ z.C = point: new (1.5 , 3.5)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.O = T.ABC.circumcenter
+ z.G = T.ABC.centroid
+ z.N = T.ABC.eulercenter
+ z.H = T.ABC.orthocenter
+ z.P,z.Q,z.R = get_points (T.ABC: orthic())
+ z.K,z.I,z.J = get_points (T.ABC: medial ())
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawLines[blue](O,H)
+ \tkzDrawCircle[red](N,I)
+ \tkzDrawCircles[teal](O,A)
+ \tkzDrawSegments(A,P B,Q C,R)
+ \tkzDrawSegments[red](A,I B,J C,K)
+ \tkzDrawPolygons(A,B,C)
+ \tkzDrawPoints(A,B,C,N,I,J,K,O,P,Q,R,H,G)
+ \tkzLabelPoints(A,B,C,I,J,K,P,Q,R,H)
+ \tkzLabelPoints[below](N,O,G)
+\end{tikzpicture}
+\end{tkzexample}
+
+\begin{tkzelements}
+ scale =1
+ z.A = point: new (0 , 0)
+ z.B = point: new (6 , 0)
+ z.C = point: new (1.5 , 3.5)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.O = T.ABC.circumcenter
+ z.G = T.ABC.centroid
+ z.N = T.ABC. eulercenter
+ z.H = T.ABC. orthocenter
+ z.P,z.Q,z.R = get_points (T.ABC: orthic())
+ z.K,z.I,z.J = get_points (T.ABC: medial ())
+\end{tkzelements}
+\hspace*{\fill}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawLines[blue](O,H)
+\tkzDrawCircle[red](N,I)
+\tkzDrawCircles[teal](O,A)
+\tkzDrawSegments(A,P B,Q C,R)
+\tkzDrawSegments[red](A,I B,J C,K)
+\tkzDrawPolygons(A,B,C)
+\tkzDrawPoints(A,B,C,N,I,J,K,O,P,Q,R,H,G)
+\tkzLabelPoints(A,B,C,I,J,K,P,Q,R)
+\tkzLabelPoints[below](N,O,G,H)
+\end{tikzpicture}
+\hspace*{\fill}
+%\caption{Euler line}
+% subsubsection euler_line (end)
-% subsection methods_of_the_class_triangle (end)
+\subsection{Harmonic division and bisector} % (fold)
+\label{sub:harmonic_division_and_bisector}
+
+\begin{tkzexample}[small,code only]
+\begin{tkzelements}
+ scale = .75
+ z.A = point: new (0 , 0)
+ z.B = point: new (6 , 0)
+ z.M = point: new (5 , 4)
+ T.AMB = triangle : new (z.A,z.M,z.B)
+ L.AB = T.AMB.ca
+ L.bis = T.AMB : bisector (1)
+ z.C = L.bis.pb
+ L.bisext = T.AMB : bisector_ext (1)
+ z.D = intersection (L.bisext,L.AB)
+ L.CD = line: new (z.C,z.D)
+ z.O = L.CD.mid
+ L.AM = line: new (z.A,z.M)
+ L.LL = L.AM : ll_from (z.B)
+ L.MC = line: new (z.M,z.C)
+ L.MD = line: new (z.M,z.D)
+ z.E = intersection (L.LL,L.MC)
+ z.F = intersection (L.LL,L.MD)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,M)
+ \tkzDrawCircle[purple](O,C)
+ \tkzDrawSegments[purple](M,E M,D E,F)
+ \tkzDrawSegments(D,B)
+ \tkzDrawPoints(A,B,M,C,D,E,F)
+ \tkzLabelPoints[below right](A,B,C,D,E)
+ \tkzLabelPoints[above](M,F)
+ \tkzFillAngles[opacity=.4,cyan!20](A,M,B B,E,M)
+ \tkzFillAngles[opacity=.4,purple!20](B,M,F M,F,B)
+ \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D)
+ \tkzMarkAngles[mark=||](A,M,E E,M,B B,E,M)
+ \tkzMarkAngles[mark=|](B,M,F M,F,B)
+ \tkzMarkSegments(B,E B,M B,F)
+\end{tikzpicture}
+\end{tkzexample}
+
+\begin{tkzelements}
+ scale =.75
+ z.A = point: new (0 , 0)
+ z.B = point: new (6 , 0)
+ z.M = point: new (5 , 4)
+ T.AMB = triangle : new (z.A,z.M,z.B)
+ L.AB = T.AMB.ca
+ L.bis = T.AMB : bisector (1)
+ z.C = L.bis.pb
+ L.bisext = T.AMB : bisector_ext (1)
+ z.D = intersection (L.bisext,L.AB)
+ L.CD = line: new (z.C,z.D)
+ z.O = L.CD.mid
+ L.AM = line: new (z.A,z.M)
+ L.LL = L.AM : ll_from (z.B)
+ L.MC = line: new (z.M,z.C)
+ L.MD = line: new (z.M,z.D)
+ z.E = intersection (L.LL,L.MC)
+ z.F = intersection (L.LL,L.MD)
+\end{tkzelements}
+\hspace*{\fill}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,M)
+ \tkzDrawCircle[purple](O,C)
+ \tkzDrawSegments[purple](M,E M,D E,F)
+ \tkzDrawSegments(D,B)
+ \tkzDrawPoints(A,B,M,C,D,E,F)
+ \tkzLabelPoints[below right](A,B,C,D,E)
+ \tkzLabelPoints[above](M,F)
+ \tkzFillAngles[opacity=.4,cyan!20](A,M,B B,E,M)
+ \tkzFillAngles[opacity=.4,purple!20](B,M,F M,F,B)
+ \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D)
+ \tkzMarkAngles[mark=||](A,M,E E,M,B B,E,M)
+ \tkzMarkAngles[mark=|](B,M,F M,F,B)
+ \tkzMarkSegments(B,E B,M B,F)
+\end{tikzpicture}
+\hspace*{\fill}
+% subsection harmonic_division_and_bisector (end)
+% subsection methods_of_the_class_triangle (end)
% section classe_triangle (end)
\endinput
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes.tex
index 53bdb06558..e993ce9abe 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes.tex
@@ -1,98 +1,64 @@
\newpage
-\section{Classes and objects} % (fold)
-\label{sec:classes_and_objects}
-
-\subsection{Objects} % (fold)
-\label{sub:objects}
-The object types currently defined and used are \tkzNameObj{point}, \tkzNameObj{line}, \tkzNameObj{circle}, \tkzNameObj{triangle} and \tkzNameObj{ellipse}.
-
-They can be created directly using the method \Imeth{obj}{new} and, with the exception of the \Iclass{class}{point} class, by giving points. Objects can also be obtained by applying methods to other objects. For example, |T.ABC : circum_circle ()| creates an object \tkzNameObj{circle}. Some object attributes are also objects, such as |T.ABC.bc| which creates the object \tkzNameObj{line}, a straight line passing through the last two points defining the triangle.
-
-Attributes are accessed using the classic method, so |T.pc| gives the third of the triangle and |C.center| gives the center of the circle, but I've added a |get_points| function that returns the points of an object. This applies to straight lines (pa and pc), triangles (pa, pb and pc) and circles (center and through).
-
-Example: |z.O,z.T = get_points (C)| recovers the center and a point of the circle.
-% subsection objects (end)
-
-\subsection{tkz\_elements\_point.lua: complex numbers library} % (fold)
-\label{sub:complex_numbers}
-
-Unless you want to create your own functions, you won't need to know and use complex numbers. However, in some cases it may be useful to implement some of their properties.
-
-|za = point (1,2 )| and \ |zb = point (1,-1)| define two affixes which are |za = 1+2i| and
-
- |zb = 1-i|. The notation may come as a surprise, as I used the term "point". The aim here was not to create a complete library on complex numbers, but to be able to use their main properties in relation to points. I didn't want to have two different levels, and since a unique connection can be established between the points of the plane and the complexes, I decided not to mention the complex numbers! But they are there.
-
-The above entries must not be confused with the following ones :
-
-|z.a = point : new (1,2) | and |z.b = point : new (1,-1) |.
-
-Here we define two "point" objects that are in the form of an affix in the |z| table.
-|z.a = za| only if |scale = 1| and |z.a| creates a point named |a|. This point is an object and you can use its attributes, as well as methods referring to points.
-
-That said, |z.a| is indeed an affix, and it's possible to use the methods and metamethods associated with complex numbers.
-
-\bgroup
-\catcode`_=12
-\small
-\begin{minipage}{\textwidth}
-\begin{center}
-%\caption{Metamethods and methods about point class.}
-\begin{tabular}{ll}
- \toprule
- \textbf{Metamethods} & \textbf{Application} \\
- \midrule
-__add(z1,z2) & |z.a + z.b| \tkzar affix \\
-__sub(z1,z2) & |z.a - z.b| \tkzar affix\\
-__unm(z) & |- z.a| \tkzar affix\\
-__mul(z1,z2) & |z.a * z.b| \tkzar affix\\
-__concat(z1,z2)& |z.a .. z.b| \tkzar dot product = real number \footnote{If $O$ is the origin of the complex plan, then we get the dot product of the vectors $\overrightarrow{Oa}$ and $\overrightarrow{Ob}$} \\
-__pow(z1,z2) & |z.a ^ z.b| \tkzar determinant = real number\\
-__div(z1,z2) & |z.a / z.b| \tkzar affix \\
-__tostring(z) & tex.print(tostring(z)) \tkzar displays the affix \\
-__tonumber(z) & tonumber(z) \tkzar affix or nil\\
-__eq(z1,z2) & eq (z.a,z.b) \tkzar boolean\\
-\bottomrule
-\end{tabular}
-\end{center}
-\end{minipage}
-\egroup
-
-\bgroup
-\catcode`_=12
-\small
-\begin{center}
-%\caption{Metamethods and methods about point class.}
-\begin{tabular}{ll}
- \toprule
-\textbf{Methods} & \textbf{Application}\\
-\midrule
-\Imeth{point}{conj(z)}& |z.a : conj()| \tkzar affix (conjugate) \\
-\Imeth{point}{mod(z)}& |z.a : mod()| \tkzar real number = modulus |z.a|\\
-\Imeth{point}{abs (z)}& |z.a : abs()| \tkzar real number = modulus \\
-\Imeth{point}{norm (z)} & |z.a : norm()| \tkzar norm (real number ) \\
-\Imeth{point}{arg (z)}& |z.a : arg()| \tkzar real number = argument of z.a (in rad)\\
-\Imeth{point}{get(z)}& |z.a : get()| \tkzar re and im (two real numbers ) \\
-\Imeth{point}{sqrt(z)}& |z.a : sqrt()| \tkzar affix \\
-\bottomrule
-\end{tabular}
-\end{center}
-\egroup
-
-The class is provided with two specific metamethods.
-
-\begin{itemize}
- \item Since concatenation makes little sense here, the operation associated with |..| is the scalar or dot product. If |z1 = a+ib| and |z2 = c+id| then
-
- |z1..z2 = (a+ib) .. (c+id) = (a+ib) (c-id) = ac+bd + i(bc-ad) |
-
- There's also a mathematical function, |dot_product|, which takes three arguments. See example \ref{ssub:dot_or_scalar_product}
-
-
- \item With the same idea, the operation associated with |^| is the determinant i.e.
-
- |z1 ^ z2 = (a+ib) ^ (c+id) = ad - bc From (a-ib) (c+id) = ac+bd + i(ad - bc)| we take the imaginary part.
-
-\end{itemize}
-% subsection complex_numbers (end)
-% section classes_and_objects (end)
+
+\section{Class and object} % (fold)
+\label{sec:class_and_object}
+
+\subsection{Class} % (fold)
+\label{sub:class}
+
+ Object-oriented programming (OOP) is defined as a programming model built on the concept of objects. An object can be defined as a data table that has unique attributes and methods (operations) that define its behavior.
+
+ \vspace{1em}
+A class is essentially a user-defined data type. It describes the contents of the objects that belong to it. A class is a blueprint of an object, providing initial values for attributes and implementations of methods\footnote{action which an object is able to perform.} common to all objects of a certain kind.
+% subsection class (end)
+
+\subsection{Object} % (fold)
+\label{sub:object}
+ An Object is an instance of a class. Each object contains attributes and methods. Attributes are information or object characteristics stored in the date table (called field). The methods define behavior.
+
+ \vspace{1em}
+ All objects in the package are typed. The object types currently defined and used are: \tkzNameObj{point}, \tkzNameObj{line}, \tkzNameObj{circle}, \tkzNameObj{triangle}, \tkzNameObj{ellipse}, \tkzNameObj{quadrilateral}, \tkzNameObj{square}, \tkzNameObj{rectangle}, \tkzNameObj{parallelogram} and \tkzNameObj{regular\_polygon}.
+
+They can be created directly using the method \Imeth{obj}{new} by giving points, with the exception of the \Iclass{class}{point} class which requires a pair of reals, and \Iclass{class}{regular\_polygon} which needs two points and an integer.
+
+ Objects can also be obtained by applying methods to other objects. For example, |T.ABC : circum_circle ()| creates an object \tkzNameObj{circle}. Some object attributes are also objects, such as |T.ABC.bc| which creates the object \tkzNameObj{line}, a straight line passing through the last two points defining the triangle.
+
+ \vspace{1em}
+
+ \subsubsection{Attributes} % (fold)
+ \label{ssub:attributes}
+ Attributes are accessed using the classic method, so |T.pc| gives the third point of the triangle and |C.OH.center| gives the center of the circle, but I've added a |get_points| function that returns the points of an object. This applies to straight lines (pa and pc), triangles (pa, pb and pc) and circles (center and through).
+
+ \vspace{1em}
+ Example: |z.O,z.T = get_points (C)| recovers the center and a point of the circle.
+ % subsubsection attributes (end)
+
+\subsubsection{Methods} % (fold)
+\label{ssub:methods}
+
+A method is an operation (function or procedure) associated (linked) with an object.
+
+Example: The point object is used to vertically determine a new point object located at a certain distance from it (here 2). Then it is possible to rotate objects around it.
+
+\begin{verbatim}
+ \begin{tkzelements}
+ z.A = point (1,0)
+ z.B = z.A : north (2)
+ z.C = z.A : rotation (math.pi/3,z.B)
+ tex.print(tostring(z.C))
+ \end{tkzelements}
+\end{verbatim}
+
+
+\begin{tkzelements}
+ z.A = point (1,0)
+ z.B = z.A : north (2)
+ z.C = z.A : rotation (math.pi/3,z.B)
+ tex.print(tostring("The coordinates of $C$ are: " .. z.C.re .." and "..z.C.im))
+\end{tkzelements}
+
+
+% subsubsection methods (end)
+% subsection object (end)
+% section class_and_object (end)
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex
index 444033e75b..f25d02d569 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex
@@ -3,49 +3,56 @@
\section{Writing Convention} % (fold)
\label{sec:writing_convention}
-Writing conventions for real numbers are the same as for \pkg{Lua}.
-The package introduces complex numbers (see \ref{sub:complex_numbers}) in order to associate them with points. |z1 = point (1,2)| designates the affix |z1=1+2i|, |z1| is a complex number, but here it's not a object point (related to objects in object-oriented programming).
+\subsection{Miscellaneous} % (fold)
+\label{sub:miscellanous}
-|z.A = point : new (1,2)| creates an object point $A$ with coordinates 1 and 2, which are stored as an affix in the table |z|. The key is $A$ and the value |1+2i| (or (1,2) if you prefer.)
+\begin{itemize}
+ \item Numerical variable: the writing conventions for real numbers are the same as for \pkg{Lua}.
+ \item Complex numbers: as for real numbers but to define them you must write |za = point (1,2)|. Mathematically, this corresponds to 1+2i, which you can find with |tex.print(tostring(za))|.(see \ref{sub:complex_numbers})
+ \item Boolean: you can write |bool = true| or |bool = false| then with Lua you can use the code :\\
+ \begin{mybox}
+|if bool == ... then ... else ... end|
+\end{mybox}
+
+ and outside the environment \tkzNameEnv{tkzelements} you can use the macro
+\begin{mybox}
+ |\fthenelse{\equal{\tkzUseLua{bool}}{true}}{ ... }{ ... }|
+\end{mybox}
+
+ after loading the \tkzNamePack{ifthen} package.
+
+ \item String: if st = "Euler's formula" then \begin{mybox}
+ |\tkzUseLua{st}| gives |Euler's formula|
+ \end{mybox}
+
+
+\end{itemize}
+% subsection miscellanous (end)
\subsection{Assigning a Name to a Point} % (fold)
\label{sub:assigning_a_name_to_a_point}
-The basic object is the point which belongs to the class point. A point can be created in two ways: either directly |z.A = point : new (1,2)|, or as the result of a function or a method.
Currently the only obligation is to store the points in the table |z| \footnote{To place the point M in the table, simply write |z.M| = \ldots or |z["M"]|= \ldots} if you want to use them in \TIKZ\ or \pkg{tkz-euclide}. If it is a point which will not be used, then you can designate it as you wish by respecting the conventions of Lua.
-More generally, with |z.A = point: new (a,b)|, we define a complex number |z.A = a+bi|, where $a$ and $b$ are the coordinates of point $A$. The name $A$ of a point is the key associated with a complex number noted |z.A| whose affix is |a+ib|, with $a$ and $b$ unique coordinates of $A$.
-
-
-There are two cases. Either you want to keep the point to use it with the package that will allow you to draw, or the point is intermediate and you can abandon it.
-
-\vspace{12pt}
-In the second case, simply don't store the point in the |z| table. For example, |A = point : new (1,2)| defines a point $A$ that will not be transferred. Another way of avoiding a transfer is to assign |nil| to the point: |z.A = nil| before exiting the environment \tkzNameEnv{tkzelements}.
-
- In the first case, you must store the point in the table |z|. The points which occur in the environment \tkzNameEnv{tkzelements} must respect a convention which is |z.name| such that |name| will be the name of the corresponding \tkzname{node}. \footnote{ However, that a point can be deleted with |z.name = nil|.}
+ The points which occur in the environment \tkzNameEnv{tkzelements} must respect a convention which is |z.name| such that |name| will be the name of the corresponding \tkzname{node}.
What are the conventions for designating |name|? You have to respect the Lua conventions in particular cases.
\begin{enumerate}
\item The use of prime is problematic. If the point name contains more than one symbol and ends with |p| then when passing into \pkg{TikZ} or \pkg{tkz-euclide}, the letters |p| will be replaced by |'| using the macro \tkzcname{tkzGetNodes}; \index{prime}
-
+
\item One possibility, however, in order to have a more explicit code is to suppose that you want to designate a point by "euler". It would be possible for example to write |euler = ...|, and at the end of the code for the transfer, |z.E = euler|. It is also possible to use a temporary name |euler| and to replace it in \TIKZ{}. Either at the time of placing the labels, or for example by using |pgfnodealias{E}{euler}|. This possibility also applies in other cases: prime, double prime, etc.
-
\end{enumerate}
-\lefthand\ The syntax |z.name| is important, it allows to store the data of the point in a table named |z|, which will be used for the transition to the program that will perform the plots and place the labels.
-
-Point names: You can use the lower case and unaccented upper case.
-The names of the points follow the rules of convention for writing identifiers in lua.
-The name starts with a letter "A to Z" or "a to z" or an underscore "|_|" followed by zero or more letters, underscores, and digits (0 to 9).
-
-You should avoid identifiers starting with an underscore followed by one or more uppercase letters.
-
-In general, the points used in geometry are lower or upper case letters. The use of underscore is also frequent. So it is possible to write |z.T_a|.
-
-\lefthand\ Another use in geometry that can be used with \TIKZ{} is the apostrophe. Unfortunately, the apostrophe is necessary to use strings. There are several ways to get around this difficulty.
-The simplest one, which keeps the syntax consistent, is that if you want to use |A'| as a point name, you can use |Ap|. When switching to \TIKZ{} |Ap| will be replaced by |A'|. All names of more than one character ending in |p| will have the letter |p| replaced by an apostrophe |'|.
+Here are some different ways of naming a point:
+\begin{mybox}
+\begin{itemize}
+ \item |z.A = point : new (1,2)|
+ \item |z.Bp = point : new (3,4)| --> this gives |B'| in the \tkzNameEnv{tikzpicture}
+ \item |z.H_a = T.ABC : altitude ()| --> this gives |H_a| in the \tkzNameEnv{tikzpicture} code and $H_a$ in the display.
+\end{itemize}
+\end{mybox}
% subsection assigning_a_name_to_a_point (end)
\subsection{Assigning a Name to Other Objects} % (fold)
@@ -54,32 +61,32 @@ The simplest one, which keeps the syntax consistent, is that if you want to use
You have the choice to give a name to objects other than points. That said, it is preferable to respect certain rules in order to make the code easier to read.
I have chosen for my examples the following conventions: first of all I store the objects in tables: |L.name| for lines and segments, |C.name| for circles, |T.name| for triangles, |E.name| for ellipses.
-For lines, I use the names of the two points. So if a line passes through points $A$ and $B$, I name the line |L.AB|. It is possible if only one line is named to simply name it |L| but this should be avoided so as not to create bad practices.
+For lines, I use the names of the two points. So if a line passes through points $A$ and $B$, I name the line |L.AB|.
-For circles, I name |C.AB| the circle of center $A$ passing through $B$, but siomething like |C.euler| or |C.external| is fine.
+For circles, I name |C.AB| the circle of center $A$ passing through $B$, but something like |C.euler| or |C.external| is fine.
-For triangles, I name |T.ABC| the triangle whose vertices are $A$, $B$ and $C$.
+For triangles, I name |T.ABC| the triangle whose vertices are $A$, $B$ and $C$ but |T.feuerbach|.
For ellipses, I name |E.ABC| the ellipse with center $A$ through vertex $B$ and covertex $C$.
% subsection assigning_a_name_to_other_objects(end)
\subsection{Writing conventions for attributes, methods.} % (fold)
-\label{sub:writing_conventions_for_attributs_methods_and_functions}
+\label{sub:writing_conventions_for_attributes_methods_and_functions}
You must use the conventions of Lua, so
\begin{itemize}
- \item To obtain an attribute, for all objects, the convention is identical: |object.attribute|. For example, for the point $A$ we access its abscissa with |z.A.re| and its ordinate with |z.A.im|; as for its type we obtain it with |z.A.type|. To get the south pole of the circle |C.OA| you need to write: |C.OA.south|.
+ \item To obtain an \Amacro{attribute}, for all objects, the convention is identical: |object.attribute|. For example, for the point $A$ we access its abscissa with |z.A.re| and its ordinate with |z.A.im|; as for its type we obtain it with |z.A.type|. To get the south pole of the circle |C.OA| you need to write: |C.OA.south|.
- \item To use a method such as obtaining the incircle of a triangle ABC, just write
+ \item To use a method such as obtaining the incircle of a triangle ABC, just write
- |z.i,z.i_a,z.i_b,z.i_c = T.ABC : in_circle ()| (you get the center and its projections on the sides), but to get only the incenter you write |T.ABC.incenter|.
+ |C.incircle = T.ABC : in_circle ()|.
\item Some methods need a parameter. For example, to know the distance between a point $C$ to the line $(A,B)$ we will write
|d = L.AB : distance (z.C)|.
- \item Use the underscore to store a result you don't want to use. If you only need the second point of an intersection between a line and a circle, you would write
+ \item Use the \Amacro{underscore} to store a result you don't want to use. If you only need the second point of an intersection between a line and a circle, you would write
|_,z.J = intersection (L.AB , C.OC)|.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
index 68c894037c..f9658252c2 100755..100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
@@ -6,34 +6,36 @@
\subsection{D'Alembert 1} % (fold)
\label{sub:d_alembert_1}
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
- z.A = point : new (0,0)
- z.a = point : new (4,0)
- z.B = point : new (7,-1)
- z.b = point : new (5.5,-1)
- z.C = point : new (5,-4)
- z.c = point : new (4.25,-4)
- C.Aa = circle : new (z.A,z.a)
- C.Bb = circle : new (z.B,z.b)
- C.Cc = circle : new (z.C,z.c)
- z.I = C.Aa : external_similitude (C.Bb)
- z.J = C.Aa : external_similitude (C.Cc)
- z.K = C.Cc : external_similitude (C.Bb)
- z.Ip = C.Aa : internal_similitude (C.Bb)
- z.Jp = C.Aa : internal_similitude (C.Cc)
- z.Kp = C.Cc : internal_similitude (C.Bb)
-\end{tkzelements}
-\begin{tikzpicture}[rotate=-60]
- \tkzGetNodes
- \tkzDrawCircles(A,a B,b C,c)
- \tkzDrawPoints(A,B,C,I,J,K,I',J',K')
- \tkzDrawSegments[new](I,K A,I A,J B,I B,K C,J C,K)
- \tkzDrawSegments[purple](I,J' I',J I',K)
- \tkzLabelPoints(I,J,K,I',J',K')
-\end{tikzpicture}
-\end{tkzexample}
-
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+ \begin{verbatim}
+ \begin{tkzelements}
+ z.A = point : new (0,0)
+ z.a = point : new (4,0)
+ z.B = point : new (7,-1)
+ z.b = point : new (5.5,-1)
+ z.C = point : new (5,-4)
+ z.c = point : new (4.25,-4)
+ C.Aa = circle : new (z.A,z.a)
+ C.Bb = circle : new (z.B,z.b)
+ C.Cc = circle : new (z.C,z.c)
+ z.I = C.Aa : external_similitude (C.Bb)
+ z.J = C.Aa : external_similitude (C.Cc)
+ z.K = C.Cc : external_similitude (C.Bb)
+ z.Ip = C.Aa : internal_similitude (C.Bb)
+ z.Jp = C.Aa : internal_similitude (C.Cc)
+ z.Kp = C.Cc : internal_similitude (C.Bb)
+ \end{tkzelements}
+ \begin{tikzpicture}[rotate=-60]
+ \tkzGetNodes
+ \tkzDrawCircles(A,a B,b C,c)
+ \tkzDrawPoints(A,B,C,I,J,K,I',J',K')
+ \tkzDrawSegments[new](I,K A,I A,J B,I B,K C,J C,K)
+ \tkzDrawSegments[purple](I,J' I',J I',K)
+ \tkzLabelPoints(I,J,K,I',J',K')
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale = .5
z.A = point : new (0,0)
@@ -52,7 +54,6 @@ z.Ip = C.Aa : internal_similitude (C.Bb)
z.Jp = C.Aa : internal_similitude (C.Cc)
z.Kp = C.Cc : internal_similitude (C.Bb)
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}[rotate=30]
\tkzGetNodes
@@ -62,40 +63,39 @@ z.Kp = C.Cc : internal_similitude (C.Bb)
\tkzDrawSegments[purple](I,J' I',J I',K)
\tkzLabelPoints(I,J,K,I',J',K')
\end{tikzpicture}
-\hspace*{\fill}
-\vspace*{\fill}
-%\caption{D'Alembert I}
-
+\end{minipage}
% subsection d_alembert_1 (end)
\subsection{D'Alembert 2} % (fold)
\label{sub:d_alembert_2}
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
- scale = .75
- z.A = point : new (0,0)
- z.a = point : new (5,0)
- z.B = point : new (7,-1)
- z.b = point : new (3,-1)
- z.C = point : new (5,-4)
- z.c = point : new (2,-4)
- C.Aa = circle : new (z.A,z.a)
- C.Bb = circle : new (z.B,z.b)
- C.Cc = circle : new (z.C,z.c)
- z.i,z.j = get_points (C.Aa : radical_axis (C.Bb))
- z.k,z.l = get_points (C.Aa : radical_axis (C.Cc))
- z.m,z.n = get_points (C.Bb : radical_axis (C.Cc))
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(A,a B,b C,c)
- \tkzDrawLines[new](i,j k,l m,n)
-\end{tikzpicture}
-\end{tkzexample}
-
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+ \begin{verbatim}
+ \begin{tkzelements}
+ scale = .75
+ z.A = point : new (0,0)
+ z.a = point : new (5,0)
+ z.B = point : new (7,-1)
+ z.b = point : new (3,-1)
+ z.C = point : new (5,-4)
+ z.c = point : new (2,-4)
+ C.Aa = circle : new (z.A,z.a)
+ C.Bb = circle : new (z.B,z.b)
+ C.Cc = circle : new (z.C,z.c)
+ z.i,z.j = get_points (C.Aa : radical_axis (C.Bb))
+ z.k,z.l = get_points (C.Aa : radical_axis (C.Cc))
+ z.m,z.n = get_points (C.Bb : radical_axis (C.Cc))
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(A,a B,b C,c)
+ \tkzDrawLines[new](i,j k,l m,n)
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
- scale = .75
+ scale = .5
z.A = point : new (0,0)
z.a = point : new (5,0)
z.B = point : new (7,-1)
@@ -116,15 +116,13 @@ z.Kp = C.Cc : internal_similitude (C.Bb)
\tkzDrawCircles(A,a B,b C,c)
\tkzDrawLines[new](i,j k,l m,n)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{D'alembert II}
-
+\end{minipage}
% subsection d_alembert_2 (end)
\subsection{Alternate} % (fold)
\label{sub:alternate}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
z.A = point: new (0 , 0)
z.B = point: new (6 , 0)
@@ -148,9 +146,10 @@ z.Kp = C.Cc : internal_similitude (C.Bb)
\tkzLabelPoints[above](C,D,E)
\tkzMarkSegments(A,C C,E)
\end{tikzpicture}
-\end{tkzexample}
-
-
+\end{verbatim}
+\end{minipage}
+\hspace*{\fill}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
z.A = point: new (0 , 0)
z.B = point: new (6 , 0)
@@ -162,8 +161,6 @@ z.D = intersection (L.AI,T.bc)
L.LLC = T.ab: ll_from (z.C)
z.E = intersection (L.AI,L.LLC)
\end{tkzelements}
-
-\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPolygon(A,B,C)
@@ -176,8 +173,7 @@ z.E = intersection (L.AI,L.LLC)
\tkzLabelPoints[above](C,D,E)
\tkzMarkSegments(A,C C,E)
\end{tikzpicture}
-\hspace*{\fill}
-
+\end{minipage}
% subsection alternate (end)
\subsection{Apollonius circle} % (fold)
@@ -261,14 +257,13 @@ scale=.75
scale =.75
z.A = point: new (0 , 0)
z.B = point: new (6 , 0)
- L.AB = line: new (z.A,z.B)
z.M = point: new (5 , 4)
T.AMB = triangle: new (z.A,z.M,z.B)
+ L.AB = T.AMB.ca
z.I = T.AMB.incenter
L.MI = line: new (z.M,z.I)
z.C = intersection (L.AB , L.MI)
- z.J = L.MI: ortho_from (z.M)
- L.MJ = line: new (z.M,z.J)
+ L.MJ = L.MI: ortho_from (z.M)
z.D = intersection (L.AB , L.MJ)
L.CD = line: new (z.C,z.D)
z.O = L.CD.mid
@@ -298,7 +293,7 @@ scale=.75
z.B = point: new (6 , 0)
z.M = point: new (5 , 4)
T.AMB = triangle: new (z.A,z.M,z.B)
- L.AB = T.AMB.ac
+ L.AB = T.AMB.ca
z.I = T.AMB.incenter
L.MI = line: new (z.M,z.I)
z.C = intersection (L.AB , L.MI)
@@ -357,10 +352,10 @@ scale=.75
L.ApS = line: new (z.Ap,z.S)
z.O2 = L.ApS.mid
L.BI = line: new (z.B,z.I)
- z.Bp = intersection (T.ABC.ac , L.BI)
+ z.Bp = intersection (T.ABC.ca , L.BI)
z.z = L.BI.north_pa
L.Bz = line: new (z.B,z.z)
- z.T = intersection (L.Bz,T.ABC.ac)
+ z.T = intersection (L.Bz,T.ABC.ca)
L.Bpt = line: new (z.Bp,z.T)
z.O3 = L.Bpt.mid
\end{tkzelements}
@@ -399,10 +394,10 @@ z.S = intersection (L.Ay,T.ABC.bc)
L.ApS = line: new (z.Ap,z.S)
z.O2 = L.ApS.mid
L.BI = line: new (z.B,z.I)
-z.Bp = intersection (T.ABC.ac , L.BI)
+z.Bp = intersection (T.ABC.ca , L.BI)
z.z = L.BI.north_pa
L.Bz = line: new (z.B,z.z)
-z.T = intersection (L.Bz,T.ABC.ac)
+z.T = intersection (L.Bz,T.ABC.ca)
L.Bpt = line: new (z.Bp,z.T)
z.O3 = L.Bpt.mid
\end{tkzelements}
@@ -420,39 +415,38 @@ z.O3 = L.Bpt.mid
\tkzDrawLine(O1,O2)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Apollonius circles in a triangle}
-
-
% subsection apollonius_circles (end)
\subsection{Archimedes} % (fold)
\label{sub:archimedes}
-\begin{tkzexample}[small,code only]
-\begin{tkzelements}
- z.O_1 = point: new (0, 0)
- z.O_2 = point: new (0, 1)
- z.A = point: new (0, 3)
- z.F = point: polar (3, math.pi/6)
- L = line: new (z.F,z.O_1)
- C = circle: new (z.O_1,z.A)
- z.E = intersection (L,C)
- T = triangle: new (z.F,z.E,z.O_2)
- z.x = T: parallelogram ()
- L = line: new (z.x,z.O_2)
- C = circle: new (z.O_2,z.A)
- z.C,z.D = intersection (L ,C)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(O_1,A O_2,A)
- \tkzDrawSegments[new](O_1,A E,F C,D)
- \tkzDrawSegments[purple](A,E A,F)
- \tkzDrawPoints(A,O_1,O_2,E,F,C,D)
- \tkzLabelPoints(A,O_1,O_2,E,F,C,D)
-\end{tikzpicture}
-\end{tkzexample}
-
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+ \begin{verbatim}
+ \begin{tkzelements}
+ z.O_1 = point: new (0, 0)
+ z.O_2 = point: new (0, 1)
+ z.A = point: new (0, 3)
+ z.F = point: polar (3, math.pi/6)
+ L = line: new (z.F,z.O_1)
+ C = circle: new (z.O_1,z.A)
+ z.E = intersection (L,C)
+ T = triangle: new (z.F,z.E,z.O_2)
+ z.x = T: parallelogram ()
+ L = line: new (z.x,z.O_2)
+ C = circle: new (z.O_2,z.A)
+ z.C,z.D = intersection (L ,C)
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawCircles(O_1,A O_2,A)
+ \tkzDrawSegments[new](O_1,A E,F C,D)
+ \tkzDrawSegments[purple](A,E A,F)
+ \tkzDrawPoints(A,O_1,O_2,E,F,C,D)
+ \tkzLabelPoints(A,O_1,O_2,E,F,C,D)
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
z.O_1 = point: new (0, 0)
z.O_2 = point: new (0, 1)
@@ -467,7 +461,6 @@ z.O3 = L.Bpt.mid
C = circle: new (z.O_2,z.A)
z.C,z.D = intersection (L ,C)
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -477,11 +470,9 @@ z.O3 = L.Bpt.mid
\tkzDrawPoints(A,O_1,O_2,E,F,C,D)
\tkzLabelPoints(A,O_1,O_2,E,F,C,D)
\end{tikzpicture}
-\hspace*{\fill}
- %\caption{Archimedes}
-
+\end{minipage}
+%\subsection{Bankoff circle} % (fold)
-\subsection{Bankoff circle} % (fold)
\label{sub:bankoff_circle}
\begin{tkzexample}[small,code only]
\begin{tkzelements}
@@ -548,6 +539,7 @@ z.O3 = L.Bpt.mid
\begin{tkzelements}
+ scale = 1.25
z.A = point: new (0 , 0)
z.B = point: new (10 , 0)
L.AB = line : new (z.A,z.B)
@@ -610,9 +602,6 @@ z.O3 = L.Bpt.mid
\end{scope}
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Bankoff circle}
-
-
% subsection bankoff_circle (end)
\subsection{Excircles} % (fold)
@@ -691,192 +680,8 @@ z.O3 = L.Bpt.mid
\tkzMarkRightAngles[fill=gray!15](J_a,T_a,B J_b,T_b,C J_c,T_c,A)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Ex-circles}
-
-
-
% subsection excircles (end)
-\subsection{Harmonic division and bisector} % (fold)
-\label{sub:harmonic_division_and_bisector}
-
-\begin{tkzexample}[small,code only]
-\begin{tkzelements}
- scale = .75
- z.A = point: new (0 , 0)
- z.B = point: new (6 , 0)
- z.M = point: new (5 , 4)
- T.AMB = triangle : new (z.A,z.M,z.B)
- L.AB = T.AMB.ac
- L.bis = T.AMB : bisector (1)
- z.C = L.bis.pb
- L.bisext = T.AMB : bisector_ext (1)
- z.D = intersection (L.bisext,L.AB)
- L.CD = line: new (z.C,z.D)
- z.O = L.CD.mid
- L.AM = line: new (z.A,z.M)
- L.LL = L.AM : ll_from (z.B)
- L.MC = line: new (z.M,z.C)
- L.MD = line: new (z.M,z.D)
- z.E = intersection (L.LL,L.MC)
- z.F = intersection (L.LL,L.MD)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon(A,B,M)
- \tkzDrawCircle[purple](O,C)
- \tkzDrawSegments[purple](M,E M,D E,F)
- \tkzDrawSegments(D,B)
- \tkzDrawPoints(A,B,M,C,D,E,F)
- \tkzLabelPoints[below right](A,B,C,D,E)
- \tkzLabelPoints[above](M,F)
- \tkzFillAngles[opacity=.4,cyan!20](A,M,B B,E,M)
- \tkzFillAngles[opacity=.4,purple!20](B,M,F M,F,B)
- \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D)
- \tkzMarkAngles[mark=||](A,M,E E,M,B B,E,M)
- \tkzMarkAngles[mark=|](B,M,F M,F,B)
- \tkzMarkSegments(B,E B,M B,F)
-\end{tikzpicture}
-\end{tkzexample}
-
-\begin{tkzelements}
- scale =.75
- z.A = point: new (0 , 0)
- z.B = point: new (6 , 0)
- z.M = point: new (5 , 4)
- T.AMB = triangle : new (z.A,z.M,z.B)
- L.AB = T.AMB.ac
- L.bis = T.AMB : bisector (1)
- z.C = L.bis.pb
- L.bisext = T.AMB : bisector_ext (1)
- z.D = intersection (L.bisext,L.AB)
- L.CD = line: new (z.C,z.D)
- z.O = L.CD.mid
- L.AM = line: new (z.A,z.M)
- L.LL = L.AM : ll_from (z.B)
- L.MC = line: new (z.M,z.C)
- L.MD = line: new (z.M,z.D)
- z.E = intersection (L.LL,L.MC)
- z.F = intersection (L.LL,L.MD)
-\end{tkzelements}
-
-
- \hspace*{\fill}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPolygon(A,B,M)
- \tkzDrawCircle[purple](O,C)
- \tkzDrawSegments[purple](M,E M,D E,F)
- \tkzDrawSegments(D,B)
- \tkzDrawPoints(A,B,M,C,D,E,F)
- \tkzLabelPoints[below right](A,B,C,D,E)
- \tkzLabelPoints[above](M,F)
- \tkzFillAngles[opacity=.4,cyan!20](A,M,B B,E,M)
- \tkzFillAngles[opacity=.4,purple!20](B,M,F M,F,B)
- \tkzMarkRightAngle[opacity=.4,fill=gray!20](C,M,D)
- \tkzMarkAngles[mark=||](A,M,E E,M,B B,E,M)
- \tkzMarkAngles[mark=|](B,M,F M,F,B)
- \tkzMarkSegments(B,E B,M B,F)
- \end{tikzpicture}
- \hspace*{\fill}
- %\caption{Harmonic division and bisector}
-
-
-
-
-% subsection harmonic_division_and_bisector (end)
-
-\subsection{Excircle} % (fold)
-\label{sub:excircle}
-
-
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
- z.a = point: new (1,2)
- z.b = point: new (5,1)
- z.c = point: new (2,4)
- T.abc = triangle: new (z.a,z.b,z.c)
- z.o,z.p = get_points (T.abc: ex_circle ())
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLines[add=1 and 1](a,b b,c a,c)
- \tkzDrawPoints(a,b,c,o,p)
- \tkzDrawCircles(o,p)
-\end{tikzpicture}
-\end{tkzexample}
-
-\begin{tkzelements}
- z.a = point: new (1,2)
- z.b = point: new (5,1)
- z.c = point: new (2,4)
- T.abc = triangle: new (z.a,z.b,z.c)
- z.o,z.p = get_points (T.abc: ex_circle ())
-\end{tkzelements}
-
- \hspace*{\fill}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLines[add=1 and 1](a,b b,c a,c)
- \tkzDrawPoints(a,b,c,o,p)
- \tkzDrawCircles(o,p)
- \end{tikzpicture}
- \hspace*{\fill}
- %\caption{Ex-circles}
-
-
-%
-% subsection excircle (end)
-
-\subsection{In/Out of a circle or a disk} % (fold)
-\label{sub:in_out_of_a_circle}
-
-
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
- scale = 1.25
- z.A = point: new (0,0)
- z.B = point: new (1,2)
- z.X = point: new (-2,2)
- C = circle : new (z.A,z.B)
- if C:in_out(z.X) -- in_out_disk
- then
- tex.print("In")
- else
- tex.print("Out")
- end
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircle(A,B)
- \tkzDrawPoints(A,B,X)
- \tkzLabelPoints(A,B,X)
-\end{tikzpicture}
-\end{tkzexample}
-
-\begin{tkzelements}
-scale = 2
-z.A = point: new (0,0)
-z.B = point: new (1,2)
-z.X = point: new (-2,2)
-C = circle : new (z.A,z.B)
-if C:in_out(z.X)
-then
- tex.print("In")
-else
- tex.print("Out")
-end
- z.M = C: point (math.pi/6)
-\end{tkzelements}
-\hspace*{\fill}\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircle(A,B)
- \tkzDrawPoints(A,B,X,M)
- \tkzLabelPoints(A,B,X,M)
-\end{tikzpicture}\hspace*{\fill}
-
-% subsection in_out_of_a_circle (end)
-%
\subsection{Orthogonal circle through} % (fold)
\label{sub:orthogonal_circle_through}
@@ -918,9 +723,6 @@ end
\tkzLabelPoints[right](O,A,z1,z2,c)
\end{tikzpicture}
\hspace*{\fill}
- %\caption{Orthogonal circle through}
-
-
% subsection orthogonal_circle_through (end)
\subsection{Devine ratio} % (fold)
@@ -934,8 +736,8 @@ L.AB = line: new (z.A,z.B)
z.C = L.AB: gold_ratio ()
L.AC = line: new (z.A,z.C)
z.O_1 = L.AC.mid
-z.G,z.H = L.AB: square ()
-z.E,z.F = L.AC: square ()
+_,_,z.G,z.H = get_points(L.AB: square ())
+_,_,z.E,z.F = get_points(L.AC: square ())
L.CB = line: new (z.C,z.B)
z.O_2 = L.CB.mid
z.O_0 = L.AB.mid
@@ -969,8 +771,8 @@ L.AB = line: new (z.A,z.B)
z.C = L.AB: gold_ratio ()
L.AC = line: new (z.A,z.C)
z.O_1 = L.AC.mid
-z.G,z.H = L.AB: square ()
-z.E,z.F = L.AC: square ()
+_,_,z.G,z.H = get_points(L.AB: square ())
+_,_,z.E,z.F = get_points(L.AC: square ())
L.CB = line: new (z.C,z.B)
z.O_2 = L.CB.mid
z.O_0 = L.AB.mid
@@ -998,10 +800,6 @@ z.L = intersection (L.AR,L.BG)
\tkzLabelPoints(A,B,C,K,E,F,G,H,O_0,O_1,O_2,R,S,T,L)
\end{tikzpicture}
\hspace*{\fill}
- %\caption{Devine or gold ratio}
-
-
-
% subsection devine_ratio (end)
\subsection{Director circle} % (fold)
@@ -1070,82 +868,32 @@ z.K = L.K.pb
\tkzMarkRightAngles(A,P,H J,L,K)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Director circle}
% subsection director_circle (end)
-\subsection{Distance} % (fold)
-\label{sub:distance}
-
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
- z.A = point : new (0 , 0)
- z.B = point : new (4 , 3)
- z.C = point : new (2 , 5)
- L.AB = line : new (z.A,z.B)
- d = L.AB : distance (z.C)
- l = L.AB.length
- z.H = L.AB : projection (z.C)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLines(A,B C,H)
- \tkzDrawPoints(A,B,C,H)
- \tkzLabelPoints(A,B,C,H)
- \tkzLabelSegment[above left,draw](C,H){$CH = \tkzUseLua{d}$}
- \tkzLabelSegment[below left,draw](C,H){$AB =\tkzUseLua{l}$}
-\end{tikzpicture}
-\end{tkzexample}
-
-\begin{tkzelements}
-z.A = point : new (0 , 0)
-z.B = point : new (4 , 3)
-z.C = point : new (2 , 5)
-L.AB = line : new (z.A,z.B)
-d = L.AB : distance (z.C)
-l = L.AB.length
-z.H = L.AB : projection (z.C)
-\end{tkzelements}
-
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines(A,B C,H)
-\tkzDrawPoints(A,B,C,H)
-\tkzLabelPoints(A,B,C,H)
-\tkzLabelSegment[above left,draw](C,H){$CH = \tkzUseLua{d}$}
-\tkzLabelSegment[below left,draw](C,H){$AB =\tkzUseLua{l}$}
-\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Distance to a line}
-
-
-
-% subsection distance (end)
\subsection{Gold division} % (fold)
\label{sub:gold_division}
\begin{tkzexample}[latex=0cm,small,code only]
\begin{tkzelements}
- z.A = point: new (0,0)
- z.B = point: new (2.5,0)
- L.AB = line: new (z.A,z.B)
- C.AB = circle: new (z.A,z.B)
- C.BA = circle: new (z.B,z.A)
- z.J = L.AB: midpoint ()
- L.JB = line:new (z.J,z.B)
- z.F,z.E = intersection (C.AB , C.BA)
- z.I,_ = intersection (L.AB , C.BA)
- z.K = L.JB : midpoint ()
- z.k = L.JB: ortho_from (z.K)
- L.Kk = line:new (z.K,z.k)
- _,z.G = intersection (L.Kk,C.BA)
- L.EG = line:new (z.E,z.G)
- z.C = intersection (L.EG,L.AB)
- z.O = C.AB: antipode (z.B)
+z.A = point: new (0,0)
+z.B = point: new (2.5,0)
+L.AB = line: new (z.A,z.B)
+C.AB = circle: new (z.A,z.B)
+C.BA = circle: new (z.B,z.A)
+z.J = L.AB: midpoint ()
+L.JB = line:new (z.J,z.B)
+z.F,z.E = intersection (C.AB , C.BA)
+z.I,_ = intersection (L.AB , C.BA)
+z.K = L.JB : midpoint ()
+L.mediator = L.JB: mediator ()
+z.G = intersection (L.mediator,C.BA)
+L.EG = line:new (z.E,z.G)
+z.C = intersection (L.EG,L.AB)
+z.O = C.AB: antipode (z.B)
\end{tkzelements}
-\begin{tikzpicture}
-\tkzGetNodes
+ \begin{tikzpicture}
+ \tkzGetNodes
\tkzDrawArc[delta=5](O,B)(G)
\tkzDrawCircles(A,B B,A)
\tkzDrawSegments(A,E B,E O,I)
@@ -1153,7 +901,7 @@ z.H = L.AB : projection (z.C)
\tkzMarkSegments[mark=s||](A,E B,E O,A)
\tkzDrawPoints(A,B,C,E,I,J,G,O,K)
\tkzLabelPoints(A,B,C,E,I,J,G,O,K)
-\end{tikzpicture}
+ \end{tikzpicture}
\end{tkzexample}
\begin{tkzelements}
@@ -1186,11 +934,6 @@ z.O = C.AB: antipode (z.B)
\tkzLabelPoints(A,B,C,E,I,J,G,O,K)
\end{tikzpicture}
\hspace*{\fill}
- %\caption{gold division}
-
-
-
-
% subsection gold_division (end)
\subsection{Ellipse} % (fold)
@@ -1232,18 +975,16 @@ b = E.Ry
slope = math.deg(E.slope)
\end{tkzelements}
- \hspace*{\fill}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles[teal](C,A)
- \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope})
- \tkzDrawPoints(C,A,B,b)
- \tkzLabelPoints(C,A,B)
- \end{tikzpicture}
- \hspace*{\fill}
- %\caption{Ellipse}
-
-% subsection ellipse (end)
+\hspace*{\fill}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles[teal](C,A)
+\tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope})
+\tkzDrawPoints(C,A,B,b)
+\tkzLabelPoints(C,A,B)
+\end{tikzpicture}
+\hspace*{\fill}
+ % subsection ellipse (end)
\subsection{Ellipse with radii} % (fold)
\label{sub:ellipse_with_radii}
@@ -1258,7 +999,7 @@ a = math.sqrt(32)
ang = math.deg(math.pi/4)
E = ellipse: radii (z.C,a,b,math.pi/4)
z.V = E : point (0)
-z.CoV = E : point (math.pi/2)
+z.CoV = E : point (0.25)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -1276,7 +1017,7 @@ a = math.sqrt(32)
ang = math.deg(math.pi/4)
E = ellipse: radii (z.C,a,b,math.pi/4)
z.V = E : point (0)
-z.CoV = E : point (math.pi/2)
+z.CoV = E : point (0.25)
\end{tkzelements}
\hspace*{\fill}
@@ -1285,8 +1026,6 @@ z.CoV = E : point (math.pi/2)
\tkzDrawEllipse[blue](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
\tkzDrawPoints(C,V,CoV)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Ellipse with radii}
% subsection ellipse_with_radii (end)
\subsection{Ellipse\_with\_foci} % (fold)
@@ -1350,10 +1089,6 @@ z.G = L.tb.pb
\tkzDrawLines(K,F K,G)
\end{tikzpicture}
\hspace*{\fill}
- %\caption{Ellipse with foci}
-
-
-
% subsection ellipse_with_foci (end)
\subsection{Euler relation} % (fold)
@@ -1418,74 +1153,12 @@ _,z.E = intersection (L.Ow, C.OA)
\tkzMarkRightAngles[fill=gray!20,opacity=.4](C,H,I A,K,J)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Euler relation}
% subsection euler_relation (end)
-\subsection{Euler line} % (fold)
-\label{sub:euler_line}
-
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
- z.A = point: new (0 , 0)
- z.B = point: new (6 , 0)
- z.C = point: new (1.5 , 3.5)
- T.ABC = triangle: new (z.A,z.B,z.C)
- z.O = T.ABC.circumcenter
- z.G = T.ABC.centroid
- z.N = T.ABC. eulercenter
- z.H = T.ABC. orthocenter
- z.P,z.Q,z.R = get_points (T.ABC: orthic())
- z.K,z.I,z.J = get_points (T.ABC: medial ())
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawLines[blue](O,H)
- \tkzDrawCircle[red](N,I)
- \tkzDrawCircles[teal](O,A)
- \tkzDrawSegments(A,P B,Q C,R)
- \tkzDrawSegments[red](A,I B,J C,K)
- \tkzDrawPolygons(A,B,C)
- \tkzDrawPoints(A,B,C,N,I,J,K,O,P,Q,R,H,G)
- \tkzLabelPoints(A,B,C,I,J,K,P,Q,R,H)
- \tkzLabelPoints[below](N,O,G)
-\end{tikzpicture}
-\end{tkzexample}
-
-\begin{tkzelements}
- scale =1
- z.A = point: new (0 , 0)
- z.B = point: new (6 , 0)
- z.C = point: new (1.5 , 3.5)
- T.ABC = triangle: new (z.A,z.B,z.C)
- z.O = T.ABC.circumcenter
- z.G = T.ABC.centroid
- z.N = T.ABC. eulercenter
- z.H = T.ABC. orthocenter
- z.P,z.Q,z.R = get_points (T.ABC: orthic())
- z.K,z.I,z.J = get_points (T.ABC: medial ())
-\end{tkzelements}
-
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawLines[blue](O,H)
-\tkzDrawCircle[red](N,I)
-\tkzDrawCircles[teal](O,A)
-\tkzDrawSegments(A,P B,Q C,R)
-\tkzDrawSegments[red](A,I B,J C,K)
-\tkzDrawPolygons(A,B,C)
-\tkzDrawPoints(A,B,C,N,I,J,K,O,P,Q,R,H,G)
-\tkzLabelPoints(A,B,C,I,J,K,P,Q,R)
-\tkzLabelPoints[below](N,O,G,H)
-\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Euler line}
-% subsection euler_line (end)
-
\subsection{External angle} % (fold)
\label{sub:external_angle}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
scale =.8
z.A = point: new (0 , 0)
@@ -1509,8 +1182,9 @@ _,z.E = intersection (L.Ow, C.OA)
\tkzLabelPoints[above](C)
\tkzLabelPoints(A,B,D)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale = .8
z.A = point: new (0 , 0)
@@ -1523,7 +1197,6 @@ z.D = intersection (T.ext.ab,T.ABC.ab)
z.E = z.C: symmetry (z.B)
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -1537,14 +1210,13 @@ z.E = z.C: symmetry (z.B)
\tkzLabelPoints[above](C)
\tkzLabelPoints(A,B,D)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{External angle}
+\end{minipage}
% subsection external_angle (end)
\subsection{Internal angle} % (fold)
\label{sub:internal_angle}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
scale = .8
z.A = point: new (0 , 0)
@@ -1570,8 +1242,9 @@ z.E = z.C: symmetry (z.B)
\tkzLabelPoints[above](C,D,E)
\tkzMarkSegments(A,C C,E)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale =.8
z.A = point: new (0 , 0)
@@ -1585,8 +1258,6 @@ L.LL = T.ab: ll_from (z.C)
L.AD = line: new (z.A,z.D)
z.E = intersection (L.LL,L.AD)
\end{tkzelements}
-
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -1600,14 +1271,13 @@ z.E = intersection (L.LL,L.AD)
\tkzLabelPoints[above](C,D,E)
\tkzMarkSegments(A,C C,E)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Internal angle}
+\end{minipage}
%subsection internal_angle (end)
\subsection{Feuerbach theorem} % (fold)
\label{sub:nine_points}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
scale = 1.5
z.A = point: new (0 , 0)
@@ -1647,8 +1317,9 @@ z.E = intersection (L.LL,L.AD)
\tkzDrawPoints(A,B,C,N,H,A',B',C',U,L,M,P,Q,F,I)
\tkzLabelPoints(A,B,C,N,H,A',B',C',U,L,M,P,Q,F,I)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale = 1
z.A = point: new (0 , 0)
@@ -1687,18 +1358,13 @@ z.F = intersection (L.LH,C.IH) -- feuerbach
\tkzDrawPoints(A,B,C,N,H,A',B',C',U,L,M,P,Q,F,I)
\tkzLabelPoints(A,B,C,N,H,A',B',C',U,L,M,P,Q,F,I)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Feuerbach theorem}
-
-
-
-
+\end{minipage}
% subsection nine_points (end)
\subsection{Gold ratio with segment} % (fold)
\label{sub:gold_ratio_with_segment}
-
- \begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+ \begin{verbatim}
\begin{tkzelements}
z.A = point: new (0 , 0)
z.B = point: new (8 , 0)
@@ -1719,14 +1385,15 @@ z.F = intersection (L.LH,C.IH) -- feuerbach
\tkzDrawArc[delta=20](M,A)(K)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
scale = .5
z.A = point: new (0 , 0)
z.B = point: new (8 , 0)
L.AB = line: new (z.A,z.B)
-z.X,z.Y = L.AB: square ()
+_,_,z.X,z.Y = get_points(L.AB: square ())
L.BX = line: new (z.B,z.X)
z.M = L.BX.mid
C.MA = circle: new (z.M,z.A)
@@ -1744,14 +1411,13 @@ z.C = intersection (L.AK,L.AB)
\tkzDrawArc[delta=20](M,A)(K)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Gold ration with a segment}
+\end{minipage}
%subsection gold_ratio_with_segment (end)
\subsection{Gold Arbelos} % (fold)
\label{sub:gold_arbelos}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
scale = .6
z.A = point: new (0 , 0)
@@ -1772,14 +1438,15 @@ z.C = intersection (L.AK,L.AB)
\tkzDrawPoints(A,C,B,O_1,O_2,O_0)
\tkzLabelPoints(A,C,B)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
scale = .4
z.A = point: new (0 , 0)
z.C = point: new (6 , 0)
L.AC = line: new (z.A,z.C)
-z.x,z.y = L.AC: square ()
+_,_,z.x,z.y = get_points(L.AC: square ())
z.O_1 = L.AC . mid
C = circle: new (z.O_1,z.x)
z.B = intersection (L.AC,C)
@@ -1794,16 +1461,15 @@ z.O_0 = L.AB.mid
\tkzGetNodes
\tkzDrawCircles(O_1,C O_2,B O_0,B O_1,x)
\tkzDrawPoints(A,C,B,O_1,O_2,O_0,x)
-\tkzLabelPoints(A,C,B)
+\tkzLabelPoints[below right](A,C,B)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Gold Arbelos}
+\end{minipage}
% subsection gold_arbelos (end)
\subsection{Harmonic division v1} % (fold)
\label{sub:harmonic_division_v1}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
scale=.75
z.A = point: new (0 , 0)
@@ -1835,8 +1501,9 @@ z.C = intersection (L.XG,L.AB)
\tkzLabelPoints(A,B,G,E,F,C,D)
\tkzMarkSegments(F,B B,E)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale=.75
z.A = point: new (0 , 0)
@@ -1869,14 +1536,13 @@ z.C = intersection (L.XG,L.AB)
\tkzLabelPoints(A,B,G,E,F,C,D)
\tkzMarkSegments(F,B B,E)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Harmonic division V1}
+\end{minipage}
% subsection harmonic_division_v1 (end)
\subsection{Harmonic division v2} % (fold)
\label{sub:harmonic_division_v2}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
scale = .5
z.A = point: new (0 , 0)
@@ -1901,8 +1567,9 @@ z.C = intersection (L.XG,L.AB)
\tkzDrawPoints(A,...,G,X)
\tkzLabelPoints(A,...,G,X)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale = .5
z.A = point: new (0 , 0)
@@ -1929,14 +1596,13 @@ z.C = intersection (L.GX,L.AB)
\tkzDrawPoints(A,...,G,X)
\tkzLabelPoints(A,...,G,X)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Harmonic division V2}
+\end{minipage}
% subsection harmonic_division_v2 (end)
\subsection{Menelaus} % (fold)
\label{sub:menelaus}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
z.A = point: new (0 , 0)
z.B = point: new (6 , 0)
@@ -1957,8 +1623,9 @@ z.C = intersection (L.GX,L.AB)
\tkzDrawPoints(P,Q,R,A,B,C)
\tkzLabelPoints(A,B,C,P,Q,R)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
z.A = point: new (0 , 0)
z.B = point: new (6 , 0)
@@ -1981,8 +1648,7 @@ z.R = intersection (L.BC,L.PX)
\tkzDrawPoints(P,Q,R,A,B,C)
\tkzLabelPoints(A,B,C,P,Q,R)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Menelaus}
+\end{minipage}
% subsection menelaus (end)
\subsection{Radical axis v1} % (fold)
@@ -1990,24 +1656,24 @@ z.R = intersection (L.BC,L.PX)
\begin{tkzexample}[latex=0cm,small,code only]
\begin{tkzelements}
- scale = .75
- z.X = point : new (0,0)
- z.B = point : new (2,2)
- z.Y = point : new (7,1)
- z.Ap = point : new (8,-1)
- L.XY = line : new (z.X,z.Y)
- C.XB = circle : new (z.X,z.B)
- C.YAp = circle : new (z.Y,z.Ap)
- z.E,z.F = get_points (C.XB : radical_axis (C.YAp))
- z.A = C.XB : point (-math.pi)
- T.ABAp = triangle: new (z.A,z.B,z.Ap)
- z.O = T.ABAp.circumcenter
- C.OAp = circle : new (z.O,z.Ap)
- _,z.Bp = intersection (C.OAp,C.YAp)
- L.AB = line : new (z.A,z.B)
- L.ApBp = line : new (z.Ap,z.Bp)
- z.M = intersection (L.AB,L.ApBp)
- z.H = L.XY : projection (z.M)
+scale = .75
+z.X = point : new (0,0)
+z.B = point : new (2,2)
+z.Y = point : new (7,1)
+z.Ap = point : new (8,-1)
+L.XY = line : new (z.X,z.Y)
+C.XB = circle : new (z.X,z.B)
+C.YAp = circle : new (z.Y,z.Ap)
+z.E,z.F = get_points (C.XB : radical_axis (C.YAp))
+z.A = C.XB : point (0.4)
+T.ABAp = triangle: new (z.A,z.B,z.Ap)
+z.O = T.ABAp.circumcenter
+C.OAp = circle : new (z.O,z.Ap)
+_,z.Bp = intersection (C.OAp,C.YAp)
+L.AB = line : new (z.A,z.B)
+L.ApBp = line : new (z.Ap,z.Bp)
+z.M = intersection (L.AB,L.ApBp)
+z.H = L.XY : projection (z.M)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -2029,7 +1695,7 @@ L.XY = line : new (z.X,z.Y)
C.XB = circle : new (z.X,z.B)
C.YAp = circle : new (z.Y,z.Ap)
z.E,z.F = get_points (C.XB : radical_axis (C.YAp))
-z.A = C.XB : point (-math.pi)
+z.A = C.XB : point (0.4)
T.ABAp = triangle: new (z.A,z.B,z.Ap)
z.O = T.ABAp.circumcenter
C.OAp = circle : new (z.O,z.Ap)
@@ -2039,7 +1705,6 @@ L.ApBp = line : new (z.Ap,z.Bp)
z.M = intersection (L.AB,L.ApBp)
z.H = L.XY : projection (z.M)
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -2049,8 +1714,6 @@ z.H = L.XY : projection (z.M)
\tkzDrawLines[red](A,M A',M X,Y E,F)
\tkzDrawLines[red,add=1 and 3](M,H)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Radical axis v1}
% subsection radical_axis_v1 (end)
\subsection{Radical axis v2} % (fold)
@@ -2116,7 +1779,6 @@ _,z.Kp = get_points (L.MKp)
\tkzDrawPoints(O,O',T,M,T',K,K')
\tkzLabelPoints(O,O',T,T',K,K',M)
\end{tikzpicture}\hspace*{\fill}
-%\caption{Radical axis v2}
% subsection radical_axis_v2 (end)
\subsection{Radical axis v3} % (fold)
@@ -2177,7 +1839,6 @@ _,z.Tp = get_points (L)
\tkzDrawArc(M,T')(T)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Radical axis v3}
% subsection radical_axis_v3 (end)
\subsection{Radical axis v4} % (fold)
@@ -2237,13 +1898,12 @@ _,z.Tp = get_points (L)
\tkzDrawArc(M,T)(B)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Radical axis v4}
% subsection radical_axis_v4 (end)
\subsection{Radical center} % (fold)
\label{sub:radical_center}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
z.O = point : new (0,0)
z.x = point : new (1,0)
@@ -2263,7 +1923,6 @@ _,z.Tp = get_points (L)
L.OOp = line : new (z.O,z.Op)
z.H = L.OOp : projection (z.X)
\end{tkzelements}
-
\begin{tikzpicture}
\tkzGetNodes
\tkzDrawCircles(O,a O',b P,z)
@@ -2271,8 +1930,9 @@ _,z.Tp = get_points (L)
\tkzDrawPoints(O,O',P,a,a',b,b',X,H)
\tkzLabelPoints[below right](O,O',P,H)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
z.O = point : new (0,0)
z.x = point : new (1,0)
@@ -2300,14 +1960,13 @@ z.H = L.OOp : projection (z.X)
\tkzDrawPoints(O,O',P,a,a',b,b',X,H)
\tkzLabelPoints[below right](O,O',P,H)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Radical center}
+\end{minipage}
% subsection radical_center (end)
\subsection{Radical circle} % (fold)
\label{sub:radical_circle}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
scale = .25
z.A = point: new (0,0)
@@ -2331,8 +1990,9 @@ z.H = L.OOp : projection (z.X)
\tkzDrawPoints(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale = .25
z.A = point: new (0,0)
@@ -2358,8 +2018,7 @@ z.H = L.OOp : projection (z.X)
\tkzDrawPoints(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Radical circle}
+\end{minipage}
% subsection radical_circle (end)
\subsection{Hexagram} % (fold)
@@ -2418,7 +2077,7 @@ z.H = L.OOp : projection (z.X)
\end{tkzexample}
\begin{tkzelements}
-scale = 1.5
+scale = 2
E = {}
z.A = point: new (0 , 0)
z.B = point: new (5 , 1)
@@ -2472,7 +2131,6 @@ _,z.W = intersection (L.ZO,E)
\tkzDrawEllipse[blue](N,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{ang})
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Hexagram Lemoine,Pascal}
% subsection hexagram (end)
\subsection{Gold Arbelos properties} % (fold)
@@ -2511,7 +2169,7 @@ _,z.W = intersection (L.ZO,E)
C.DC = circle: new (z.D,z.C)
z.U,z.V = intersection (C.DC,C1)
L.UV = line :new (z.U,z.V)
- z.R ,z.S = L.UV : set_projection (z.O_2,z.O_3)
+ z.R ,z.S = L.UV : projection (z.O_2,z.O_3)
L.O1D = line : new (z.O_1,z.D)
z.W = intersection (L.UV,L.O1D)
z.O = C.DC : inversion (z.W)
@@ -2578,7 +2236,7 @@ z.O_7 = L.CD.mid
C.DC = circle: new (z.D,z.C)
z.V,z.U = intersection (C.DC,C1)
L.UV = line :new (z.U,z.V)
-z.R ,z.S = L.UV : set_projection (z.O_2,z.O_3)
+z.R ,z.S = L.UV : projection (z.O_2,z.O_3)
L.O1D = line : new (z.O_1,z.D)
z.W = intersection (L.UV,L.O1D)
z.O = C.DC : inversion (z.W)
@@ -2614,7 +2272,6 @@ z.O = C.DC : inversion (z.W)
\tkzLabelPoints[below right](B,U,W,O_7)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Gold Arbelos properties}
% subsection gold_arbelos_properties (end)
\subsection{Apollonius circle v1 with inversion} % (fold)
@@ -2636,7 +2293,7 @@ z.O = C.DC : inversion (z.W)
C.euler = T.ABC: euler_circle ()
C.apo = C.ortho : inversion (C.euler)
z.O = C.apo.center
- z.xa,z.xb,z.xc = C.ortho : set_inversion (z.Ea,z.Eb,z.Ec)
+ z.xa,z.xb,z.xc = C.ortho : inversion (z.Ea,z.Eb,z.Ec)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -2673,7 +2330,7 @@ z.O = C.DC : inversion (z.W)
C.euler = T.ABC: euler_circle ()
C.apo = C.ortho : inversion (C.euler)
z.O = C.apo.center
- z.xa,z.xb,z.xc = C.ortho : set_inversion (z.Ea,z.Eb,z.Ec)
+ z.xa,z.xb,z.xc = C.ortho : inversion (z.Ea,z.Eb,z.Ec)
\end{tkzelements}
\hspace*{\fill}
@@ -2695,7 +2352,6 @@ z.O = C.DC : inversion (z.W)
\tkzLabelPoints(A,B,C,O,S,N)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Apollonius circle V1}
% subsection apollonius_circle_v1_with_inversion (end)
\subsection{Apollonius circle v2} % (fold)
@@ -2743,7 +2399,7 @@ z.O = C.DC : inversion (z.W)
\end{tkzexample}
\begin{tkzelements}
-scale =.5
+scale =.3
z.A = point: new (0,0)
z.B = point: new (6,0)
z.C = point: new (0.8,4)
@@ -2843,7 +2499,6 @@ z.S,z.T = get_points (C: orthogonal_from (z.C_2))
\tkzLabelCircle[right=10pt](C_2,T)(180){Circle 2}
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Orthogonal circles v1 }
% subsection orthogonal_circles_v1 (end)
\subsection{Orthogonal circles v2} % (fold)
@@ -2921,7 +2576,6 @@ z.M = L.OOp.mid
\tkzLabelPoint[above left](O'){$O'$}
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Orthogonal circles v2}
% subsection orthogonal_circles_v2 (end)
\subsection{Orthogonal circle to two circles} % (fold)
@@ -2958,6 +2612,7 @@ z.M = L.OOp.mid
\end{tkzexample}
\begin{tkzelements}
+ scale = 1.25
z.O = point : new (-1,0)
z.B = point : new (0,2)
z.Op = point : new (4,-1)
@@ -2974,7 +2629,6 @@ z.K = L.K.pb
z.Tp = L.Tp.pb
z.Kp = L.Kp.pb
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
@@ -2988,7 +2642,6 @@ z.Kp = L.Kp.pb
\tkzLabelPoints(O,O',T,T',M,K,K')
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Orthogonal to two circles}
% \subsection{Orthogonal to two circles} % (fold)
\subsection{Midcircles} % (fold)
@@ -3039,37 +2692,37 @@ z.Kp = L.Kp.pb
_,z.G = intersection (L.AP0,C.O4P0)
z.H = intersection (L.BP0,C.O4P0)
z.Ap = z.M_1: symmetry (z.A)
- z.H_4,z.F,z.E,z.H_0 = L.AB : set_projection (z.O_4,z.G,z.H,z.P_0)
+ z.H_4,z.F,z.E,z.H_0 = L.AB : projection (z.O_4,z.G,z.H,z.P_0)
\end{tkzelements}
\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircle[thin,fill=green!10](O_4,P_0)
- \tkzDrawCircle[purple,fill=purple!10,opacity=.5](O_5,C)
- \tkzDrawSemiCircles[teal](O_0,B)
- \tkzDrawSemiCircles[thin,teal,fill=teal!20,opacity=.5](O_1,C O_2,B)
- \tkzDrawSemiCircles[new](M_2,B)
- \tkzDrawSemiCircles[new](M_1,A')
- \tkzDrawArc[purple,delta=0](M_0,P_0)(C)
- \tkzDrawSegments[very thin](A,B A,P B,Q)
- \tkzDrawSegments[step 1](O_0,P_0 B,J G,J G,O_0 H,O_2)
- \tkzDrawSegments[ultra thin,purple](M_1,P_0 M_2,P_0 M_1,M_0 M_0,P_1 M_0,P_0 M_1,J)
- \tkzDrawPoints(A,B,C,P_0,P_2,P_1,M_0,M_1,M_2,J,P,Q,S)
- \tkzDrawPoints(O_0,O_1,O_2,O_4,O_5,G,H)
- \tkzMarkRightAngle[size=.2,fill=gray!20,opacity=.4](O_0,P_0,M_0)
- \tkzLabelPoints[below](A,B,C,M_0,M_1,M_2,O_1,O_2,O_0)
- \tkzLabelPoints[above](P_0,O_5,O_4)
- \tkzLabelPoints[above](P_1,J)
- \tkzLabelPoints[above](P_2,P,Q,S)
- \tkzLabelPoints[above right](H,E)
- \tkzLabelPoints[above left](F,G)
- \tkzLabelPoints[below right](H_0)
- \tkzLabelCircle[below=4pt,font=\scriptsize](O_1,C)(80){$(\beta)$}
- \tkzLabelCircle[below=4pt,font=\scriptsize](O_2,B)(80){$(\gamma)$}
- \tkzLabelCircle[below=4pt,font=\scriptsize](O_0,B)(110){$(\alpha)$}
- \tkzLabelCircle[left,font=\scriptsize](O_4,P_2)(60){$(\delta)$}
- \tkzLabelCircle[above left,font=\scriptsize](O_5,C)(40){$(\epsilon)$}
- \end{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircle[thin,fill=green!10](O_4,P_0)
+\tkzDrawCircle[purple,fill=purple!10,opacity=.5](O_5,C)
+\tkzDrawSemiCircles[teal](O_0,B)
+\tkzDrawSemiCircles[thin,teal,fill=teal!20,opacity=.5](O_1,C O_2,B)
+\tkzDrawSemiCircles[color = orange](M_2,B)
+\tkzDrawSemiCircles[color = orange](M_1,A')
+\tkzDrawArc[purple,delta=0](M_0,P_0)(C)
+\tkzDrawSegments[very thin](A,B A,P B,Q)
+\tkzDrawSegments[color=cyan](O_0,P_0 B,J G,J G,O_0 H,O_2)
+\tkzDrawSegments[ultra thin,purple](M_1,P_0 M_2,P_0 M_1,M_0 M_0,P_1 M_0,P_0 M_1,J)
+\tkzDrawPoints(A,B,C,P_0,P_2,P_1,M_0,M_1,M_2,J,P,Q,S)
+\tkzDrawPoints(O_0,O_1,O_2,O_4,O_5,G,H)
+\tkzMarkRightAngle[size=.2,fill=gray!20,opacity=.4](O_0,P_0,M_0)
+\tkzLabelPoints[below](A,B,C,M_0,M_1,M_2,O_1,O_2,O_0)
+\tkzLabelPoints[above](P_0,O_5,O_4)
+\tkzLabelPoints[above](P_1,J)
+\tkzLabelPoints[above](P_2,P,Q,S)
+\tkzLabelPoints[above right](H,E)
+\tkzLabelPoints[above left](F,G)
+\tkzLabelPoints[below right](H_0)
+\tkzLabelCircle[below=4pt,font=\scriptsize](O_1,C)(80){$(\beta)$}
+\tkzLabelCircle[below=4pt,font=\scriptsize](O_2,B)(80){$(\gamma)$}
+\tkzLabelCircle[below=4pt,font=\scriptsize](O_0,B)(110){$(\alpha)$}
+\tkzLabelCircle[left,font=\scriptsize](O_4,P_2)(60){$(\delta)$}
+\tkzLabelCircle[above left,font=\scriptsize](O_5,C)(40){$(\epsilon)$}
+\end{tikzpicture}
\end{tkzexample}
\begin{tkzelements}
@@ -3116,7 +2769,7 @@ C.O4P0 = circle : new (z.O_4,z.P_0)
_,z.G = intersection (L.AP0,C.O4P0)
z.H = intersection (L.BP0,C.O4P0)
z.Ap = z.M_1: symmetry (z.A)
-z.H_4,z.F,z.E,z.H_0 = L.AB : set_projection (z.O_4,z.G,z.H,z.P_0)
+z.H_4,z.F,z.E,z.H_0 = L.AB : projection (z.O_4,z.G,z.H,z.P_0)
\end{tkzelements}
\hspace*{\fill}
@@ -3149,7 +2802,6 @@ z.H_4,z.F,z.E,z.H_0 = L.AB : set_projection (z.O_4,z.G,z.H,z.P_0)
\tkzLabelCircle[above left,font=\scriptsize](O_5,C)(40){$(\epsilon)$}
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Midcircles}
% subsection midcircles (end)
\subsection{Pencil v1} % (fold)
@@ -3212,7 +2864,6 @@ z.O = L.BA.mid
\tkzLabelLine[pos=1.25,right]( M_0,M_1){$(\Delta)$}
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Pencil v1}
% subsection pencil_v1 (end)
\subsection{Pencil v2} % (fold)
@@ -3283,7 +2934,8 @@ z.O = L.BA.mid
\subsection{Power v1} % (fold)
\label{sub:power_v1}
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
z.O = point : new (0,0)
z.A = point : new (2,-2)
@@ -3302,10 +2954,11 @@ z.O = L.BA.mid
\tkzLabelPoints(O,A,A',M,B)
\tkzDrawSegments[-Triangle](M,A M,A')
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
-scale = 1.25
+scale = 1
z.O = point : new (0,0)
z.A = point : new (2,-2)
z.M = point : new (-6,0)
@@ -3325,13 +2978,13 @@ z.B = intersection (L.AM, C.OA)
\tkzLabelPoints(O,A,A',M,B)
\tkzDrawSegments[-Triangle](M,A M,A')
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Power v1}
+\end{minipage}
% subsection power_v1 (end)
\subsection{Power v2} % (fold)
\label{sub:power_v2}
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
z.O = point : new (0,0)
z.A = point : new (2,2)
@@ -3354,10 +3007,11 @@ z.B = intersection (L.AM, C.OA)
\tkzLabelPoints[below left](A',B)
\tkzDrawSegments(M,A M,A')
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
-scale = 1.25
+scale = 1
z.O = point : new (0,0)
z.A = point : new (2,2)
z.M = point : new (-1.5,0)
@@ -3379,8 +3033,8 @@ z.U,z.V = intersection (L.mM,C.OA)
\tkzLabelPoints(O,A,M,U,V,m)
\tkzLabelPoints[below left](A',B)
\tkzDrawSegments(M,A M,A')
-\end{tikzpicture}\hspace*{\fill}
- %\caption{Power v2}
+\end{tikzpicture}
+\end{minipage}
% subsection power_v2 (end)
\subsection{Reim v1} % (fold)
@@ -3390,9 +3044,9 @@ z.U,z.V = intersection (L.mM,C.OA)
z.A = point: new (0,0)
z.E = point: new (-2,2)
C.AE = circle : new (z.A,z.E)
- z.C = C.AE : point (math.pi/6)
- z.D = C.AE : point (-math.pi/180*40)
- z.F = C.AE : point (-math.pi/180*100)
+ z.C = C.AE : point (0.65)
+ z.D = C.AE : point (0.5)
+ z.F = C.AE : point (0.30)
L.EC = line: new (z.E,z.C)
z.H = L.EC : point (1.5)
T.CDH = triangle : new (z.C,z.D,z.H)
@@ -3419,20 +3073,20 @@ z.U,z.V = intersection (L.mM,C.OA)
\end{tkzexample}
\begin{tkzelements}
-z.A = point: new (0,0)
-z.E = point: new (-2,2)
-C.AE = circle : new (z.A,z.E)
-z.C = C.AE : point (math.pi/6)
-z.D = C.AE : point (-math.pi/180*40)
-z.F = C.AE : point (-math.pi/180*100)
-L.EC = line: new (z.E,z.C)
-z.H = L.EC : point (1.5)
-T.CDH = triangle : new (z.C,z.D,z.H)
-z.B = T.CDH.circumcenter
-C.BD = circle : new (z.B,z.D)
-L.FD = line: new (z.F,z.D)
-z.G = intersection (L.FD,C.BD)
-z.O = intersection (L.EC,L.FD)
+ z.A = point: new (0,0)
+ z.E = point: new (-2,2)
+ C.AE = circle : new (z.A,z.E)
+ z.C = C.AE : point (0.65)
+ z.D = C.AE : point (0.5)
+ z.F = C.AE : point (0.30)
+ L.EC = line: new (z.E,z.C)
+ z.H = L.EC : point (1.5)
+ T.CDH = triangle : new (z.C,z.D,z.H)
+ z.B = T.CDH.circumcenter
+ C.BD = circle : new (z.B,z.D)
+ L.FD = line: new (z.F,z.D)
+ z.G = intersection (L.FD,C.BD)
+ z.O = intersection (L.EC,L.FD)
\end{tkzelements}
\hspace*{\fill}
@@ -3451,7 +3105,6 @@ z.O = intersection (L.EC,L.FD)
\tkzFillAngles[red!40,opacity=.4,size=.5](F,C,H G,D,E)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Reim v1}
% subsection reim_v1 (end)
\subsection{Reim v2} % (fold)
@@ -3464,7 +3117,7 @@ z.O = intersection (L.EC,L.FD)
z.C = point: new (4,0)
C.AC = circle: new (z.A,z.C)
z.c,z.cp = get_points (C.AC: tangent_at (z.C))
- z.M = C.AC: point (1.2*math.pi)
+ z.M = C.AC: point (0.6)
L.MC = line: new (z.M,z.C)
C.BC = circle: new (z.B,z.C)
z.N = intersection (L.MC,C.BC)
@@ -3491,7 +3144,7 @@ z.B = point: new (10,0)
z.C = point: new (4,0)
C.AC = circle: new (z.A,z.C)
z.c,z.cp = get_points (C.AC: tangent_at (z.C))
-z.M = C.AC: point (1.2*math.pi)
+z.M = C.AC: point (0.6)
L.MC = line: new (z.M,z.C)
C.BC = circle: new (z.B,z.C)
z.N = intersection (L.MC,C.BC)
@@ -3512,7 +3165,6 @@ z.n,z.np = get_points (C.BC: tangent_at (z.N))
\tkzLabelCircle[left=4pt,font=\scriptsize](B,C)(-90){$(\beta)$}
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Reim v2}
% subsection reim_v2 (end)
\subsection{Reim v3} % (fold)
@@ -3597,13 +3249,12 @@ z.n,z.np = get_points (C.BC: tangent_at (z.N))
\tkzLabelCircle[below=4pt,font=\scriptsize](z,C)(60){$(\gamma)$}
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Reim v3}
% subsection reim_v3 (end)
\subsection{Tangent and circle} % (fold)
\label{sub:tangent_and_circle}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
z.A = point: new (1,0)
z.B = point: new (2,2)
@@ -3624,8 +3275,9 @@ z.n,z.np = get_points (C.BC: tangent_at (z.N))
\tkzDrawLines(E,i E,j k,l)
\tkzLabelPoints[right,font=\small](A,B,E,S,M)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
z.A = point: new (1,0)
z.B = point: new (2,2)
@@ -3647,19 +3299,18 @@ z.k,z.l = get_points (C.AB: tangent_at (z.B))
\tkzDrawLines(E,i E,j k,l)
\tkzLabelPoints[right,font=\small](A,B,E,S,M)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Tangent and circle}
+\end{minipage}
% subsection tangent_and_circle (end)
\subsection{Homothety} % (fold)
\label{sub:homothety}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
z.A = point: new (0,0)
z.B = point: new (1,2)
z.E = point: new (-3,2)
- z.C,z.D = z.E : set_homothety(2,z.A,z.B)
+ z.C,z.D = z.E : homothety(2,z.A,z.B)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -3668,14 +3319,15 @@ z.k,z.l = get_points (C.AB: tangent_at (z.B))
\tkzDrawCircles(A,B C,D)
\tkzDrawLines(E,C E,D)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
scale = .6
z.A = point: new (0,0)
z.B = point: new (1,2)
z.E = point: new (-3,2)
-z.C,z.D = z.E : set_homothety(2,z.A,z.B)
+z.C,z.D = z.E : homothety(2,z.A,z.B)
\end{tkzelements}
\hspace*{\fill}\begin{tikzpicture}
\tkzGetNodes
@@ -3683,14 +3335,14 @@ z.C,z.D = z.E : set_homothety(2,z.A,z.B)
\tkzLabelPoints(A,B,C,E)
\tkzDrawCircles(A,B C,D)
\tkzDrawLines(E,C E,D)
-\end{tikzpicture}\hspace*{\fill}
-%\caption{Homothety}
+\end{tikzpicture}
+\end{minipage}
% subsection homothety (end)
\subsection{Tangent and chord} % (fold)
\label{sub:tangent_and_chord}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
scale = .8
z.A = point: new (0 , 0)
@@ -3714,11 +3366,12 @@ z.C,z.D = z.E : set_homothety(2,z.A,z.B)
\tkzDrawLine(b1,b2)
\tkzDrawPoints(A,B,C,D,H,O)
\tkzFillAngles[green!20,opacity=.3](H,O,B A,C,B A,B,b1)
- \tkzFillAngles[teal!20,opacity=.3](B,D,A b2,B,A)
+ \tkzFillAngles[teal!20,opacity=.3](A,D,B b2,B,A)
\tkzLabelPoints(A,B,C,D,H,O)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
scale = 0.75
z.A = point: new (0 , 0)
@@ -3744,11 +3397,10 @@ z.H = L.AB: projection (z.O)
\tkzDrawLine(b1,b2)
\tkzDrawPoints(A,B,C,D,H,O)
\tkzFillAngles[green!20,opacity=.3](H,O,B A,C,B A,B,b1)
-\tkzFillAngles[teal!20,opacity=.3](B,D,A b2,B,A)
+\tkzFillAngles[teal!20,opacity=.3](A,D,B b2,B,A)
\tkzLabelPoints(A,B,C,D,H,O)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Tangent and chord}
+\end{minipage}
% subsection tangent_and_chord (end)
@@ -3757,33 +3409,33 @@ z.H = L.AB: projection (z.O)
\begin{tkzexample}[latex=0cm,small,code only]
\begin{tkzelements}
- z.O = point: new (0 , 0)
- z.B = point: new (0 , 2)
- z.P = point: new (1 , -.5)
- C.OB = circle : new (z.O,z.B)
- C.PB = circle : new (z.P,z.B)
- _,z.A = intersection (C.OB,C.PB)
- z.D = C.PB: point(math.pi/3)
- z.C = C.PB: point(-math.pi/3)
- z.E = C.OB: point(-math.pi/180*50)
- L.AB = line : new (z.A,z.B)
- L.CD = line : new (z.C,z.D)
- z.G = intersection (L.AB,L.CD)
- L.GE = line : new (z.G,z.E)
- z.F,_ = intersection (L.GE,C.OB)
- T.CDE = triangle: new (z.C,z.D,z.E)
- T.BFD = triangle: new (z.B,z.F,z.D)
- z.w = T.CDE.circumcenter
- z.x = T.BFD.circumcenter
- L.GB = line : new (z.G,z.B)
- L.GE = line : new (z.G,z.E)
- L.GD = line : new (z.G,z.D)
- C.xB = circle : new (z.x,z.B)
- C.xF = circle : new (z.x,z.F)
- C.xD = circle : new (z.x,z.D)
- z.Ap = intersection (L.GB,C.xB)
- z.Ep = intersection (L.GE,C.xF)
- z.Cp = intersection (L.GD,C.xD)
+z.O = point: new (0 , 0)
+z.B = point: new (0 , 2)
+z.P = point: new (1 , -.5)
+C.OB = circle : new (z.O,z.B)
+C.PB = circle : new (z.P,z.B)
+_,z.A = intersection (C.OB,C.PB)
+z.D = C.PB: point(0.85)
+z.C = C.PB: point(0.5)
+z.E = C.OB: point(0.6)
+L.AB = line : new (z.A,z.B)
+L.CD = line : new (z.C,z.D)
+z.G = intersection (L.AB,L.CD)
+L.GE = line : new (z.G,z.E)
+z.F,_ = intersection (L.GE,C.OB)
+T.CDE = triangle: new (z.C,z.D,z.E)
+T.BFD = triangle: new (z.B,z.F,z.D)
+z.w = T.CDE.circumcenter
+z.x = T.BFD.circumcenter
+L.GB = line : new (z.G,z.B)
+L.GE = line : new (z.G,z.E)
+L.GD = line : new (z.G,z.D)
+C.xB = circle : new (z.x,z.B)
+C.xF = circle : new (z.x,z.F)
+C.xD = circle : new (z.x,z.D)
+z.Ap = intersection (L.GB,C.xB)
+z.Ep,_ = intersection (L.GE,C.xF)
+z.Cp,_ = intersection (L.GD,C.xD)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -3812,9 +3464,9 @@ z.P = point: new (1 , -.5)
C.OB = circle : new (z.O,z.B)
C.PB = circle : new (z.P,z.B)
_,z.A = intersection (C.OB,C.PB)
-z.D = C.PB: point(math.pi/3)
-z.C = C.PB: point(-math.pi/3)
-z.E = C.OB: point(-math.pi/180*50)
+z.D = C.PB: point(0.85)
+z.C = C.PB: point(0.5)
+z.E = C.OB: point(0.6)
L.AB = line : new (z.A,z.B)
L.CD = line : new (z.C,z.D)
z.G = intersection (L.AB,L.CD)
@@ -3855,13 +3507,13 @@ z.Cp,_ = intersection (L.GD,C.xD)
\end{scope}
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Three chords}
% subsection three_chords (end)
\subsection{Three tangents} % (fold)
\label{sub:three_tangents}
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
z.A = point: new (-1 , 0)
z.C = point: new (4 , -1.5)
@@ -3891,8 +3543,9 @@ z.Cp,_ = intersection (L.GD,C.xD)
\tkzLabelPoints[above right](E,F)
\tkzLabelPoints[below](C)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale = .75
z.A = point: new (-1 , 0)
@@ -3925,14 +3578,13 @@ z.I = intersection (L.TA,L.TC)
\tkzLabelPoints[above right](E,F)
\tkzLabelPoints[below](C)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Three tangents}
+\end{minipage}
% subsection three_tangents (end)
\subsection{Midarc} % (fold)
\label{sub:midarc}
-
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
z.A = point: new (-1,0)
z.B = point: new (2,4)
@@ -3947,8 +3599,9 @@ z.I = intersection (L.TA,L.TC)
\tkzDrawPoints(A,...,D)
\tkzLabelPoints(A,...,D)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale = .5
z.A = point: new (-1,0)
@@ -3957,21 +3610,22 @@ C.AB = circle: new (z.A,z.B)
z.C = z.A: rotation (math.pi/3,z.B)
z.D = C.AB: midarc (z.B,z.C)
\end{tkzelements}
-
-\hspace*{\fill}\begin{tikzpicture}
+\hspace*{\fill}
+\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPoints(A,B,C)
\tkzDrawCircles(A,B)
\tkzDrawPoints(A,...,D)
\tkzLabelPoints(A,...,D)
-\end{tikzpicture}\hspace*{\fill}
-%\caption{Midarc}
+\end{tikzpicture}
+\end{minipage}
% subsection midarc (end)
\subsection{Lemoine Line without macro} % (fold)
\label{sub:lemoine_line_without_macro}
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
scale = 1.6
z.A = point: new (1,0)
@@ -4003,8 +3657,9 @@ z.D = C.AB: midarc (z.B,z.C)
\tkzDrawLines[red](Ar,Al Br,Q Cr,Cl)
\tkzDrawSegments(A,R C,P C,Q)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale = 0.75
z.A = point: new (1,0)
@@ -4038,14 +3693,14 @@ z.R = intersection (L.tC,L.AB)
\tkzDrawLines[red](Ar,Al Br,Q Cr,Cl)
\tkzDrawSegments(A,R C,P C,Q)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Lemoine Line without macro}
+\end{minipage}
% subsection lemoine_line_without_macro (end)
\subsection{First Lemoine circle} % (fold)
\label{sub:first_lemoine_circle}
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
z.A = point: new (1,1)
z.B = point: new (5,1)
@@ -4063,8 +3718,9 @@ z.R = intersection (L.tC,L.AB)
\tkzLabelPoints(A,B,C,o,w,O,L)
\tkzDrawCircles(o,w O,A)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
z.A = point: new (1,1)
z.B = point: new (5,1)
@@ -4074,8 +3730,6 @@ z.O = T.circumcenter
z.o,z.w = get_points (T : first_lemoine_circle ())
z.L = T : lemoine_point ()
\end{tkzelements}
-
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -4084,8 +3738,7 @@ z.L = T : lemoine_point ()
\tkzLabelPoints(A,B,C,o,w,O,L)
\tkzDrawCircles(o,w O,A)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{First Lemoine circle}
+\end{minipage}
% subsection first_lemoine_circle (end)
\subsection{First and second Lemoine circles} % (fold)
@@ -4101,17 +3754,17 @@ z.L = T : lemoine_point ()
z.O = T.circumcenter
z.o,z.p = get_points (T : first_lemoine_circle ())
L.ab = line : new (z.a,z.b)
- L.ac = line : new (z.a,z.c)
+ L.ca = line : new (z.c,z.a)
L.bc = line : new (z.b,z.c)
z.L,z.x = get_points (T : second_lemoine_circle ())
C.first_lemoine = circle : new (z.o,z.p)
z.y1,z.y2 = intersection (L.ab,C.first_lemoine)
z.y5,z.y6 = intersection (L.bc,C.first_lemoine)
- z.y3,z.y4 = intersection (L.ac,C.first_lemoine)
+ z.y3,z.y4 = intersection (L.ca,C.first_lemoine)
C.second_lemoine = circle : new (z.L,z.x)
z.x1,z.x2 = intersection (L.ab,C.second_lemoine)
z.x3,z.x4 = intersection (L.bc,C.second_lemoine)
- z.x5,z.x6 = intersection (L.ac,C.second_lemoine)
+ z.x5,z.x6 = intersection (L.ca,C.second_lemoine)
L.y1y6 = line : new (z.y1,z.y6)
L.y4y5 = line : new (z.y4,z.y5)
L.y2y3 = line : new (z.y2,z.y3)
@@ -4138,17 +3791,17 @@ T = triangle: new (z.a,z.b,z.c)
z.O = T.circumcenter
z.o,z.p = get_points (T : first_lemoine_circle ())
L.ab = line : new (z.a,z.b)
-L.ac = line : new (z.a,z.c)
+L.ca = line : new (z.c,z.a)
L.bc = line : new (z.b,z.c)
z.L,z.x = get_points (T : second_lemoine_circle ())
C.first_lemoine = circle : new (z.o,z.p)
z.y1,z.y2 = intersection (L.ab,C.first_lemoine)
z.y5,z.y6 = intersection (L.bc,C.first_lemoine)
-z.y3,z.y4 = intersection (L.ac,C.first_lemoine)
+z.y3,z.y4 = intersection (L.ca,C.first_lemoine)
C.second_lemoine = circle : new (z.L,z.x)
z.x1,z.x2 = intersection (L.ab,C.second_lemoine)
z.x3,z.x4 = intersection (L.bc,C.second_lemoine)
-z.x5,z.x6 = intersection (L.ac,C.second_lemoine)
+z.x5,z.x6 = intersection (L.ca,C.second_lemoine)
L.y1y6 = line : new (z.y1,z.y6)
L.y4y5 = line : new (z.y4,z.y5)
L.y2y3 = line : new (z.y2,z.y3)
@@ -4167,7 +3820,6 @@ L.y2y3 = line : new (z.y2,z.y3)
\tkzDrawSegments(L,O x1,x4 x2,x5 x3,x6)
\end{tikzpicture}
\hspace*{\fill}
-%\caption{First and second Lemoine circles}
% subsection first_and_second_lemoine_circles (end)
\subsection{Inversion} % (fold)
@@ -4187,7 +3839,7 @@ L.y2y3 = line : new (z.y2,z.y3)
z.H = L.AE : projection (z.t1)
z.Bp,
z.Ep,
- z.Cp = C.AC: set_inversion ( z.B, z.E, z.C )
+ z.Cp = C.AC: inversion ( z.B, z.E, z.C )
\end{tkzelements}
\begin{tikzpicture}
@@ -4215,7 +3867,7 @@ L.AE = line: new (z.A,z.E)
z.H = L.AE : projection (z.t1)
z.Bp,
z.Ep,
-z.Cp = C.AC: set_inversion ( z.B, z.E, z.C )
+z.Cp = C.AC: inversion ( z.B, z.E, z.C )
\end{tkzelements}
\hspace*{\fill}
@@ -4229,13 +3881,13 @@ z.Cp = C.AC: set_inversion ( z.B, z.E, z.C )
\tkzLabelPoints[above](C')
\end{tikzpicture}
\hspace*{\fill}
-%\caption{Inversion}
% subsection inversion (end)
\subsection{Gergonne point} % (fold)
\label{sub:gergonne_point}
-\begin{tkzexample}[latex=0cm,small,code only]
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+\begin{verbatim}
\begin{tkzelements}
z.a = point: new(1,0)
z.b = point: new(6,2)
@@ -4244,7 +3896,7 @@ z.Cp = C.AC: set_inversion ( z.B, z.E, z.C )
z.g = T : gergonne_point ()
z.i = T.incenter
z.ta,z.tb,z.tc = get_points (T : intouch ())
-end{elements}
+end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
\tkzDrawPolygons(a,b,c)
@@ -4253,8 +3905,9 @@ end{elements}
\tkzDrawSegments (a,ta b,tb c,tc)
\tkzDrawCircle(i,ta)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
z.a = point: new(1,0)
z.b = point: new(6,2)
@@ -4274,14 +3927,15 @@ z.ta,z.tb,z.tc = get_points (T : intouch ())
\tkzDrawSegments (a,ta b,tb c,tc)
\tkzDrawCircle(i,ta)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Gergonne point}
+\end{minipage}
% subsection gergonne_point (end)
\subsection{Antiparallel through Lemoine point} % (fold)
\label{sub:antiparallel_through_lemoine_point}
-\begin{tkzexample}[latex=0cm,small,code only]
+
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
\begin{tkzelements}
z.a = point: new (0,0)
z.b = point: new (5,0)
@@ -4305,8 +3959,9 @@ z.ta,z.tb,z.tc = get_points (T : intouch ())
\tkzDrawSegments(x_0,x_1 y_0,y_1 z_0,z_1)
\tkzDrawCircle(L,x_0)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
\begin{tkzelements}
z.a = point: new (0,0)
z.b = point: new (5,0)
@@ -4331,6 +3986,5 @@ z.z_0,z.z_1 = get_points (L.anti)
\tkzDrawSegments(x_0,x_1 y_0,y_1 z_0,z_1)
\tkzDrawCircle(L,x_0)
\end{tikzpicture}
-\hspace*{\fill}
-%\caption{Antiparallels}
+\end{minipage}
% subsection antiparallel_through_lemoine_point (end) \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-howtouse.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-howtouse.tex
deleted file mode 100644
index 5d47e005a7..0000000000
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-howtouse.tex
+++ /dev/null
@@ -1,193 +0,0 @@
-\newpage
-\section{How to use} % (fold)
-\label{sec:how_to_use}
-
-You need to load either \TIKZ{} or \pkg{tkz-euclide} if you want to use these packages to get your plots, then you need to load \pkg{tkz-elements}.
-
-Loading \pkg{tkz-elements} allows you to use the \env{elements} environment. However, you can use the macro \tkzcname{directlua} or the \env{luacode} environment (the package \pkg{luacode} is loaded automatically).
-
-
-\subsection{Environment elements} % (fold)
-\label{sub:environment_elements}
-
-You must first create an environment \tkzNameEnv{tkzelements}, then in this environment you create the fixed points of your figure. (For the moment, you place the environment \env{elements} before the environment \env{tikzpicture} but it is possible to place it inside the latter.)
-
-In the following example, three fixed points are used (lines 8, 9 and 10), the first object \tkzNameObj{point} $A$ is created by
-
-|z.A = point: new (2 , 4)|.
-
-Then we create a \tkzNameObj{triangle} (line 11)
-
-|T.ABC = triangle: new (z.A,z.B,z.C)|
-
-Once the triangle has been created, you can either use its attributes or a method associated with the triangle object. In all cases, the result is either a number or a new object.
-
-In order to obtain the circle inscribed in this triangle, we use a method of the \tkzname{triangle}. We obtain a new object, a circle, which I call |C.Ii|. A circle is defined by its center and a point through which it passes. $I$ is the center and $i$ is the projection of this center on the side opposed to the first point of the triangle.
-
-There are several ways of obtaining these two points. As in the example, |get_points| is a function that extracts the points from the object given as an argument. You can also use the circle attributes: |z.I = C.Ii.center| and |z.i = CIi.through|. The first method is obviously simpler, but less explicit. Another possibility would be to obtain the center as an attribute of the triangle |z.I = T.ABC.incircle| and then project this center onto one of the sides, for example |z.i = T.ABC.bc : projection (z.I)|. An explanation is in order: |T.ABC.bc | is the straight line defined by the last two points of the triangle (see triangle attributes \ref{sec:classe_triangle}).
-
-Then we look for the circumscribed circle, which is obtained using a method of the triangle object. We define the circumscribed \tkzNameObj{circle} named |C.WA|.
-
-|C.WA = T.ABC : circum_circle ()| (line 16)
-
-| z.W,_ = get_points (C.WA)| is used to get the center but possible is
-
- |z.W = T.ABC.circumcircle|
-
-The south pole of the circle with center $W$ passing through $A$ is given by an attribute of the object \tkzNameObj{circle}.
-
-We finally look for the intersection of two lines.
-
-Line 17 an object line is created. Line 18 I name a line object already created (it's a triangle attribute).
-
-All points are defined and stored in the |z| table. The macro \tkzcname{tkzGetNodes} retrieves the keys and associated values from this table and creates the nodes to be used by \TIKZ\ or \pkg{tkz-euclide}.
-
-\begin{tkzexample}[small,code only,num]
-% !TEX TS-program = lualatex
-\documentclass{article}
-\usepackage{tkz-euclide}
-\usepackage{tkz-elements}
-\begin{document}
-
-\begin{tkzelements}
- z.A = point: new (2 , 4)
- z.B = point: new (0 , 0)
- z.C = point: new (8 , 0)
- T.ABC = triangle: new (z.A,z.B,z.C)
- C.Ii = T.ABC: in_circle ()
- z.I,z.i = get_points (C.Ii)
- C.WA = T.ABC : circum_circle ()
- z.W,_ = get_points (C.WA)
- z.O = C.WA.south
- L.AO = line: new (z.A,z.O)
- L.BC = T.ABC.bc
- z.I_A = intersection (L.AO,L.BC)
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawCircles(W,A I,i)
- \tkzDrawArc(O,C)(B)
- \tkzDrawPolygon(A,B,C)
- \tkzDrawSegments[new](A,O B,O C,O)
- \tkzDrawLine(B,I)
- \tkzDrawPoints(A,B,C,I,I_A,W,O)
- \tkzFillAngles[green!20,opacity=.3](A,O,B A,C,B)
- \tkzFillAngles[teal!20,opacity=.3](O,B,C B,C,O B,A,O O,A,C)
- \tkzLabelPoints(I,I_A,W,B,C)
- \tkzLabelPoints[above](A)
-\end{tikzpicture}
-\end{document}
-\end{tkzexample}
-
-\begin{tkzelements}
- scale =.75
- z.A = point: new (2 , 4)
- z.B = point: new (0 , 0)
- z.C = point: new (8 , 0)
- T.ABC = triangle: new (z.A,z.B,z.C)
- C.Ii = T.ABC: in_circle ()
- z.I,z.i = get_points (C.Ii)
- C.WA = T.ABC : circum_circle ()
- z.W,_ = get_points (C.WA)
- z.O = C.WA.south
- L.AO = line: new (z.A,z.O)
- L.BC = T.ABC.bc
- z.I_A = intersection (L.AO,L.BC)
-\end{tkzelements}
-
-\hspace*{\fill}
-\begin{tikzpicture}
-\tkzGetNodes
-\tkzDrawCircles(W,A I,i)
-\tkzDrawArc(O,C)(B)
-\tkzDrawPolygon(A,B,C)
-\tkzDrawSegments[new](A,O B,O C,O)
-\tkzDrawLine(B,I)
-\tkzDrawPoints(A,B,C,I,I_A,W,O)
-\tkzFillAngles[green!20,opacity=.3](A,O,B A,C,B)
-\tkzFillAngles[teal!20,opacity=.3](O,B,C B,C,O B,A,O O,A,C)
-\tkzLabelPoints(I,I_A,W,B,C,O)
-\tkzLabelPoints[above](A)
-\end{tikzpicture}
-\hspace*{\fill}
-% subsection environment_elements (end)
-
-\subsection{Fom Lua to tkz-euclide or TikZ} % (fold)
-\label{sub:fom_lua_to_tkz_euclide_or_tikz}
-
-\subsubsection{Points transfer} % (fold)
-\label{ssub:points_transfer}
-We use an environment \tkzname{tkzelements} outside an environment \tkzname{tikzpicture} which allows us to carry out all the necessary calculations, then we launch the macro \tkzcname{tkzGetNodes} which transforms the affixes of the table \tkzname{z} into a list of \tkzname{Nodes}. It only remains to draw.
-
-Currently the drawing program is either \TIKZ\ or \pkg{tkz-euclide}. You have the possibility to use another package to trace but for that you have to create a macro similar to \tkzcname{tkzGetNodes}. Of course, this package must be able to store the points as does \TIKZ\ or \pkg{tkz-euclide}.
-
-\vspace*{1em}
-
-\begin{tkzexample}[latex=0cm,small,code only]
-\def\tkzGetNodes{\directlua{%
- for K,V in pairs(z) do
- local KS,n,sd,ft
- KS = tostring(K)
- n = string.len(KS)
- if n >1 then
- _,_,ft, sd = string.find( KS , "(.+)(.)" )
- if sd == "p" then K=ft.."'" end
- end
- tex.print("\\coordinate ("..K..") at ("..V.re..","..V.im..") ;\\\\")
-end}
-}
-\end{tkzexample}
-
-The environment \tkzNameEnv{tkzelements} allows to use the underscore |_| and the macro \tkzcname{tkzGetNodes} allows to obtain names of nodes containing \tkzname{prime}. (see the next example)
-
-\begin{minipage}{0.5\textwidth}
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
- scale = 1.2
- z.o = point: new (0,0)
- z.a_1 = point: new (2,1)
- z.a_2 = point: new (1,2)
- z.ap = z.a_1 + z.a_2
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawSegments(o,a_1 o,a_2 o,a')
- \tkzDrawSegments[red](a_1,a' a_2,a')
- \tkzDrawPoints(a_1,a_2,a',o)
- \tkzLabelPoints(o,a_1,a_2,a')
-\end{tikzpicture}
-\end{tkzexample}%
-\end{minipage}%
-\begin{minipage}{0.5\textwidth}
-\begin{tkzelements}
-scale = 1.2
-z.o = point: new (0,0)
-z.a_1 = point: new (2,1)
-z.a_2 = point: new (1,2)
-z.ap = z.a_1 + z.a_2
-\end{tkzelements}
-\begin{tikzpicture}
-\tkzGetNodes
- \tkzDrawSegments(o,a_1 o,a_2 o,a')
- \tkzDrawSegments[red](a_1,a' a_2,a')
- \tkzDrawPoints(a_1,a_2,a',o)
- \tkzLabelPoints(o,a_1,a_2,a')
-\end{tikzpicture}
-\end{minipage}%
-
-% subsection fom_lua_to_tkz_euclide_or_tikz (end)
-\subsubsection{Other transfers} % (fold)
-\label{ssub:other_transfers}
-
-Sometimes it's useful to transfer angle or length measurements. For this purpose, I have created the function (see \ref{ssub:transfer_from_lua_to_tex})
-\Igfct{package}{set\_lua\_to\_tex (list)}
-
-% subsubsection other_transfers (end)
-% subsubsection points_transfer (end)
-
-% section how_to_use (end)
-
-
-
-
-\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex
new file mode 100644
index 0000000000..53646eb6c3
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-indepthstudy.tex
@@ -0,0 +1,702 @@
+\newpage
+
+\section{In-depth study} % (fold)
+\label{sec:in_depth_study}
+
+\subsection{The tables} % (fold)
+\label{sub:the_tables}
+
+\subsubsection{General tables} % (fold)
+\label{ssub:general_tables}
+Tables are the only data structure "container" integrated in Lua.
+ They are associative arrays which associates a key (reference or index) with a value in the form of a field (set) of key/value pairs. Moreover, tables have no fixed size and can grow based on our need dynamically.
+
+Tables are created using table constructors, the simplest of which is the use of braces, e.g. \{ \}. This defines an empty table.
+
+\begin{mybox}
+ \begin{verbatim}
+ F = {"banana", "apple", "cherry"}\end{verbatim}
+\end{mybox}
+
+
+print(F[2]) --> pomme
+
+
+qui peut être également définit par
+
+\begin{mybox}
+ \begin{verbatim}
+ FR = {[1] = "banana", [3] = "cherry", [2] = "apple"}\end{verbatim}
+\end{mybox}
+
+
+print(FR[3]) --> cherry
+
+FR[4]="orange"
+
+\begin{mybox}
+ \begin{verbatim}
+ print(#FR)
+ -- I for Index
+ for I,V in ipairs(FR) do
+ print(I,V)
+ end \end{verbatim}
+\end{mybox}
+
+1 banana\\
+2 apple\\
+3 cherry\\
+4 orange\\
+
+\begin{mybox}
+\begin{verbatim}
+C = {["banana"] = "yellow" , ["apple"] = "green" , ["cherry"] = "red" }
+C.orange = "orange"\end{verbatim}
+\end{mybox}
+
+\begin{mybox}
+\begin{verbatim}
+ for K,V in pairs (C) do
+ print(K,V)
+ end\end{verbatim}
+\end{mybox}
+
+banana = yellow
+cherry = red
+orange = orange
+apple = green
+% subsection the_tables (end)
+
+Another useful feature is the ability to create a table to store an unknown number of function parameters, for example:
+
+\begin{mybox}
+\begin{verbatim}
+ function ReturnTable (...)
+ return table.pack (...)
+ end \end{verbatim}
+\end{mybox}
+
+\begin{mybox}
+ \begin{verbatim}
+ function ParamToTable (...)
+ mytab = ReturnTable(...)
+ for i=1,mytab.n do
+ print(mytab[i])
+ end
+ end
+ ParamToTable("cherry","apple","orange") \end{verbatim}
+\end{mybox}
+
+
+Using tables with table[key] syntax:
+
+|C["banana"] and F[1] |
+
+But with string constants as keys we have the sugar syntax:
+C.banana but this syntax does not accept numbers.
+
+It's possible to erase a key/value pair from a table, with :
+
+\begin{mybox}
+\begin{verbatim}
+C.banana = nil \end{verbatim}
+\end{mybox}
+% subsubsection general_tables (end)
+
+\subsubsection{Table z} % (fold)
+\label{ssub:table_z}
+This is the most important table in the package. It stores all points and enables them to be transferred to \TIKZ{}.
+
+It is defined with |z = {}|, then each time we write
+
+\begin{mybox}
+ | z.name = point : new (a , b)|
+\end{mybox}
+
+a point object is stored in the table. The key is |name|, the value is an object. We have seen that |z.name.re = a| and that |z.name.im = b|.
+
+However, the elements of this table have essential properties.
+
+For example, if you wish to display an element, then |tex.print(tostring(z.name)) = a+ib| the |tostring| operation displays the affix corresponding to the point.
+
+In addition, we'll see that it's possible to perform operations with the elements of the |z| table.
+% subsubsection table_z (end)
+
+\subsection{Transferts} % (fold)
+\label{sub:transferts}
+
+We've seen (sous-section \ref{ssub:points_transfer}) that the macro \Imacro{tkzGetNodes} transfers point coordinates to \TIKZ. Let's take a closer look at this macro:
+
+\vspace*{1em}
+
+\begin{mybox}
+\begin{verbatim}
+\def\tkzGetNodes{\directlua{%
+ for K,V in pairs(z) do
+ local K,n,sd,ft
+ n = string.len(KS)
+ if n >1 then
+ _,_,ft, sd = string.find( K , "(.+)(.)" )
+ if sd == "p" then K=ft.."'" end
+ end
+ tex.print("\\coordinate ("..K..") at ("..V.re..","..V.im..") ;\\\\")
+end}
+}\end{verbatim}
+\end{mybox}
+
+It consists mainly of a loop. The variables used are K (for keys) and V (for Values). To take pairs (key/value) from the |z| table, use the |pairs| function. K becomes the name of a node whose coordinates are |V.re| and |V.im|. Meanwhile, we search for keys with more than one symbol ending in |p|, in order to associate them with the symbol "'" valid in \TIKZ{}.
+% subsection transferts (end)
+
+\subsection{Complex numbers library and point} % (fold)
+\label{sub:complex_numbers}
+
+Unless you want to create your own functions, you won't need to know and use complex numbers. However, in some cases it may be useful to implement some of their properties.
+
+
+|z.A = point : new (1,2 )| and \ |z.B = point : new (1,-1)| define two affixes which are $z_A = 1+2i$ and $z_B = 1-i$. Note the difference in notations |z.A| and $z_A$ for two distinct entities: a Lua object and an affix.
+
+\vspace{1em}
+If you want to use only complex numbers then you must choose the following syntax :|za =point (1,2)|.
+The difference between |z.A = point : new (1,2)| and |za = point (1,2)| is that the first function takes into account the scale. If |scale = 2| then $z_A = 2+4i$. In addition, the object referenced by A is stored in table |z| and not za.
+
+ The notation may come as a surprise, as I used the term "point". The aim here was not to create a complete library on complex numbers, but to be able to use their main properties in relation to points. I didn't want to have two different levels, and since a unique connection can be established between the points of the plane and the complexes, I decided not to mention the complex numbers! But they are there.
+
+
+\bgroup
+\catcode`_=12
+\small
+
+\begin{minipage}{\textwidth}
+\captionof{table}{Point or complex metamethods.}
+\begin{tabular}{lll}
+ \toprule
+ \textbf{Metamethods} & \textbf{Application} \\
+ \midrule
+__add(z1,z2) & |z.a + z.b| & affix \\
+__sub(z1,z2) & |z.a - z.b| & affix\\
+__unm(z) & |- z.a| & affix\\
+__mul(z1,z2) & |z.a * z.b| & affix\\
+__concat(z1,z2)& |z.a .. z.b| & dot product = real number \footnote{If $O$ is the origin of the complex plan, then we get the dot product of the vectors $\overrightarrow{Oa}$ and $\overrightarrow{Ob}$} \\
+__pow(z1,z2) & |z.a ^ z.b| & determinant = real number\\
+__div(z1,z2) & |z.a / z.b| & affix \\
+__tostring(z) & tex.print(tostring(z)) & displays the affix \\
+__tonumber(z) & tonumber(z) & affix or nil\\
+__eq(z1,z2) & eq (z.a,z.b) & boolean\\
+\bottomrule
+\end{tabular}
+\end{minipage}
+\egroup
+
+\bgroup
+\catcode`_=12
+\small
+\begin{minipage}{\textwidth}
+\captionof{table}{Point (complex) class methods.}
+\begin{tabular}{lll}
+ \toprule
+\textbf{Methods} & \textbf{Application}\\
+\midrule
+\Imeth{point}{conj(z)} & |z.a : conj()| & affix (conjugate) \\
+\Imeth{point}{mod(z)} & |z.a : mod()| & real number = modulus |z.a|\\
+\Imeth{point}{abs (z)} & |z.a : abs()| & real number = modulus \\
+\Imeth{point}{norm (z)} & |z.a : norm()| & norm (real number ) \\
+\Imeth{point}{arg (z)}. & |z.a : arg()| & real number = argument of z.a (in rad)\\
+\Imeth{point}{get(z)} & |z.a : get()| & re and im (two real numbers ) \\
+\Imeth{point}{sqrt(z)}. & |z.a : sqrt()| & affix \\
+\bottomrule
+\end{tabular}
+\end{minipage}
+\egroup
+
+\vspace{1em}
+The class is provided with two specific metamethods.
+
+\begin{itemize}
+ \item Since concatenation makes little sense here, the operation associated with |..| is the scalar or dot product. If |z1 = a+ib| and |z2 = c+id| then
+
+ |z1..z2 = (a+ib) .. (c+id) = (a+ib) (c-id) = ac+bd + i(bc-ad) |
+
+ There's also a mathematical function, |dot_product|, which takes three arguments. See example \ref{ssub:dot_or_scalar_product}
+
+
+ \item With the same idea, the operation associated with |^| is the determinant i.e.
+
+ |z1 ^ z2 = (a+ib) ^ (c+id) = ad - bc From (a-ib) (c+id) = ac+bd + i(ad - bc)| we take the imaginary part.
+
+\end{itemize}
+
+\subsubsection{Example of complex use} % (fold)
+\label{ssub:example_of_complex_use}
+Let |za = math.cos(a) + i math.sin(a)| .
+This is obtained from the library by writing
+
+\begin{mybox}
+ |za = point(math.cos(a),math.sin(a))|.
+\end{mybox}
+
+Then |z.B = z.A * za| describes a rotation of point A by an angle |a|.
+
+\begin{minipage}{.6\textwidth}
+ \begin{verbatim}
+ \begin{tkzelements}
+ z.O = point : new (0,0)
+ z.A = point : new (1,2)
+ a = math.pi/6
+ za = point(math.cos(a),math.sin(a))
+ z.B = z.A * za
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(O,A,B)
+ \tkzDrawArc[->,delta=0](O,A)(B)
+ \tkzDrawSegments[dashed](O,A O,B)
+ \tkzLabelAngle(A,O,B){$\pi/6$}
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}{.6\textwidth}
+\begin{tkzelements}
+ scale=2
+ z.O = point : new (0,0)
+ z.A = point : new (1,2)
+ a = math.pi/6
+ za = point(math.cos(a),math.sin(a))
+ z.B = z.A * za
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPoints(O,A,B)
+\tkzDrawArc[->,delta=0,thick](O,A)(B)
+\tkzDrawSegments[dashed](O,A O,B)
+\tkzLabelAngle(A,O,B){$\pi/6$}
+\end{tikzpicture}
+\end{minipage}
+% subsubsection example_of_complex_use (end)
+
+\subsubsection{Point operations(complex)} % (fold)
+\label{ssub:point_operations_complex}
+
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+ z.o = point: new(0,0)
+ z.a = point: new(1,-1)
+ z.b = point: new(2,1)
+ z.bp = -z.b
+ z.c = z.a + z.b
+ z.d = z.a - z.b
+ z.e = z.a * z.b
+ z.f = z.a / z.b
+ z.ap = point.conj (z.a)
+ -- = z.a : conj ()
+ z.g = z.b* point(math.cos(math.pi/2),
+ math.sin(math.pi/2))
+\end{tkzelements}
+
+\hspace*{\fill}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzInit[xmin=-2,xmax=3,ymin=-2,ymax=3]
+ \tkzGrid
+ \tkzDrawSegments(o,a o,b o,c o,e o,b' o,f o,g)
+ \tkzDrawSegments[red](a,c b,c b',d a,d)
+ \tkzDrawPoints(a,...,g,o,a',b')
+ \tkzLabelPoints(o,a,b,c,d,e,f,g,a',b')
+\end{tikzpicture}
+\end{verbatim}
+ \end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ z.o = point: new(0,0)
+ z.a = point: new(1,-1)
+ z.b = point: new(2,1)
+ z.bp = -z.b
+ z.c = z.a + z.b
+ z.d = z.a - z.b
+ z.e = z.a * z.b
+ z.f = z.a / z.b
+ z.ap = point.conj (z.a)
+ -- = z.a : conj ()
+ z.g = z.b* point(math.cos(math.pi/2),math.sin(math.pi/2))
+\end{tkzelements}
+
+\hspace*{\fill}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzInit[xmin=-2,xmax=3,ymin=-2,ymax=3]
+ \tkzGrid
+ \tkzDrawSegments(o,a o,b o,c o,e o,b' o,f o,g)
+ \tkzDrawSegments[red](a,c b,c b',d a,d)
+ \tkzDrawPoints(a,...,g,o,a',b')
+ \tkzLabelPoints(o,a,b,c,d,e,f,g,a',b')
+\end{tikzpicture}
+\end{minipage}
+% subsubsection point_operations_complex (end)
+% subsection complex_numbers (end)
+
+
+\subsection{Barycenter} % (fold)
+\label{sub:barycenter}
+
+\begin{minipage}{.8\textwidth}
+ Here's the definition of the barycenter, which is used some forty times in the package.
+|table.pack| builds a table from a list. \\
+|tp.n| gives the number of pairs. \\
+|tp[i][1]| is an affix and |tp[i][2]| the associated weight (real value). 5se the example.
+
+\begin{verbatim}
+ function barycenter_ (...)
+ local tp = table.pack(...)
+ local i
+ local sum = 0
+ local weight=0
+ for i=1,tp.n do
+ sum = sum + tp[i][1]*tp[i][2]
+ weight = weight + tp[i][2]
+ end
+ return sum/weight
+ end
+\end{verbatim}
+\end{minipage}
+
+\vspace{1em}
+\subsubsection{Using the barycentre} % (fold)
+\label{ssub:using_the_barycentre}
+
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+ z.A = point: new (1,0)
+ z.B = point: new (5,-1)
+ z.C = point: new (2,5)
+ z.G = barycenter ({z.A,3},{z.B,1},{z.C,1})
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C)
+\tkzDrawPoints(A,B,C,G)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}\begin{tkzelements}
+ z.A = point: new (1,0)
+ z.B = point: new (5,-1)
+ z.C = point: new (2,5)
+ z.G = barycenter ({z.A,3},{z.B,1},{z.C,1})
+\end{tkzelements}
+ \hspace{\fill}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPolygon(A,B,C)
+\tkzDrawPoints(A,B,C,G)
+\end{tikzpicture}
+\end{minipage}
+% subsubsection using_the_barycentre (end)
+
+\subsubsection{Incenter of a triangle} % (fold)
+\label{ssub:incenter_of_a_triangle}
+The calculation of the weights ka, kb and kc is precise, and the result obtained with the barycenter is excellent. Note the presence of the underscore \_ for certain functions. These functions are internal (developer). Each external (user) function is associated with its internal counterpart.
+
+Here's how to determine the center of the inscribed circle of a triangle:
+\begin{mybox}
+ \begin{verbatim}
+ function in_center_ ( a,b,c )
+ local ka = point.abs (b-c)
+ local kc = point.abs (b-a)
+ local kb = point.abs (c-a)
+ return barycenter_ ( {a,ka} , {b,kb} , {c,kc} )
+ end \end{verbatim}
+\end{mybox}
+
+% subsubsection incenter_of_a_triangle (end)
+% subsection barycenter (end)
+
+\subsection{Loop and table notation} % (fold)
+\label{sub:loop_and_table_notation}
+The problem encountered in this example stems from the notation of the point names. Since it's not possible to write in simplified form, we have to resort to table[key] notation.
+
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+ local r = 3
+ z.O = point : new (0,0)
+ max = 100
+ for i = 1,max
+ do
+ z["A_"..i] = point : polar(r,2*i*math.pi/max)
+ end
+ a = math.deg(get_angle (z.O,z.A_1,z.A_2))
+\end{tkzelements}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ local r = 3
+ z.O = point : new (0,0)
+ max = 100
+ for i = 1,max
+ do
+ z["A_"..i] = point : polar(r,2*i*math.pi/max)
+ end
+ a = math.deg(get_angle (z.O,z.A_1,z.A_2))
+\end{tkzelements}
+\hspace{\fill}
+\begin{tikzpicture}
+\pgfkeys{/pgf/number format/.cd,use comma}
+\let\pmpn\pgfmathprintnumber
+\tkzGetNodes
+\tkzDrawPolygon[cyan](A_1,A_...,A_\tkzUseLua{max})
+\tkzDrawCircle[red](O,A_1)
+\tkzDrawPoints[color=black](A_1,A_...,A_\tkzUseLua{max},O)
+\tkzDrawSegments(O,A_1 O,A_2)
+\tkzMarkAngle[size=2](A_1,O,A_2)
+\tkzLabelAngle[pos=3.4](A_1,O,A_2){$\pmpn{\tkzUseLua{a}}^\circ$}
+\end{tikzpicture}
+\end{minipage}
+
+% subsection loop_and_table_notation (end)
+
+\subsection{In\_out method} % (fold)
+\label{sub:in_out_method}
+
+This function can be used for the following objects
+\begin{itemize}
+ \item line
+ \item circle
+ \item triangle
+ \item ellipse
+\end{itemize}
+ The disk object doesn't exist, so with |in\_out\_disk| it's possible to determine whether a point is in a disk.
+
+\subsubsection{In\_out for a line} % (fold)
+\label{ssub:in_out_for_a_line}
+
+\begin{mybox}
+ \begin{verbatim}
+ function line: in_out (pt)
+ local sc,epsilon
+ epsilon = 10^(-12)
+ sc = math.abs ((pt-self.pa)^(pt-self.pb))
+ if sc <= epsilon
+ then
+ return true
+ else
+ return false
+ end
+ end \end{verbatim}
+\end{mybox}
+
+The \tkzNamePack{ifthen} package is required for the code below.
+
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+z.A = point: new (0,0)
+z.B = point: new (1,2)
+z.X = point: new (2,4.000)
+z.Y = point: new (2,4.1)
+L.AB = line : new (z.A,z.B)
+if L.AB : in_out (z.X)
+ then
+ inline = true k = (z.X-z.A)/(z.B-z.A)
+ else
+ inline = false
+ end
+ inline_bis = L.AB : in_out (z.Y)
+\end{tkzelements}
+
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPoints(A,B,X,Y)
+\tkzLabelPoints(A,B,X)
+\tkzLabelPoints[left](Y)
+\ifthenelse{\equal{\tkzUseLua{inline}}{true}}{
+ \tkzDrawSegment[red](A,B)
+ \tkzLabelSegment(A,B){AX/AB = $\tkzUseLua{k}$}}{%
+ \tkzDrawSegment[blue](A,B)}
+\ifthenelse{\equal{\tkzUseLua{inline_bis}}{false}}{%
+ \tkzDrawSegment[green](B,Y)}{}
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+z.A = point: new (0,0)
+z.B = point: new (1,2)
+z.X = point: new (2,4.000)
+z.Y = point: new (2,4.1)
+L.AB = line : new (z.A,z.B)
+if L.AB : in_out (z.X)
+ then
+ inline = true k = (z.X-z.A)/(z.B-z.A)
+ else
+ inline = false
+ end
+ inline_bis = L.AB : in_out (z.Y)
+\end{tkzelements}
+\hspace{\fill}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawPoints(A,B,X,Y)
+\tkzLabelPoints(A,B,X)
+\tkzLabelPoints[left](Y)
+\ifthenelse{\equal{\tkzUseLua{inline}}{true}}{
+ \tkzDrawSegment[red](A,B)
+ \tkzLabelSegment(A,B){AX/AB = $\tkzUseLua{k}$}}{%
+ \tkzDrawSegment[blue](A,B)}
+\ifthenelse{\equal{\tkzUseLua{inline_bis}}{false}}{
+\tkzDrawSegment[green](B,Y)}{}
+\end{tikzpicture}
+\end{minipage}
+% subsubsection in_out_for_a_line (end)
+% subsection in_out_method (end)
+
+
+\subsection{Determinant and dot product} % (fold)
+\label{sub:determinant_et_produit_scalaire}
+
+\subsubsection{Determinant} % (fold)
+\label{ssub:determinant}
+
+We've just seen how to use |^| to obtain the determinant associated with two vectors.
+
+\Imeth{line}{in\_out} is simply a copy of \Imeth{math}{islinear} .
+
+Here's the definition and transformation of the power of a complex number.
+
+\begin{verbatim}
+ -- determinant is '^' ad - bc
+ function point.__pow(z1,z2)
+ local z
+ z = point.conj(z1) * z2 -- (a-ib) (c+id) = ac+bd + i(ad - bc)
+ return z.im
+ end
+\end{verbatim}
+% subsubsection determinant (end)
+
+
+\subsubsection{Dot product} % (fold)
+\label{ssub:scalar_product}
+
+Here's the definition of the dot product between two affixes and the concatenation transformation.
+
+\begin{verbatim}
+-- dot product is '..' result ac + bd
+function point.__concat(z1,z2)
+ local z
+ z = z1 * point.conj(z2) -- (a+ib) (c-id) = ac+bd + i(bc-ad)
+ return z.re
+end
+\end{verbatim}
+% subsubsection scalar_product (end)
+
+
+
+\subsubsection{Dot product: orthogonality test } % (fold)
+\label{ssub:scalar_product_orthogonality_test}
+
+Here's a function \Imeth{math}{isortho} to test orthogonality between two vectors.
+
+\begin{verbatim}
+function isortho (z1,z2,z3)
+ local epsilon
+ local dp
+ epsilon = 10^(-8)
+ dp = (z2-z1) .. (z3-z1)
+ if math.abs(dp) < epsilon
+ then
+ return true
+ else
+ return false
+ end
+end
+\end{verbatim}
+% subsubsection scalar_product_orthogonality_test (end)
+
+
+\subsubsection{Dot product: projection} % (fold)
+\label{ssub:scalar_product_projection}
+
+The projection of a point onto a straight line is a fundamental function, and its definition is as follows:
+
+\begin{verbatim}
+function projection_ ( pa,pb,pt )
+ local v
+ local z
+ if aligned ( pa,pb,pt ) then
+ return pt
+ else
+ v = pb - pa
+ z = ((pt - pa)..v)/(point.norm(v)) -- .. dot product
+ return pa + z * v
+ end
+end
+\end{verbatim}
+
+The function \Imeth{math}{aligned} is equivalent to \Imeth{math}{islinear} but does not use a determinant. It will be replaced in a future version.
+
+% subsubsection scalar_product_projection (end)
+% subsection determinant_et_produit_scalaire (end)
+
+\subsection{Point method} % (fold)
+\label{sub:point_method}
+
+The point method is a method for many objects:
+\begin{itemize}
+ \item line ,
+ \item circle,
+ \item ellipse,
+ \item triangle.
+\end{itemize}
+
+You obtain a point on the object by entering a real number between 0 and 1.
+
+\begin{minipage}{.5\textwidth}
+\begin{verbatim}
+\begin{tkzelements}
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 4 , 2 )
+ z.C = point : new ( 1 , 3 )
+ L.AB = line : new (z.A,z.B)
+ C.AB = circle : new (z.A,z.B)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ z.I = L.AB : point (0.5)
+ z.J = C.AB : point (0.5)
+ z.K = T.ABC : point (0.5)
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawline(A,B)
+ \tkzDrawCircle(A,B)
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPoints(A,B,C,I,J,K)
+\end{tikzpicture}
+\end{verbatim}
+\end{minipage}
+\hspace{\fill}
+\begin{minipage}{.5\textwidth}
+\begin{tkzelements}
+ scale =.75
+ z.A = point : new ( 0 , 0 )
+ z.B = point : new ( 4 , 2 )
+ z.C = point : new ( 1 , 3 )
+ L.AB = line : new (z.A,z.B)
+ C.AB = circle : new (z.A,z.B)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ z.I = L.AB : point (0.5)
+ z.J = C.AB : point (0.5)
+ z.K = T.ABC : point (0.5)
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawLine(A,B)
+\tkzDrawCircle(A,B)
+\tkzDrawPolygon(A,B,C)
+\tkzDrawPoints(A,B,C,I,J,K)
+\end{tikzpicture}
+\end{minipage}
+
+% subsection point_method (end)
+
+% section in_depth_study (end) \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex
index cab5aa7aeb..f632238e45 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-intersection.tex
@@ -61,7 +61,7 @@ end
\end{tikzpicture}
\end{minipage}
-Other examples: \ref{ssub:altshiller}, \ref{ssub:lemoine}, \ref{sub:alternate}, \ref{sub:environment_elements}
+Other examples: \ref{ssub:altshiller}, \ref{ssub:lemoine}, \ref{sub:alternate}
% subsection line_line (end)
\newpage
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
index 202ff31ba7..6540ebffaf 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
@@ -1,6 +1,6 @@
% !TEX TS-program = lualatex
% encoding : utf8
-% Documentation of tkz-elements v1.00b
+% Documentation of tkz-elements v1.40c
% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -21,10 +21,10 @@
headings = small
]{tkz-doc}
\gdef\tkznameofpack{tkz-elements}
-\gdef\tkzversionofpack{1.20b}
+\gdef\tkzversionofpack{1.40c}
\gdef\tkzdateofpack{\today}
\gdef\tkznameofdoc{tkz-elements.pdf}
-\gdef\tkzversionofdoc{1.20b}
+\gdef\tkzversionofdoc{1.40c}
\gdef\tkzdateofdoc{\today}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
@@ -41,12 +41,14 @@
\usepackage{tkz-elements}
\usepackage{pgfornament}
\usetikzlibrary{backgrounds}
+\usetikzlibrary{mindmap}
+\usetikzlibrary{shapes.multipart}
\usepackage[colorlinks,pdfencoding=auto, psdextra]{hyperref}
\hypersetup{
linkcolor=Gray,
citecolor=Green,
filecolor=Mulberry,
- urlcolor=NavyBlue,
+ urlcolor=orange,
menucolor=Gray,
runcolor=Mulberry,
linkbordercolor=Gray,
@@ -89,12 +91,21 @@
\usepackage[math-style=literal,bold-style=literal]{unicode-math}
\usepackage{fourier-otf}
\let\rmfamily\ttfamily
-\usepackage{multicol,lscape}
+\usepackage{multicol,lscape,wrapfig}
\usepackage[english]{babel}
\usepackage[normalem]{ulem}
\usepackage{multirow,multido,booktabs,cellspace}
-\usepackage{shortvrb,bookmark}
+\usepackage{shortvrb,bookmark,caption}
\usepackage{makeidx}
+\usepackage[most]{tcolorbox}
+
+\newtcolorbox{mybox}{
+enhanced,
+boxrule=0pt,frame hidden,
+borderline west={4pt}{0pt}{darkgray!50!white},
+colback=lightgray!10!white,
+sharp corners
+}
%\usepackage{float}
\makeindex
@@ -123,10 +134,13 @@
\newcommand*{\Iattr}[2]{\texttt{#2}\index{#1_3@\texttt{#1: attribute}!\texttt{#2}}}
\newcommand*{\Imeth}[2]{\texttt{#2}\index{#1_3@\texttt{#1: method}!\texttt{#2}}}
\newcommand*{\Igfct}[2]{\texttt{#2}\index{#1_3@\texttt{#1: function}!\texttt{#2}}}
-\newcommand*{\Iclass}[2]{\texttt{#2}\index{#1_3@\texttt{#1: class}!\texttt{#2}}}
+\newcommand*{\Iclass}[1]{\texttt{#1}\index{Class !#1@\texttt{#1}}}
\newcommand*{\tkzNameObj}[1]{\tkzname{#1}\Iobj{#1}}
\newcommand*{\Iobj}[1]{\index{Object_1@\texttt{Object}!\texttt{#1}}}
-
+\newcommand*{\tkzRBomb}{\textcolor{red}{\bomb}}
+\newcommand*{\IEmacro}[1]{\index{#1_1@\texttt{\textbackslash#1}}\texttt{#1}}
+\newcommand*{\tkzimpbf}[1]{\texttt{\textbf{#1}}}
+\newcommand*{\tkzEHand}{\textcolor{red}{\lefthand}}
%<--------------------------------------------------------------------------->
% settings styles
\tkzSetUpColors[background=white,text=black]
@@ -141,6 +155,15 @@
\tikzset{new/.style={color=orange,line width=.2pt}}
\def\tkzar{\hspace{1em}-->\hspace{1em}}
+\makeatletter\let\percentchar\@percentchar\makeatother
+\def\luaveclen#1#2{%
+\directlua{tex.print(string.format(
+'\percentchar.5f',math.sqrt((#1)*(#1)+(#2)*(#2))))
+}}
+% printnumber
+
+\let\pmpn\pgfmathprintnumber
+
\AtBeginDocument{\MakeShortVerb{\|}} % link to shortvrb
\begin{document}
@@ -179,18 +202,25 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
\clearpage
\newpage
-
+\input{TKZdoc-elements-structure.tex}
+\input{TKZdoc-elements-why.tex}
\input{TKZdoc-elements-presentation.tex}
\input{TKZdoc-elements-convention.tex}
-\input{TKZdoc-elements-howtouse.tex}
+\input{TKZdoc-elements-transferts.tex}
\input{TKZdoc-elements-classes.tex}
\input{TKZdoc-elements-classes-point.tex}
\input{TKZdoc-elements-classes-line.tex}
\input{TKZdoc-elements-classes-circle.tex}
\input{TKZdoc-elements-classes-triangle.tex}
\input{TKZdoc-elements-classes-ellipse.tex}
+\input{TKZdoc-elements-classes-quadrilateral.tex}
+\input{TKZdoc-elements-classes-square.tex}
+\input{TKZdoc-elements-classes-rectangle.tex}
+\input{TKZdoc-elements-classes-parallelogram.tex}
+\input{TKZdoc-elements-classes-regular.tex}
\input{TKZdoc-elements-classes-misc.tex}
\input{TKZdoc-elements-intersection.tex}
+\input{TKZdoc-elements-indepthstudy.tex}
\input{TKZdoc-elements-examples.tex}
\clearpage\newpage
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
index d837d4a826..900bdef5e6 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
@@ -1,44 +1,84 @@
+\newpage
\section{Presentation}
-I created \pkg{tkz-euclide} to give math teachers and students a tool to draw Euclidean geometry figures. This package was created as an interface based on \pkg{TikZ}, itself based on \TEX{}. The only problem encountered with this method is, in complicated cases, the lack of precision of the calculations made by \TEX{}.
-
-To remedy this lack of precision, I first introduced the package \pkg{fp}, then the package \pkg{xfp}. Lately, with the arrival of lua\LATEX{}, I have been able to add a \tkzname{Lua} option whose goal was to perform some calculations with \tkzname{Lua}. It is much easier to program mathematics with \tkzname{Lua} than with \TEX{} so having prepared \pkg{tkz-euclide}, by separating the first parts of definitions and calculations from the drawing part, the idea of carrying out the first parts with only \tkzname{Lua} was necessary.
-
-I had received some examples of programming with \tkzname{Lua} from Nicolas Kisselhoff and I took many of his ideas.
-
-The essential principles of figure construction with \tkzname{tkz-euclide} are kept: definition, calculations, tracings, labels as well as the step-by-step programmation, corresponding to a construction with a ruler and a compass.
-
-Then, I read an article by Roberto Giacomelli on object programming based on the \tkzname{Lua} and \TIKZ\ tools. This was my second source of inspiration. Not only could the programming be done step-by-step, but the introduction of objects allowed the link between the code and the geometry. The code becomes more readable, the code is more explicit and better structured but it is less concise. Finally, as the problem of precision disappeared, I came to appreciate more and more what I was getting with object programming. So I've tried to develop this programming as much as possible.
-
-In order to organize and maintain all the functions and methods, I chose to use classes of objects whose main ones are \tkzname{point}, \tkzname{line}, \tkzname{triangle}, \tkzname{circle} and \tkzname{ellipse}.
-
\subsection{With Lua} % (fold)
\label{sub:with_lua}
The purpose of tkz-elements is simply to calculate dimensions and define points. This is done in Lua. You can think of tkz-elements as a kernel that will be used either by tkz-euclide or by TikZ, see MetaPost.
Definitions and calculations are done inside the environment \tkzNameEnv{tkzelements}, this environment is based on \tkzNameEnv{luacode}.
-To improve precision, if it's necessary to modify the scale of your figure, it's best to change the "scale" variable at the start of the code placed in environment \tkzNameEnv{tkzelements}.
-Then we need to be able to transfer the coordinates of the points to a package that can use them, in this case tkz-euclide or TikZ.
+
+\begin{minipage}[t]{.52\textwidth}\vspace{0pt}%
+ The key points are:
+ \begin{itemize}
+ \item the source file must be \tkzEHand\ {\color{red}\uline{ \color{black}utf8}} encoded;
+ \item compilation is done with \tkzEHand\ {\color{red}\uline{ \color{black}Lua\LATEX{}}};
+ \item you need to load \tkzimp{\TIKZ}{} ou \tkzimp{tkz-euclide} and \tkzimp{tkz-elements};
+ \item definitions and calculations are performed in an orthonormal sytem of reference, using Lua, and are carried out in an environment of \tkzimp{tkzelements}.
+ \end{itemize}
+
+ To the right, see the minimum template.
+
+The code is divided into two parts, which are two environments \tkzNameEnv{tkzelements} and \tkzNameEnv{tikzpicture}. In the first environment, you place your Lua code, and in the second, tkz-euclide commands.
+
+\vspace*{4.1 cm}%
+\end{minipage}\hspace*{\fill}
+\begin{minipage}[t]{.45\textwidth}\vspace{0pt}%
+\begin{mybox}
+\begin{verbatim}
+% !TEX TS-program = lualatex
+% Created by Alain Matthes
+\documentclass{standalone}
+\usepackage{tkz-euclide}
+% or simply TikZ
+\usepackage{tkz-elements}
+begin{document}
+
+\begin{tkzelements}
+ scale = 1
+% definition of some points
+z.A = point : new ( , )
+z.B = point : new ( , )
+
+ ...code...
+\end{tkzelements}
+
+\begin{tikzpicture}
+% point transfer to Nodes
+\tkzGetNodes
+
+\end{tikzpicture}
+\end{document}
+\end{verbatim}
+\end{mybox}
+\end{minipage}
% subsection with_lua (end)
-\subsection{The main process : from tkz-elements (lua) to tkz-euclide (TikZ) with Lua\LaTeX.} % (fold)
+\subsection{The main process} % (fold)
\label{sub:the_main_process}
+\tikzset{concept/.append style={fill={none}}}
+\tikzset{root concept/.style= {minimum size=3cm,text width=2.8cm}}%
+\tikzset{level 1 concept/.append style={minimum size=4cm, font=\large, text width=3cm}}%
+\begin{tikzpicture}
+ \path[mindmap,concept color=orange,text=black]
+ node[concept] {Transfers\\\textcolor{orange}{ \textbackslash{tkzGetNodes}}}
+ child[concept color=red,grow=right] {
+ node[concept] {Drawings\\\textcolor{red}{tkz-euclide}\\\textcolor{red}{\TIKZ}} }
+ child[concept color=purple,grow=left] {
+ node[concept] {Definitions\\Calculations\\\textcolor{purple}{tkz-elements}} };
+\end{tikzpicture}
When all the points necessary for the drawing are obtained, they must be transformed into \tkzname{nodes} so that \pkg{TikZ} or \pkg{tkz-euclide} can draw the figure. This is done through the macro \tkzcname{tkzGetNodes}. This macro browse all the elements of the table |z| using the key (in fact the name of the point) and retrieves the values associated with it, i.e. the coordinates of the point (node).
-
-A point $A$ is defined and stored in tkz-elements as follows:
-|z.A| is an element of a table |z| which contains the coordinates of $A$ in the form of a complex number (very useful for calculations). Then a macro, \tkzcname{tkzGetNodes}, transforms all elements of table |z| into nodes usable by tkz-euclide or TikZ. For another package, you'll need to adapt \tkzcname{tkzGetNodes}.
-
% subsection the_main_process (end)
\newpage
\subsection{Complete example: Pappus circle} % (fold)
\label{sub:the_figure_pappus_circle}
-The figure:
+\subsubsection{The figure}
\begin{tkzelements}
+ scale = 1.2
z.A = point: new (0 , 0)
z.B = point: new (10 , 0)
L.AB = line: new ( z.A, z.B)
@@ -61,8 +101,7 @@ The figure:
z.P_0 = intersection (C.PC,C.AB)
z.P_1 = intersection (C.PC,C.AC)
_,z.P_2 = intersection (C.QA,C.CB)
- T = triangle: new ( z.P_0, z.P_1, z.P_2)
- z.O_3 = T.circumcenter
+ z.O_3 = triangle: new ( z.P_0, z.P_1, z.P_2).circumcenter
\end{tkzelements}
\hspace*{\fill}
\begin{tikzpicture}
@@ -90,30 +129,26 @@ The figure:
\begin{document}
\begin{tkzelements}
- z.A = point: new (0 , 0)
- z.B = point: new (10 , 0)
- L.AB = line: new ( z.A, z.B)
- z.C = L.AB: gold_ratio ()
- L.AC = line: new ( z.A, z.C)
- L.CB = line: new ( z.C, z.B)
- L.AB = line: new ( z.A, z.B)
- z.O_0 = L.AB.mid
- z.O_1 = L.AC.mid
- z.O_2 = L.CB.mid
- C.AB = circle: new ( z.O_0, z.B)
- C.AC = circle: new ( z.O_1, z.C)
- C.CB = circle: new ( z.O_2, z.B)
- z.P = C.CB.north
- z.Q = C.AC.north
- z.O = C.AB.south
- z.c = z.C : north (2)
- C.PC = circle: new ( z.P, z.C)
- C.QA = circle: new ( z.Q, z.A)
- z.P_0 = intersection (C.PC,C.AB)
- z.P_1 = intersection (C.PC,C.AC)
- _,z.P_2 = intersection (C.QA,C.CB)
- T = triangle: new ( z.P_0, z.P_1, z.P_2)
- z.O_3 = T.circumcenter
+z.A = point: new (0 , 0)
+z.B = point: new (10 , 0) creation of two fixed points $A$ and $B$
+L.AB = line: new ( z.A, z.B)
+z.C = L.AB: gold_ratio () use of a method linked to "line"
+z.O_0 = line: new ( z.A, z.B).mid midpoint of segment with an attribute of "line"
+z.O_1 = line: new ( z.A, z.C).mid objects are not stored and cannot be reused.
+z.O_2 = line: new ( z.C, z.B).mid
+C.AB = circle: new ( z.O_0, z.B) new object "circle" stored and reused
+C.AC = circle: new ( z.O_1, z.C)
+C.CB = circle: new ( z.O_2, z.B)
+z.P = C.CB.north "north" atrributes of a circle
+z.Q = C.AC.north
+z.O = C.AB.south
+z.c = z.C : north (2) "north" method of a point (needs a parameter)
+C.PC = circle: new ( z.P, z.C)
+C.QA = circle: new ( z.Q, z.A)
+z.P_0 = intersection (C.PC,C.AB) search for intersections of two circles.
+z.P_1 = intersection (C.PC,C.AC) idem
+_,z.P_2 = intersection (C.QA,C.CB) idem
+z.O_3 = triangle: new ( z.P_0, z.P_1, z.P_2).circumcenter attribute of "triangle"
\end{tkzelements}
\begin{tikzpicture}
@@ -131,37 +166,82 @@ The figure:
\end{tkzexample}
% subsubsection the_code (end)
-\subsubsection{Some explanations} % (fold)
-\label{ssub:some_explanations}
-
-Half of the code concerns the direct creation of objects (|point: new |, |circle: new | etc.)
-
-Then points are obtained using object attributes like |L.AB.mid| which determines the middle of the segment $[AB]$ or |C.AB.south| which allows to obtain the south pole of the circle with center $A$ passing through $B$.
-
-About the naming of objects, see the section \ref{sec:writing_convention}
-
-\begin{itemize}
- \item Lines 8 and 9 create two fixed points $A$ and $B$.
-
- \item Line 10 these two points are used to create the line.
-
- \item Line 11 the gold method creates a point $C$ which divides the segment $[AB]$ according to the golden ratio.
-
- \item Lines 12, 13 and 14 creation of 3 new lines.
-
-\item Lines 15, 16 and 17 creation of 3 points: the midpoints of the previous segments. These points are predefined and it is enough to use the attributes of the lines. Another possibility is to use the triangle T.ABC with the method : |medial_tr|
-
-\item Lines 18, 19 et 20 creation of three circles.
-
-\item Line 21 creation of the south pole $P$ of the circle of center C passing through B. It is also a predefined point and we still use an attribute.
+\subsection{Another example with comments: South Pole} % (fold)
+\label{sub:south_pole}
-\item Lines 22 and 23 we create two new poles: north and south for two other circles.
+Here's another example with comments
-\item Lines 24 and 25 creation of two circles.
+\begin{verbatim}
+% !TEX TS-program = lualatex
+\documentclass{standalone}
+\usepackage{tkz-euclide,tkz-elements}
+\begin{document}
+\begin{tkzelements} we create environment tkzelements
+ z.A = point: new (2 , 4) three fixed points are used
+ z.B = point: new (0 , 0)
+ z.C = point: new (8 , 0)
+ T.ABC = triangle: new (z.A,z.B,z.C) we create a new triangle object
+ C.ins = T.ABC: in_circle () we get the incircle of this triangle
+ z.I = C.ins.center center is an attribute of the circle
+ z.T = C.ins.through through is also an attribute
+ -- z.I,z.T = get_points (C.ins) get_points is a shortcut
+ C.cir = T.ABC : circum_circle () we get the circumscribed circle
+ z.W = C.cir.center we get the center of this circle
+ z.O = C.cir.south now we get the south pole of this circle
+ L.AO = line: new (z.A,z.O) we create an object "line"
+ L.BC = T.ABC.bc we get the line (BC)
+ z.I_A = intersection (L.AO,L.BC) we search the intersection of the last lines
+\end{tkzelements}
+\end{verbatim}
+\begin{tkzelements}
+ scale = 1.2
+ z.A = point: new (2 , 4)
+ z.B = point: new (0 , 0)
+ z.C = point: new (8 , 0)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ C.ins = T.ABC: in_circle ()
+ z.I = C.ins.center
+ z.T = C.ins.through
+-- z.I,z.T = get_points (C.ins)
+ C.cir = T.ABC : circum_circle ()
+ z.W = C.cir.center
+ z.O = C.cir.south
+ L.AO = line: new (z.A,z.O)
+ L.BC = T.ABC.bc
+ z.I_A = intersection (L.AO,L.BC)
+\end{tkzelements}
-\item Lines 26 and 27 search for intersections of two circles.
+\hspace*{\fill}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles(W,A I,T)
+\tkzDrawArc(O,C)(B)
+\tkzDrawPolygon(A,B,C)
+\tkzDrawSegments[new](A,O B,O C,O)
+\tkzDrawLine(B,I)
+\tkzDrawPoints(A,B,C,I,I_A,W,O)
+\tkzFillAngles[green!20,opacity=.3](A,O,B A,C,B)
+\tkzFillAngles[teal!20,opacity=.3](O,B,C B,C,O B,A,O O,A,C)
+\tkzLabelPoints(I,I_A,W,B,C,O)
+\tkzLabelPoints[above](A)
+\end{tikzpicture}
+\hspace*{\fill}
-\item Lines 28 and 29 we use a triangle to search for its circum center.
-\end{itemize}
-% subsubsection some_explanations (end)
+Here's the tikzpicture environment to obtain the drawing:
+\begin{verbatim}
+\begin{tikzpicture}
+\tkzGetNodes
+\tkzDrawCircles(W,A I,T)
+\tkzDrawArc(O,C)(B)
+\tkzDrawPolygon(A,B,C)
+\tkzDrawSegments[new](A,O B,O C,O)
+\tkzDrawLine(B,I)
+\tkzDrawPoints(A,B,C,I,I_A,W,O)
+\tkzFillAngles[green!20,opacity=.3](A,O,B A,C,B)
+\tkzFillAngles[teal!20,opacity=.3](O,B,C B,C,O B,A,O O,A,C)
+\tkzLabelPoints(I,I_A,W,B,C,O)
+\tkzLabelPoints[above](A)
+\end{tikzpicture}
+\end{verbatim}
+% subsection south_pole (end)
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
new file mode 100644
index 0000000000..fe0f7091c5
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
@@ -0,0 +1,61 @@
+\section{Structure} % (fold)
+\label{sec:structure}
+\tkzNamePack{tkz-elements.sty} loads the \tkzNamePack{luacode} package, to create the \tkzNameEnv{tkzelements} environment based on the \tkzNameEnv{luacode} environment.
+
+The \tkzNameEnv{tkzelements} environment initializes scale to 1 and then deletes all the values in the various tables.
+
+The package defines the two macros |\tkzGetNodes| and |\tkzUseLua|.
+
+The package loads the file |tkz_elements_main.lua|. This file initialise all the tables that will be used by the modules in which the classes are defined.
+
+\begin{tikzpicture}[scale=.75]
+\begin{scope}
+\path[mindmap, concept color=MidnightBlue!60, text=white,text width=38mm,
+ level 1 concept/.append style={level distance=120mm,
+ sibling angle=72},
+ set angles for level/.style={level 2/.append style={
+ sibling angle=360/\the\tikznumberofchildren}},
+ level/.append style={set angles for level=2},
+ level 3 concept/.append style={level distance=20mm,
+ sibling angle=20},
+ L1/.style={level distance=45mm},
+ L2/.style={level distance=65mm,minimum size=2cm}]
+
+node[concept,circular drop shadow] {|tkz-elements.sty|} [clockwise from=10]
+ child[concept color=MidnightBlue!40,minimum size=16mm] {
+ node[concept,circular drop shadow] {|luacode|}
+}
+child[concept color= MidnightBlue!80,minimum size=4cm,text width=38mm,
+clockwise from=27] {
+ node[concept,circular drop shadow] {|tkz\_elements\_main|}
+ [clockwise from=0]
+ child[L2] { node[concept,circular drop shadow] {|Regular Polygon|} }
+ child[L2] { node[concept,circular drop shadow] {|Quadri\-lateral|} }
+ child[L2] { node[concept,circular drop shadow] {|Para\-llelogram|} }
+ child[L2] { node[concept,circular drop shadow] {|Rectangle|} }
+ child[L2] { node[concept,circular drop shadow] {|Matrix|} }
+ child[L2] { node[concept,circular drop shadow] {|Vector|} }
+ child[L2] { node[concept,circular drop shadow] {|Point|} }
+ child[L2] { node[concept,circular drop shadow] {|Line|} }
+ child[L2] { node[concept,circular drop shadow] {|Circle|} }
+ child[L2] { node[concept,circular drop shadow] {|Triangle|} }
+ child[L2] { node[concept,circular drop shadow] {|Ellipse|} }
+ child[L2] { node[concept,circular drop shadow] {|Square|} }
+};
+\end{scope}
+\end{tikzpicture}
+
+The current classes are (some are still inactive):
+\begin{itemize}
+ \item active : \Iclass{point} (z) ; \Iclass{line} (L) ; \Iclass{circle} (C) ; \Iclass{triangle} (T) ; \Iclass{ellipse} (E) ; \Iclass{quadrilateral} (Q) ; \Iclass{square} (S) ; \Iclass{rectangle} (R) ; \Iclass{parallelogram} (P) ; \Iclass{regular\_polygon} (RP).
+
+ \item inactive : matrix (M) ; vector (V).
+
+\end{itemize}
+
+If |name| is name of a class, you can find its definition in the file |tkz_elements_name.lua|.
+
+
+% section structure (end)
+
+
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex
new file mode 100644
index 0000000000..8106fbd2e8
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex
@@ -0,0 +1,145 @@
+
+\newpage
+\section{Transfers} % (fold)
+\label{sec:transfers}
+\subsection{Fom Lua to tkz-euclide or TikZ} % (fold)
+\label{sub:fom_lua_to_tkz_euclide_or_tikz}
+
+In this section, we'll look at how to transfer points, Booleans and numerical values.
+
+\subsubsection{Points transfer} % (fold)
+\label{ssub:points_transfer}
+We use an environment \tkzname{tkzelements} outside an environment \tkzname{tikzpicture} which allows us to carry out all the necessary calculations, then we launch the macro \Imacro{tkzGetNodes} which transforms the affixes of the table \tkzname{z} into \tkzname{Nodes}. It only remains to draw.
+
+Currently the drawing program is either \TIKZ\ or \pkg{tkz-euclide}. You have the possibility to use another package to trace but for that you have to create a macro similar to \tkzcname{tkzGetNodes}. Of course, this package must be able to store the points as does \TIKZ\ or \pkg{tkz-euclide}.
+
+\vspace*{1em}
+
+\begin{mybox}
+\begin{verbatim}
+\def\tkzGetNodes{\directlua{%
+ for K,V in pairs(z) do
+ local n,sd,ft
+ n = string.len(K)
+ if n >1 then
+ _,_,ft, sd = string.find( K , "(.+)(.)" )
+ if sd == "p" then K=ft.."'" end
+ end
+ tex.print("\\coordinate ("..K..") at ("..V.re..","..V.im..") ;\\\\")
+end}
+}\end{verbatim}
+\end{mybox}
+See the section In-depth Study \ref{sec:in_depth_study} for an explanation of the previous code.
+
+The environment \tkzNameEnv{tkzelements} allows to use the underscore |_| and the macro \tkzcname{tkzGetNodes} allows to obtain names of nodes containing \tkzname{prime}. (see the next example)
+
+\begin{minipage}{0.5\textwidth}
+\begin{tkzexample}[latex=0cm,small,code only]
+\begin{tkzelements}
+ scale = 1.2
+ z.o = point: new (0,0)
+ z.a_1 = point: new (2,1)
+ z.a_2 = point: new (1,2)
+ z.ap = z.a_1 + z.a_2
+\end{tkzelements}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawSegments(o,a_1 o,a_2 o,a')
+ \tkzDrawSegments[red](a_1,a' a_2,a')
+ \tkzDrawPoints(a_1,a_2,a',o)
+ \tkzLabelPoints(o,a_1,a_2,a')
+\end{tikzpicture}
+\end{tkzexample}%
+\end{minipage}%
+\begin{minipage}{0.5\textwidth}
+\begin{tkzelements}
+scale = 1.2
+z.o = point: new (0,0)
+z.a_1 = point: new (2,1)
+z.a_2 = point: new (1,2)
+z.ap = z.a_1 + z.a_2
+\end{tkzelements}
+\begin{tikzpicture}
+\tkzGetNodes
+ \tkzDrawSegments(o,a_1 o,a_2 o,a')
+ \tkzDrawSegments[red](a_1,a' a_2,a')
+ \tkzDrawPoints(a_1,a_2,a',o)
+ \tkzLabelPoints(o,a_1,a_2,a')
+\end{tikzpicture}
+\end{minipage}%
+
+\newpage
+% subsection fom_lua_to_tkz_euclide_or_tikz (end)
+\subsubsection{Other transfers} % (fold)
+\label{ssub:other_transfers}
+
+Sometimes it's useful to transfer angle, length measurements or boolean. For this purpose, I have created the macro (see \ref{ssub:transfer_from_lua_to_tex})
+\IEmacro{tkzUseLua(value)}
+
+\begin{verbatim}
+\begin{tkzelements}
+ z.b = point: new (1,1)
+ z.a = point: new (4,2)
+ z.c = point: new (2,2)
+ z.d = point: new (5,2)
+ L.ab = line : new (z.a,z.b)
+ L.cd = line : new (z.c,z.d)
+ det = (z.b-z.a)^(z.d-z.c)
+ if det == 0 then bool = true
+ else bool = false
+ end
+ x = intersection (L.ab,L.cd)
+\end{tkzelements}
+
+The intersection of the two lines lies at
+ a point whose affix is:\tkzUseLua{x}
+
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(a,...,d)
+ \ifthenelse{\equal{\tkzUseLua{bool}}{true}}{
+ \tkzDrawSegments[red](a,b c,d)}{%
+ \tkzDrawSegments[blue](a,b c,d)}
+ \tkzLabelPoints(a,...,d)
+\end{tikzpicture}
+\end{verbatim}
+
+ \begin{tkzelements}
+ z.b = point: new (1,1)
+ z.a = point: new (4,2)
+ z.c = point: new (2,2)
+ z.d = point: new (5,1)
+ L.ab = line : new (z.a,z.b)
+ L.cd = line : new (z.c,z.d)
+ det = (z.b-z.a)^(z.d-z.c)
+ if det == 0 then bool = true
+ else bool = false
+ end
+ x = intersection (L.ab,L.cd)
+ \end{tkzelements}
+
+ The intersection of the two lines lies at
+ a point whose affix is: \tkzUseLua{x}
+
+\vspace{1em}
+\hspace{\fill}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzInit[xmin =-1,ymin=-1,xmax=6,ymax=3]
+ \tkzGrid\tkzAxeX\tkzAxeY
+ \tkzDrawPoints(a,...,d)
+ \ifthenelse{\equal{\tkzUseLua{bool}}{true}}{
+ \tkzDrawSegments[red](a,b c,d)}{%
+ \tkzDrawSegments[blue](a,b c,d)}
+ \tkzLabelPoints(a,...,d)
+ \end{tikzpicture}
+ \hspace{\fill}
+
+
+
+% subsubsection other_transfers (end)
+% subsubsection points_transfer (end)
+
+% section transferts (end)
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex
new file mode 100644
index 0000000000..e76340cbd0
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex
@@ -0,0 +1,207 @@
+\newpage
+\section{Why tkz-elements?} % (fold)
+\label{sec:why_tkz_elements}
+
+\subsection{Calculation accuracy} % (fold)
+\label{sub:calculation_accuracy}
+
+\subsubsection{Calculation accuracy in \TIKZ} % (fold)
+\label{ssub:calculation_accuracy_in_tikz}
+
+With \TIKZ, \tkzimp{|veclen(x,y)|} calculates the expression $\sqrt{x^2+y^2}$.
+This calculation is obtained using a polynomial approximation, based on ideas from \tkzimp{Rouben Rostamian}.
+
+\pgfkeys{/pgf/number format/.cd,std,precision=5} \pgfmathparse{veclen(65,72)}
+\begin{mybox}{}
+\begin{verbatim}
+ pgfmathparse{veclen(65,72)} \pgfmathresult
+\end{verbatim}
+\end{mybox}
+
+ \tkzHand $\sqrt{65^2+72^2} \approx \pmpn{\pgfmathresult} $ \tkzRBomb.
+% subsubsection calculation_accuracy_in_tikz (end)
+
+\subsubsection{Calculation accuracy in Lua} % (fold)
+\label{ssub:calculation_accuracy_in_lua}
+
+A |luaveclen| macro can be defined as follows:
+
+\begin{mybox}{}
+\begin{verbatim}
+\def\luaveclen#1#2{\directlua{tex.print(string.format(
+'\percentchar.5f',math.sqrt((#1)*(#1)+(#2)*(#2))))}}
+\end{verbatim}
+\end{mybox}
+
+and
+
+\begin{mybox}
+\begin{verbatim}
+\luaveclen{65}{72}
+\end{verbatim}
+\end{mybox}
+
+gives
+\tkzHand $\sqrt{65^2+72^2} = \pmpn{\luaveclen{65}{72}} $ {\color{red}!!}
+
+The error isn't important if it's a hundredth of a \tkzimp{pt} for the placement of an object on a page, but it's unpleasant for the result of a calculation in a mathematical demonstration. What's more, these inaccuracies can combine to produce erroneous constructions.
+
+\vspace{.5em}
+To remedy this lack of precision, I first introduced the package \pkg{fp}, then the package \pkg{xfp}. Lately, with the arrival of lua\LATEX{}, I have been able to add a \tkzname{Lua} option whose goal was to perform some calculations with \tkzname{Lua}.
+
+This was the primary reason for creating the package, the second being the introduction of object-oriented programming and easier programming with Lua. Object-oriented programming (oop) convinced me to further develop all the possibilities this method offered.
+
+At that moment, I had received some examples of programming with \tkzname{Lua} from {\tkzimpbf{Nicolas Kisselhoff}}, but I didn't understand its code, so I had to patiently study Lua. Finally, I was able to build tkz-elements, I took many of his ideas I've adapted.
+
+
+% subsubsection calculation_accuracy_in_lua (end)
+\subsubsection{Using objects} % (fold)
+\label{ssub:using_objects}
+
+Then, I read an article\footnote{\href{https://www.guitex.org/home/images/meeting2012/slides/presentazione_giacomell_guitmeeting_2012.pdf}{Grafica ad oggetti con LuaTEX}} by \tkzimpbf{Roberto Giacomelli} on object programming based on the \tkzname{Lua} and \TIKZ\ tools. This was my second source of inspiration. Not only could the programming be done step-by-step, but the introduction of objects allowed the link between the code and the geometry. The code becomes more readable, more explicit and better structured.
+
+\subsubsection{Example: Apollonius circle} % (fold)
+\label{ssub:example_apollonius_circle}
+
+\begin{mybox}{Problem}
+The goal is to determine an inner tangent circle to the three exinscribed circles of a triangle.
+\end{mybox}
+
+See \href{https://mathworld.wolfram.com/ApolloniusCircle.html}{MathWorld} for more details.
+
+This example was my reference for testing the tkz-euclide package. With my first methods and the tools at my disposition, the results lacked precision. Now, with tkz-elements, I can use tools that are more powerful, more precise and easier to create.
+
+The essential principles of figure construction with \tkzname{tkz-euclide} are kept: definitions, calculations, tracings, labels as well as the step-by-step programmation, corresponding to a construction with a ruler and a compass.
+
+This is the version that uses the simplest construction method, made possible by Lua.
+
+\begin{mybox}
+\begin{verbatim}
+\begin{tkzelements}
+ scale = .4
+ z.A = point: new (0,0)
+ z.B = point: new (6,0)
+ z.C = point: new (0.8,4)
+ T.ABC = triangle : new ( z.A,z.B,z.C )
+ z.N = T.ABC.eulercenter
+ z.S = T.ABC.spiekercenter
+ T.feuerbach = T.ABC : feuerbach ()
+ z.Ea,z.Eb,z.Ec = get_points ( T.feuerbach )
+ T.excentral = T.ABC : excentral ()
+ z.Ja,z.Jb,z.Jc = get_points ( T.excentral )
+ C.JaEa = circle: new (z.Ja,z.Ea)
+ C.ortho = circle: radius (z.S,math.sqrt(C.JaEa: power(z.S)))
+ z.a = C.ortho.through
+ C.euler = T.ABC: euler_circle ()
+ C.apo = C.ortho : inversion (C.euler)
+ z.O = C.apo.center
+ z.xa,z.xb,z.xc = C.ortho : inversion (z.Ea,z.Eb,z.Ec)
+\end{tkzelements}
+\end{verbatim}
+\end{mybox}
+
+The creation of an object encapsulates its attributes (its characteristics) and methods (i.e. the actions that are specific to it). It is then assigned a reference (a name), which is linked to the object using a table. The table is an associative array that links the reference called \tkzimp{key} to a \tkzimp{value}, in this case the object. These notions will be developed later.
+
+\tkzimp{T} is a table that associates the object \tkzimp{triangle} with the key \tkzimp{ABC}. \tkzimp{T.ABC} is also a table, and its elements are accessed using keys that are attributes of the triangle. These attributes have been defined in the package.
+
+\vspace{1em}
+\begin{mybox}
+\begin{verbatim}
+ z.N = T.ABC.eulercenter \end{verbatim}
+\end{mybox}
+
+|N| is the name of the point, |eulercenter| is an attribute of the triangle.
+\footnote{ The center of the Euler circle, or center of the nine-point circle, is a characteristic of every triangle.}
+
+\begin{mybox}
+\begin{verbatim}
+ T.excentral = T.ABC : excentral () \end{verbatim}
+\end{mybox}
+
+Here, \tkzimp{excentral} is a method linked to the \tkzimp{T.ABC }object. It defines the triangle formed by the centers of the exinscribed circles.
+
+Two lines are important. The first below shows that the excellent precision provided by Lua makes it possible to define a radius with a complex calculation. The radius of the radical circle is given by $\sqrt{\Pi(S,\mathcal{C}(Ja,Ea))}$ (square root of the power of point $S$ with respect to the exinscribed circle with center |Ja| passing through |Ea|).
+
+\begin{mybox}
+\begin{verbatim}
+ C.ortho = circle: radius (z.S,math.sqrt(C.JaEa: power(z.S)))\end{verbatim}
+\end{mybox}
+
+Finally, the inversion of the Euler circle with respect to the radical circle is the Apollonius circle\footnote{The nine-point circle, or Euler circle, is externally tangent to the three circles. The points of tangency form Feuerbach's triangle.}. The transformation has an object as parameter, which is recognized by its type (all objects are typed in the package), and the method determines which algorithm to use according to this type.
+
+\begin{mybox}
+\begin{verbatim}
+ C.apo = C.ortho : inversion (C.euler) \end{verbatim}
+\end{mybox}
+
+Now that all the points have been defined, it's time to start drawing the paths. To do this, you need to create the nodes. This is the role of the macro \Imacro{tkzGetNodes}. See \ref{ssub:points_transfer}
+
+The following section concerns only drawings, and is handled by tkz-euclide.
+
+\begin{verbatim}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzFillCircles[green!30](O,xa)
+ \tkzFillCircles[teal!30](Ja,Ea Jb,Eb Jc,Ec)
+ \tkzFillCircles[lightgray](S,a)
+ \tkzFillCircles[green!30](N,Ea)
+ \tkzDrawPoints(xa,xb,xc)
+ \tkzClipCircle(O,xa)
+ \tkzDrawLines[add=3 and 3](A,B A,C B,C)
+ \tkzDrawCircles(Ja,Ea Jb,Eb Jc,Ec S,a O,xa N,Ea)
+ \tkzDrawPoints(O,A,B,C,S,Ea,Eb,Ec,N)
+ \tkzDrawSegments[dashed](S,xa S,xb S,xc)
+ \tkzLabelPoints(O,N,A,B)
+ \tkzLabelPoints[right](S,C)
+\end{tikzpicture}
+\end{verbatim}
+
+\vspace{1em}
+\begin{tkzelements}
+ scale = .35
+ z.A = point: new (0,0)
+ z.B = point: new (6,0)
+ z.C = point: new (0.8,4)
+ T.ABC = triangle : new ( z.A,z.B,z.C )
+ z.N = T.ABC.eulercenter
+ z.S = T.ABC.spiekercenter
+ T.feuerbach = T.ABC : feuerbach ()
+ z.Ea,z.Eb,z.Ec = get_points ( T.feuerbach )
+ T.excentral = T.ABC : excentral ()
+ z.Ja,z.Jb,z.Jc = get_points ( T.excentral )
+ C.JaEa = circle: new (z.Ja,z.Ea)
+ C.ortho = circle: radius (z.S,math.sqrt(C.JaEa: power(z.S)))
+ z.a = C.ortho.through
+ C.euler = T.ABC: euler_circle ()
+ C.apo = C.ortho : inversion (C.euler)
+ z.O = C.apo.center
+ z.xa,z.xb,z.xc = C.ortho : inversion (z.Ea,z.Eb,z.Ec)
+\end{tkzelements}
+\begin{minipage}{\textwidth}
+\hspace*{\fill}
+\begin{tikzpicture}
+ \tkzGetNodes
+ \tkzFillCircles[green!30](O,xa)
+ \tkzFillCircles[teal!30](Ja,Ea Jb,Eb Jc,Ec)
+ \tkzFillCircles[lightgray](S,a)
+ \tkzFillCircles[green!30](N,Ea)
+ \tkzDrawPoints(xa,xb,xc)
+ \tkzClipCircle(O,xa)
+ \tkzDrawLines[add=3 and 3](A,B A,C B,C)
+ \tkzDrawCircles(Ja,Ea Jb,Eb Jc,Ec S,a O,xa N,Ea)
+ \tkzDrawPoints(O,A,B,C,S,Ea,Eb,Ec,N)
+ \tkzDrawSegments[dashed](S,xa S,xb S,xc)
+ \tkzLabelPoints(O,N,A,B)
+ \tkzLabelPoints[right](S,C)
+\end{tikzpicture}
+\hspace*{\fill}
+\end{minipage}
+
+% subsubsection example_apollonius_circle (end)
+
+% subsubsection using_objects (end)
+
+% subsection calculation_accuracy (end)
+
+
+% section why_tkz_elements (end) \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf b/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
index 0684fccc1f..cee54a9cfe 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
index 0816322b1b..788e9d0f39 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
index 337c3f8cbe..61a1ea5583 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
@@ -8,49 +8,42 @@
The Feuerbach triangle is the triangle formed by the three points of tangency of the nine-point circle with the excircles
\begin{tkzelements}
- scale = .5
- z.A = point: new (0,0)
- z.B = point: new (6,0)
- z.C = point: new (0.8,4)
- T.ABC = triangle : new (z.A,z.B,z.C)
- C.euler = T.ABC: euler_circle ()
- z.N,z.Ma = get_points (C.euler)
- z.I_a,z.I_b,z.I_c = get_points (T.ABC : excentral())
- z.Ea,z.Eb,z.Ec = get_points (T.ABC : feuerbach ())
- z.S,z.p = get_points (T.ABC : spieker_circle ())
- -- S spieker point is the radical center of the last three circles
- C.exa = T.ABC : ex_circle ()
- C.exb = T.ABC : ex_circle (1)
- C.exc = T.ABC : ex_circle (2)
- _,z.Xa = get_points (C.exa)
- _,z.Xb = get_points (C.exb)
- _,z.Xc = get_points (C.exc)
- L.fa = line : new (z.S,z.Ea)
- L.fb = line : new (z.S,z.Eb)
- L.fc = line : new (z.S,z.Ec)
- z.f_a = intersection (L.fa,C.exa)
- z.f_b = intersection (L.fb,C.exb)
- _,z.f_c = intersection (L.fc,C.exc)
- T = triangle : new ( z.f_a, z.f_b , z.f_c )
- z.o = T.circumcenter
- _,z.l = get_points (C.exa : orthogonal_from (z.S))
- -- S center of inversion !!
+ scale = .6
+ z.A = point: new (0,0)
+ z.B = point: new (6,0)
+ z.C = point: new (0.8,4)
+ T.ABC = triangle : new ( z.A,z.B,z.C )
+ z.N = T.ABC.eulercenter
+ z.S = T.ABC.spiekercenter
+ T.feuerbach = T.ABC : feuerbach ()
+ z.Ea,z.Eb,z.Ec = get_points ( T.feuerbach )
+ T.excentral = T.ABC : excentral ()
+ z.Ja,z.Jb,z.Jc = get_points ( T.excentral )
+ C.JaEa = circle: new (z.Ja,z.Ea)
+ C.ortho = circle: radius (z.S,math.sqrt(C.JaEa: power(z.S)))
+ z.a = C.ortho.through
+ C.euler = T.ABC: euler_circle ()
+ C.apo = C.ortho : inversion (C.euler)
+ z.O = C.apo.center
+ z.xa,z.xb,z.xc = C.ortho : inversion (z.Ea,z.Eb,z.Ec)
\end{tkzelements}
+
\vspace*{2em}
\hfill
\begin{tikzpicture}
-\tkzSetUpLine[ultra thin,color=teal]
-\tkzGetNodes
-\tkzDrawCircles[red](o,f_a N,Ma)
-\tkzDrawPoints[red](f_a,f_b,f_c,Ea,Eb,Ec,o,N)
-\tkzClipCircle(o,f_a)
-\tkzDrawLines[add=3 and 3](A,B A,C B,C)
-\tkzDrawCircles(I_a,Xa I_b,Xb I_c,Xc)
-\tkzDrawCircles[cyan](S,l)
-\tkzDrawPoints(A,B,C)
-\tkzDrawPoints[cyan](S)
-\tkzDrawSegments[dashed,red](S,f_a S,f_b S,f_c)
-\tkzDrawSegments[dashed,teal](o,f_a o,f_b o,f_c)
+ \tkzGetNodes
+ \tkzFillCircles[green!30](O,xa)
+ \tkzFillCircles[teal!30](Ja,Ea Jb,Eb Jc,Ec)
+ \tkzFillCircles[lightgray](S,a)
+ \tkzFillCircles[green!30](N,Ea)
+ \tkzDrawPoints(xa,xb,xc)
+ \tkzClipCircle(O,xa)
+ \tkzDrawLines[add=3 and 3](A,B A,C B,C)
+ \tkzDrawCircles(Ja,Ea Jb,Eb Jc,Ec S,a O,xa N,Ea)
+ \tkzDrawPoints(O,A,B,C,S,Ea,Eb,Ec,N)
+ \tkzDrawSegments[dashed](S,xa S,xb S,xc)
+ \tkzLabelPoints(O,N,A,B)
+ \tkzLabelPoints[right](S,C)
\end{tikzpicture}
\hfill
\end{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty b/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
index 80a39af083..1a14660eaa 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
@@ -1,5 +1,5 @@
% encoding : utf8
-% tkz-elements v1.20b
+% tkz-elements.sty v1.40c
% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -11,38 +11,36 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\ProvidesPackage{tkz-elements}[2023/11/10 v1.20b Graphic Object Library]
+\ProvidesPackage{tkz-elements}[23/12/03 v1.40c Graphic Object Library]
\RequirePackage{luacode}
-\RequirePackage{filecontents}
\directlua{require "tkz_elements_main"}
\newenvironment{tkzelements}
{ \directlua{scale=1}
+ \directlua{indirect = true}
\directlua{for k,v in pairs(z) do z[k] = nil end}
- \directlua{for k,v in pairs(L) do L[k] = nil end}
\directlua{for k,v in pairs(C) do C[k] = nil end}
- \directlua{for k,v in pairs(T) do T[k] = nil end}
\directlua{for k,v in pairs(E) do E[k] = nil end}
- \luacode}
+ \directlua{for k,v in pairs(L) do L[k] = nil end}
+ \directlua{for k,v in pairs(P) do C[k] = nil end}
+ \directlua{for k,v in pairs(S) do E[k] = nil end}
+ \directlua{for k,v in pairs(R) do C[k] = nil end}
+ \directlua{for k,v in pairs(Q) do T[k] = nil end}
+ \directlua{for k,v in pairs(T) do T[k] = nil end}
+ \luacode}
{\endluacode}
+
\def\tkzGetNodes{\directlua{%
for K,V in pairs(z) do
- local KS,n,sd,ft
- KS = tostring(K)
- n = string.len(KS)
+ local n,sd,ft
+ n = string.len(K)
if n >1 then
- _,_,ft, sd = string.find( KS , "(.+)(.)" )
+ _,_,ft, sd = string.find( K , "(.+)(.)" )
if sd == "p" then K=ft.."'" end
end
tex.print("\\coordinate ("..K..") at ("..V.re..","..V.im..") ;\\\\")
end}
}
-\def\tkzEraseTables{
- \directlua{for k,v in pairs(z) do z[k] = nil end}
- \directlua{for k,v in pairs(L) do L[k] = nil end}
- \directlua{for k,v in pairs(C) do C[k] = nil end}
- \directlua{for k,v in pairs(T) do T[k] = nil end}
- \directlua{for k,v in pairs(E) do E[k] = nil end}
-}
+
\def\tkzUseLua#1{\directlua{tex.print(tostring(#1))}}
\endinput
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
index 7af14e473c..bc3508a5aa 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
@@ -1,6 +1,6 @@
-- tkz_elements-circles.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -16,23 +16,28 @@
---------------------------------------------------------------------------
circle = {}
function circle: new (c, t) -- c --> center t --> through
- local type = 'circle'
- local radius = point.abs ( c - t )
- local south = c - point (0,radius)
- local east = c + point (radius,0)
- local north = c + point (0,radius)
- local west = c - point (radius,0)
- local new_circle = { center = c, through = t, radius = radius,
- south=south,east=east,north=north,west=west,type = type}
- setmetatable(new_circle, {__index = circle})
- return new_circle
+ local type = 'circle'
+ local radius = point.abs ( c - t )
+ local south = c - point (0,radius)
+ local east = c + point (radius,0)
+ local north = c + point (0,radius)
+ local west = c - point (radius,0)
+ local o = { center = c,
+ through = t,
+ radius = radius,
+ south = south,
+ east = east,
+ north = north,
+ west = west,
+ type = type}
+ setmetatable(o, self)
+ self.__index = self
+ return o
end
-- other definition
function circle: radius (center, radius) -- c --> center r --> radius
- local through
- through = center + point( radius, 0 )
- return circle : new (center, through )
+ return circle : new (center, center + point( radius, 0 ) )
end
-----------------------
-- boolean --
@@ -62,7 +67,6 @@ end
-----------------------
-- real --
-----------------------
-
function circle: power (pt)
local d
d = point.abs (self.center - pt)
@@ -90,8 +94,9 @@ function circle: midarc (z1,z2)
return rotation_ (self.center,phi,z1)
end
-function circle: point (phi)
- return point (self.center.re+self.radius*math.cos(phi),self.center.im+self.radius*math.sin(phi) )
+function circle: point (t)
+ local phi = 2*t* math.pi
+ return rotation_ (self.center,phi,self.through)
end
function circle: random_pt(lower, upper)
@@ -108,8 +113,6 @@ end
function circle: external_similitude (C)
return barycenter_ ({C.center,self.radius},{self.center,-C.radius})
end
-
-
-----------------------
-- lines --
-----------------------
@@ -168,17 +171,38 @@ function circle: orthogonal_through (pta,ptb)
end
end
- function circle: inversion (obj)
- if obj.type == "point" then
- return inversion_ (self.center,self.through,obj)
- elseif obj.type == "line" then
- return self: inversion_L (obj)
-else
- return self: inversion_C (obj)
+function circle: inversion (...)
+ local obj,nb,t
+ local tp = table.pack(...)
+ obj = tp[1]
+ nb = tp.n
+ if nb == 1 then
+ if obj.type == "point" then
+ return inversion_ (self.center,self.through,obj)
+ elseif obj.type == "line" then
+ return self: inversion_L (obj)
+ else
+ return self: inversion_C (obj)
+ end
+ else
+ t = {}
+ for i=1,tp.n do
+ table.insert( t , inversion_ (self.center,self.through , tp[i]) )
+ end
+ return table.unpack ( t )
+ end
end
- end
-
+ function circle: set_inversion (...)
+ local tp = table.pack(...)
+ local i
+ local t = {}
+ for i=1,tp.n do
+ table.insert( t , inversion_ (self.center,self.through , tp[i]) )
+ end
+ return table.unpack ( t )
+ end
+
function circle: draw ()
local x,y
x, y = self.center: get ()
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
index 8a2564bd36..f63b0d183a 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
@@ -1,4 +1,6 @@
-- tkz_elements_class.lua
+-- date 23/12/03
+-- version 1.40c
-- from class.lua (Simple Lua Classes from Lua-users wiki)
-- Compatible with Lua 5.1 (not 5.0).
-- http://lua-users.org/wiki/SimpleLuaClasses DavidManura
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipses.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
index 4bc34c61b7..b4cbe76a7e 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipses.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
@@ -1,6 +1,6 @@
-- tkz_elements-ellipses.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -19,34 +19,35 @@ ellipse = {}
function ellipse: new(pc, pa ,pb)
-- pc --> center pa --> through big axe pb --> little axe
- local type = 'ellipse'
- local Rx = point.abs ( pa - pc )
- local Ry = point.abs ( pb - pc )
- local slope = slope_ (pc,pa)
- local c = math.sqrt (Rx*Rx-Ry*Ry)
- local Fa = pc + c*(point(math.cos(slope),math.sin(slope)))
- local Fb = pc - c*(point(math.cos(slope),math.sin(slope)))
- local east = pa
- local north = pb
- local west = 2 * pc - pa
- local south = 2 * pc - pb
- local vertex = pa
- local covertex = pb
- local new_ellipse = { center = pc,
- vertex = vertex,
- covertex = covertex,
- Rx = Rx,
- Ry = Ry,
- slope = slope,
- Fa = Fa,
- Fb = Fb,
- type = type,
- north = north,
- south = south,
- east = east,
- west = west }
- setmetatable(new_ellipse, {__index = ellipse})
- return new_ellipse
+ local type = 'ellipse'
+ local Rx = point.abs ( pa - pc )
+ local Ry = point.abs ( pb - pc )
+ local slope = slope_ (pc,pa)
+ local c = math.sqrt (Rx*Rx-Ry*Ry)
+ local Fa = pc + c*(point(math.cos(slope),math.sin(slope)))
+ local Fb = pc - c*(point(math.cos(slope),math.sin(slope)))
+ local east = pa
+ local north = pb
+ local west = 2 * pc - pa
+ local south = 2 * pc - pb
+ local vertex = pa
+ local covertex = pb
+ local o = { center = pc,
+ vertex = vertex,
+ covertex = covertex,
+ Rx = Rx,
+ Ry = Ry,
+ slope = slope,
+ Fa = Fa,
+ Fb = Fb,
+ type = type,
+ north = north,
+ south = south,
+ east = east,
+ west = west }
+ setmetatable(o, self)
+ self.__index = self
+ return o
end
function ellipse: foci (f1,f2,v )
@@ -68,7 +69,8 @@ function ellipse: radii (c,a,b,sl )
return ellipse: new (c,v,cov)
end
-function ellipse: point (phi)
+function ellipse: point (t)
+ local phi = 2*t* math.pi
local ax,ay,bx,by,cx,cy
cx = self.center.re
cy = self.center.im
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
index fe9c91d2f7..76b8fb395b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_circles.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -23,19 +23,6 @@ function midarc_ (o,a,b) -- a -> b
return rotation_ (o,phi,b)
end
-function radical_center (C1,C2,C3)
- local t1,t2,t3,t4
- t1,t2 = radical_axis_ (C3.center,C3.through,C1.center,C1.through)
- t3,t4 = radical_axis_ (C3.center,C3.through,C2.center,C2.through)
-return intersection_ll_ (t1,t2,t3,t4)
-end
-
-function radical_circle (C1,C2,C3)
- local rc
- rc = radical_center (C1,C2,C3)
- return C1 : orthogonal_from (rc)
-end
-
function tangent_from_ (c,p,pt)
local o
o = midpoint_ ( c,pt )
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
index f52c4bc2b1..314174cb30 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
@@ -1,6 +1,6 @@
-- tkz_elements_intersections.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -33,7 +33,7 @@ end -- function
-- line ellipse
function intersection_le (L,E)
- local a,b,c,d,t1,t2,z1,z2,Bx,By,Ax,Ay,Rx,Ry,epsilon,sd
+ local a,b,c,d,t1,t2,z1,z2,A,B,Bx,By,Ax,Ay,Rx,Ry,epsilon,sd
A = (L.pa - E.center)*(point(math.cos(E.slope),-math.sin(E.slope)))
B = (L.pb - E.center)*(point(math.cos(E.slope),-math.sin(E.slope)))
epsilon = 10^(-6)
@@ -134,7 +134,7 @@ function intersection_lc_ (pa,pb,c,p)
end -- function
function intersection_cc_ (ca,pa,cb,pb )
- local d, cosphi, phi,ra,rb,epsilon
+ local d, cosphi, phi,ra,rb,c1,c2,epsilon
epsilon = 12
d = point.abs (ca - cb)
ra = point.abs (ca - pa)
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
index c78004be6a..4c3c260ff4 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_lines.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -106,7 +106,7 @@ function projection_ ( pa,pb,pt )
return pt
else
v = pb - pa
- z = ((pt - pa)..v)/(point.norm(v)) -- .. dot product
+ z = ((pt - pa)..v)/(point.norm(v)) -- .. dot product
return pa + z * v
end
end
@@ -117,6 +117,15 @@ function symmetry_axial_(pa,pb,pt)
return symmetry_(p,pt)
end
+function set_symmetry_axial_ (u,v,...)
+ local tp = table.pack(...)
+ local i
+ local t = {}
+ for i=1,tp.n do
+ table.insert( t , symmetry_axial_ (u,v , tp[i]) )
+ end
+ return table.unpack ( t )
+end
function square_ (a,b)
return rotation_ (b,-math.pi/2,a), rotation_ (a,math.pi/2,b)
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
index f38458e1f1..fd030de8c1 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_maths.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -64,11 +64,11 @@ function islinear (z1,z2,z3)
end
function isortho (z1,z2,z3)
- local epsilon
- local dp
- epsilon = 10^(-8)
- dp = (z2-z1) .. (z3-z1)
- if math.abs(dp) < epsilon
+ local epsilon
+ local dp
+ epsilon = 10^(-8)
+ dp = (z2-z1) .. (z3-z1)
+ if math.abs(dp) < epsilon
then
return true
else
@@ -76,11 +76,6 @@ function isortho (z1,z2,z3)
end
end
-function set_lua_to_tex (t)
- for k,v in pairs(t) do
- token.set_macro(v,_ENV[v],'global')
- end
-end
function parabola (a,b,c)
local xa,xb,xc,ya,yb,yc
@@ -124,4 +119,8 @@ local dblpi
a = a + dblpi
end
return a
-end \ No newline at end of file
+end
+
+function barycenter (...)
+ return barycenter_ (...)
+end
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
index ea468a9c6d..34107d76fe 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_points.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -39,14 +39,44 @@ function rotation_ (c,a,pt)
return z*(pt-c)+c
end
+function set_rotation_ (c,angle,...)
+ local tp = table.pack(...)
+ local i
+ local t = {}
+ for i=1,tp.n do
+ table.insert( t , rotation_(c , angle , tp[i] ))
+ end
+ return table.unpack ( t )
+end
+
function symmetry_(c,pt)
return 2 * c - pt
end
+function set_symmetry_ (c,...)
+ local tp = table.pack(...)
+ local i
+ local t = {}
+ for i=1,tp.n do
+ table.insert( t , symmetry_ (c , tp[i]) )
+ end
+ return table.unpack ( t )
+end
+
function homothety_(c,t,p)
return c + t * (p - c)
end
+function set_homothety_ (c,coeff,...)
+ local tp = table.pack(...)
+ local i
+ local t = {}
+ for i=1,tp.n do
+ table.insert( t , homothety_ (c, coeff , tp[i]) )
+ end
+ return table.unpack ( t )
+end
+
function translation_(a , p)
return a+p
end
@@ -61,7 +91,7 @@ function set_translation_ (u,...)
return table.unpack ( t )
end
-function random_point(lower, upper)
+function random_point_(lower, upper)
math.randomseed( tonumber(tostring(os.time()):reverse():sub(1,6)) )
x = math.random (lower, upper)
y = math.random (lower, upper)
@@ -78,4 +108,5 @@ function midpoints_ (...)
end
table.insert( t , (arg[n]+arg[1])/2 )
return table.unpack ( t )
-end \ No newline at end of file
+end
+
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
new file mode 100644
index 0000000000..378d855a21
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
@@ -0,0 +1,27 @@
+-- tkz_elements_functions_regular.lua
+-- date 23/12/03
+-- version 1.40c
+-- Copyright 2023 Alain Matthes
+-- This work may be distributed and/or modified under the
+-- conditions of the LaTeX Project Public License, either version 1.3
+-- of this license or (at your option) any later version.
+-- The latest version of this license is in
+-- http://www.latex-project.org/lppl.txt
+-- and version 1.3 or later is part of all distributions of LaTeX
+-- version 2005/12/01 or later.
+-- This work has the LPPL maintenance status “maintained”.
+-- The Current Maintainer of this work is Alain Matthes.
+
+---------------------------------------------------------------------------
+ --
+---------------------------------------------------------------------------
+function regular_(c,th,s)
+ local r,t,dep
+ dep = angle_normalize(point.arg (th-c))
+ t = {}
+ r = point.mod (th-c)
+ for i =1,s do
+ table.insert( t , (c + point : polar (r,2*(i-1)*math.pi/s + dep) ))
+ end
+ return t
+end \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
index 166d3b7647..426bc1a88e 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_triangles.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -39,7 +39,6 @@ function ex_center_ ( a,b,c )
return barycenter_ ( {a,-ka} , {b,kb} , {c,kc} )
end
--- N,G,H,O
function centroid_ (a,b,c)
return barycenter_ ( {a,1} , {b,1} , {c,1} )
end
@@ -97,6 +96,7 @@ end
--------------------
-- lines --
--------------------
+-- N,G,H,O
function euler_line_ (a,b,c)
check_equilateral_ (a,b,c)
local A = math.tan( get_angle_ ( a,b,c ))
@@ -275,8 +275,7 @@ function check_equilateral_ (a,b,c)
C = a - b
if (point.abs(A)-point.abs(B) < epsilon) and (point.abs(B)-point.abs(C) < epsilon)
then
- tex.print("equilateral !!")
- error("something went wrong!")
+ return true else return false
end
end
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
new file mode 100644
index 0000000000..a8d8da22d3
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
@@ -0,0 +1,319 @@
+-- tkz_elements_lines.lua
+-- date 23/12/03
+-- version 1.40c
+-- Copyright 2023 Alain Matthes
+-- This work may be distributed and/or modified under the
+-- conditions of the LaTeX Project Public License, either version 1.3
+-- of this license or (at your option) any later version.
+-- The latest version of this license is in
+-- http://www.latex-project.org/lppl.txt
+-- and version 1.3 or later is part of all distributions of LaTeX
+-- version 2005/12/01 or later.
+-- This work has the LPPL maintenance status “maintained”.
+-- The Current Maintainer of this work is Alain Matthes.
+
+-- -------------------------------------------------------------------------
+-- Lines
+-- -------------------------------------------------------------------------
+line = {}
+function line: new(za, zb)
+ local type = 'line'
+ local mid = (za+zb)/2
+ local north_pa = rotation_ (za,math.pi/2,zb)
+ local south_pa = rotation_ (za,-math.pi/2,zb)
+ local north_pb = rotation_ (zb,-math.pi/2,za)
+ local south_pb = rotation_ (zb,math.pi/2,za)
+ local west = rotation_ (za,math.pi/2,north_pa)
+ local east = rotation_ (zb,math.pi/2,south_pb)
+ local slope = point.arg(zb-za)
+ local length = point.mod(zb-za)
+ local o = {pa = za,
+ pb = zb,
+ north_pa = north_pa,
+ south_pa = south_pa,
+ west = west,
+ east = east,
+ north_pb = north_pb,
+ south_pb = south_pb,
+ slope = slope,
+ mid = mid,
+ type = type,
+ length = length}
+ setmetatable(o, self)
+ self.__index = self
+ return o
+end
+
+-------------------
+-- Result -> real
+-------------------
+function line: distance (pt)
+ return point.mod(projection(self,pt)-pt)
+end
+
+function line: slope ()
+ return slope_(self.pa,self.pb)
+end
+-------------------
+-- Result -> boolean
+-------------------
+function line: in_out (pt)
+ local sc,epsilon
+ epsilon = 10^(-12)
+ sc = math.abs ((pt-self.pa)^(pt-self.pb))
+ if sc <= epsilon
+ then
+ return true
+ else
+ return false
+ end
+end
+
+-------------------
+-- Result -> point
+-------------------
+function line: barycenter (ka,kb)
+ return barycenter_({self.pa,ka},{self.pb,kb})
+end
+
+function line: point (t) -- t=o A t=1 B t = AM / AB
+ return barycenter_({self.pa,1-t},{self.pb,(t)})
+end
+
+function line: midpoint ()
+ return (self.pa+self.pb)/2
+end
+
+function line: harmonic_int (pt)
+ return div_harmonic_int_(self.pa,self.pb,pt)
+end
+
+function line: harmonic_ext (pt)
+ return div_harmonic_ext_(self.pa,self.pb,pt)
+end
+
+function line: harmonic_both (k)
+ return div_harmonic_both_(self.pa,self.pb,k)
+end
+
+function line: gold_ratio()
+ return self.pa + (self.pb-self.pa)*tkzinvphi
+end
+
+function line: normalize ()
+ return self.pa+(self.pb-self.pa)/point.mod(self.pb-self.pa)
+end
+
+function line: normalize_inv ()
+ return normalize_ (self.pb,self.pa)
+end
+-------------- transformations -------------
+function line: translation_pt ( pt )
+ return translation_ ( self.pb-self.pa,pt )
+end
+
+function line: translation_C ( obj )
+ local pa,pb,x,y
+ pa = obj.center
+ pb = obj.through
+ x,y = set_translation_ ( self.pb-self.pa,pa,pb )
+ return circle : new (x,y)
+end
+
+function line: translation_T ( obj )
+ local pa,pb,pc,x,y,z
+ pa = obj.pa
+ pb = obj.pb
+ pc = obj.pc
+ x,y,z = set_translation_ ( self.pb-self.pa,pa,pb,pc )
+ return triangle : new (x,y,z)
+end
+
+function line: translation_L ( obj )
+ local pa,pb,x,y
+ pa = obj.pa
+ pb = obj.pb
+ x,y = set_translation_ ( self.pb-self.pa,pa,pb )
+ return line : new (x,y)
+end
+
+function line: translation (...)
+ local obj,nb,t
+ local tp = table.pack(...)
+ obj = tp[1]
+ nb = tp.n
+ if nb == 1 then
+ if obj.type == "point" then
+ return translation_ ( self.pb-self.pa,obj )
+ elseif obj.type == "line" then
+ return self: translation_L (obj)
+ elseif obj.type == "triangle" then
+ return self: translation_T (obj)
+ else
+ return self: translation_C (obj)
+ end
+ else
+ t = {}
+ for i=1,tp.n do
+ table.insert(t , translation_ ( self.pb-self.pa , tp[i]))
+ end
+ return table.unpack ( t )
+ end
+end
+
+function line: set_translation ( ...)
+ return set_translation_ ( self.pb-self.pa,... )
+end
+
+function line: projection (...)
+ local obj,nb,t
+ local tp = table.pack(...)
+ obj = tp[1]
+ nb = tp.n
+ if nb == 1 then
+ return projection_ ( self.pa, self.pb, obj )
+ else
+ t = {}
+ for i=1,tp.n do
+ table.insert( t , projection_ (self.pa, self.pb, tp[i]) )
+ end
+ return table.unpack ( t )
+ end
+end
+
+function line: set_projection (...)
+ local tp = table.pack(...)
+ local i
+ local t = {}
+ for i=1,tp.n do
+ table.insert( t , projection_ (self.pa,self.pb , tp[i]) )
+ end
+ return table.unpack ( t )
+end
+
+function line: symmetry_axial_L ( obj )
+ local pa,pb,x,y
+ pa = obj.pa
+ pb = obj.pb
+ x,y = self:set_reflection ( pa,pb )
+ return line : new (x,y)
+end
+function line: symmetry_axial_T ( obj )
+ local pa,pb,pc,x,y,z
+ pa = obj.pa
+ pb = obj.pb
+ pc = obj.pc
+ x,y,z = self:set_reflection ( pa,pb,pc )
+ return triangle : new (x,y,z)
+end
+
+function line: symmetry_axial_C ( obj )
+ local pa,pb,x,y
+ pa = obj.center
+ pb = obj.through
+ x,y = self:set_reflection ( pa,pb )
+ return circle : new (x,y)
+end
+
+function line: reflection (...)
+ local obj,nb,t
+ local tp = table.pack(...)
+ obj = tp[1]
+ nb = tp.n
+ if nb == 1 then
+ if obj.type == "point" then
+ return symmetry_axial_ ( self.pa,self.pb,obj )
+ elseif obj.type == "line" then
+ return self: symmetry_axial_L (obj)
+ elseif obj.type == "triangle" then
+ return self: symmetry_axial_T (obj)
+ else
+ return self: symmetry_axial_C (obj)
+ end
+ else
+ t = {}
+ for i=1,tp.n do
+ table.insert( t , symmetry_axial_ ( self.pa,self.pb , tp[i]) )
+ end
+ return table.unpack ( t )
+ end
+end
+
+function line: set_reflection (...)
+ return set_symmetry_axial_ ( self.pb,self.pa,... )
+end
+
+-------------------
+-- Result -> line
+-------------------
+function line: ll_from ( pt )
+ return line : new (pt,pt+self.pb-self.pa)
+end
+
+function line: ortho_from ( pt )
+ return line : new (pt,pt+(self.pb-self.pa)*point(0,1))
+end
+
+function line: mediator ()
+ local m
+ m = midpoint_ (self.pa,self.pb)
+ return line : new (m,rotation_ (m,math.pi/2,self.pb))
+end
+-------------------
+-- Result -> circle
+-------------------
+function line: circle ()
+ return circle : new (self.pa,self.pb)
+end
+
+function line: circle_swap ()
+ return circle : new (self.pb,self.pa)
+end
+
+----------------------
+-- Result -> triangle
+----------------------
+function line: equilateral (swap)
+ if swap == nil then
+ swap = false
+ end
+ if swap then
+ return triangle : new (self.pa,self.pb,rotation_ (self.pa,-math.pi/3,self.pb))
+ else
+ return triangle : new (self.pa,self.pb,rotation_ (self.pa,math.pi/3,self.pb))
+
+end
+end
+
+
+function line: isosceles (phi)
+ local pta,ptb
+ pta = rotation_ (self.pa,phi,self.pb)
+ ptb = rotation_ (self.pb,-phi,self.pa)
+ return triangle : new (self.pa,self.pb, intersection_ll_ (self.pa,pta,self.pb,ptb ))
+
+end
+
+function line: gold ()
+ local pt
+ pt = rotation_ (self.pa,math.pi/2,self.pb)
+ return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzinvphi)
+end
+
+function line: euclide ()
+ return triangle : new (self.pa,self.pb, rotation_ (self.pa,math.pi/5,self.pb))
+ end
+
+function line: golden ()
+ local pt
+ pt = rotation_ (self.pa,2*math.pi/5,self.pb)
+ return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzphi)
+end
+------------------------------
+-- Result -> couple of points
+------------------------------
+function line: square ()
+ return square : side (self.pa,self.pb)
+end
+
+return line \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_lines.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_lines.lua
deleted file mode 100644
index 11d8f49d41..0000000000
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_lines.lua
+++ /dev/null
@@ -1,202 +0,0 @@
--- tkz_elements_lines.lua
--- date 2023/11/10
--- version 1.20b
--- Copyright 2023 Alain Matthes
--- This work may be distributed and/or modified under the
--- conditions of the LaTeX Project Public License, either version 1.3
--- of this license or (at your option) any later version.
--- The latest version of this license is in
--- http://www.latex-project.org/lppl.txt
--- and version 1.3 or later is part of all distributions of LaTeX
--- version 2005/12/01 or later.
--- This work has the LPPL maintenance status “maintained”.
--- The Current Maintainer of this work is Alain Matthes.
-
--- -------------------------------------------------------------------------
--- Lines
--- -------------------------------------------------------------------------
-line = {}
-function line: new(za, zb)
- local type = 'line'
- local mid = (za+zb)/2
- local north_pa = rotation_ (za,math.pi/2,zb)
- local south_pa = rotation_ (za,-math.pi/2,zb)
- local north_pb = rotation_ (zb,-math.pi/2,za)
- local south_pb = rotation_ (zb,math.pi/2,za)
- local west = rotation_ (za,math.pi/2,north_pa)
- local east = rotation_ (zb,math.pi/2,south_pb)
- local slope = point.arg(zb-za)
- local length = point.mod(zb-za)
- local new_line = {pa = za, pb = zb,
- north_pa = north_pa,south_pa = south_pa,west = west,east = east,
- north_pb = north_pb,south_pb = south_pb,
- slope = slope,mid = mid,type = type,length = length}
- setmetatable(new_line, {__index = line})
- return new_line
-end
-
--------------------
--- Result -> real
--------------------
-function line: distance (pt)
- return point.mod(projection(self,pt)-pt)
-end
-
-function line: slope ()
- return slope_(self.pa,self.pb)
-end
--------------------
--- Result -> boolean
--------------------
-function line: in_out (pt)
- local sc,epsilon
- epsilon = 10^(-12)
- sc = math.abs ((pt-self.pa)^(pt-self.pb))
- if sc <= epsilon
- then
- return true
- else
- return false
- end
-end
-
--------------------
--- Result -> point
--------------------
-function line: translation ( pt )
- return translation_ ( self.pb-self.pa,pt )
-end
-
-function line: set_translation ( ...)
- return set_translation_ ( self.pb-self.pa,... )
-end
-
-function line: projection ( pt )
- return projection_ ( self.pa,self.pb,pt )
-end
-
-function line: set_projection (...)
- local tp = table.pack(...)
- local i
- local t = {}
- for i=1,tp.n do
- table.insert( t , projection_ (self.pa,self.pb , tp[i]) )
- end
- return table.unpack ( t )
-end
-
-function line: symmetry_axial ( pt )
- return symmetry_axial_ ( self.pa,self.pb,pt )
-end
-
-function line: set_symmetry_axial (...)
- local tp = table.pack(...)
- local i
- local t = {}
- for i=1,tp.n do
- table.insert( t , symmetry_axial_ (self.pa,self.pb , tp[i]) )
- end
- return table.unpack ( t )
-end
-
-
-function line: barycenter (ka,kb)
- return barycenter_({self.pa,ka},{self.pb,kb})
-end
-
-function line: point (t) -- t=o A t=1 B t = AM / AB
- return barycenter_({self.pa,1-t},{self.pb,(t)})
-end
-
-function line: midpoint ()
- return (self.pa+self.pb)/2
-end
-
-function line: harmonic_int (pt)
- return div_harmonic_int_(self.pa,self.pb,pt)
-end
-
-function line: harmonic_ext (pt)
- return div_harmonic_ext_(self.pa,self.pb,pt)
-end
-
-function line: harmonic_both (k)
- return div_harmonic_both_(self.pa,self.pb,k)
-end
-
-function line: gold_ratio()
- return self.pa + (self.pb-self.pa)*tkzinvphi
-end
-
-function line: normalize ()
- return self.pa+(self.pb-self.pa)/point.mod(self.pb-self.pa)
-end
-
-function line: normalize_inv ()
- return normalize_ (self.pb,self.pa)
-end
--------------------
--- Result -> line
--------------------
-function line: ll_from ( pt )
- return line : new (pt,pt+self.pb-self.pa)
-end
-
-function line: ortho_from ( pt )
- return line : new (pt,pt+(self.pb-self.pa)*point(0,1))
-end
-
-function line: mediator ()
- local m
- m = midpoint_ (self.pa,self.pb)
- return line : new (m,rotation_ (m,math.pi/2,self.pb))
-end
--------------------
--- Result -> circle
--------------------
-function line: circle ()
- return circle : new (self.pa,self.pb)
-end
-
-function line: circle_swap ()
- return circle : new (self.pb,self.pa)
-end
-
-----------------------
--- Result -> triangle
-----------------------
-function line: equilateral ()
- return triangle : new (self.pa,self.pb,rotation_ (self.pa,math.pi/3,self.pb))
-end
-
-function line: isosceles (phi)
- local pta,ptb
- pta = rotation_ (self.pa,phi,self.pb)
- ptb = rotation_ (self.pb,-phi,self.pa)
- return triangle : new (self.pa,self.pb, intersection_ll_ (self.pa,pta,self.pb,ptb ))
-
-end
-
-function line: gold ()
- local pt
- pt = rotation_ (self.pa,math.pi/2,self.pb)
- return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzinvphi)
-end
-
-function line: euclide ()
- return triangle : new (self.pa,self.pb, rotation_ (self.pa,math.pi/5,self.pb))
- end
-
-function line: golden ()
- local pt
- pt = rotation_ (self.pa,2*math.pi/5,self.pb)
- return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzphi)
-end
-------------------------------
--- Result -> couple of points
-------------------------------
-function line: square ()
- return rotation_ (self.pb,-math.pi/2,self.pa), rotation_ (self.pa,math.pi/2,self.pb)
-end
-
-return line \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
index 10b96d1430..4efa5b6169 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
@@ -1,6 +1,6 @@
-- tkz_elements-main.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -12,23 +12,31 @@
-- This work has the LPPL maintenance status “maintained”.
-- The Current Maintainer of this work is Alain Matthes.
- z = {}
- L = {}
- C = {}
- T = {}
- V = {}
- E = {}
- Q = {}
- scale = 1
+ z = {}
+ C = {}
+ E = {}
+ L = {}
+ M = {}
+ P = {}
+ Q = {}
+ R = {}
+ RP = {}
+ S = {}
+ T = {}
+ V = {}
+ -- loads module
require "tkz_elements_point.lua"
-
-require "tkz_elements_points.lua"
-require "tkz_elements_lines.lua"
-require "tkz_elements_circles.lua"
-require "tkz_elements_triangles.lua"
-require "tkz_elements_vectors.lua"
-require "tkz_elements_ellipses.lua"
+require "tkz_elements_line.lua"
+require "tkz_elements_circle.lua"
+require "tkz_elements_triangle.lua"
+require "tkz_elements_vector.lua"
+require "tkz_elements_ellipse.lua"
+require "tkz_elements_regular.lua"
+require "tkz_elements_parallelogram.lua"
+require "tkz_elements_quadrilateral.lua"
+require "tkz_elements_rectangle.lua"
+require "tkz_elements_square.lua"
require "tkz_elements_functions_maths.lua"
require "tkz_elements_functions_intersections.lua"
@@ -36,14 +44,5 @@ require "tkz_elements_functions_points.lua"
require "tkz_elements_functions_lines.lua"
require "tkz_elements_functions_circles.lua"
require "tkz_elements_functions_triangles.lua"
-
-function get_points (obj)
-if obj.type == 'line' then return obj.pa,obj.pb
- elseif
- obj.type == 'triangle' then return obj.pa,obj.pb,obj.pc
- elseif
- obj.type == 'circle' then return obj.center,obj.through
- elseif
- obj.type == 'ellipse' then return obj.pc,obj.pa,obj.pb
-end
-end \ No newline at end of file
+require "tkz_elements_functions_regular.lua"
+require "tkz_elements_misc.lua" \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
new file mode 100644
index 0000000000..5667aba67f
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
@@ -0,0 +1,48 @@
+-- tkz_elements_functions_maths.lua
+-- date 23/12/03
+-- version 1.40c
+-- Copyright 2023 Alain Matthes
+-- This work may be distributed and/or modified under the
+-- conditions of the LaTeX Project Public License, either version 1.3
+-- of this license or (at your option) any later version.
+-- The latest version of this license is in
+-- http://www.latex-project.org/lppl.txt
+-- and version 1.3 or later is part of all distributions of LaTeX
+-- version 2005/12/01 or later.
+-- This work has the LPPL maintenance status “maintained”.
+-- The Current Maintainer of this work is Alain Matthes.
+-- ----------------------------------------------------------------
+--
+-- ----------------------------------------------------------------
+function get_points (obj)
+if obj.type == 'line' then return obj.pa,obj.pb
+ elseif
+ obj.type == 'triangle' then return obj.pa,obj.pb,obj.pc
+ elseif
+ obj.type == 'circle' then return obj.center,obj.through
+ elseif
+ obj.type == 'ellipse' then return obj.pc,obj.pa,obj.pb
+ elseif
+ obj.type == 'square' or obj.type == 'rectangle' or obj.type == 'quadrilateral' or obj.type == 'parallelogram'
+ then return obj.pa,obj.pb,obj.pc,obj.pd
+end
+end
+
+function set_lua_to_tex (t)
+ for k,v in pairs(t) do
+ token.set_macro(v,_ENV[v],'global')
+ end
+end
+
+function radical_center (C1,C2,C3)
+ local t1,t2,t3,t4
+ t1,t2 = radical_axis_ (C3.center,C3.through,C1.center,C1.through)
+ t3,t4 = radical_axis_ (C3.center,C3.through,C2.center,C2.through)
+return intersection_ll_ (t1,t2,t3,t4)
+end
+
+function radical_circle (C1,C2,C3)
+ local rc
+ rc = radical_center (C1,C2,C3)
+ return C1 : orthogonal_from (rc)
+end
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
new file mode 100644
index 0000000000..330fd53f01
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
@@ -0,0 +1,56 @@
+-- tkz_elements_parallelogram.lua
+-- date 23/12/03
+-- version 1.40c
+-- Copyright 2023 Alain Matthes
+-- This work may be distributed and/or modified under the
+-- conditions of the LaTeX Project Public License, either version 1.3
+-- of this license or (at your option) any later version.
+-- The latest version of this license is in
+-- http://www.latex-project.org/lppl.txt
+-- and version 1.3 or later is part of all distributions of LaTeX
+-- version 2005/12/01 or later.
+-- This work has the LPPL maintenance status “maintained”.
+-- The Current Maintainer of this work is Alain Matthes.
+---------------------------------------------------------------------------
+-- Parallelogram
+---------------------------------------------------------------------------
+
+parallelogram = {}
+function parallelogram: new (za, zb, zc,zd)
+ local d,epsilon
+ epsilon = 10^(-8)
+ local zi = midpoint_ (za,zc)
+ local zj = midpoint_ (zb,zd)
+ if point.abs (zj-zi) < epsilon then else error ("it's not a parallelogram")
+ end
+ local type = 'parallelogram'
+ local i = midpoint_ (za,zc)
+ local ab = line : new (za,zb)
+ local bc = line : new (zb,zc)
+ local cd = line : new (zc,zd)
+ local da = line : new (zd,za)
+ local ac = line : new (za,zc)
+ local bd = line : new (zb,zd)
+ local o = { pa = za,
+ pb = zb,
+ pc = zc,
+ pd = zd,
+ ab = ab,
+ ac = ac,
+ bc = bc,
+ da = da,
+ cd = cd,
+ bd = bd,
+ i = i,
+ type = type }
+ setmetatable(o, self)
+ self.__index = self
+ return o
+end
+
+function parallelogram : fourth (za,zb,zc)
+ local zd = zc + (za-zb)
+ return parallelogram : new (za, zb, zc,zd)
+end
+
+return parallelogram \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
index 5d459e3028..32e549a749 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
@@ -1,6 +1,6 @@
-- tkz_elements_point.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -17,15 +17,15 @@ require 'tkz_elements_class'
point = class(function(p,re,im)
if type(re) == 'number' then
- p.re = re
- p.im = im
- else
- p.re = re.re
- p.im = re.im
+ p.re = re
+ p.im = im
+ else
+ p.re = re.re
+ p.im = re.im
end
- p.type = 'point'
+ p.type = 'point'
p.argument = math.atan(p.im, p.re)
- p.modulus = math.sqrt(p.re*p.re + p.im*p.im)
+ p.modulus = math.sqrt(p.re * p.re + p.im * p.im)
end)
local sqrt = math.sqrt
@@ -34,8 +34,8 @@ local sin = math.sin
local exp = math.exp
local atan = math.atan
local min = math.min
-local max = math.max
-local abs = math.abs
+local max = math.max
+local abs = math.abs
local function topoint (z1)
if (type(z1) == "number") then return point(z1,0) else return z1 end
@@ -78,7 +78,7 @@ function point.__concat(z1,z2)
return z.re
end
--- determinant is '^' (a+ib) (a-ib) (c+id) = ac+bd + i(ad - bc)
+-- determinant is '^' (a-ib) (c+id) = ac+bd + i(ad - bc)
function point.__pow(z1,z2)
local z
z = point.conj(z1) * z2
@@ -174,8 +174,141 @@ function point.get(z)
return z.re, z.im
end
-function point.sqrt(z)
- local y = sqrt((point.mod(z)-z.re)/2)
- local x = z.im/(2*y)
+function point: sqrt()
+ local y = sqrt((point.mod(self)-self.re)/2)
+ local x = self.im/(2*y)
return point(x,y)
+end
+
+-- methods ---
+
+function point: new ( a,b )
+ return scale * point (a,b )
+end
+
+function point: polar ( radius, phi )
+ return scale * polar_ ( radius, phi )
+end
+
+function point: polar_deg ( radius, phi )
+ return scale * polar_ ( radius, phi * math.pi/180 )
+end
+
+function point: north(d)
+ local d = d or 1
+ return self+ polar_ ( d * scale, math.pi/2 )
+end
+
+function point: south(d)
+ local d = d or 1
+ return self + polar_ ( d * scale, 3 * math.pi/2 )
+ end
+
+function point: east(d)
+ local d = d or 1
+ return self+ polar_( d * scale, 0 )
+end
+
+function point: west(d)
+ local d = d or 1
+ return self + polar_ ( d * scale, math.pi )
+ end
+-- ----------------------------------------------------------------
+-- transformations
+-- ----------------------------------------------------------------
+-- function point: symmetry(pt)
+-- return symmetry_ (self ,pt)
+-- end
+
+function point: symmetry (...)
+ local obj,nb,t
+ local tp = table.pack(...)
+ obj = tp[1]
+ nb = tp.n
+ if nb == 1 then
+ if obj.type == "point" then
+ return symmetry_ (self,obj)
+ elseif obj.type == "line" then
+ return line: new (set_symmetry_ (self,obj.pa,obj.pb))
+ elseif obj.type == "circle" then
+ return circle: new (set_symmetry_ (self,obj.center,obj.through))
+ else
+ return triangle: new (set_symmetry (self,obj.pa,obj.pb,obj.pc))
+ end
+ else
+ local t = {}
+ for i=1,tp.n do
+ table.insert( t , symmetry_ (self , tp[i]) )
+ end
+ return table.unpack ( t )
+ end
+end
+
+function point: set_symmetry (...)
+ return set_symmetry_ ( self,... )
+end
+
+function point: rotation_pt(angle , pt)
+ return rotation_(self,angle,pt)
+end
+
+function point:set_rotation (angle,...)
+ return set_rotation_ ( self,angle,... )
+end
+
+function point : rotation (angle,...)
+ local obj,nb,t
+ local tp = table.pack(...)
+ obj = tp[1]
+ nb = tp.n
+ if nb == 1 then
+ if obj.type == "point" then
+ return rotation_ (self,angle,obj )
+ elseif obj.type == "line" then
+ return line : new (set_rotation_ (self, angle,obj.pa,obj.pb ))
+ elseif obj.type == "triangle" then
+ return triangle: new (set_rotation_ (self, angle,obj.pa,obj.pb,obj.pc))
+ elseif obj.type == "circle" then
+return circle : new (set_rotation_ (self,angle,obj.center,obj.through))
+ else
+return square: new (set_rotation_(self,angle,obj.pa,obj.pb,obj.pc,obj.pd))
+ end
+ else
+ t = {}
+ for i=1,tp.n do
+ table.insert( t , rotation_ ( self,angle,tp[i]))
+ end
+ return table.unpack ( t )
+ end
+end
+
+function point : homothety (coeff,...)
+local obj,nb,t
+local tp = table.pack(...)
+obj = tp[1]
+nb = tp.n
+ if nb == 1 then
+ if obj.type == "point" then
+ return homothety_ (self,coeff,obj )
+ elseif obj.type == "line" then
+ return line : new (set_homothety_ (self, coeff,obj.pa,obj.pb ))
+ elseif obj.type == "triangle" then
+ return triangle: new (set_homothety_(self,coeff,obj.pa,obj.pb,obj.pc))
+ elseif obj.type == "circle" then
+ return circle: new (set_homothety_(self,coeff,obj.center,obj.through))
+ else
+return square: new (set_homothety_(self,coeff,obj.pa,obj.pb))
+ end
+ else
+ t = {}
+ for i=1,tp.n do
+ table.insert( t , homothety_ ( self,coeff,tp[i]))
+ end
+ return table.unpack ( t )
+ end
+end
+
+function point: normalize()
+ local d = point.abs(self)
+ return point(self.re/d,self.im/d)
end \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_points.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_points.lua
deleted file mode 100644
index 74ad16a165..0000000000
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_points.lua
+++ /dev/null
@@ -1,98 +0,0 @@
--- tkz_elements_points.lua
--- date 2023/11/10
--- version 1.20b
--- Copyright 2023 Alain Matthes
--- This work may be distributed and/or modified under the
--- conditions of the LaTeX Project Public License, either version 1.3
--- of this license or (at your option) any later version.
--- The latest version of this license is in
--- http://www.latex-project.org/lppl.txt
--- and version 1.3 or later is part of all distributions of LaTeX
--- version 2005/12/01 or later.
--- This work has the LPPL maintenance status “maintained”.
--- The Current Maintainer of this work is Alain Matthes.
-
--- ----------------------------------------------------------------
--- points create
--- ----------------------------------------------------------------
-
-function point: new ( a,b )
- return scale * point (a,b )
-end
-
-function point: polar ( radius, phi )
- return scale * polar_ ( radius, phi )
-end
-
-function point: polar_deg ( radius, phi )
- return scale * polar_ ( radius, phi * math.pi/180 )
-end
-
-function point: north(d)
- local d = d or 1
- return self+ polar_ ( d, math.pi/2 )
-end
-
-function point: south(d)
- local d = d or 1
- return self + polar_ ( d, -math.pi/2 )
- end
-
-function point: east(d)
- local d = d or 1
- return self+ point( d, 0 )
-end
-
-function point: west(d)
- local d = d or 1
- return self + point ( -d, 0 )
- end
--- ----------------------------------------------------------------
--- transformations
--- ----------------------------------------------------------------
-function point: symmetry(pt)
- return symmetry_ (self ,pt)
-end
-
-function point: set_symmetry (...)
- local tp = table.pack(...)
- local i
- local t = {}
- for i=1,tp.n do
- table.insert( t , symmetry_ (self , tp[i]) )
- end
- return table.unpack ( t )
-end
-
-function point: rotation(angle , pt)
- return rotation_(self,angle,pt)
-end
-
-function point:set_rotation (angle,...)
- local tp = table.pack(...)
- local i
- local t = {}
- for i=1,tp.n do
- table.insert( t , rotation_ (self,angle , tp[i]) )
- end
- return table.unpack ( t )
-end
-
-function point: homothety(t,pt)
- return homothety_(self,t,pt)
-end
-
-function point: set_homothety (coeff,...)
- local tp = table.pack(...)
- local i
- local t = {}
- for i=1,tp.n do
- table.insert( t , homothety_ (self, coeff , tp[i]) )
- end
- return table.unpack ( t )
-end
-
-function point: normalize()
- local d = point.abs(self)
- return point(self.re/d,self.im/d)
-end
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
new file mode 100644
index 0000000000..0731732310
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
@@ -0,0 +1,62 @@
+-- tkz_elements_quadrilateral.lua
+-- date 23/12/03
+-- version 1.40c
+-- Copyright 2023 Alain Matthes
+-- This work may be distributed and/or modified under the
+-- conditions of the LaTeX Project Public License, either version 1.3
+-- of this license or (at your option) any later version.
+-- The latest version of this license is in
+-- http://www.latex-project.org/lppl.txt
+-- and version 1.3 or later is part of all distributions of LaTeX
+-- version 2005/12/01 or later.
+-- This work has the LPPL maintenance status “maintained”.
+-- The Current Maintainer of this work is Alain Matthes.
+
+quadrilateral = {}
+function quadrilateral: new (za, zb, zc, zd)
+ local type = 'quadrilateral'
+ local a = point.abs ( zb - za )
+ local b = point.abs ( zc - zb )
+ local c = point.abs ( zd - zc )
+ local d = point.abs ( za - zd )
+ local ab = line : new (za,zb)
+ local bc = line : new (zb,zc)
+ local cd = line : new (zc,zd)
+ local da = line : new (zd,za)
+ local ac = line : new (za,zc)
+ local bd = line : new (zb,zd)
+ local i = intersection_ll_ (za,zc,zb,zd)
+ local g = barycenter_ ( {za,1} , {zb,1} , {zc,1} ,{ zd ,1 } )
+ local o = { pa = za,
+ pb = zb,
+ pc = zc,
+ pd = zd,
+ a = a,
+ b = b,
+ c = c,
+ d = d,
+ ab = ab,
+ bc = bc,
+ cd = cd,
+ da = da,
+ ac = ac,
+ bd = bd,
+ i = i,
+ g = g,
+ type = type }
+ setmetatable(o, self)
+ self.__index = self
+ return o
+end
+-----------------------
+function quadrilateral : cyclic ()
+ local d,epsilon
+ epsilon = 10^(-8)
+ local alpha = point.arg ((self.pd-self.pa) / (self.pb-self.pa))
+ local beta = point.arg ((self.pb-self.pc) / (self.pd-self.pc))
+ if math.abs (alpha+beta-math.pi) < epsilon then return true
+ else return false
+ end
+end
+
+return quadrilateral \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
new file mode 100644
index 0000000000..142ddbd8b2
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
@@ -0,0 +1,102 @@
+-- tkz_elements-rectangle.lua
+-- date 23/12/03
+-- version 1.40c
+-- Copyright 2023 Alain Matthes
+-- This work may be distributed and/or modified under the
+-- conditions of the LaTeX Project Public License, either version 1.3
+-- of this license or (at your option) any later version.
+-- The latest version of this license is in
+-- http://www.latex-project.org/lppl.txt
+-- and version 1.3 or later is part of all distributions of LaTeX
+-- version 2005/12/01 or later.
+-- This work has the LPPL maintenance status “maintained”.
+-- The Current Maintainer of this work is Alain Matthes.
+---------------------------------------------------------------------------
+-- rectangle
+---------------------------------------------------------------------------
+
+rectangle = {}
+function rectangle: new (za, zb,zc,zd)
+ local d,epsilon
+ epsilon = 10^(-8)
+ local zi = midpoint_ (za,zc)
+ local zj = midpoint_ (zb,zd)
+ if point.abs (zj-zi) < epsilon then else error ("it's not a rectangle")
+ end
+ if math.abs(point.abs (zc-za)-point.abs (zd-zb)) < epsilon then else error ("it's not a rectangle")
+ end
+ local type = 'rectangle'
+ local center = midpoint_ (za,zc)
+ local exradius = point.abs (center-za)
+ local ab = line : new (za,zb)
+ local bc = line : new (zb,zc)
+ local cd = line : new (zc,zd)
+ local da = line : new (zd,za)
+ local ac = line : new (za,zc)
+ local bd = line : new (zb,zd)
+ local length = point.mod (zb-za)
+ local width = point.mod (zd-za)
+ local diagonal = point.abs (zc-za)
+ local o = { pa = za,
+ pb = zb,
+ pc = zc,
+ pd = zd,
+ ab = ab,
+ ac = ac,
+ bc = bc,
+ da = da,
+ cd = cd,
+ bd = bd,
+ diagonal = diagonal,
+ exradius = exradius,
+ center = center,
+ length = length,
+ width = width,
+ type = type }
+ setmetatable(o, self)
+ self.__index = self
+ return o
+end
+
+function rectangle : angle (zi,za,an)
+ local zc = symmetry_ (zi,za)
+ local zb = rotation_(zi,-an,zc)
+ local zd = symmetry_ (zi,zb)
+ return rectangle : new (za,zb,zc,zd)
+end
+
+function rectangle : gold (za,zb)
+ a = point.arg (zb-za)
+ local d = point.abs(zb-za)/tkzphi
+ local zc = zb : north (d/scale)
+ zc = rotation_ (zb,a,zc)
+ local zd = za : north (d/scale)
+ zd = rotation_ (za,a,zd)
+ return rectangle : new (za,zb,zc,zd)
+end
+
+function rectangle : diagonal (za,zc)
+ local zb = point (zc.re,za.im)
+ local zd = point (za.re,zc.im)
+ return rectangle : new (za,zb,zc,zd)
+end
+
+function rectangle : side (za,zb,d)
+ a = point.arg (zb-za)
+ local zc = zb : north (d/scale)
+ zc = rotation_ (zb,a,zc)
+ local zd = za : north (d/scale)
+ zd = rotation_ (za,a,zd)
+ return rectangle : new (za,zb,zc,zd)
+end
+
+-------------------
+function rectangle : get_lengths ()
+ local a = self.pa
+ local b = self.pb
+ local c = self.pc
+ local d = self.pd
+ return point.mod(b-a),point.mod(c-b),point.mod(d-c),point.mod(a-d)
+end
+
+return rectangle
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
new file mode 100644
index 0000000000..4415b1c66f
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
@@ -0,0 +1,72 @@
+-- tkz_elements_regular.lua
+-- date 23/12/03
+-- version 1.40c
+-- Copyright 2023 Alain Matthes
+-- This work may be distributed and/or modified under the
+-- conditions of the LaTeX Project Public License, either version 1.3
+-- of this license or (at your option) any later version.
+-- The latest version of this license is in
+-- http://www.latex-project.org/lppl.txt
+-- and version 1.3 or later is part of all distributions of LaTeX
+-- version 2005/12/01 or later.
+-- This work has the LPPL maintenance status “maintained”.
+-- The Current Maintainer of this work is Alain Matthes.
+
+regular_polygon = {}
+function regular_polygon: new (za, zb ,nb)
+ local type = 'regular_polygon'
+ local table = regular_ (za , zb , nb)
+ local center = za
+ local through = zb
+ local angle = 2 * math.pi/nb
+ local exradius = point.abs (zb-za)
+ local circle = circle : new (za,zb)
+ local inradius = exradius * math.cos(math.pi/nb)
+ local side = exradius * math.sin(math.pi/nb)
+ local next = table[2]
+ local first = table[1]
+ local proj = projection_ (first,next,za)
+ local o = { type = type,
+ center = center,
+ through = through,
+ exradius = exradius,
+ inradius = inradius,
+ table = table,
+ circle = circle,
+ nb = nb,
+ angle = angle,
+ side = side,
+ proj = proj }
+ setmetatable(o, self)
+ self.__index = self
+ return o
+end
+-----------------------
+-- points --
+-----------------------
+-------------------
+-- Result -> line
+-------------------
+-----------------------
+-- circles --
+-----------------------
+function regular_polygon : incircle ()
+ local next,first
+ next = self.table[2]
+ first = self.table[1]
+ return circle : new ( self.center , projection_ (first,next,self.center) )
+end
+-------------------
+-- Result -> triangle
+-------------------
+
+-------------------
+-- Result -> miscellaneous
+-------------------
+function regular_polygon : name (nm)
+ for K,V in ipairs(self.table) do
+ z[nm..K] = V
+ end
+end
+
+return regular_polygon \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
new file mode 100644
index 0000000000..4dd007cc77
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
@@ -0,0 +1,81 @@
+-- tkz_elements-square.lua
+-- date 23/12/03
+-- version 1.40c
+-- Copyright 2023 Alain Matthes
+-- This work may be distributed and/or modified under the
+-- conditions of the LaTeX Project Public License, either version 1.3
+-- of this license or (at your option) any later version.
+-- The latest version of this license is in
+-- http://www.latex-project.org/lppl.txt
+-- and version 1.3 or later is part of all distributions of LaTeX
+-- version 2005/12/01 or later.
+-- This work has the LPPL maintenance status “maintained”.
+-- The Current Maintainer of this work is Alain Matthes.
+---------------------------------------------------------------------------
+-- Squares
+---------------------------------------------------------------------------
+
+square = {}
+function square: new (za, zb,zc,zd)
+ local d,epsilon
+ epsilon = 10^(-8)
+ local zi = midpoint_ (za,zc)
+ local zj = midpoint_ (zb,zd)
+ if point.abs (zj-zi) < epsilon then else error ("it's not a square (center)")
+ end
+ if math.abs(point.abs (zc-za) - point.abs (zd-zb)) < epsilon then else error ("it's not a square (diagonal)")
+ end
+ if math.abs(point.abs (zb-za) - point.abs (zd-za)) < epsilon then else error ("it's not a square (side)")
+ end
+
+ local type = 'square'
+ local side = point.abs ( zb - za )
+ local pc = rotation_ (zb,-math.pi/2,za)
+ local pd = rotation_ (za,math.pi/2,zb)
+ local center = midpoint_ (za,zc)
+ local exradius = point.abs (center-za)
+ local inradius = exradius * math.cos(math.pi/4)
+ local diagonal = math.sqrt(2) * side
+ local proj = projection_ (za,zb,center)
+ local ab = line : new (za,zb)
+ local bc = line : new (zb,zc)
+ local cd = line : new (zc,zd)
+ local da = line : new (zd,za)
+ local bd = line : new (zb,zd)
+ local ac = line : new (za,zc)
+ local o = { pa = za,
+ pb = zb,
+ pc = zc,
+ pd = zd,
+ side = side,
+ center = center,
+ exradius = exradius,
+ inradius = inradius,
+ diagonal = diagonal,
+ proj = proj,
+ ab = ab,
+ ac = ac,
+ bc = bc,
+ da = da,
+ cd = cd,
+ bd = bd,
+ type = type }
+ setmetatable(o, self)
+ self.__index = self
+ return o
+end
+
+function square : rotation (zi,za)
+ local zb = rotation_ (zi,math.pi/2,za)
+ local zc = rotation_ (zi,math.pi/2,zb)
+ local zd = rotation_ (zi,math.pi/2,zc)
+ return square : new (za,zb,zc,zd)
+end
+
+function square : side (za,zb)
+ local zc = rotation_ (zb,-math.pi/2,za)
+ local zd = rotation_ (za,math.pi/2,zb)
+ return square : new (za,zb,zc,zd)
+end
+
+return square \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
index 6ea35c5b6e..6ef6be0a9a 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
@@ -1,6 +1,6 @@
-- tkz_elements_triangles.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -14,28 +14,44 @@
triangle = {}
function triangle: new (za, zb ,zc)
- local type = 'triangle'
- local circumcenter = circum_center_ (za , zb , zc)
- local centroid = barycenter_ ( {za,1} , {zb,1} , {zc,1} )
- local incenter = in_center_ (za , zb , zc)
- local orthocenter = ortho_center_ (za , zb , zc)
- local eulercenter = euler_center_ (za , zb , zc)
- local spiekercenter = spieker_center_ (za , zb , zc)
- local c = point.abs(zb-za)
- local a = point.abs(zc-zb)
- local b = point.abs(za-zc)
- local alpha = point.arg ((zc-za) / (zb-za))
- local beta = point.arg ((za-zb) / (zc-zb))
- local gamma = point.arg ((zb-zc) / (za-zc))
- local ab =line : new (za,zb)
- local ac =line : new (za,zc)
- local bc =line : new (zb,zc)
- local new_triangle = {pa = za, pb = zb, pc = zc, type = type,
- circumcenter=circumcenter,centroid=centroid,incenter=incenter,
- eulercenter=eulercenter, orthocenter=orthocenter,spiekercenter=spiekercenter,
- a=a,b=b,c=c,ab=ab,ac=ac,bc=bc,alpha=alpha,beta=beta,gamma=gamma}
- setmetatable(new_triangle, {__index = triangle})
- return new_triangle
+ local type = 'triangle'
+ local circumcenter = circum_center_ (za , zb , zc)
+ local centroid = barycenter_ ( {za,1} , {zb,1} , {zc,1} )
+ local incenter = in_center_ (za , zb , zc)
+ local orthocenter = ortho_center_ (za , zb , zc)
+ local eulercenter = euler_center_ (za , zb , zc)
+ local spiekercenter = spieker_center_ (za , zb , zc)
+ local c = point.abs(zb-za)
+ local a = point.abs(zc-zb)
+ local b = point.abs(za-zc)
+ local alpha = point.arg ((zc-za) / (zb-za))
+ local beta = point.arg ((za-zb) / (zc-zb))
+ local gamma = point.arg ((zb-zc) / (za-zc))
+ local ab = line : new (za,zb)
+ local ca = line : new (zc,za)
+ local bc = line : new (zb,zc)
+ local o = { pa = za,
+ pb = zb,
+ pc = zc,
+ type = type,
+ circumcenter = circumcenter,
+ centroid = centroid,
+ incenter = incenter,
+ eulercenter = eulercenter,
+ orthocenter = orthocenter,
+ spiekercenter = spiekercenter,
+ a = a,
+ b = b,
+ c = c,
+ ab = ab,
+ ca = ca,
+ bc = bc,
+ alpha = alpha,
+ beta = beta,
+ gamma = gamma}
+ setmetatable(o, self)
+ self.__index = self
+ return o
end
-----------------------
-- points --
@@ -99,10 +115,23 @@ function triangle: nine_points ()
midpoint_ ( H,self.pc )
end
+function triangle : point (t)
+ local t1,t2,p
+ p = (self.a + self.b + self.c)
+ t1 = self.a / p
+ t2 = (self.a + self.b) / p
+ if t<= t1 then
+ return self.ab : point (t/t1)
+ elseif t <= t2 then
+ return self.bc : point ((t*p-self.a)/self.b)
+ else
+ return self.ca : point ((t*p-self.c-self.b)/self.a)
+ end
+end
-------------------
-- Result -> line
-------------------
--- N,H,G,O -- check_equilateral (a,b,c)
+-- N,H,G,O -- check_equilateral_ (a,b,c)
function triangle: euler_line ()
return line : new (self.orthocenter,self.circumcenter)
end
@@ -210,7 +239,7 @@ function triangle: in_circle ()
return circle : new (o, projection_ (self.pb , self.pc,o) )
end
-function triangle: ex_circle(n) -- n =1 swap n=2 2 swap
+function triangle: ex_circle (n) -- n =1 swap n=2 2 swap
local a,b,c,o
a = self.pa
b = self.pb
@@ -364,4 +393,9 @@ function triangle: in_out (pt)
return in_out_ (self.pa,self.pb,self.pc,pt)
end
+function triangle: check_equilateral ()
+ return check_equilateral_ (self.pa,self.pb,self.pc)
+end
+
+
return triangle \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vectors.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
index 26ec57e695..96d6eee1fc 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vectors.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
@@ -1,6 +1,6 @@
-- tkz_elements_vectors.lua
--- date 2023/11/10
--- version 1.20b
+-- date 23/12/03
+-- version 1.40c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -15,16 +15,20 @@
-- ----------------------------------------------------------------------------
vector = {}
function vector: new(z1, z2)
- local type = 'vector'
- local norm = point.abs(z2-z1)
- local new_vector = {st = z1, ed = z2,norm = norm,type=type}
- setmetatable(new_vector, {__index = vector})
- return new_vector
+ local type = 'vector'
+ local norm = point.abs(z2-z1)
+ local o = {st = z1,
+ ed = z2,
+ norm = norm,
+ type = type }
+ setmetatable(o, self)
+ self.__index = self
+ return o
end
function vector: normalize ()
- local z = self.ed-self.st
- local d = point.abs(z)
+ local z = self.ed-self.st
+ local d = point.abs(z)
local nz = point(z.re/d,z.im/d)
return nz + self.st
end
diff --git a/macros/latex/contrib/iwhdp/Back_2015.pdf b/obsolete/macros/latex/contrib/iwhdp/Back_2015.pdf
index 1bd2c28fbe..1bd2c28fbe 100644
--- a/macros/latex/contrib/iwhdp/Back_2015.pdf
+++ b/obsolete/macros/latex/contrib/iwhdp/Back_2015.pdf
Binary files differ
diff --git a/macros/latex/contrib/iwhdp/Deckblatt_2015.pdf b/obsolete/macros/latex/contrib/iwhdp/Deckblatt_2015.pdf
index c357097459..c357097459 100644
--- a/macros/latex/contrib/iwhdp/Deckblatt_2015.pdf
+++ b/obsolete/macros/latex/contrib/iwhdp/Deckblatt_2015.pdf
Binary files differ
diff --git a/macros/latex/contrib/iwhdp/README b/obsolete/macros/latex/contrib/iwhdp/README
index c8964b33c3..c8964b33c3 100644
--- a/macros/latex/contrib/iwhdp/README
+++ b/obsolete/macros/latex/contrib/iwhdp/README
diff --git a/macros/latex/contrib/iwhdp/iwhdp.cls b/obsolete/macros/latex/contrib/iwhdp/iwhdp.cls
index 17e0540352..17e0540352 100644
--- a/macros/latex/contrib/iwhdp/iwhdp.cls
+++ b/obsolete/macros/latex/contrib/iwhdp/iwhdp.cls
diff --git a/macros/latex/contrib/iwhdp/iwhdp_Manual.bib b/obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.bib
index bca9800ea3..bca9800ea3 100644
--- a/macros/latex/contrib/iwhdp/iwhdp_Manual.bib
+++ b/obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.bib
diff --git a/macros/latex/contrib/iwhdp/iwhdp_Manual.pdf b/obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.pdf
index ff24b81eb2..ff24b81eb2 100644
--- a/macros/latex/contrib/iwhdp/iwhdp_Manual.pdf
+++ b/obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/iwhdp/iwhdp_Manual.tex b/obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.tex
index 49cfc9789c..49cfc9789c 100644
--- a/macros/latex/contrib/iwhdp/iwhdp_Manual.tex
+++ b/obsolete/macros/latex/contrib/iwhdp/iwhdp_Manual.tex
diff --git a/macros/latex/contrib/iwhdp/iwhdp_paper.bib b/obsolete/macros/latex/contrib/iwhdp/iwhdp_paper.bib
index 3c200d00bb..3c200d00bb 100644
--- a/macros/latex/contrib/iwhdp/iwhdp_paper.bib
+++ b/obsolete/macros/latex/contrib/iwhdp/iwhdp_paper.bib
diff --git a/macros/latex/contrib/iwhdp/iwhdp_paper.tex b/obsolete/macros/latex/contrib/iwhdp/iwhdp_paper.tex
index 5b881417c8..5b881417c8 100644
--- a/macros/latex/contrib/iwhdp/iwhdp_paper.tex
+++ b/obsolete/macros/latex/contrib/iwhdp/iwhdp_paper.tex
diff --git a/support/texlab/CHANGELOG.md b/support/texlab/CHANGELOG.md
index f36aed1950..a8bae12b05 100644
--- a/support/texlab/CHANGELOG.md
+++ b/support/texlab/CHANGELOG.md
@@ -5,6 +5,18 @@ 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.12.0] - 2023-12-03
+
+### Added
+
+- Infer `texlab.build.auxDirectory`, `texlab.build.logDirectory` and `texlab.build.pdfDirectory` from `latexmkrc` if available ([#907](https://github.com/latex-lsp/texlab/issues/907))
+
+### Fixed
+
+- Do not report `undefined reference` errors when using `\nocite{*}` ([#964](https://github.com/latex-lsp/texlab/issues/964))
+- Fix potential crash when parsing build log files ([#973](https://github.com/latex-lsp/texlab/issues/973))
+- Set the final tab stop of the `\begin` snippet inside the environment ([#963](https://github.com/latex-lsp/texlab/issues/963))
+
## [5.11.0] - 2023-11-05
### Added
diff --git a/support/texlab/Cargo.lock b/support/texlab/Cargo.lock
index 1b4136224c..347193badd 100644
--- a/support/texlab/Cargo.lock
+++ b/support/texlab/Cargo.lock
@@ -24,19 +24,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
[[package]]
-name = "ansi_term"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
-dependencies = [
- "winapi",
-]
-
-[[package]]
name = "anstream"
-version = "0.5.0"
+version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
dependencies = [
"anstyle",
"anstyle-parse",
@@ -67,17 +58,17 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
name = "anstyle-wincon"
-version = "2.1.0"
+version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
dependencies = [
"anstyle",
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
@@ -87,15 +78,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
[[package]]
-name = "assert_unordered"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c74323b7881323eb351134e08ee5331594826789557afef8e309baf481b2264"
-dependencies = [
- "ansi_term",
-]
-
-[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -108,7 +90,8 @@ dependencies = [
"bibtex-utils",
"dirs",
"distro",
- "itertools 0.11.0",
+ "itertools 0.12.0",
+ "line-index",
"log",
"notify",
"once_cell",
@@ -128,13 +111,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1"
[[package]]
+name = "bibfmt"
+version = "0.0.0"
+dependencies = [
+ "expect-test",
+ "line-index",
+ "parser",
+ "rowan",
+ "syntax",
+]
+
+[[package]]
name = "bibtex-utils"
version = "0.0.0"
dependencies = [
"chrono",
"expect-test",
"human_name",
- "itertools 0.11.0",
+ "itertools 0.12.0",
"parser",
"rowan",
"rustc-hash",
@@ -155,19 +149,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]]
-name = "block-buffer"
-version = "0.10.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
name = "bstr"
-version = "1.6.2"
+version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a"
+checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
dependencies = [
"memchr",
"regex-automata",
@@ -244,7 +229,7 @@ dependencies = [
"bibtex-utils",
"expect-test",
"isocountry",
- "itertools 0.11.0",
+ "itertools 0.12.0",
"parser",
"rowan",
"rustc-hash",
@@ -256,9 +241,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.4.4"
+version = "4.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1d7b8d5ec32af0fadc644bf1fd509a688c2103b185644bb1e29d164e0703136"
+checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272"
dependencies = [
"clap_builder",
"clap_derive",
@@ -266,9 +251,9 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.4.4"
+version = "4.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5179bb514e4d7c2051749d8fcefa2ed6d06a9f4e6d69faf3805f5d80b8cf8d56"
+checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1"
dependencies = [
"anstream",
"anstyle",
@@ -278,9 +263,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.4.2"
+version = "4.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
dependencies = [
"heck",
"proc-macro2",
@@ -290,9 +275,9 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.5.1"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
[[package]]
name = "colorchoice"
@@ -310,7 +295,7 @@ dependencies = [
"crossbeam-channel",
"distro",
"expect-test",
- "itertools 0.11.0",
+ "itertools 0.12.0",
"libc",
"log",
"rowan",
@@ -331,8 +316,7 @@ dependencies = [
"distro",
"expect-test",
"fuzzy-matcher",
- "itertools 0.11.0",
- "log",
+ "line-index",
"rayon",
"rowan",
"rustc-hash",
@@ -346,7 +330,7 @@ name = "completion-data"
version = "0.0.0"
dependencies = [
"flate2",
- "itertools 0.11.0",
+ "itertools 0.12.0",
"once_cell",
"rustc-hash",
"serde",
@@ -354,33 +338,12 @@ dependencies = [
]
[[package]]
-name = "console"
-version = "0.15.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
-dependencies = [
- "encode_unicode",
- "lazy_static",
- "libc",
- "windows-sys 0.45.0",
-]
-
-[[package]]
name = "countme"
version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636"
[[package]]
-name = "cpufeatures"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
-dependencies = [
- "libc",
-]
-
-[[package]]
name = "crc32fast"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -455,7 +418,7 @@ dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
- "memoffset 0.9.0",
+ "memoffset",
"scopeguard",
]
@@ -469,21 +432,11 @@ dependencies = [
]
[[package]]
-name = "crypto-common"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
-dependencies = [
- "generic-array",
- "typenum",
-]
-
-[[package]]
name = "definition"
version = "0.0.0"
dependencies = [
"base-db",
- "itertools 0.11.0",
+ "itertools 0.12.0",
"rowan",
"rustc-hash",
"syntax",
@@ -495,7 +448,8 @@ name = "diagnostics"
version = "0.0.0"
dependencies = [
"base-db",
- "itertools 0.11.0",
+ "itertools 0.12.0",
+ "line-index",
"rowan",
"rustc-hash",
"syntax",
@@ -504,16 +458,6 @@ dependencies = [
]
[[package]]
-name = "digest"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
-dependencies = [
- "block-buffer",
- "crypto-common",
-]
-
-[[package]]
name = "dirs"
version = "5.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -531,7 +475,7 @@ dependencies = [
"libc",
"option-ext",
"redox_users",
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
@@ -555,12 +499,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
-name = "encode_unicode"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
-
-[[package]]
name = "encoding_rs"
version = "0.8.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -586,7 +524,7 @@ checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
dependencies = [
"errno-dragonfly",
"libc",
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
@@ -630,7 +568,7 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6584280525fb2059cba3db2c04abf947a1a29a45ddae89f3870f8281704fafc9"
dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
@@ -642,14 +580,14 @@ dependencies = [
"cfg-if",
"libc",
"redox_syscall 0.3.5",
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
name = "flate2"
-version = "1.0.27"
+version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
dependencies = [
"crc32fast",
"miniz_oxide",
@@ -674,9 +612,9 @@ dependencies = [
[[package]]
name = "form_urlencoded"
-version = "1.2.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
@@ -700,16 +638,6 @@ dependencies = [
]
[[package]]
-name = "generic-array"
-version = "0.14.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
-dependencies = [
- "typenum",
- "version_check",
-]
-
-[[package]]
name = "getrandom"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -721,19 +649,6 @@ dependencies = [
]
[[package]]
-name = "globset"
-version = "0.4.13"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
-dependencies = [
- "aho-corasick",
- "bstr",
- "fnv",
- "log",
- "regex",
-]
-
-[[package]]
name = "half"
version = "1.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -758,6 +673,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
+name = "highlights"
+version = "0.0.0"
+dependencies = [
+ "base-db",
+ "expect-test",
+ "rowan",
+ "test-utils",
+]
+
+[[package]]
name = "hover"
version = "0.0.0"
dependencies = [
@@ -792,9 +717,9 @@ dependencies = [
[[package]]
name = "idna"
-version = "0.3.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
dependencies = [
"unicode-bidi",
"unicode-normalization",
@@ -805,9 +730,9 @@ name = "inlay-hints"
version = "0.0.0"
dependencies = [
"base-db",
+ "expect-test",
"rowan",
"rustc-hash",
- "syntax",
"test-utils",
]
@@ -832,24 +757,6 @@ dependencies = [
]
[[package]]
-name = "insta"
-version = "1.32.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e02c584f4595792d09509a94cdb92a3cef7592b1eb2d9877ee6f527062d0ea"
-dependencies = [
- "console",
- "globset",
- "lazy_static",
- "linked-hash-map",
- "pest",
- "pest_derive",
- "serde",
- "similar",
- "walkdir",
- "yaml-rust",
-]
-
-[[package]]
name = "is-terminal"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -857,7 +764,7 @@ checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
dependencies = [
"hermit-abi",
"rustix",
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
@@ -881,9 +788,9 @@ dependencies = [
[[package]]
name = "itertools"
-version = "0.11.0"
+version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
dependencies = [
"either",
]
@@ -937,21 +844,32 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.148"
+version = "0.2.150"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
[[package]]
-name = "linked-hash-map"
-version = "0.5.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+name = "line-index"
+version = "0.0.0"
+dependencies = [
+ "rustc-hash",
+ "text-size",
+]
+
+[[package]]
+name = "links"
+version = "0.0.0"
+dependencies = [
+ "base-db",
+ "expect-test",
+ "test-utils",
+]
[[package]]
name = "linux-raw-sys"
-version = "0.4.7"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
[[package]]
name = "lock_api"
@@ -1034,15 +952,6 @@ checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
[[package]]
name = "memoffset"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "memoffset"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
@@ -1068,7 +977,7 @@ dependencies = [
"libc",
"log",
"wasi",
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
@@ -1087,7 +996,7 @@ dependencies = [
"log",
"mio",
"walkdir",
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
@@ -1161,72 +1070,28 @@ dependencies = [
"libc",
"redox_syscall 0.3.5",
"smallvec",
- "windows-targets 0.48.5",
+ "windows-targets",
]
[[package]]
name = "parser"
version = "0.0.0"
dependencies = [
- "insta",
+ "expect-test",
"logos",
"once_cell",
"regex",
"rowan",
"rustc-hash",
"syntax",
+ "tempfile",
]
[[package]]
name = "percent-encoding"
-version = "2.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
-
-[[package]]
-name = "pest"
-version = "2.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33"
-dependencies = [
- "memchr",
- "thiserror",
- "ucd-trie",
-]
-
-[[package]]
-name = "pest_derive"
-version = "2.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a"
-dependencies = [
- "pest",
- "pest_generator",
-]
-
-[[package]]
-name = "pest_generator"
-version = "2.7.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141"
-dependencies = [
- "pest",
- "pest_meta",
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "pest_meta"
-version = "2.7.3"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f"
-dependencies = [
- "once_cell",
- "pest",
- "sha2",
-]
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "phf"
@@ -1366,6 +1231,15 @@ dependencies = [
]
[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
name = "redox_users"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1388,25 +1262,25 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.9.5"
+version = "1.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
- "regex-syntax 0.7.5",
+ "regex-syntax 0.8.2",
]
[[package]]
name = "regex-automata"
-version = "0.3.8"
+version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax 0.7.5",
+ "regex-syntax 0.8.2",
]
[[package]]
@@ -1417,9 +1291,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
-version = "0.7.5"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "rename"
@@ -1434,13 +1308,13 @@ dependencies = [
[[package]]
name = "rowan"
-version = "0.15.11"
+version = "0.15.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64449cfef9483a475ed56ae30e2da5ee96448789fb2aa240a04beb6a055078bf"
+checksum = "906057e449592587bf6724f00155bf82a6752c868d78a8fb3aa41f4e6357cfe8"
dependencies = [
"countme",
"hashbrown",
- "memoffset 0.8.0",
+ "memoffset",
"rustc-hash",
"text-size",
]
@@ -1453,15 +1327,15 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
[[package]]
name = "rustix"
-version = "0.38.14"
+version = "0.38.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "747c788e9ce8e92b12cd485c49ddf90723550b654b32508f979b71a7b1ecda4f"
+checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
dependencies = [
"bitflags 2.4.0",
"errno",
"libc",
"linux-raw-sys",
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
@@ -1487,18 +1361,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "serde"
-version = "1.0.188"
+version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.188"
+version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
dependencies = [
"proc-macro2",
"quote",
@@ -1507,9 +1381,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.107"
+version = "1.0.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
dependencies = [
"itoa",
"ryu",
@@ -1528,9 +1402,9 @@ dependencies = [
[[package]]
name = "serde_repr"
-version = "0.1.16"
+version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
+checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
dependencies = [
"proc-macro2",
"quote",
@@ -1538,23 +1412,6 @@ dependencies = [
]
[[package]]
-name = "sha2"
-version = "0.10.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
-]
-
-[[package]]
-name = "similar"
-version = "2.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
-
-[[package]]
name = "siphasher"
version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1588,7 +1445,8 @@ dependencies = [
"base-db",
"distro",
"expect-test",
- "itertools 0.11.0",
+ "itertools 0.12.0",
+ "line-index",
"regex",
"rowan",
"syntax",
@@ -1612,21 +1470,21 @@ dependencies = [
name = "syntax"
version = "0.0.0"
dependencies = [
- "itertools 0.11.0",
+ "itertools 0.12.0",
"rowan",
]
[[package]]
name = "tempfile"
-version = "3.8.0"
+version = "3.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
dependencies = [
"cfg-if",
"fastrand",
- "redox_syscall 0.3.5",
+ "redox_syscall 0.4.1",
"rustix",
- "windows-sys 0.48.0",
+ "windows-sys",
]
[[package]]
@@ -1635,17 +1493,18 @@ version = "0.0.0"
dependencies = [
"base-db",
"distro",
+ "line-index",
"rowan",
"url",
]
[[package]]
name = "texlab"
-version = "5.11.0"
+version = "5.12.0"
dependencies = [
"anyhow",
- "assert_unordered",
"base-db",
+ "bibfmt",
"citeproc",
"clap",
"commands",
@@ -1660,11 +1519,11 @@ dependencies = [
"encoding_rs_io",
"fern",
"folding",
- "fuzzy-matcher",
+ "highlights",
"hover",
"inlay-hints",
- "insta",
- "itertools 0.11.0",
+ "line-index",
+ "links",
"log",
"lsp-server",
"lsp-types",
@@ -1673,7 +1532,6 @@ dependencies = [
"once_cell",
"parking_lot",
"parser",
- "rayon",
"references",
"regex",
"rename",
@@ -1697,18 +1555,18 @@ checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233"
[[package]]
name = "thiserror"
-version = "1.0.48"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.48"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
dependencies = [
"proc-macro2",
"quote",
@@ -1771,18 +1629,6 @@ dependencies = [
]
[[package]]
-name = "typenum"
-version = "1.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
-
-[[package]]
-name = "ucd-trie"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
-
-[[package]]
name = "unicode-bidi"
version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1823,9 +1669,9 @@ checksum = "402bb19d8e03f1d1a7450e2bd613980869438e0666331be3e073089124aa1adc"
[[package]]
name = "url"
-version = "2.3.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
dependencies = [
"form_urlencoded",
"idna",
@@ -1840,12 +1686,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]]
-name = "version_check"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-
-[[package]]
name = "walkdir"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1958,35 +1798,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
-version = "0.45.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
-dependencies = [
- "windows-targets 0.42.2",
-]
-
-[[package]]
-name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "windows-targets 0.48.5",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
-dependencies = [
- "windows_aarch64_gnullvm 0.42.2",
- "windows_aarch64_msvc 0.42.2",
- "windows_i686_gnu 0.42.2",
- "windows_i686_msvc 0.42.2",
- "windows_x86_64_gnu 0.42.2",
- "windows_x86_64_gnullvm 0.42.2",
- "windows_x86_64_msvc 0.42.2",
+ "windows-targets",
]
[[package]]
@@ -1995,104 +1811,53 @@ version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
- "windows_aarch64_gnullvm 0.48.5",
- "windows_aarch64_msvc 0.48.5",
- "windows_i686_gnu 0.48.5",
- "windows_i686_msvc 0.48.5",
- "windows_x86_64_gnu 0.48.5",
- "windows_x86_64_gnullvm 0.48.5",
- "windows_x86_64_msvc 0.48.5",
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
-
-[[package]]
-name = "windows_aarch64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
-
-[[package]]
-name = "windows_aarch64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_i686_gnu"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
-
-[[package]]
-name = "windows_i686_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_msvc"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
-
-[[package]]
-name = "windows_i686_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
-
-[[package]]
-name = "windows_x86_64_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.42.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
-
-[[package]]
-name = "windows_x86_64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
-
-[[package]]
-name = "yaml-rust"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
-dependencies = [
- "linked-hash-map",
-]
diff --git a/support/texlab/crates/base-db/Cargo.toml b/support/texlab/crates/base-db/Cargo.toml
index b440ff5c61..f5e2c07829 100644
--- a/support/texlab/crates/base-db/Cargo.toml
+++ b/support/texlab/crates/base-db/Cargo.toml
@@ -7,20 +7,21 @@ edition.workspace = true
rust-version.workspace = true
[dependencies]
+bibtex-utils = { path = "../bibtex-utils" }
dirs = "5.0.1"
distro = { path = "../distro" }
-itertools = "0.11.0"
+itertools = "0.12.0"
+line-index = { path = "../line-index" }
log = "0.4.20"
notify = "6.0.1"
once_cell = "1.18.0"
parser = { path = "../parser" }
percent-encoding = "2.3.0"
-regex = "1.9.5"
-rowan = "0.15.11"
+regex = "1.10.2"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
-url = "=2.3.1"
-bibtex-utils = { path = "../bibtex-utils" }
+url = "2.5.0"
[lib]
doctest = false
diff --git a/support/texlab/crates/base-db/src/document.rs b/support/texlab/crates/base-db/src/document.rs
index 8642694811..9f45876d7e 100644
--- a/support/texlab/crates/base-db/src/document.rs
+++ b/support/texlab/crates/base-db/src/document.rs
@@ -1,15 +1,12 @@
use std::path::PathBuf;
use distro::Language;
+use line_index::{LineCol, LineIndex};
use rowan::TextRange;
-use syntax::{bibtex, latex, BuildError};
+use syntax::{bibtex, latex, latexmkrc::LatexmkrcData, BuildError};
use url::Url;
-use crate::{
- semantics,
- util::{LineCol, LineIndex},
- Config,
-};
+use crate::{semantics, Config};
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
pub enum Owner {
@@ -78,6 +75,10 @@ impl Document {
DocumentData::Log(LogDocumentData { errors })
}
Language::Root => DocumentData::Root,
+ Language::Latexmkrc => {
+ let data = parser::parse_latexmkrc(&text).unwrap_or_default();
+ DocumentData::Latexmkrc(data)
+ }
Language::Tectonic => DocumentData::Tectonic,
};
@@ -134,6 +135,7 @@ pub enum DocumentData {
Aux(AuxDocumentData),
Log(LogDocumentData),
Root,
+ Latexmkrc(LatexmkrcData),
Tectonic,
}
@@ -169,6 +171,14 @@ impl DocumentData {
None
}
}
+
+ pub fn as_latexmkrc(&self) -> Option<&LatexmkrcData> {
+ if let DocumentData::Latexmkrc(data) = self {
+ Some(data)
+ } else {
+ None
+ }
+ }
}
#[derive(Debug, Clone)]
@@ -216,4 +226,22 @@ impl<'a> DocumentLocation<'a> {
pub fn new(document: &'a Document, range: TextRange) -> Self {
Self { document, range }
}
+
+ fn eq_key(&self) -> (&Url, TextRange) {
+ (&self.document.uri, self.range)
+ }
+}
+
+impl<'a> PartialEq for DocumentLocation<'a> {
+ fn eq(&self, other: &Self) -> bool {
+ self.eq_key() == other.eq_key()
+ }
+}
+
+impl<'a> Eq for DocumentLocation<'a> {}
+
+impl<'a> std::hash::Hash for DocumentLocation<'a> {
+ fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
+ self.eq_key().hash(state)
+ }
}
diff --git a/support/texlab/crates/base-db/src/graph.rs b/support/texlab/crates/base-db/src/graph.rs
index 46b9038de8..088e0828b7 100644
--- a/support/texlab/crates/base-db/src/graph.rs
+++ b/support/texlab/crates/base-db/src/graph.rs
@@ -138,9 +138,8 @@ impl<'a> Graph<'a> {
fn add_implicit_edges(&mut self, source: &'a Document, base_dir: &Url) {
if source.language == Language::Tex {
- let config = &self.workspace.config().build;
- let aux_dir = self.workspace.output_dir(base_dir, config.aux_dir.clone());
- let log_dir = self.workspace.output_dir(base_dir, config.log_dir.clone());
+ let aux_dir = self.workspace.aux_dir(base_dir);
+ let log_dir = self.workspace.log_dir(base_dir);
let relative_path = base_dir.make_relative(&source.uri).unwrap();
diff --git a/support/texlab/crates/base-db/src/util.rs b/support/texlab/crates/base-db/src/util.rs
index 6d6d6897a6..068a0c9b2a 100644
--- a/support/texlab/crates/base-db/src/util.rs
+++ b/support/texlab/crates/base-db/src/util.rs
@@ -1,10 +1,8 @@
mod label;
-mod line_index;
pub mod queries;
mod regex_filter;
pub use self::{
label::{render_label, FloatKind, RenderedLabel, RenderedObject},
- line_index::{LineCol, LineColUtf16, LineIndex},
regex_filter::filter_regex_patterns,
};
diff --git a/support/texlab/crates/base-db/src/workspace.rs b/support/texlab/crates/base-db/src/workspace.rs
index b4a524ad4a..330ed5a493 100644
--- a/support/texlab/crates/base-db/src/workspace.rs
+++ b/support/texlab/crates/base-db/src/workspace.rs
@@ -5,11 +5,13 @@ use std::{
use distro::{Distro, Language};
use itertools::Itertools;
+use line_index::LineCol;
use rowan::{TextLen, TextRange};
use rustc_hash::FxHashSet;
+use syntax::latexmkrc::LatexmkrcData;
use url::Url;
-use crate::{graph, util::LineCol, Config, Document, DocumentData, DocumentParams, Owner};
+use crate::{graph, Config, Document, DocumentData, DocumentParams, Owner};
#[derive(Debug, Default)]
pub struct Workspace {
@@ -114,22 +116,11 @@ impl Workspace {
self.iter()
.filter(|document| document.uri.scheme() == "file")
.flat_map(|document| {
- let dir1 = self.output_dir(
- &self.current_dir(&document.dir),
- self.config.build.aux_dir.clone(),
- );
-
- let dir2 = self.output_dir(
- &self.current_dir(&document.dir),
- self.config.build.log_dir.clone(),
- );
-
- let dir3 = &document.dir;
- [
- dir1.to_file_path(),
- dir2.to_file_path(),
- dir3.to_file_path(),
- ]
+ let current_dir = &self.current_dir(&document.dir);
+ let doc_dir = document.dir.to_file_path();
+ let aux_dir = self.aux_dir(current_dir).to_file_path();
+ let log_dir = self.log_dir(current_dir).to_file_path();
+ [aux_dir, log_dir, doc_dir]
})
.flatten()
.for_each(|path| {
@@ -153,13 +144,45 @@ impl Workspace {
.unwrap_or_else(|| base_dir.clone())
}
- pub fn output_dir(&self, base_dir: &Url, relative_path: String) -> Url {
- let mut path = relative_path;
- if !path.ends_with('/') {
- path.push('/');
+ pub fn aux_dir(&self, base_dir: &Url) -> Url {
+ self.output_dir(base_dir, &self.config.build.aux_dir, |data| {
+ data.aux_dir.as_deref()
+ })
+ }
+
+ pub fn log_dir(&self, base_dir: &Url) -> Url {
+ self.output_dir(base_dir, &self.config.build.log_dir, |_| None)
+ }
+
+ pub fn pdf_dir(&self, base_dir: &Url) -> Url {
+ self.output_dir(base_dir, &self.config.build.pdf_dir, |_| None)
+ }
+
+ fn current_latexmkrc(&self, base_dir: &Url) -> Option<&LatexmkrcData> {
+ self.documents
+ .iter()
+ .filter(|document| document.language == Language::Latexmkrc)
+ .find(|document| document.uri.join(".").as_ref() == Ok(base_dir))
+ .and_then(|document| document.data.as_latexmkrc())
+ }
+
+ fn output_dir(
+ &self,
+ base_dir: &Url,
+ config: &str,
+ extract_latexmkrc: impl FnOnce(&LatexmkrcData) -> Option<&str>,
+ ) -> Url {
+ let mut dir: String = self
+ .current_latexmkrc(base_dir)
+ .and_then(|data| extract_latexmkrc(data).or_else(|| data.out_dir.as_deref()))
+ .unwrap_or(config)
+ .into();
+
+ if !dir.ends_with('/') {
+ dir.push('/');
}
- base_dir.join(&path).unwrap_or_else(|_| base_dir.clone())
+ base_dir.join(&dir).unwrap_or_else(|_| base_dir.clone())
}
pub fn contains(&self, path: &Path) -> bool {
@@ -298,7 +321,10 @@ impl Workspace {
continue;
};
- if !matches!(lang, Language::Tex | Language::Root | Language::Tectonic) {
+ if !matches!(
+ lang,
+ Language::Tex | Language::Root | Language::Tectonic | Language::Latexmkrc
+ ) {
continue;
}
diff --git a/support/texlab/crates/bibfmt/Cargo.toml b/support/texlab/crates/bibfmt/Cargo.toml
new file mode 100644
index 0000000000..18a4eb6dca
--- /dev/null
+++ b/support/texlab/crates/bibfmt/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "bibfmt"
+version = "0.0.0"
+license.workspace = true
+authors.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+
+[dependencies]
+rowan = "0.15.13"
+syntax = { path = "../syntax" }
+line-index = { path = "../line-index" }
+
+[lib]
+doctest = false
+
+[dev-dependencies]
+expect-test = "1.4.1"
+parser = { path = "../parser" }
diff --git a/support/texlab/crates/bibfmt/src/lib.rs b/support/texlab/crates/bibfmt/src/lib.rs
new file mode 100644
index 0000000000..cfce131f2c
--- /dev/null
+++ b/support/texlab/crates/bibfmt/src/lib.rs
@@ -0,0 +1,193 @@
+use line_index::LineIndex;
+use rowan::{ast::AstNode, NodeOrToken};
+use syntax::bibtex::{self, HasName, HasType, HasValue};
+
+pub struct Options {
+ pub insert_spaces: bool,
+ pub tab_size: usize,
+ pub line_length: usize,
+}
+
+impl Options {
+ fn indent(&self) -> String {
+ if self.insert_spaces {
+ std::iter::repeat(' ').take(self.tab_size).collect()
+ } else {
+ String::from("\t")
+ }
+ }
+}
+
+impl Default for Options {
+ fn default() -> Self {
+ Self {
+ insert_spaces: true,
+ tab_size: 4,
+ line_length: 80,
+ }
+ }
+}
+
+pub fn format(root: &bibtex::SyntaxNode, line_index: &LineIndex, options: &Options) -> String {
+ let indent = options.indent();
+ let mut output = String::new();
+ for elem in root.children_with_tokens() {
+ match elem {
+ NodeOrToken::Token(token) => {
+ output.push_str(token.text());
+ }
+ NodeOrToken::Node(node) => {
+ let mut fmt = Formatter {
+ indent: &indent,
+ output: &mut output,
+ options,
+ align: Vec::new(),
+ line_index,
+ };
+
+ fmt.visit_node(node);
+ }
+ }
+ }
+
+ output
+}
+
+struct Formatter<'a> {
+ output: &'a mut String,
+ indent: &'a str,
+ options: &'a Options,
+ align: Vec<usize>,
+ line_index: &'a LineIndex,
+}
+
+impl<'a> Formatter<'a> {
+ fn visit_token_lowercase(&mut self, token: &bibtex::SyntaxToken) {
+ self.output.push_str(&token.text().to_lowercase());
+ }
+
+ fn should_insert_space(
+ &self,
+ previous: &bibtex::SyntaxToken,
+ current: &bibtex::SyntaxToken,
+ ) -> bool {
+ let previous = self.line_index.line_col(previous.text_range().end());
+ let current = self.line_index.line_col(current.text_range().start());
+ previous.line != current.line || previous.col < current.col
+ }
+
+ fn base_align(&self) -> usize {
+ self.output[self.output.rfind('\n').unwrap_or(0)..]
+ .chars()
+ .count()
+ }
+
+ fn visit_node(&mut self, parent: bibtex::SyntaxNode) {
+ match parent.kind() {
+ bibtex::PREAMBLE => {
+ let preamble = bibtex::Preamble::cast(parent).unwrap();
+ self.visit_token_lowercase(&preamble.type_token().unwrap());
+ self.output.push('{');
+ if preamble.syntax().children().next().is_some() {
+ self.align.push(self.base_align());
+ for node in preamble.syntax().children() {
+ self.visit_node(node);
+ }
+ self.output.push('}');
+ }
+ }
+ bibtex::STRING => {
+ let string = bibtex::StringDef::cast(parent).unwrap();
+ self.visit_token_lowercase(&string.type_token().unwrap());
+ self.output.push('{');
+ if let Some(name) = string.name_token() {
+ self.output.push_str(name.text());
+ self.output.push_str(" = ");
+ if let Some(value) = string.value() {
+ self.align.push(self.base_align());
+ self.visit_node(value.syntax().clone());
+ self.output.push('}');
+ }
+ }
+ }
+ bibtex::ENTRY => {
+ let entry = bibtex::Entry::cast(parent).unwrap();
+ self.visit_token_lowercase(&entry.type_token().unwrap());
+ self.output.push('{');
+ if let Some(key) = entry.name_token() {
+ self.output.push_str(&key.to_string());
+ self.output.push(',');
+ self.output.push('\n');
+ for field in entry.fields() {
+ self.visit_node(field.syntax().clone());
+ }
+ self.output.push('}');
+ }
+ }
+ bibtex::FIELD => {
+ let field = bibtex::Field::cast(parent).unwrap();
+ self.output.push_str(&self.indent);
+ let name = field.name_token().unwrap();
+ self.output.push_str(name.text());
+ self.output.push_str(" = ");
+ if let Some(value) = field.value() {
+ let count = name.text().chars().count();
+ self.align.push(self.options.tab_size + count + 3);
+ self.visit_node(value.syntax().clone());
+ self.output.push(',');
+ self.output.push('\n');
+ }
+ }
+ kind if bibtex::Value::can_cast(kind) => {
+ let tokens: Vec<_> = parent
+ .descendants_with_tokens()
+ .filter_map(|element| element.into_token())
+ .filter(|token| token.kind() != bibtex::WHITESPACE)
+ .collect();
+
+ self.output.push_str(tokens[0].text());
+
+ let align = self.align.pop().unwrap_or_default();
+ let mut length = align + tokens[0].text().chars().count();
+ for i in 1..tokens.len() {
+ let previous = &tokens[i - 1];
+ let current = &tokens[i];
+ let current_length = current.text().chars().count();
+
+ let insert_space = self.should_insert_space(previous, current);
+ let space_length = if insert_space { 1 } else { 0 };
+
+ if length + current_length + space_length > self.options.line_length {
+ self.output.push('\n');
+ self.output.push_str(self.indent.as_ref());
+ for _ in 0..=align - self.options.tab_size as usize {
+ self.output.push(' ');
+ }
+ length = align;
+ } else if insert_space {
+ self.output.push(' ');
+ length += 1;
+ }
+ self.output.push_str(current.text());
+ length += current_length;
+ }
+ }
+ bibtex::ROOT | bibtex::JUNK => {
+ for element in parent.children_with_tokens() {
+ match element {
+ NodeOrToken::Token(token) => {
+ self.output.push_str(token.text());
+ }
+ NodeOrToken::Node(node) => {
+ self.visit_node(node);
+ }
+ }
+ }
+ }
+ _ => unreachable!(),
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests;
diff --git a/support/texlab/crates/bibfmt/src/tests.rs b/support/texlab/crates/bibfmt/src/tests.rs
new file mode 100644
index 0000000000..c081a15eca
--- /dev/null
+++ b/support/texlab/crates/bibfmt/src/tests.rs
@@ -0,0 +1,144 @@
+use expect_test::{expect, Expect};
+use line_index::LineIndex;
+use syntax::bibtex;
+
+use crate::Options;
+
+fn check(input: &str, expect: Expect) {
+ let green = parser::parse_bibtex(input);
+ let root = bibtex::SyntaxNode::new_root(green);
+ let line_index = LineIndex::new(input);
+ let output = crate::format(&root, &line_index, &Options::default());
+ expect.assert_eq(&output);
+}
+
+#[test]
+fn test_wrap_long_lines() {
+ check(
+ r#"@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Lorem ipsum dolor sit amet,
+ consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}"#,
+ expect![[r#"
+ @article{foo,
+ bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
+ dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
+ amet, consectetur adipiscing elit.},
+ }"#]],
+ );
+}
+
+#[test]
+fn test_multiple_entries() {
+ check(
+ r#"@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Lorem ipsum dolor sit amet,
+consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}
+
+@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+ Lorem ipsum dolor sit amet,
+consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}"#,
+ expect![[r#"
+ @article{foo,
+ bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
+ dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
+ amet, consectetur adipiscing elit.},
+ }
+
+ @article{foo,
+ bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
+ dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
+ amet, consectetur adipiscing elit.},
+ }"#]],
+ );
+}
+
+#[test]
+fn test_trailing_comma() {
+ check(
+ r#"@article{foo, bar = baz}"#,
+ expect![[r#"
+ @article{foo,
+ bar = baz,
+ }"#]],
+ );
+}
+
+#[test]
+fn test_insert_braces() {
+ check(
+ r#"@article{foo, bar = baz,"#,
+ expect![[r#"
+ @article{foo,
+ bar = baz,
+ }"#]],
+ );
+}
+
+#[test]
+fn test_comment() {
+ check(
+ r#"Foo Bar
+@article{foo, bar = "\baz",}
+Baz
+@article{f,}
+Qux"#,
+ expect![[r#"
+ Foo Bar
+ @article{foo,
+ bar = "\baz",
+ }
+ Baz
+ @article{f,
+ }
+ Qux"#]],
+ );
+}
+
+#[test]
+fn test_command() {
+ check(
+ r#"@article{foo, bar = "\baz",}"#,
+ expect![[r#"
+ @article{foo,
+ bar = "\baz",
+ }"#]],
+ );
+}
+
+#[test]
+fn test_join_strings() {
+ check(
+ r#"@article{foo, bar = "baz" # "qux"}"#,
+ expect![[r#"
+ @article{foo,
+ bar = "baz" # "qux",
+ }"#]],
+ );
+}
+
+#[test]
+fn test_parens() {
+ check(
+ r#"@article(foo,)"#,
+ expect![[r#"
+ @article{foo,
+ }"#]],
+ );
+}
+
+#[test]
+fn test_string() {
+ check(
+ r#"@string{foo="bar"}"#,
+ expect![[r#"@string{foo = "bar"}"#]],
+ );
+}
+
+#[test]
+fn test_preamble() {
+ check(
+ r#"@preamble{
+ "foo bar baz" }"#,
+ expect![[r#"@preamble{"foo bar baz"}"#]],
+ );
+}
diff --git a/support/texlab/crates/bibtex-utils/Cargo.toml b/support/texlab/crates/bibtex-utils/Cargo.toml
index 7dd75ff738..1789a9747b 100644
--- a/support/texlab/crates/bibtex-utils/Cargo.toml
+++ b/support/texlab/crates/bibtex-utils/Cargo.toml
@@ -9,8 +9,8 @@ rust-version.workspace = true
[dependencies]
chrono = { version = "0.4.26", default-features = false, features = ["std"] }
human_name = "2.0.2"
-itertools = "0.11.0"
-rowan = "0.15.11"
+itertools = "0.12.0"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
unicode-normalization = "0.1.22"
diff --git a/support/texlab/crates/citeproc/Cargo.toml b/support/texlab/crates/citeproc/Cargo.toml
index c298c6f7d1..cccbd002c4 100644
--- a/support/texlab/crates/citeproc/Cargo.toml
+++ b/support/texlab/crates/citeproc/Cargo.toml
@@ -9,13 +9,13 @@ rust-version.workspace = true
[dependencies]
bibtex-utils = { path = "../bibtex-utils" }
isocountry = "0.3.2"
-itertools = "0.11.0"
-rowan = "0.15.11"
+itertools = "0.12.0"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
titlecase = "2.2.1"
unicode-normalization = "0.1.22"
-url = "=2.3.1"
+url = "2.5.0"
[lib]
doctest = false
diff --git a/support/texlab/crates/commands/Cargo.toml b/support/texlab/crates/commands/Cargo.toml
index cf395e5bf8..2b010ec126 100644
--- a/support/texlab/crates/commands/Cargo.toml
+++ b/support/texlab/crates/commands/Cargo.toml
@@ -9,16 +9,16 @@ rust-version.workspace = true
[dependencies]
anyhow = "1.0.72"
base-db = { path = "../base-db" }
-bstr = "1.6.0"
+bstr = "1.8.0"
crossbeam-channel = "0.5.8"
-itertools = "0.11.0"
-libc = "0.2.147"
+itertools = "0.12.0"
+libc = "0.2.150"
log = "0.4.19"
-rowan = "0.15.11"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
-thiserror = "1.0.43"
-url = "2.3.1"
+thiserror = "1.0.50"
+url = "2.5.0"
[dev-dependencies]
distro = { path = "../distro" }
diff --git a/support/texlab/crates/commands/src/clean.rs b/support/texlab/crates/commands/src/clean.rs
index 562d9c49b6..706e7dfaf1 100644
--- a/support/texlab/crates/commands/src/clean.rs
+++ b/support/texlab/crates/commands/src/clean.rs
@@ -29,18 +29,15 @@ impl CleanCommand {
};
let out_dir = match target {
- CleanTarget::Auxiliary => &workspace.config().build.aux_dir,
- CleanTarget::Artifacts => &workspace.config().build.pdf_dir,
+ CleanTarget::Auxiliary => workspace.aux_dir(&base_dir),
+ CleanTarget::Artifacts => workspace.pdf_dir(&base_dir),
};
- let out_dir = workspace
- .output_dir(&base_dir, out_dir.clone())
- .to_file_path()
- .unwrap();
+ let out_dir_path = out_dir.to_file_path().unwrap();
let executable = String::from("latexmk");
let args = vec![
- format!("-outdir={}", out_dir.display()),
+ format!("-outdir={}", out_dir_path.display()),
String::from(flag),
path.display().to_string(),
];
diff --git a/support/texlab/crates/commands/src/fwd_search.rs b/support/texlab/crates/commands/src/fwd_search.rs
index 9004ef9b09..7e82f38487 100644
--- a/support/texlab/crates/commands/src/fwd_search.rs
+++ b/support/texlab/crates/commands/src/fwd_search.rs
@@ -58,9 +58,8 @@ impl ForwardSearch {
return Err(ForwardSearchError::NotLocal(parent.uri.clone()));
}
- let dir = workspace.current_dir(&parent.dir);
let dir = workspace
- .output_dir(&dir, workspace.config().build.pdf_dir.clone())
+ .pdf_dir(&workspace.current_dir(&parent.dir))
.to_file_path()
.unwrap();
diff --git a/support/texlab/crates/completion-data/Cargo.toml b/support/texlab/crates/completion-data/Cargo.toml
index b0053c7701..56f78314b0 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.27"
-itertools = "0.11.0"
+flate2 = "1.0.28"
+itertools = "0.12.0"
once_cell = "1.18.0"
rustc-hash = "1.1.0"
-serde = { version = "1.0.188", features = ["derive"] }
-serde_json = "1.0.107"
+serde = { version = "1.0.193", features = ["derive"] }
+serde_json = "1.0.108"
[lib]
doctest = false
diff --git a/support/texlab/crates/completion/Cargo.toml b/support/texlab/crates/completion/Cargo.toml
index 671728aea8..d44e87db1e 100644
--- a/support/texlab/crates/completion/Cargo.toml
+++ b/support/texlab/crates/completion/Cargo.toml
@@ -10,19 +10,18 @@ rust-version.workspace = true
base-db = { path = "../base-db" }
completion-data = { path = "../completion-data" }
fuzzy-matcher = { version = "0.3.7", features = ["compact"] }
-itertools = "0.11.0"
-log = "0.4.20"
+line-index = { path = "../line-index" }
rayon = "1.7.0"
-rowan = "0.15.11"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
-url = "=2.3.1"
+url = "2.5.0"
[dev-dependencies]
criterion = "0.5.1"
distro = { path = "../distro" }
-test-utils = { path = "../test-utils" }
expect-test = "1.4.1"
+test-utils = { path = "../test-utils" }
[lib]
doctest = false
diff --git a/support/texlab/crates/completion/benches/bench_main.rs b/support/texlab/crates/completion/benches/bench_main.rs
index 66c7a3a726..24427969d7 100644
--- a/support/texlab/crates/completion/benches/bench_main.rs
+++ b/support/texlab/crates/completion/benches/bench_main.rs
@@ -1,7 +1,8 @@
-use base_db::{util::LineCol, FeatureParams, Owner, Workspace};
+use base_db::{FeatureParams, Owner, Workspace};
use completion::CompletionParams;
use criterion::{criterion_group, criterion_main, Criterion};
use distro::Language;
+use line_index::LineCol;
use rowan::TextSize;
use url::Url;
diff --git a/support/texlab/crates/definition/Cargo.toml b/support/texlab/crates/definition/Cargo.toml
index 800ca7f6da..c3549495ed 100644
--- a/support/texlab/crates/definition/Cargo.toml
+++ b/support/texlab/crates/definition/Cargo.toml
@@ -8,12 +8,12 @@ rust-version.workspace = true
[dependencies]
base-db = { path = "../base-db" }
-rowan = "0.15.11"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
[dev-dependencies]
-itertools = "0.11.0"
+itertools = "0.12.0"
test-utils = { path = "../test-utils" }
[lib]
diff --git a/support/texlab/crates/definition/src/citation.rs b/support/texlab/crates/definition/src/citation.rs
index 509b008b26..52c0636e2d 100644
--- a/support/texlab/crates/definition/src/citation.rs
+++ b/support/texlab/crates/definition/src/citation.rs
@@ -8,7 +8,8 @@ use crate::DefinitionContext;
use super::DefinitionResult;
pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
- let data = context.params.document.data.as_tex()?;
+ let feature = &context.params.feature;
+ let data = feature.document.data.as_tex()?;
let citation = queries::object_at_cursor(
&data.semantics.citations,
@@ -17,7 +18,7 @@ pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
)?;
let name = citation.object.name_text();
- for (document, entry) in queries::objects_with_name::<bib::Entry>(&context.project, name) {
+ for (document, entry) in queries::objects_with_name::<bib::Entry>(&feature.project, name) {
context.results.insert(DefinitionResult {
origin_selection_range: citation.object.name_range(),
target: document,
diff --git a/support/texlab/crates/definition/src/command.rs b/support/texlab/crates/definition/src/command.rs
index 661f953212..d618ca9ddf 100644
--- a/support/texlab/crates/definition/src/command.rs
+++ b/support/texlab/crates/definition/src/command.rs
@@ -7,7 +7,8 @@ use crate::DefinitionContext;
use super::DefinitionResult;
pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
- let data = context.params.document.data.as_tex()?;
+ let feature = &context.params.feature;
+ let data = feature.document.data.as_tex()?;
let root = data.root_node();
let name = root
.token_at_offset(context.params.offset)
@@ -15,7 +16,7 @@ pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
let origin_selection_range = name.text_range();
- for document in &context.project.documents {
+ for document in &feature.project.documents {
let DocumentData::Tex(data) = &document.data else {
continue;
};
diff --git a/support/texlab/crates/definition/src/include.rs b/support/texlab/crates/definition/src/include.rs
index df2c5c763c..bc9311ba01 100644
--- a/support/texlab/crates/definition/src/include.rs
+++ b/support/texlab/crates/definition/src/include.rs
@@ -5,12 +5,13 @@ use crate::DefinitionContext;
use super::DefinitionResult;
pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
- let start = context.params.document;
- let parents = context.params.workspace.parents(start);
+ let feature = &context.params.feature;
+ let start = feature.document;
+ let parents = feature.workspace.parents(start);
let results = parents
.into_iter()
.chain(std::iter::once(start))
- .flat_map(|parent| base_db::graph::Graph::new(context.params.workspace, parent).edges)
+ .flat_map(|parent| base_db::graph::Graph::new(feature.workspace, parent).edges)
.filter(|edge| edge.source == start)
.flat_map(|edge| {
let origin_selection_range = edge.weight?.link.path.range;
diff --git a/support/texlab/crates/definition/src/label.rs b/support/texlab/crates/definition/src/label.rs
index 80f1442daf..e32c0a93d0 100644
--- a/support/texlab/crates/definition/src/label.rs
+++ b/support/texlab/crates/definition/src/label.rs
@@ -11,7 +11,8 @@ use crate::DefinitionContext;
use super::DefinitionResult;
pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
- let data = context.params.document.data.as_tex()?;
+ let feature = &context.params.feature;
+ let data = feature.document.data.as_tex()?;
let reference = queries::object_at_cursor(
&data.semantics.labels,
context.params.offset,
@@ -19,10 +20,10 @@ pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
)?;
let name = reference.object.name_text();
- let labels = queries::objects_with_name::<tex::Label>(&context.project, name);
+ let labels = queries::objects_with_name::<tex::Label>(&feature.project, name);
for (document, label) in labels.filter(|(_, label)| label.kind == tex::LabelKind::Definition) {
let target_selection_range = label.name.range;
- let target_range = render_label(context.params.workspace, &context.project, label)
+ let target_range = render_label(feature.workspace, &feature.project, label)
.map_or(target_selection_range, |label| label.range);
context.results.insert(DefinitionResult {
diff --git a/support/texlab/crates/definition/src/lib.rs b/support/texlab/crates/definition/src/lib.rs
index 2c1614f04e..55319b7fe4 100644
--- a/support/texlab/crates/definition/src/lib.rs
+++ b/support/texlab/crates/definition/src/lib.rs
@@ -4,14 +4,13 @@ mod include;
mod label;
mod string_ref;
-use base_db::{Document, Project, Workspace};
+use base_db::{Document, FeatureParams};
use rowan::{TextRange, TextSize};
use rustc_hash::FxHashSet;
#[derive(Debug)]
-pub struct DefinitionParams<'db> {
- pub workspace: &'db Workspace,
- pub document: &'db Document,
+pub struct DefinitionParams<'a> {
+ pub feature: FeatureParams<'a>,
pub offset: TextSize,
}
@@ -24,17 +23,14 @@ pub struct DefinitionResult<'a> {
}
#[derive(Debug)]
-struct DefinitionContext<'db> {
- params: DefinitionParams<'db>,
- project: Project<'db>,
- results: FxHashSet<DefinitionResult<'db>>,
+struct DefinitionContext<'a> {
+ params: DefinitionParams<'a>,
+ results: FxHashSet<DefinitionResult<'a>>,
}
pub fn goto_definition(params: DefinitionParams) -> FxHashSet<DefinitionResult> {
- let project = params.workspace.project(params.document);
let mut context = DefinitionContext {
params,
- project,
results: FxHashSet::default(),
};
diff --git a/support/texlab/crates/definition/src/string_ref.rs b/support/texlab/crates/definition/src/string_ref.rs
index 678fc5911e..48af5c725e 100644
--- a/support/texlab/crates/definition/src/string_ref.rs
+++ b/support/texlab/crates/definition/src/string_ref.rs
@@ -6,7 +6,8 @@ use crate::DefinitionContext;
use super::DefinitionResult;
pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
- let data = context.params.document.data.as_bib()?;
+ let feature = &context.params.feature;
+ let data = feature.document.data.as_bib()?;
let root = data.root_node();
let name = root
.token_at_offset(context.params.offset)
@@ -25,7 +26,7 @@ pub(super) fn goto_definition(context: &mut DefinitionContext) -> Option<()> {
{
context.results.insert(DefinitionResult {
origin_selection_range,
- target: context.params.document,
+ target: feature.document,
target_range: string.full_range,
target_selection_range: string.name.range,
});
diff --git a/support/texlab/crates/definition/src/tests.rs b/support/texlab/crates/definition/src/tests.rs
index 8c08be72d1..8d81927d32 100644
--- a/support/texlab/crates/definition/src/tests.rs
+++ b/support/texlab/crates/definition/src/tests.rs
@@ -1,35 +1,22 @@
+use rowan::TextRange;
use rustc_hash::FxHashSet;
use crate::{DefinitionParams, DefinitionResult};
fn check(input: &str) {
let fixture = test_utils::fixture::Fixture::parse(input);
- let workspace = &fixture.workspace;
-
- let mut origin_selection_range = None;
- let mut origin_document = None;
- let mut origin_cursor = None;
- for document in &fixture.documents {
- if let Some(cursor) = document.cursor {
- origin_document = Some(document);
- origin_cursor = Some(cursor);
- origin_selection_range = document
- .ranges
- .iter()
- .find(|range| range.contains_inclusive(cursor))
- .copied();
-
- break;
- }
- }
-
- let origin_document = origin_document.unwrap();
+ let (feature, offset) = fixture.make_params().unwrap();
+ let origin_document = feature.document;
+ let origin_selection_range = fixture
+ .locations()
+ .filter(|location| location.document == origin_document)
+ .find(|location| location.range.contains_inclusive(offset))
+ .map_or_else(|| TextRange::default(), |location| location.range);
let mut expected = FxHashSet::default();
for document in &fixture.documents {
let mut ranges = document.ranges.iter();
while let Some(target_selection_range) = ranges.next().copied() {
- let origin_selection_range = origin_selection_range.unwrap();
if (&origin_document.uri, origin_selection_range)
!= (&document.uri, target_selection_range)
{
@@ -43,11 +30,7 @@ fn check(input: &str) {
}
}
- let actual = crate::goto_definition(DefinitionParams {
- workspace,
- document: workspace.lookup(&origin_document.uri).unwrap(),
- offset: origin_cursor.unwrap(),
- });
+ let actual = crate::goto_definition(DefinitionParams { feature, offset });
assert_eq!(actual, expected);
}
diff --git a/support/texlab/crates/diagnostics/Cargo.toml b/support/texlab/crates/diagnostics/Cargo.toml
index 3f87c8c879..490bee32f3 100644
--- a/support/texlab/crates/diagnostics/Cargo.toml
+++ b/support/texlab/crates/diagnostics/Cargo.toml
@@ -8,11 +8,12 @@ rust-version.workspace = true
[dependencies]
base-db = { path = "../base-db" }
-itertools = "0.11.0"
-rowan = "0.15.11"
+itertools = "0.12.0"
+line-index = { path = "../line-index" }
+rowan = "0.15.13"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
-url = "=2.3.1"
+url = "2.5.0"
[dev-dependencies]
test-utils = { path = "../test-utils" }
diff --git a/support/texlab/crates/diagnostics/src/build_log.rs b/support/texlab/crates/diagnostics/src/build_log.rs
index 525bd982ff..4c53a35ff8 100644
--- a/support/texlab/crates/diagnostics/src/build_log.rs
+++ b/support/texlab/crates/diagnostics/src/build_log.rs
@@ -1,6 +1,7 @@
use std::borrow::Cow;
use base_db::{Document, Workspace};
+use line_index::LineCol;
use rowan::{TextLen, TextRange, TextSize};
use rustc_hash::FxHashMap;
use syntax::BuildError;
@@ -43,15 +44,15 @@ impl DiagnosticSource for BuildErrors {
let Ok(full_path_uri) = Url::from_file_path(&full_path) else {
continue;
};
+
let tex_document = workspace.lookup(&full_path_uri).unwrap_or(root_document);
let range = find_range_of_hint(tex_document, error).unwrap_or_else(|| {
let line = error.line.unwrap_or(0);
- let offset = *tex_document
+ let offset = tex_document
.line_index
- .newlines
- .get(line as usize)
- .unwrap_or(&TextSize::from(0));
+ .offset(LineCol { line, col: 0 })
+ .unwrap_or(TextSize::from(0));
TextRange::empty(offset)
});
@@ -91,16 +92,17 @@ impl DiagnosticSource for BuildErrors {
}
fn find_range_of_hint(document: &Document, error: &BuildError) -> Option<TextRange> {
- let line = error.line? as usize;
+ let line = error.line?;
let hint = error.hint.as_deref()?;
let line_index = &document.line_index;
- let line_start = line_index.newlines.get(line).copied()?;
+ let line_start = line_index.offset(LineCol { line, col: 0 })?;
let line_end = line_index
- .newlines
- .get(line + 1)
- .copied()
- .unwrap_or((&document.text).text_len());
+ .offset(LineCol {
+ line: line + 1,
+ col: 0,
+ })
+ .unwrap_or_else(|| document.text.text_len());
let line_text = &document.text[line_start.into()..line_end.into()];
let hint_start = line_start + TextSize::try_from(line_text.find(hint)?).unwrap();
diff --git a/support/texlab/crates/diagnostics/src/citations.rs b/support/texlab/crates/diagnostics/src/citations.rs
index 1ab7b6db30..0b750aaadb 100644
--- a/support/texlab/crates/diagnostics/src/citations.rs
+++ b/support/texlab/crates/diagnostics/src/citations.rs
@@ -47,7 +47,8 @@ fn detect_undefined_citations<'db>(
.collect();
for citation in &data.semantics.citations {
- if !entries.contains(citation.name.text.as_str()) {
+ let name = citation.name_text();
+ if name != "*" && !entries.contains(name) {
let diagnostic = Diagnostic {
range: citation.name.range,
data: DiagnosticData::Tex(TexError::UndefinedCitation),
diff --git a/support/texlab/crates/diagnostics/src/tests.rs b/support/texlab/crates/diagnostics/src/tests.rs
index b9eafc0284..539e3ba765 100644
--- a/support/texlab/crates/diagnostics/src/tests.rs
+++ b/support/texlab/crates/diagnostics/src/tests.rs
@@ -1,14 +1,12 @@
use std::borrow::Cow;
-use test_utils::fixture::Fixture;
-
use crate::{
types::{BibError, Diagnostic, DiagnosticData, TexError},
DiagnosticBuilder, DiagnosticManager, DiagnosticSource,
};
fn check(input: &str, expected_data: &[DiagnosticData]) {
- let fixture = Fixture::parse(input);
+ let fixture = test_utils::fixture::Fixture::parse(input);
let mut manager = DiagnosticManager::default();
let mut expected = DiagnosticBuilder::default();
diff --git a/support/texlab/crates/distro/src/language.rs b/support/texlab/crates/distro/src/language.rs
index 207b700581..201ed0702b 100644
--- a/support/texlab/crates/distro/src/language.rs
+++ b/support/texlab/crates/distro/src/language.rs
@@ -7,6 +7,7 @@ pub enum Language {
Aux,
Log,
Root,
+ Latexmkrc,
Tectonic,
}
@@ -21,6 +22,10 @@ impl Language {
return Some(Self::Tectonic);
}
+ if name.eq_ignore_ascii_case(".latexmkrc") || name.eq_ignore_ascii_case("latexmkrc") {
+ return Some(Self::Latexmkrc);
+ }
+
let extname = path.extension()?.to_str()?;
match extname.to_lowercase().as_str() {
"tex" | "sty" | "cls" | "def" | "lco" | "rnw" => Some(Self::Tex),
diff --git a/support/texlab/crates/folding/Cargo.toml b/support/texlab/crates/folding/Cargo.toml
index 2cf82699ea..e7646b61a8 100644
--- a/support/texlab/crates/folding/Cargo.toml
+++ b/support/texlab/crates/folding/Cargo.toml
@@ -8,7 +8,7 @@ rust-version.workspace = true
[dependencies]
base-db = { path = "../base-db" }
-rowan = "0.15.11"
+rowan = "0.15.13"
syntax = { path = "../syntax" }
[dev-dependencies]
diff --git a/support/texlab/crates/folding/src/tests.rs b/support/texlab/crates/folding/src/tests.rs
index 405b56bda1..1e86b30088 100644
--- a/support/texlab/crates/folding/src/tests.rs
+++ b/support/texlab/crates/folding/src/tests.rs
@@ -2,8 +2,7 @@ use expect_test::{expect, Expect};
fn check(input: &str, expect: Expect) {
let fixture = test_utils::fixture::Fixture::parse(input);
- let workspace = &fixture.workspace;
- let document = workspace.lookup(&fixture.documents[0].uri).unwrap();
+ let document = fixture.make_params().unwrap().0.document;
let data = crate::find_all(document);
expect.assert_debug_eq(&data);
}
diff --git a/support/texlab/crates/highlights/Cargo.toml b/support/texlab/crates/highlights/Cargo.toml
new file mode 100644
index 0000000000..e3247e50fd
--- /dev/null
+++ b/support/texlab/crates/highlights/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "highlights"
+version = "0.0.0"
+license.workspace = true
+authors.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+
+[dependencies]
+base-db = { path = "../base-db" }
+rowan = "0.15.13"
+
+[dev-dependencies]
+expect-test = "1.4.1"
+test-utils = { path = "../test-utils" }
+
+[lib]
+doctest = false
diff --git a/support/texlab/crates/highlights/src/label.rs b/support/texlab/crates/highlights/src/label.rs
new file mode 100644
index 0000000000..ee606c175b
--- /dev/null
+++ b/support/texlab/crates/highlights/src/label.rs
@@ -0,0 +1,26 @@
+use base_db::semantics::tex::LabelKind;
+
+use crate::{Highlight, HighlightKind, HighlightParams};
+
+pub fn find_highlights(params: &HighlightParams, results: &mut Vec<Highlight>) -> Option<()> {
+ let data = params.feature.document.data.as_tex()?;
+ let labels = &data.semantics.labels;
+ let cursor = labels
+ .iter()
+ .find(|label| label.name.range.contains(params.offset))?;
+
+ for label in labels
+ .iter()
+ .filter(|label| label.name.text == cursor.name.text)
+ {
+ let range = label.name.range;
+ let kind = match label.kind {
+ LabelKind::Definition => HighlightKind::Write,
+ LabelKind::Reference | LabelKind::ReferenceRange => HighlightKind::Read,
+ };
+
+ results.push(Highlight { range, kind });
+ }
+
+ Some(())
+}
diff --git a/support/texlab/crates/highlights/src/lib.rs b/support/texlab/crates/highlights/src/lib.rs
new file mode 100644
index 0000000000..1845da3907
--- /dev/null
+++ b/support/texlab/crates/highlights/src/lib.rs
@@ -0,0 +1,31 @@
+use base_db::FeatureParams;
+use rowan::{TextRange, TextSize};
+
+mod label;
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub struct Highlight {
+ pub range: TextRange,
+ pub kind: HighlightKind,
+}
+
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)]
+pub enum HighlightKind {
+ Write,
+ Read,
+}
+
+#[derive(Debug)]
+pub struct HighlightParams<'a> {
+ pub feature: FeatureParams<'a>,
+ pub offset: TextSize,
+}
+
+pub fn find_all(params: HighlightParams) -> Vec<Highlight> {
+ let mut results = Vec::new();
+ label::find_highlights(&params, &mut results);
+ results
+}
+
+#[cfg(test)]
+mod tests;
diff --git a/support/texlab/crates/highlights/src/tests.rs b/support/texlab/crates/highlights/src/tests.rs
new file mode 100644
index 0000000000..74c3cc0c18
--- /dev/null
+++ b/support/texlab/crates/highlights/src/tests.rs
@@ -0,0 +1,41 @@
+use crate::{HighlightKind, HighlightParams};
+
+fn check(input: &str, expected_kinds: &[HighlightKind]) {
+ let fixture = test_utils::fixture::Fixture::parse(input);
+
+ let (feature, offset) = fixture.make_params().unwrap();
+
+ let expected_ranges = fixture
+ .locations()
+ .map(|location| location.range)
+ .collect::<Vec<_>>();
+
+ let results = crate::find_all(HighlightParams { feature, offset });
+
+ let actual_ranges = results
+ .iter()
+ .map(|result| result.range)
+ .collect::<Vec<_>>();
+ assert_eq!(actual_ranges, expected_ranges);
+
+ assert_eq!(
+ results.iter().map(|result| result.kind).collect::<Vec<_>>(),
+ expected_kinds
+ );
+}
+
+#[test]
+fn test_label() {
+ check(
+ r#"
+%! main.tex
+\label{foo}
+ |
+ ^^^
+\ref{foo}
+ ^^^
+\label{bar}
+"#,
+ &[HighlightKind::Write, HighlightKind::Read],
+ )
+}
diff --git a/support/texlab/crates/hover/Cargo.toml b/support/texlab/crates/hover/Cargo.toml
index 0db19b8189..af8f4f566b 100644
--- a/support/texlab/crates/hover/Cargo.toml
+++ b/support/texlab/crates/hover/Cargo.toml
@@ -11,7 +11,7 @@ base-db = { path = "../base-db" }
bibtex-utils = { path = "../bibtex-utils" }
citeproc = { path = "../citeproc" }
completion-data = { path = "../completion-data" }
-rowan = "0.15.11"
+rowan = "0.15.13"
syntax = { path = "../syntax" }
[dev-dependencies]
diff --git a/support/texlab/crates/hover/src/citation.rs b/support/texlab/crates/hover/src/citation.rs
index 49e5359bba..372668997e 100644
--- a/support/texlab/crates/hover/src/citation.rs
+++ b/support/texlab/crates/hover/src/citation.rs
@@ -4,14 +4,14 @@ use syntax::bibtex;
use crate::{Hover, HoverData, HoverParams};
-pub(super) fn find_hover<'db>(params: &HoverParams<'db>) -> Option<Hover<'db>> {
- let offset = params.offset;
+pub(super) fn find_hover<'a>(params: &HoverParams<'a>) -> Option<Hover<'a>> {
+ let HoverParams { feature, offset } = params;
- let (name, range) = match &params.document.data {
+ let (name, range) = match &feature.document.data {
DocumentData::Tex(data) => {
let result = queries::object_at_cursor(
&data.semantics.citations,
- offset,
+ *offset,
queries::SearchMode::Full,
)?;
(&result.object.name.text, result.range)
@@ -19,7 +19,7 @@ pub(super) fn find_hover<'db>(params: &HoverParams<'db>) -> Option<Hover<'db>> {
DocumentData::Bib(data) => {
let result = queries::object_at_cursor(
&data.semantics.entries,
- offset,
+ *offset,
queries::SearchMode::Name,
)?;
(&result.object.name.text, result.range)
@@ -27,7 +27,7 @@ pub(super) fn find_hover<'db>(params: &HoverParams<'db>) -> Option<Hover<'db>> {
_ => return None,
};
- let text = params.project.documents.iter().find_map(|document| {
+ let text = feature.project.documents.iter().find_map(|document| {
let data = document.data.as_bib()?;
let root = bibtex::Root::cast(data.root_node())?;
let entry = root.find_entry(name)?;
diff --git a/support/texlab/crates/hover/src/entry_type.rs b/support/texlab/crates/hover/src/entry_type.rs
index f4941b4ee0..f3417e960d 100644
--- a/support/texlab/crates/hover/src/entry_type.rs
+++ b/support/texlab/crates/hover/src/entry_type.rs
@@ -3,8 +3,8 @@ use syntax::bibtex;
use crate::{Hover, HoverData, HoverParams};
-pub(super) fn find_hover<'db>(params: &'db HoverParams) -> Option<Hover<'db>> {
- let data = params.document.data.as_bib()?;
+pub(super) fn find_hover<'a>(params: &HoverParams<'a>) -> Option<Hover<'a>> {
+ let data = params.feature.document.data.as_bib()?;
let root = data.root_node();
let name = root
.token_at_offset(params.offset)
diff --git a/support/texlab/crates/hover/src/field_type.rs b/support/texlab/crates/hover/src/field_type.rs
index 18ebe6b78f..ec9078410a 100644
--- a/support/texlab/crates/hover/src/field_type.rs
+++ b/support/texlab/crates/hover/src/field_type.rs
@@ -4,8 +4,8 @@ use syntax::bibtex;
use crate::{Hover, HoverData, HoverParams};
-pub(super) fn find_hover<'db>(params: &HoverParams<'db>) -> Option<Hover<'db>> {
- let data = params.document.data.as_bib()?;
+pub(super) fn find_hover<'a>(params: &HoverParams<'a>) -> Option<Hover<'a>> {
+ let data = params.feature.document.data.as_bib()?;
let root = data.root_node();
let name = root
.token_at_offset(params.offset)
diff --git a/support/texlab/crates/hover/src/label.rs b/support/texlab/crates/hover/src/label.rs
index fc9694fc6c..fc944aeaed 100644
--- a/support/texlab/crates/hover/src/label.rs
+++ b/support/texlab/crates/hover/src/label.rs
@@ -8,19 +8,20 @@ use base_db::{
use crate::{Hover, HoverData, HoverParams};
-pub(super) fn find_hover<'db>(params: &'db HoverParams<'db>) -> Option<Hover<'db>> {
- let data = params.document.data.as_tex()?;
+pub(super) fn find_hover<'a>(params: &HoverParams<'a>) -> Option<Hover<'a>> {
+ let feature = &params.feature;
+ let data = feature.document.data.as_tex()?;
let cursor = queries::object_at_cursor(
&data.semantics.labels,
params.offset,
queries::SearchMode::Full,
)?;
- let (_, definition) = tex::Label::find_all(&params.project)
+ let (_, definition) = tex::Label::find_all(&feature.project)
.filter(|(_, label)| label.kind == tex::LabelKind::Definition)
.find(|(_, label)| label.name_text() == cursor.object.name_text())?;
- let label = render_label(params.workspace, &params.project, definition)?;
+ let label = render_label(feature.workspace, &feature.project, definition)?;
Some(Hover {
range: cursor.range,
data: HoverData::Label(label),
diff --git a/support/texlab/crates/hover/src/lib.rs b/support/texlab/crates/hover/src/lib.rs
index 88be3b919a..bd16be3282 100644
--- a/support/texlab/crates/hover/src/lib.rs
+++ b/support/texlab/crates/hover/src/lib.rs
@@ -8,30 +8,16 @@ mod string_ref;
use base_db::{
data::{BibtexEntryType, BibtexFieldType},
util::RenderedLabel,
- Document, Project, Workspace,
+ FeatureParams,
};
use rowan::{TextRange, TextSize};
#[derive(Debug)]
-pub struct HoverParams<'db> {
- pub document: &'db Document,
- pub project: Project<'db>,
- pub workspace: &'db Workspace,
+pub struct HoverParams<'a> {
+ pub feature: FeatureParams<'a>,
pub offset: TextSize,
}
-impl<'db> HoverParams<'db> {
- pub fn new(workspace: &'db Workspace, document: &'db Document, offset: TextSize) -> Self {
- let project = workspace.project(document);
- Self {
- document,
- project,
- workspace,
- offset,
- }
- }
-}
-
#[derive(Debug, Clone)]
pub struct Hover<'db> {
pub range: TextRange,
@@ -48,13 +34,13 @@ pub enum HoverData<'db> {
StringRef(String),
}
-pub fn find<'db>(params: &'db HoverParams<'db>) -> Option<Hover<'db>> {
- citation::find_hover(params)
- .or_else(|| package::find_hover(params))
- .or_else(|| entry_type::find_hover(params))
- .or_else(|| field_type::find_hover(params))
- .or_else(|| label::find_hover(params))
- .or_else(|| string_ref::find_hover(params))
+pub fn find(params: HoverParams) -> Option<Hover> {
+ citation::find_hover(&params)
+ .or_else(|| package::find_hover(&params))
+ .or_else(|| entry_type::find_hover(&params))
+ .or_else(|| field_type::find_hover(&params))
+ .or_else(|| label::find_hover(&params))
+ .or_else(|| string_ref::find_hover(&params))
}
#[cfg(test)]
diff --git a/support/texlab/crates/hover/src/package.rs b/support/texlab/crates/hover/src/package.rs
index 1d6b328860..1dfc86573d 100644
--- a/support/texlab/crates/hover/src/package.rs
+++ b/support/texlab/crates/hover/src/package.rs
@@ -2,8 +2,8 @@ use base_db::semantics::tex::LinkKind;
use crate::{Hover, HoverData, HoverParams};
-pub(super) fn find_hover<'db>(params: &HoverParams<'db>) -> Option<Hover<'db>> {
- let data = params.document.data.as_tex()?;
+pub(super) fn find_hover<'a>(params: &HoverParams<'a>) -> Option<Hover<'a>> {
+ let data = params.feature.document.data.as_tex()?;
data.semantics
.links
.iter()
diff --git a/support/texlab/crates/hover/src/string_ref.rs b/support/texlab/crates/hover/src/string_ref.rs
index 7ea84113e0..6726041af2 100644
--- a/support/texlab/crates/hover/src/string_ref.rs
+++ b/support/texlab/crates/hover/src/string_ref.rs
@@ -4,8 +4,8 @@ use syntax::bibtex::{self, HasName, HasValue};
use crate::{Hover, HoverData, HoverParams};
-pub(super) fn find_hover<'db>(params: &HoverParams<'db>) -> Option<Hover<'db>> {
- let data = params.document.data.as_bib()?;
+pub(super) fn find_hover<'a>(params: &HoverParams<'a>) -> Option<Hover<'a>> {
+ let data = params.feature.document.data.as_bib()?;
let root = bibtex::Root::cast(data.root_node())?;
let name = root
.syntax()
diff --git a/support/texlab/crates/hover/src/tests.rs b/support/texlab/crates/hover/src/tests.rs
index 0db913d0b5..bbe33fa2db 100644
--- a/support/texlab/crates/hover/src/tests.rs
+++ b/support/texlab/crates/hover/src/tests.rs
@@ -4,12 +4,9 @@ use crate::HoverParams;
fn check(input: &str, expect: Expect) {
let fixture = test_utils::fixture::Fixture::parse(input);
- let workspace = &fixture.workspace;
- let document = workspace.lookup(&fixture.documents[0].uri).unwrap();
- let offset = fixture.documents[0].cursor.unwrap();
- let params = HoverParams::new(workspace, document, offset);
-
- let data = crate::find(&params).map(|hover| {
+ let (feature, offset) = fixture.make_params().unwrap();
+ let params = HoverParams { feature, offset };
+ let data = crate::find(params).map(|hover| {
assert_eq!(fixture.documents[0].ranges[0], hover.range);
hover.data
});
diff --git a/support/texlab/crates/inlay-hints/Cargo.toml b/support/texlab/crates/inlay-hints/Cargo.toml
index 82b1c729b9..06a525a2f3 100644
--- a/support/texlab/crates/inlay-hints/Cargo.toml
+++ b/support/texlab/crates/inlay-hints/Cargo.toml
@@ -8,12 +8,12 @@ rust-version.workspace = true
[dependencies]
base-db = { path = "../base-db" }
-rowan = "0.15.11"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
-syntax = { path = "../syntax" }
[dev-dependencies]
test-utils = { path = "../test-utils" }
+expect-test = "1.4.1"
[lib]
doctest = false
diff --git a/support/texlab/crates/inlay-hints/src/lib.rs b/support/texlab/crates/inlay-hints/src/lib.rs
index 48373d305b..e3c80751f0 100644
--- a/support/texlab/crates/inlay-hints/src/lib.rs
+++ b/support/texlab/crates/inlay-hints/src/lib.rs
@@ -34,3 +34,6 @@ struct InlayHintBuilder<'a> {
params: InlayHintParams<'a>,
hints: Vec<InlayHint<'a>>,
}
+
+#[cfg(test)]
+mod tests;
diff --git a/support/texlab/crates/inlay-hints/src/tests.rs b/support/texlab/crates/inlay-hints/src/tests.rs
new file mode 100644
index 0000000000..5b8a43d614
--- /dev/null
+++ b/support/texlab/crates/inlay-hints/src/tests.rs
@@ -0,0 +1,108 @@
+use expect_test::{expect, Expect};
+use rowan::{TextLen, TextRange};
+
+fn check(input: &str, expect: Expect) {
+ let fixture = test_utils::fixture::Fixture::parse(input);
+
+ let (feature, _) = fixture.make_params().unwrap();
+ let range = TextRange::new(0.into(), feature.document.text.text_len());
+ let params = crate::InlayHintParams { range, feature };
+ let actual = crate::find_all(params).unwrap_or_default();
+
+ let expected_offsets = fixture.locations().map(|location| location.range.start());
+ for (hint, offset) in actual.iter().zip(expected_offsets) {
+ assert_eq!(hint.offset, offset);
+ }
+
+ let data = actual.into_iter().map(|hint| hint.data).collect::<Vec<_>>();
+ expect.assert_debug_eq(&data);
+}
+
+#[test]
+fn test_label_definition() {
+ check(
+ r#"
+%! main.tex
+\documentclass{article}
+\usepackage{caption}
+\begin{document}
+\section{Foo}\label{sec:foo}
+ !
+\section{Bar}\label{sec:bar}
+ !
+\subsection{Baz}\label{sec:baz}
+ !
+\begin{figure}
+ Test
+ \label{fig:qux}
+ !
+ \caption{Qux}
+\end{figure}
+\end{document}
+
+%! main.aux
+\relax
+\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
+\newlabel{fig:qux}{{\caption@xref {fig:qux}{ on input line 15}}{1}}
+\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Qux\relax }}{1}{}\protected@file@percent }
+\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}{}\protected@file@percent }
+\newlabel{sec:foo}{{1}{1}}
+\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}{}\protected@file@percent }
+\newlabel{sec:bar}{{2}{1}}
+\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Baz}{1}{}\protected@file@percent }
+\newlabel{sec:baz}{{2.1}{1}}
+\gdef \@abspage@last{1}"#,
+ expect![[r#"
+ [
+ LabelDefinition(
+ RenderedLabel {
+ range: 62..90,
+ number: Some(
+ "1",
+ ),
+ object: Section {
+ prefix: "Section",
+ text: "Foo",
+ },
+ },
+ ),
+ LabelDefinition(
+ RenderedLabel {
+ range: 91..226,
+ number: Some(
+ "2",
+ ),
+ object: Section {
+ prefix: "Section",
+ text: "Bar",
+ },
+ },
+ ),
+ LabelDefinition(
+ RenderedLabel {
+ range: 120..226,
+ number: Some(
+ "2.1",
+ ),
+ object: Section {
+ prefix: "Subsection",
+ text: "Baz",
+ },
+ },
+ ),
+ LabelDefinition(
+ RenderedLabel {
+ range: 152..226,
+ number: Some(
+ "fig:qux",
+ ),
+ object: Float {
+ kind: Figure,
+ caption: "Qux",
+ },
+ },
+ ),
+ ]
+ "#]],
+ );
+}
diff --git a/support/texlab/crates/line-index/Cargo.toml b/support/texlab/crates/line-index/Cargo.toml
new file mode 100644
index 0000000000..73d2766d60
--- /dev/null
+++ b/support/texlab/crates/line-index/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "line-index"
+version = "0.0.0"
+license.workspace = true
+authors.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+
+[dependencies]
+rustc-hash = "1.1.0"
+text-size = "1.1.1"
+
+[lib]
+doctest = false
diff --git a/support/texlab/crates/base-db/src/util/line_index.rs b/support/texlab/crates/line-index/src/lib.rs
index 3c5907782a..f604825d07 100644
--- a/support/texlab/crates/base-db/src/util/line_index.rs
+++ b/support/texlab/crates/line-index/src/lib.rs
@@ -4,8 +4,8 @@
//! representation.
use std::iter;
-use rowan::{TextRange, TextSize};
use rustc_hash::FxHashMap;
+use text_size::{TextRange, TextSize};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct LineIndex {
@@ -113,24 +113,24 @@ impl LineIndex {
}
}
- pub fn offset(&self, line_col: LineCol) -> TextSize {
- self.newlines[line_col.line as usize] + TextSize::from(line_col.col)
+ pub fn offset(&self, line_col: LineCol) -> Option<TextSize> {
+ Some(self.newlines.get(line_col.line as usize)? + TextSize::from(line_col.col))
}
- pub fn to_utf16(&self, line_col: LineCol) -> LineColUtf16 {
+ pub fn to_utf16(&self, line_col: LineCol) -> Option<LineColUtf16> {
let col = self.utf8_to_utf16_col(line_col.line, line_col.col.into());
- LineColUtf16 {
+ Some(LineColUtf16 {
line: line_col.line,
col: col as u32,
- }
+ })
}
- pub fn to_utf8(&self, line_col: LineColUtf16) -> LineCol {
+ pub fn to_utf8(&self, line_col: LineColUtf16) -> Option<LineCol> {
let col = self.utf16_to_utf8_col(line_col.line, line_col.col);
- LineCol {
+ Some(LineCol {
line: line_col.line,
col: col.into(),
- }
+ })
}
pub fn lines(&self, range: TextRange) -> impl Iterator<Item = TextRange> + '_ {
diff --git a/support/texlab/crates/links/Cargo.toml b/support/texlab/crates/links/Cargo.toml
new file mode 100644
index 0000000000..d3df0c95f8
--- /dev/null
+++ b/support/texlab/crates/links/Cargo.toml
@@ -0,0 +1,17 @@
+[package]
+name = "links"
+version = "0.0.0"
+license.workspace = true
+authors.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+
+[dependencies]
+base-db = { path = "../base-db" }
+
+[dev-dependencies]
+test-utils = { path = "../test-utils" }
+expect-test = "1.4.1"
+
+[lib]
+doctest = false
diff --git a/support/texlab/crates/links/src/include.rs b/support/texlab/crates/links/src/include.rs
new file mode 100644
index 0000000000..374e0089df
--- /dev/null
+++ b/support/texlab/crates/links/src/include.rs
@@ -0,0 +1,26 @@
+use base_db::{DocumentLocation, FeatureParams};
+
+pub(super) fn find_links<'a>(
+ params: FeatureParams<'a>,
+ results: &mut Vec<DocumentLocation<'a>>,
+) -> Option<()> {
+ let document = params.document;
+ let parent = *params
+ .workspace
+ .parents(document)
+ .iter()
+ .next()
+ .unwrap_or(&document);
+
+ let graph = base_db::graph::Graph::new(params.workspace, parent);
+
+ for edge in &graph.edges {
+ if edge.source == document {
+ if let Some(weight) = &edge.weight {
+ results.push(DocumentLocation::new(edge.target, weight.link.path.range));
+ }
+ }
+ }
+
+ Some(())
+}
diff --git a/support/texlab/crates/links/src/lib.rs b/support/texlab/crates/links/src/lib.rs
new file mode 100644
index 0000000000..67e48cf930
--- /dev/null
+++ b/support/texlab/crates/links/src/lib.rs
@@ -0,0 +1,12 @@
+use base_db::{DocumentLocation, FeatureParams};
+
+mod include;
+
+pub fn find_links(params: FeatureParams) -> Vec<DocumentLocation> {
+ let mut results = Vec::new();
+ include::find_links(params, &mut results);
+ results
+}
+
+#[cfg(test)]
+mod tests;
diff --git a/support/texlab/crates/links/src/tests.rs b/support/texlab/crates/links/src/tests.rs
new file mode 100644
index 0000000000..d083b33be6
--- /dev/null
+++ b/support/texlab/crates/links/src/tests.rs
@@ -0,0 +1,57 @@
+use expect_test::{expect, Expect};
+
+fn check(input: &str, expect: Expect) {
+ let fixture = test_utils::fixture::Fixture::parse(input);
+ let (params, _) = fixture.make_params().unwrap();
+ let links = crate::find_links(params);
+
+ let actual_ranges = links.iter().map(|link| link.range).collect::<Vec<_>>();
+
+ let expected_ranges = fixture
+ .locations()
+ .map(|location| location.range)
+ .collect::<Vec<_>>();
+
+ assert_eq!(actual_ranges, expected_ranges);
+
+ let actual_targets = links
+ .iter()
+ .map(|link| link.document.uri.as_str())
+ .collect::<Vec<_>>();
+
+ expect.assert_debug_eq(&actual_targets);
+}
+
+#[test]
+fn test_document_include() {
+ check(
+ r#"
+%! foo.tex
+\input{bar.tex}
+ ^^^^^^^
+
+%! bar.tex"#,
+ expect![[r#"
+ [
+ "file:///texlab/bar.tex",
+ ]
+ "#]],
+ );
+}
+
+#[test]
+fn test_document_import() {
+ check(
+ r#"
+%! foo.tex
+\import{.}{bar/baz}
+ ^^^^^^^
+
+%! bar/baz.tex"#,
+ expect![[r#"
+ [
+ "file:///texlab/bar/baz.tex",
+ ]
+ "#]],
+ );
+}
diff --git a/support/texlab/crates/parser/Cargo.toml b/support/texlab/crates/parser/Cargo.toml
index 989569d0b6..47ab9bc721 100644
--- a/support/texlab/crates/parser/Cargo.toml
+++ b/support/texlab/crates/parser/Cargo.toml
@@ -9,13 +9,14 @@ rust-version.workspace = true
[dependencies]
logos = "0.13.0"
once_cell = "1.18.0"
-regex = "1.9.1"
-rowan = "0.15.11"
+regex = "1.10.2"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
+tempfile = "3.8.1"
[dev-dependencies]
-insta = { version = "1.32.0", features = ["glob", "redactions", "json"] }
+expect-test = "1.4.1"
[lib]
doctest = false
diff --git a/support/texlab/crates/parser/src/bibtex.rs b/support/texlab/crates/parser/src/bibtex.rs
index d74254b2c5..fda0d4a0ad 100644
--- a/support/texlab/crates/parser/src/bibtex.rs
+++ b/support/texlab/crates/parser/src/bibtex.rs
@@ -436,17 +436,4 @@ impl From<ContentToken> for SyntaxKind {
}
#[cfg(test)]
-mod tests {
- use syntax::bibtex;
-
- use super::parse_bibtex;
-
- #[test]
- fn test_parse() {
- insta::glob!("test_data/bibtex/{,**/}*.txt", |path| {
- let text = std::fs::read_to_string(path).unwrap().replace("\r\n", "\n");
- let root = bibtex::SyntaxNode::new_root(parse_bibtex(&text));
- insta::assert_debug_snapshot!(root);
- });
- }
-}
+mod tests;
diff --git a/support/texlab/crates/parser/src/bibtex/tests.rs b/support/texlab/crates/parser/src/bibtex/tests.rs
new file mode 100644
index 0000000000..e2bb1314d8
--- /dev/null
+++ b/support/texlab/crates/parser/src/bibtex/tests.rs
@@ -0,0 +1,3994 @@
+use expect_test::{expect, Expect};
+
+use crate::parse_bibtex;
+
+fn check(input: &str, expect: Expect) {
+ let root = syntax::bibtex::SyntaxNode::new_root(parse_bibtex(input));
+ expect.assert_debug_eq(&root);
+}
+
+#[test]
+fn test_smoke() {
+ check(
+ r#""#,
+ expect![[r#"
+ ROOT@0..0
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_preamble() {
+ check(
+ r#"@article{test, author = {\"{\i}}}"#,
+ expect![[r#"
+ ROOT@0..33
+ ENTRY@0..33
+ TYPE@0..8 "@article"
+ L_DELIM@8..9 "{"
+ NAME@9..13 "test"
+ COMMA@13..14 ","
+ WHITESPACE@14..15 " "
+ FIELD@15..32
+ NAME@15..21 "author"
+ WHITESPACE@21..22 " "
+ EQ@22..23 "="
+ WHITESPACE@23..24 " "
+ CURLY_GROUP@24..32
+ L_CURLY@24..25 "{"
+ ACCENT@25..31
+ ACCENT_NAME@25..27 "\\\""
+ L_CURLY@27..28 "{"
+ COMMAND_NAME@28..30 "\\i"
+ R_CURLY@30..31 "}"
+ R_CURLY@31..32 "}"
+ R_DELIM@32..33 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_comment() {
+ check(
+ r#"Some junk here
+
+@comment{foo,
+ author = {Foo Bar},
+ title = {Some Title},
+}
+"#,
+ expect![[r#"
+ ROOT@0..82
+ JUNK@0..16 "Some junk here\n\n"
+ TYPE@16..24 "@comment"
+ JUNK@24..82 "{foo,\n author = {F ..."
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_809() {
+ check(
+ r#"@article{issue_809,
+ title = {foo (" bar) baz},
+}"#,
+ expect![[r#"
+ ROOT@0..50
+ ENTRY@0..50
+ TYPE@0..8 "@article"
+ L_DELIM@8..9 "{"
+ NAME@9..18 "issue_809"
+ COMMA@18..19 ","
+ WHITESPACE@19..22 "\n "
+ FIELD@22..48
+ NAME@22..27 "title"
+ WHITESPACE@27..28 " "
+ EQ@28..29 "="
+ WHITESPACE@29..30 " "
+ CURLY_GROUP@30..47
+ L_CURLY@30..31 "{"
+ WORD@31..34 "foo"
+ WHITESPACE@34..35 " "
+ WORD@35..36 "("
+ QUOTE@36..37 "\""
+ WHITESPACE@37..38 " "
+ WORD@38..42 "bar)"
+ WHITESPACE@42..43 " "
+ WORD@43..46 "baz"
+ R_CURLY@46..47 "}"
+ COMMA@47..48 ","
+ WHITESPACE@48..49 "\n"
+ R_DELIM@49..50 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_945() {
+ check(
+ r#"@article{test, author = {\"{\i}}}"#,
+ expect![[r#"
+ ROOT@0..33
+ ENTRY@0..33
+ TYPE@0..8 "@article"
+ L_DELIM@8..9 "{"
+ NAME@9..13 "test"
+ COMMA@13..14 ","
+ WHITESPACE@14..15 " "
+ FIELD@15..32
+ NAME@15..21 "author"
+ WHITESPACE@21..22 " "
+ EQ@22..23 "="
+ WHITESPACE@23..24 " "
+ CURLY_GROUP@24..32
+ L_CURLY@24..25 "{"
+ ACCENT@25..31
+ ACCENT_NAME@25..27 "\\\""
+ L_CURLY@27..28 "{"
+ COMMAND_NAME@28..30 "\\i"
+ R_CURLY@30..31 "}"
+ R_CURLY@31..32 "}"
+ R_DELIM@32..33 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_aho_2006() {
+ check(
+ r#"@book{10.5555/1177220,
+ author = {Aho, Alfred V. and Lam, Monica S. and Sethi, Ravi and Ullman, Jeffrey D.},
+ title = {Compilers: Principles, Techniques, and Tools (2nd Edition)},
+ year = {2006},
+ isbn = {0321486811},
+ publisher = {Addison-Wesley Longman Publishing Co., Inc.},
+ address = {USA}
+}"#,
+ expect![[r#"
+ ROOT@0..314
+ ENTRY@0..314
+ TYPE@0..5 "@book"
+ L_DELIM@5..6 "{"
+ NAME@6..21 "10.5555/1177220"
+ COMMA@21..22 ","
+ WHITESPACE@22..27 "\n "
+ FIELD@27..111
+ NAME@27..33 "author"
+ WHITESPACE@33..34 " "
+ EQ@34..35 "="
+ WHITESPACE@35..36 " "
+ CURLY_GROUP@36..110
+ L_CURLY@36..37 "{"
+ WORD@37..40 "Aho"
+ COMMA@40..41 ","
+ WHITESPACE@41..42 " "
+ WORD@42..48 "Alfred"
+ WHITESPACE@48..49 " "
+ WORD@49..51 "V."
+ WHITESPACE@51..52 " "
+ WORD@52..55 "and"
+ WHITESPACE@55..56 " "
+ WORD@56..59 "Lam"
+ COMMA@59..60 ","
+ WHITESPACE@60..61 " "
+ WORD@61..67 "Monica"
+ WHITESPACE@67..68 " "
+ WORD@68..70 "S."
+ WHITESPACE@70..71 " "
+ WORD@71..74 "and"
+ WHITESPACE@74..75 " "
+ WORD@75..80 "Sethi"
+ COMMA@80..81 ","
+ WHITESPACE@81..82 " "
+ WORD@82..86 "Ravi"
+ WHITESPACE@86..87 " "
+ WORD@87..90 "and"
+ WHITESPACE@90..91 " "
+ WORD@91..97 "Ullman"
+ COMMA@97..98 ","
+ WHITESPACE@98..99 " "
+ WORD@99..106 "Jeffrey"
+ WHITESPACE@106..107 " "
+ WORD@107..109 "D."
+ R_CURLY@109..110 "}"
+ COMMA@110..111 ","
+ WHITESPACE@111..116 "\n "
+ FIELD@116..185
+ NAME@116..121 "title"
+ WHITESPACE@121..122 " "
+ EQ@122..123 "="
+ WHITESPACE@123..124 " "
+ CURLY_GROUP@124..184
+ L_CURLY@124..125 "{"
+ WORD@125..135 "Compilers:"
+ WHITESPACE@135..136 " "
+ WORD@136..146 "Principles"
+ COMMA@146..147 ","
+ WHITESPACE@147..148 " "
+ WORD@148..158 "Techniques"
+ COMMA@158..159 ","
+ WHITESPACE@159..160 " "
+ WORD@160..163 "and"
+ WHITESPACE@163..164 " "
+ WORD@164..169 "Tools"
+ WHITESPACE@169..170 " "
+ WORD@170..174 "(2nd"
+ WHITESPACE@174..175 " "
+ WORD@175..183 "Edition)"
+ R_CURLY@183..184 "}"
+ COMMA@184..185 ","
+ WHITESPACE@185..190 "\n "
+ FIELD@190..204
+ NAME@190..194 "year"
+ WHITESPACE@194..195 " "
+ EQ@195..196 "="
+ WHITESPACE@196..197 " "
+ CURLY_GROUP@197..203
+ L_CURLY@197..198 "{"
+ INTEGER@198..202 "2006"
+ R_CURLY@202..203 "}"
+ COMMA@203..204 ","
+ WHITESPACE@204..209 "\n "
+ FIELD@209..229
+ NAME@209..213 "isbn"
+ WHITESPACE@213..214 " "
+ EQ@214..215 "="
+ WHITESPACE@215..216 " "
+ CURLY_GROUP@216..228
+ L_CURLY@216..217 "{"
+ INTEGER@217..227 "0321486811"
+ R_CURLY@227..228 "}"
+ COMMA@228..229 ","
+ WHITESPACE@229..234 "\n "
+ FIELD@234..292
+ NAME@234..243 "publisher"
+ WHITESPACE@243..244 " "
+ EQ@244..245 "="
+ WHITESPACE@245..246 " "
+ CURLY_GROUP@246..291
+ L_CURLY@246..247 "{"
+ WORD@247..261 "Addison-Wesley"
+ WHITESPACE@261..262 " "
+ WORD@262..269 "Longman"
+ WHITESPACE@269..270 " "
+ WORD@270..280 "Publishing"
+ WHITESPACE@280..281 " "
+ WORD@281..284 "Co."
+ COMMA@284..285 ","
+ WHITESPACE@285..286 " "
+ WORD@286..290 "Inc."
+ R_CURLY@290..291 "}"
+ COMMA@291..292 ","
+ WHITESPACE@292..297 "\n "
+ FIELD@297..313
+ NAME@297..304 "address"
+ WHITESPACE@304..305 " "
+ EQ@305..306 "="
+ WHITESPACE@306..307 " "
+ CURLY_GROUP@307..312
+ L_CURLY@307..308 "{"
+ WORD@308..311 "USA"
+ R_CURLY@311..312 "}"
+ WHITESPACE@312..313 "\n"
+ R_DELIM@313..314 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_aksin_2006() {
+ check(
+ r#"@string{jomch = {J.~Organomet. Chem.}}
+
+@article{aksin,
+ author = {Aks{\i}n, {\"O}zge and T{\"u}rkmen, Hayati and Artok, Levent
+ and {\c{C}}etinkaya, Bekir and Ni, Chaoying and
+ B{\"u}y{\"u}kg{\"u}ng{\"o}r, Orhan and {\"O}zkal, Erhan},
+ title = {Effect of immobilization on catalytic characteristics of
+ saturated {Pd-N}-heterocyclic carbenes in {Mizoroki-Heck}
+ reactions},
+ journaltitle = jomch,
+ date = 2006,
+ volume = 691,
+ number = 13,
+ pages = {3027-3036},
+ indextitle = {Effect of immobilization on catalytic characteristics},
+}"#,
+ expect![[r#"
+ ROOT@0..679
+ STRING@0..40
+ TYPE@0..7 "@string"
+ L_DELIM@7..8 "{"
+ NAME@8..13 "jomch"
+ WHITESPACE@13..16 " "
+ EQ@16..17 "="
+ WHITESPACE@17..18 " "
+ CURLY_GROUP@18..39
+ L_CURLY@18..19 "{"
+ WORD@19..21 "J."
+ NBSP@21..22 "~"
+ WORD@22..32 "Organomet."
+ WHITESPACE@32..33 " "
+ WORD@33..38 "Chem."
+ R_CURLY@38..39 "}"
+ R_DELIM@39..40 "}"
+ JUNK@40..42 "\n\n"
+ ENTRY@42..679
+ TYPE@42..50 "@article"
+ L_DELIM@50..51 "{"
+ NAME@51..56 "aksin"
+ COMMA@56..57 ","
+ WHITESPACE@57..62 "\n "
+ FIELD@62..284
+ NAME@62..68 "author"
+ WHITESPACE@68..75 " "
+ EQ@75..76 "="
+ WHITESPACE@76..77 " "
+ CURLY_GROUP@77..283
+ L_CURLY@77..78 "{"
+ WORD@78..81 "Aks"
+ CURLY_GROUP@81..85
+ L_CURLY@81..82 "{"
+ COMMAND@82..84
+ COMMAND_NAME@82..84 "\\i"
+ R_CURLY@84..85 "}"
+ WORD@85..86 "n"
+ COMMA@86..87 ","
+ WHITESPACE@87..88 " "
+ CURLY_GROUP@88..93
+ L_CURLY@88..89 "{"
+ ACCENT@89..92
+ ACCENT_NAME@89..91 "\\\""
+ WORD@91..92 "O"
+ R_CURLY@92..93 "}"
+ WORD@93..96 "zge"
+ WHITESPACE@96..97 " "
+ WORD@97..100 "and"
+ WHITESPACE@100..101 " "
+ WORD@101..102 "T"
+ CURLY_GROUP@102..107
+ L_CURLY@102..103 "{"
+ ACCENT@103..106
+ ACCENT_NAME@103..105 "\\\""
+ WORD@105..106 "u"
+ R_CURLY@106..107 "}"
+ WORD@107..112 "rkmen"
+ COMMA@112..113 ","
+ WHITESPACE@113..114 " "
+ WORD@114..120 "Hayati"
+ WHITESPACE@120..121 " "
+ WORD@121..124 "and"
+ WHITESPACE@124..125 " "
+ WORD@125..130 "Artok"
+ COMMA@130..131 ","
+ WHITESPACE@131..132 " "
+ WORD@132..138 "Levent"
+ WHITESPACE@138..159 "\n "
+ WORD@159..162 "and"
+ WHITESPACE@162..163 " "
+ CURLY_GROUP@163..170
+ L_CURLY@163..164 "{"
+ ACCENT@164..169
+ ACCENT_NAME@164..166 "\\c"
+ L_CURLY@166..167 "{"
+ WORD@167..168 "C"
+ R_CURLY@168..169 "}"
+ R_CURLY@169..170 "}"
+ WORD@170..178 "etinkaya"
+ COMMA@178..179 ","
+ WHITESPACE@179..180 " "
+ WORD@180..185 "Bekir"
+ WHITESPACE@185..186 " "
+ WORD@186..189 "and"
+ WHITESPACE@189..190 " "
+ WORD@190..192 "Ni"
+ COMMA@192..193 ","
+ WHITESPACE@193..194 " "
+ WORD@194..202 "Chaoying"
+ WHITESPACE@202..203 " "
+ WORD@203..206 "and"
+ WHITESPACE@206..227 "\n "
+ WORD@227..228 "B"
+ CURLY_GROUP@228..233
+ L_CURLY@228..229 "{"
+ ACCENT@229..232
+ ACCENT_NAME@229..231 "\\\""
+ WORD@231..232 "u"
+ R_CURLY@232..233 "}"
+ WORD@233..234 "y"
+ CURLY_GROUP@234..239
+ L_CURLY@234..235 "{"
+ ACCENT@235..238
+ ACCENT_NAME@235..237 "\\\""
+ WORD@237..238 "u"
+ R_CURLY@238..239 "}"
+ WORD@239..241 "kg"
+ CURLY_GROUP@241..246
+ L_CURLY@241..242 "{"
+ ACCENT@242..245
+ ACCENT_NAME@242..244 "\\\""
+ WORD@244..245 "u"
+ R_CURLY@245..246 "}"
+ WORD@246..248 "ng"
+ CURLY_GROUP@248..253
+ L_CURLY@248..249 "{"
+ ACCENT@249..252
+ ACCENT_NAME@249..251 "\\\""
+ WORD@251..252 "o"
+ R_CURLY@252..253 "}"
+ WORD@253..254 "r"
+ COMMA@254..255 ","
+ WHITESPACE@255..256 " "
+ WORD@256..261 "Orhan"
+ WHITESPACE@261..262 " "
+ WORD@262..265 "and"
+ WHITESPACE@265..266 " "
+ CURLY_GROUP@266..271
+ L_CURLY@266..267 "{"
+ ACCENT@267..270
+ ACCENT_NAME@267..269 "\\\""
+ WORD@269..270 "O"
+ R_CURLY@270..271 "}"
+ WORD@271..275 "zkal"
+ COMMA@275..276 ","
+ WHITESPACE@276..277 " "
+ WORD@277..282 "Erhan"
+ R_CURLY@282..283 "}"
+ COMMA@283..284 ","
+ WHITESPACE@284..289 "\n "
+ FIELD@289..471
+ NAME@289..294 "title"
+ WHITESPACE@294..302 " "
+ EQ@302..303 "="
+ WHITESPACE@303..304 " "
+ CURLY_GROUP@304..470
+ L_CURLY@304..305 "{"
+ WORD@305..311 "Effect"
+ WHITESPACE@311..312 " "
+ WORD@312..314 "of"
+ WHITESPACE@314..315 " "
+ WORD@315..329 "immobilization"
+ WHITESPACE@329..330 " "
+ WORD@330..332 "on"
+ WHITESPACE@332..333 " "
+ WORD@333..342 "catalytic"
+ WHITESPACE@342..343 " "
+ WORD@343..358 "characteristics"
+ WHITESPACE@358..359 " "
+ WORD@359..361 "of"
+ WHITESPACE@361..382 "\n "
+ WORD@382..391 "saturated"
+ WHITESPACE@391..392 " "
+ CURLY_GROUP@392..398
+ L_CURLY@392..393 "{"
+ WORD@393..397 "Pd-N"
+ R_CURLY@397..398 "}"
+ WORD@398..411 "-heterocyclic"
+ WHITESPACE@411..412 " "
+ WORD@412..420 "carbenes"
+ WHITESPACE@420..421 " "
+ WORD@421..423 "in"
+ WHITESPACE@423..424 " "
+ CURLY_GROUP@424..439
+ L_CURLY@424..425 "{"
+ WORD@425..438 "Mizoroki-Heck"
+ R_CURLY@438..439 "}"
+ WHITESPACE@439..460 "\n "
+ WORD@460..469 "reactions"
+ R_CURLY@469..470 "}"
+ COMMA@470..471 ","
+ WHITESPACE@471..476 "\n "
+ FIELD@476..497
+ NAME@476..488 "journaltitle"
+ WHITESPACE@488..489 " "
+ EQ@489..490 "="
+ WHITESPACE@490..491 " "
+ LITERAL@491..496
+ NAME@491..496 "jomch"
+ COMMA@496..497 ","
+ WHITESPACE@497..502 "\n "
+ FIELD@502..522
+ NAME@502..506 "date"
+ WHITESPACE@506..515 " "
+ EQ@515..516 "="
+ WHITESPACE@516..517 " "
+ LITERAL@517..521
+ INTEGER@517..521 "2006"
+ COMMA@521..522 ","
+ WHITESPACE@522..527 "\n "
+ FIELD@527..546
+ NAME@527..533 "volume"
+ WHITESPACE@533..540 " "
+ EQ@540..541 "="
+ WHITESPACE@541..542 " "
+ LITERAL@542..545
+ INTEGER@542..545 "691"
+ COMMA@545..546 ","
+ WHITESPACE@546..551 "\n "
+ FIELD@551..569
+ NAME@551..557 "number"
+ WHITESPACE@557..564 " "
+ EQ@564..565 "="
+ WHITESPACE@565..566 " "
+ LITERAL@566..568
+ INTEGER@566..568 "13"
+ COMMA@568..569 ","
+ WHITESPACE@569..574 "\n "
+ FIELD@574..601
+ NAME@574..579 "pages"
+ WHITESPACE@579..587 " "
+ EQ@587..588 "="
+ WHITESPACE@588..589 " "
+ CURLY_GROUP@589..600
+ L_CURLY@589..590 "{"
+ WORD@590..599 "3027-3036"
+ R_CURLY@599..600 "}"
+ COMMA@600..601 ","
+ WHITESPACE@601..606 "\n "
+ FIELD@606..677
+ NAME@606..616 "indextitle"
+ WHITESPACE@616..619 " "
+ EQ@619..620 "="
+ WHITESPACE@620..621 " "
+ CURLY_GROUP@621..676
+ L_CURLY@621..622 "{"
+ WORD@622..628 "Effect"
+ WHITESPACE@628..629 " "
+ WORD@629..631 "of"
+ WHITESPACE@631..632 " "
+ WORD@632..646 "immobilization"
+ WHITESPACE@646..647 " "
+ WORD@647..649 "on"
+ WHITESPACE@649..650 " "
+ WORD@650..659 "catalytic"
+ WHITESPACE@659..660 " "
+ WORD@660..675 "characteristics"
+ R_CURLY@675..676 "}"
+ COMMA@676..677 ","
+ WHITESPACE@677..678 "\n"
+ R_DELIM@678..679 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_almendro_1998() {
+ check(
+ r#"@patent{almendro,
+ author = {Almendro, Jos{\'e} L. and Mart{\'i}n, Jacinto and S{\'a}nchez,
+ Alberto and Nozal, Fernando},
+ title = {Elektromagnetisches Signalhorn},
+ number = {EU-29702195U},
+ date = 1998,
+ location = {countryfr and countryuk and countryde},
+ langid = {german},
+ annotation = {This is a \texttt{patent} entry with a \texttt{location}
+ field. The number is given in the \texttt{number} field. Note
+ the format of the \texttt{location} field in the database
+ file. Compare \texttt{laufenberg}, \texttt{sorace}, and
+ \texttt{kowalik}},
+}"#,
+ expect![[r#"
+ ROOT@0..706
+ ENTRY@0..706
+ TYPE@0..7 "@patent"
+ L_DELIM@7..8 "{"
+ NAME@8..16 "almendro"
+ COMMA@16..17 ","
+ WHITESPACE@17..22 "\n "
+ FIELD@22..150
+ NAME@22..28 "author"
+ WHITESPACE@28..35 " "
+ EQ@35..36 "="
+ WHITESPACE@36..37 " "
+ CURLY_GROUP@37..149
+ L_CURLY@37..38 "{"
+ WORD@38..46 "Almendro"
+ COMMA@46..47 ","
+ WHITESPACE@47..48 " "
+ WORD@48..51 "Jos"
+ CURLY_GROUP@51..56
+ L_CURLY@51..52 "{"
+ ACCENT@52..55
+ ACCENT_NAME@52..54 "\\'"
+ WORD@54..55 "e"
+ R_CURLY@55..56 "}"
+ WHITESPACE@56..57 " "
+ WORD@57..59 "L."
+ WHITESPACE@59..60 " "
+ WORD@60..63 "and"
+ WHITESPACE@63..64 " "
+ WORD@64..68 "Mart"
+ CURLY_GROUP@68..73
+ L_CURLY@68..69 "{"
+ ACCENT@69..72
+ ACCENT_NAME@69..71 "\\'"
+ WORD@71..72 "i"
+ R_CURLY@72..73 "}"
+ WORD@73..74 "n"
+ COMMA@74..75 ","
+ WHITESPACE@75..76 " "
+ WORD@76..83 "Jacinto"
+ WHITESPACE@83..84 " "
+ WORD@84..87 "and"
+ WHITESPACE@87..88 " "
+ WORD@88..89 "S"
+ CURLY_GROUP@89..94
+ L_CURLY@89..90 "{"
+ ACCENT@90..93
+ ACCENT_NAME@90..92 "\\'"
+ WORD@92..93 "a"
+ R_CURLY@93..94 "}"
+ WORD@94..99 "nchez"
+ COMMA@99..100 ","
+ WHITESPACE@100..121 "\n "
+ WORD@121..128 "Alberto"
+ WHITESPACE@128..129 " "
+ WORD@129..132 "and"
+ WHITESPACE@132..133 " "
+ WORD@133..138 "Nozal"
+ COMMA@138..139 ","
+ WHITESPACE@139..140 " "
+ WORD@140..148 "Fernando"
+ R_CURLY@148..149 "}"
+ COMMA@149..150 ","
+ WHITESPACE@150..155 "\n "
+ FIELD@155..203
+ NAME@155..160 "title"
+ WHITESPACE@160..168 " "
+ EQ@168..169 "="
+ WHITESPACE@169..170 " "
+ CURLY_GROUP@170..202
+ L_CURLY@170..171 "{"
+ WORD@171..190 "Elektromagnetisches"
+ WHITESPACE@190..191 " "
+ WORD@191..201 "Signalhorn"
+ R_CURLY@201..202 "}"
+ COMMA@202..203 ","
+ WHITESPACE@203..208 "\n "
+ FIELD@208..238
+ NAME@208..214 "number"
+ WHITESPACE@214..221 " "
+ EQ@221..222 "="
+ WHITESPACE@222..223 " "
+ CURLY_GROUP@223..237
+ L_CURLY@223..224 "{"
+ WORD@224..236 "EU-29702195U"
+ R_CURLY@236..237 "}"
+ COMMA@237..238 ","
+ WHITESPACE@238..243 "\n "
+ FIELD@243..263
+ NAME@243..247 "date"
+ WHITESPACE@247..256 " "
+ EQ@256..257 "="
+ WHITESPACE@257..258 " "
+ LITERAL@258..262
+ INTEGER@258..262 "1998"
+ COMMA@262..263 ","
+ WHITESPACE@263..268 "\n "
+ FIELD@268..323
+ NAME@268..276 "location"
+ WHITESPACE@276..281 " "
+ EQ@281..282 "="
+ WHITESPACE@282..283 " "
+ CURLY_GROUP@283..322
+ L_CURLY@283..284 "{"
+ WORD@284..293 "countryfr"
+ WHITESPACE@293..294 " "
+ WORD@294..297 "and"
+ WHITESPACE@297..298 " "
+ WORD@298..307 "countryuk"
+ WHITESPACE@307..308 " "
+ WORD@308..311 "and"
+ WHITESPACE@311..312 " "
+ WORD@312..321 "countryde"
+ R_CURLY@321..322 "}"
+ COMMA@322..323 ","
+ WHITESPACE@323..328 "\n "
+ FIELD@328..352
+ NAME@328..334 "langid"
+ WHITESPACE@334..341 " "
+ EQ@341..342 "="
+ WHITESPACE@342..343 " "
+ CURLY_GROUP@343..351
+ L_CURLY@343..344 "{"
+ WORD@344..350 "german"
+ R_CURLY@350..351 "}"
+ COMMA@351..352 ","
+ WHITESPACE@352..357 "\n "
+ FIELD@357..704
+ NAME@357..367 "annotation"
+ WHITESPACE@367..370 " "
+ EQ@370..371 "="
+ WHITESPACE@371..372 " "
+ CURLY_GROUP@372..703
+ L_CURLY@372..373 "{"
+ WORD@373..377 "This"
+ WHITESPACE@377..378 " "
+ WORD@378..380 "is"
+ WHITESPACE@380..381 " "
+ WORD@381..382 "a"
+ WHITESPACE@382..383 " "
+ COMMAND@383..390
+ COMMAND_NAME@383..390 "\\texttt"
+ CURLY_GROUP@390..398
+ L_CURLY@390..391 "{"
+ WORD@391..397 "patent"
+ R_CURLY@397..398 "}"
+ WHITESPACE@398..399 " "
+ WORD@399..404 "entry"
+ WHITESPACE@404..405 " "
+ WORD@405..409 "with"
+ WHITESPACE@409..410 " "
+ WORD@410..411 "a"
+ WHITESPACE@411..412 " "
+ COMMAND@412..419
+ COMMAND_NAME@412..419 "\\texttt"
+ CURLY_GROUP@419..429
+ L_CURLY@419..420 "{"
+ WORD@420..428 "location"
+ R_CURLY@428..429 "}"
+ WHITESPACE@429..450 "\n "
+ WORD@450..456 "field."
+ WHITESPACE@456..457 " "
+ WORD@457..460 "The"
+ WHITESPACE@460..461 " "
+ WORD@461..467 "number"
+ WHITESPACE@467..468 " "
+ WORD@468..470 "is"
+ WHITESPACE@470..471 " "
+ WORD@471..476 "given"
+ WHITESPACE@476..477 " "
+ WORD@477..479 "in"
+ WHITESPACE@479..480 " "
+ WORD@480..483 "the"
+ WHITESPACE@483..484 " "
+ COMMAND@484..491
+ COMMAND_NAME@484..491 "\\texttt"
+ CURLY_GROUP@491..499
+ L_CURLY@491..492 "{"
+ WORD@492..498 "number"
+ R_CURLY@498..499 "}"
+ WHITESPACE@499..500 " "
+ WORD@500..506 "field."
+ WHITESPACE@506..507 " "
+ WORD@507..511 "Note"
+ WHITESPACE@511..532 "\n "
+ WORD@532..535 "the"
+ WHITESPACE@535..536 " "
+ WORD@536..542 "format"
+ WHITESPACE@542..543 " "
+ WORD@543..545 "of"
+ WHITESPACE@545..546 " "
+ WORD@546..549 "the"
+ WHITESPACE@549..550 " "
+ COMMAND@550..557
+ COMMAND_NAME@550..557 "\\texttt"
+ CURLY_GROUP@557..567
+ L_CURLY@557..558 "{"
+ WORD@558..566 "location"
+ R_CURLY@566..567 "}"
+ WHITESPACE@567..568 " "
+ WORD@568..573 "field"
+ WHITESPACE@573..574 " "
+ WORD@574..576 "in"
+ WHITESPACE@576..577 " "
+ WORD@577..580 "the"
+ WHITESPACE@580..581 " "
+ WORD@581..589 "database"
+ WHITESPACE@589..610 "\n "
+ WORD@610..615 "file."
+ WHITESPACE@615..616 " "
+ WORD@616..623 "Compare"
+ WHITESPACE@623..624 " "
+ COMMAND@624..631
+ COMMAND_NAME@624..631 "\\texttt"
+ CURLY_GROUP@631..643
+ L_CURLY@631..632 "{"
+ WORD@632..642 "laufenberg"
+ R_CURLY@642..643 "}"
+ COMMA@643..644 ","
+ WHITESPACE@644..645 " "
+ COMMAND@645..652
+ COMMAND_NAME@645..652 "\\texttt"
+ CURLY_GROUP@652..660
+ L_CURLY@652..653 "{"
+ WORD@653..659 "sorace"
+ R_CURLY@659..660 "}"
+ COMMA@660..661 ","
+ WHITESPACE@661..662 " "
+ WORD@662..665 "and"
+ WHITESPACE@665..686 "\n "
+ COMMAND@686..693
+ COMMAND_NAME@686..693 "\\texttt"
+ CURLY_GROUP@693..702
+ L_CURLY@693..694 "{"
+ WORD@694..701 "kowalik"
+ R_CURLY@701..702 "}"
+ R_CURLY@702..703 "}"
+ COMMA@703..704 ","
+ WHITESPACE@704..705 "\n"
+ R_DELIM@705..706 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_averroes_1998() {
+ check(
+ r#"@book{averroes/bland,
+ author = {Averroes},
+ title = {The Epistle on the Possibility of Conjunction with the Active
+ Intellect by {Ibn Rushd} with the Commentary of {Moses Narboni}},
+ date = 1982,
+ editor = {Bland, Kalman P.},
+ translator = {Bland, Kalman P.},
+ series = {Moreshet: Studies in {Jewish} History, Literature and Thought},
+ number = 7,
+ publisher = {Jewish Theological Seminary of America},
+ location = {New York},
+ keywords = {primary},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Epistle on the Possibility of Conjunction, The},
+ shorttitle = {Possibility of Conjunction},
+ annotation = {A \texttt{book} entry with a \texttt{series} and a
+ \texttt{number}. Note the concatenation of the \texttt{editor}
+ and \texttt{translator} fields as well as the
+ \texttt{indextitle} field},
+}"#,
+ expect![[r#"
+ ROOT@0..1008
+ ENTRY@0..1008
+ TYPE@0..5 "@book"
+ L_DELIM@5..6 "{"
+ NAME@6..20 "averroes/bland"
+ COMMA@20..21 ","
+ WHITESPACE@21..26 "\n "
+ FIELD@26..52
+ NAME@26..32 "author"
+ WHITESPACE@32..39 " "
+ EQ@39..40 "="
+ WHITESPACE@40..41 " "
+ CURLY_GROUP@41..51
+ L_CURLY@41..42 "{"
+ WORD@42..50 "Averroes"
+ R_CURLY@50..51 "}"
+ COMMA@51..52 ","
+ WHITESPACE@52..57 "\n "
+ FIELD@57..220
+ NAME@57..62 "title"
+ WHITESPACE@62..70 " "
+ EQ@70..71 "="
+ WHITESPACE@71..72 " "
+ CURLY_GROUP@72..219
+ L_CURLY@72..73 "{"
+ WORD@73..76 "The"
+ WHITESPACE@76..77 " "
+ WORD@77..84 "Epistle"
+ WHITESPACE@84..85 " "
+ WORD@85..87 "on"
+ WHITESPACE@87..88 " "
+ WORD@88..91 "the"
+ WHITESPACE@91..92 " "
+ WORD@92..103 "Possibility"
+ WHITESPACE@103..104 " "
+ WORD@104..106 "of"
+ WHITESPACE@106..107 " "
+ WORD@107..118 "Conjunction"
+ WHITESPACE@118..119 " "
+ WORD@119..123 "with"
+ WHITESPACE@123..124 " "
+ WORD@124..127 "the"
+ WHITESPACE@127..128 " "
+ WORD@128..134 "Active"
+ WHITESPACE@134..155 "\n "
+ WORD@155..164 "Intellect"
+ WHITESPACE@164..165 " "
+ WORD@165..167 "by"
+ WHITESPACE@167..168 " "
+ CURLY_GROUP@168..179
+ L_CURLY@168..169 "{"
+ WORD@169..172 "Ibn"
+ WHITESPACE@172..173 " "
+ WORD@173..178 "Rushd"
+ R_CURLY@178..179 "}"
+ WHITESPACE@179..180 " "
+ WORD@180..184 "with"
+ WHITESPACE@184..185 " "
+ WORD@185..188 "the"
+ WHITESPACE@188..189 " "
+ WORD@189..199 "Commentary"
+ WHITESPACE@199..200 " "
+ WORD@200..202 "of"
+ WHITESPACE@202..203 " "
+ CURLY_GROUP@203..218
+ L_CURLY@203..204 "{"
+ WORD@204..209 "Moses"
+ WHITESPACE@209..210 " "
+ WORD@210..217 "Narboni"
+ R_CURLY@217..218 "}"
+ R_CURLY@218..219 "}"
+ COMMA@219..220 ","
+ WHITESPACE@220..225 "\n "
+ FIELD@225..245
+ NAME@225..229 "date"
+ WHITESPACE@229..238 " "
+ EQ@238..239 "="
+ WHITESPACE@239..240 " "
+ LITERAL@240..244
+ INTEGER@240..244 "1982"
+ COMMA@244..245 ","
+ WHITESPACE@245..250 "\n "
+ FIELD@250..284
+ NAME@250..256 "editor"
+ WHITESPACE@256..263 " "
+ EQ@263..264 "="
+ WHITESPACE@264..265 " "
+ CURLY_GROUP@265..283
+ L_CURLY@265..266 "{"
+ WORD@266..271 "Bland"
+ COMMA@271..272 ","
+ WHITESPACE@272..273 " "
+ WORD@273..279 "Kalman"
+ WHITESPACE@279..280 " "
+ WORD@280..282 "P."
+ R_CURLY@282..283 "}"
+ COMMA@283..284 ","
+ WHITESPACE@284..289 "\n "
+ FIELD@289..323
+ NAME@289..299 "translator"
+ WHITESPACE@299..302 " "
+ EQ@302..303 "="
+ WHITESPACE@303..304 " "
+ CURLY_GROUP@304..322
+ L_CURLY@304..305 "{"
+ WORD@305..310 "Bland"
+ COMMA@310..311 ","
+ WHITESPACE@311..312 " "
+ WORD@312..318 "Kalman"
+ WHITESPACE@318..319 " "
+ WORD@319..321 "P."
+ R_CURLY@321..322 "}"
+ COMMA@322..323 ","
+ WHITESPACE@323..328 "\n "
+ FIELD@328..407
+ NAME@328..334 "series"
+ WHITESPACE@334..341 " "
+ EQ@341..342 "="
+ WHITESPACE@342..343 " "
+ CURLY_GROUP@343..406
+ L_CURLY@343..344 "{"
+ WORD@344..353 "Moreshet:"
+ WHITESPACE@353..354 " "
+ WORD@354..361 "Studies"
+ WHITESPACE@361..362 " "
+ WORD@362..364 "in"
+ WHITESPACE@364..365 " "
+ CURLY_GROUP@365..373
+ L_CURLY@365..366 "{"
+ WORD@366..372 "Jewish"
+ R_CURLY@372..373 "}"
+ WHITESPACE@373..374 " "
+ WORD@374..381 "History"
+ COMMA@381..382 ","
+ WHITESPACE@382..383 " "
+ WORD@383..393 "Literature"
+ WHITESPACE@393..394 " "
+ WORD@394..397 "and"
+ WHITESPACE@397..398 " "
+ WORD@398..405 "Thought"
+ R_CURLY@405..406 "}"
+ COMMA@406..407 ","
+ WHITESPACE@407..412 "\n "
+ FIELD@412..429
+ NAME@412..418 "number"
+ WHITESPACE@418..425 " "
+ EQ@425..426 "="
+ WHITESPACE@426..427 " "
+ LITERAL@427..428
+ INTEGER@427..428 "7"
+ COMMA@428..429 ","
+ WHITESPACE@429..434 "\n "
+ FIELD@434..490
+ NAME@434..443 "publisher"
+ WHITESPACE@443..447 " "
+ EQ@447..448 "="
+ WHITESPACE@448..449 " "
+ CURLY_GROUP@449..489
+ L_CURLY@449..450 "{"
+ WORD@450..456 "Jewish"
+ WHITESPACE@456..457 " "
+ WORD@457..468 "Theological"
+ WHITESPACE@468..469 " "
+ WORD@469..477 "Seminary"
+ WHITESPACE@477..478 " "
+ WORD@478..480 "of"
+ WHITESPACE@480..481 " "
+ WORD@481..488 "America"
+ R_CURLY@488..489 "}"
+ COMMA@489..490 ","
+ WHITESPACE@490..495 "\n "
+ FIELD@495..521
+ NAME@495..503 "location"
+ WHITESPACE@503..508 " "
+ EQ@508..509 "="
+ WHITESPACE@509..510 " "
+ CURLY_GROUP@510..520
+ L_CURLY@510..511 "{"
+ WORD@511..514 "New"
+ WHITESPACE@514..515 " "
+ WORD@515..519 "York"
+ R_CURLY@519..520 "}"
+ COMMA@520..521 ","
+ WHITESPACE@521..526 "\n "
+ FIELD@526..551
+ NAME@526..534 "keywords"
+ WHITESPACE@534..539 " "
+ EQ@539..540 "="
+ WHITESPACE@540..541 " "
+ CURLY_GROUP@541..550
+ L_CURLY@541..542 "{"
+ WORD@542..549 "primary"
+ R_CURLY@549..550 "}"
+ COMMA@550..551 ","
+ WHITESPACE@551..556 "\n "
+ FIELD@556..581
+ NAME@556..562 "langid"
+ WHITESPACE@562..569 " "
+ EQ@569..570 "="
+ WHITESPACE@570..571 " "
+ CURLY_GROUP@571..580
+ L_CURLY@571..572 "{"
+ WORD@572..579 "english"
+ R_CURLY@579..580 "}"
+ COMMA@580..581 ","
+ WHITESPACE@581..586 "\n "
+ FIELD@586..620
+ NAME@586..596 "langidopts"
+ WHITESPACE@596..599 " "
+ EQ@599..600 "="
+ WHITESPACE@600..601 " "
+ CURLY_GROUP@601..619
+ L_CURLY@601..602 "{"
+ WORD@602..618 "variant=american"
+ R_CURLY@618..619 "}"
+ COMMA@619..620 ","
+ WHITESPACE@620..625 "\n "
+ FIELD@625..689
+ NAME@625..635 "indextitle"
+ WHITESPACE@635..638 " "
+ EQ@638..639 "="
+ WHITESPACE@639..640 " "
+ CURLY_GROUP@640..688
+ L_CURLY@640..641 "{"
+ WORD@641..648 "Epistle"
+ WHITESPACE@648..649 " "
+ WORD@649..651 "on"
+ WHITESPACE@651..652 " "
+ WORD@652..655 "the"
+ WHITESPACE@655..656 " "
+ WORD@656..667 "Possibility"
+ WHITESPACE@667..668 " "
+ WORD@668..670 "of"
+ WHITESPACE@670..671 " "
+ WORD@671..682 "Conjunction"
+ COMMA@682..683 ","
+ WHITESPACE@683..684 " "
+ WORD@684..687 "The"
+ R_CURLY@687..688 "}"
+ COMMA@688..689 ","
+ WHITESPACE@689..694 "\n "
+ FIELD@694..738
+ NAME@694..704 "shorttitle"
+ WHITESPACE@704..707 " "
+ EQ@707..708 "="
+ WHITESPACE@708..709 " "
+ CURLY_GROUP@709..737
+ L_CURLY@709..710 "{"
+ WORD@710..721 "Possibility"
+ WHITESPACE@721..722 " "
+ WORD@722..724 "of"
+ WHITESPACE@724..725 " "
+ WORD@725..736 "Conjunction"
+ R_CURLY@736..737 "}"
+ COMMA@737..738 ","
+ WHITESPACE@738..743 "\n "
+ FIELD@743..1006
+ NAME@743..753 "annotation"
+ WHITESPACE@753..756 " "
+ EQ@756..757 "="
+ WHITESPACE@757..758 " "
+ CURLY_GROUP@758..1005
+ L_CURLY@758..759 "{"
+ WORD@759..760 "A"
+ WHITESPACE@760..761 " "
+ COMMAND@761..768
+ COMMAND_NAME@761..768 "\\texttt"
+ CURLY_GROUP@768..774
+ L_CURLY@768..769 "{"
+ WORD@769..773 "book"
+ R_CURLY@773..774 "}"
+ WHITESPACE@774..775 " "
+ WORD@775..780 "entry"
+ WHITESPACE@780..781 " "
+ WORD@781..785 "with"
+ WHITESPACE@785..786 " "
+ WORD@786..787 "a"
+ WHITESPACE@787..788 " "
+ COMMAND@788..795
+ COMMAND_NAME@788..795 "\\texttt"
+ CURLY_GROUP@795..803
+ L_CURLY@795..796 "{"
+ WORD@796..802 "series"
+ R_CURLY@802..803 "}"
+ WHITESPACE@803..804 " "
+ WORD@804..807 "and"
+ WHITESPACE@807..808 " "
+ WORD@808..809 "a"
+ WHITESPACE@809..830 "\n "
+ COMMAND@830..837
+ COMMAND_NAME@830..837 "\\texttt"
+ CURLY_GROUP@837..845
+ L_CURLY@837..838 "{"
+ WORD@838..844 "number"
+ R_CURLY@844..845 "}"
+ WORD@845..846 "."
+ WHITESPACE@846..847 " "
+ WORD@847..851 "Note"
+ WHITESPACE@851..852 " "
+ WORD@852..855 "the"
+ WHITESPACE@855..856 " "
+ WORD@856..869 "concatenation"
+ WHITESPACE@869..870 " "
+ WORD@870..872 "of"
+ WHITESPACE@872..873 " "
+ WORD@873..876 "the"
+ WHITESPACE@876..877 " "
+ COMMAND@877..884
+ COMMAND_NAME@877..884 "\\texttt"
+ CURLY_GROUP@884..892
+ L_CURLY@884..885 "{"
+ WORD@885..891 "editor"
+ R_CURLY@891..892 "}"
+ WHITESPACE@892..913 "\n "
+ WORD@913..916 "and"
+ WHITESPACE@916..917 " "
+ COMMAND@917..924
+ COMMAND_NAME@917..924 "\\texttt"
+ CURLY_GROUP@924..936
+ L_CURLY@924..925 "{"
+ WORD@925..935 "translator"
+ R_CURLY@935..936 "}"
+ WHITESPACE@936..937 " "
+ WORD@937..943 "fields"
+ WHITESPACE@943..944 " "
+ WORD@944..946 "as"
+ WHITESPACE@946..947 " "
+ WORD@947..951 "well"
+ WHITESPACE@951..952 " "
+ WORD@952..954 "as"
+ WHITESPACE@954..955 " "
+ WORD@955..958 "the"
+ WHITESPACE@958..979 "\n "
+ COMMAND@979..986
+ COMMAND_NAME@979..986 "\\texttt"
+ CURLY_GROUP@986..998
+ L_CURLY@986..987 "{"
+ WORD@987..997 "indextitle"
+ R_CURLY@997..998 "}"
+ WHITESPACE@998..999 " "
+ WORD@999..1004 "field"
+ R_CURLY@1004..1005 "}"
+ COMMA@1005..1006 ","
+ WHITESPACE@1006..1007 "\n"
+ R_DELIM@1007..1008 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_betram_1996() {
+ check(
+ r#"@string{jams = {J.~Amer. Math. Soc.}}
+
+@article{bertram,
+ author = {Bertram, Aaron and Wentworth, Richard},
+ title = {Gromov invariants for holomorphic maps on {Riemann} surfaces},
+ journaltitle = jams,
+ date = 1996,
+ volume = 9,
+ number = 2,
+ pages = {529-571},
+ langid = {english},
+ langidopts = {variant=american},
+ shorttitle = {Gromov invariants},
+ annotation = {An \texttt{article} entry with a \texttt{volume} and a
+ \texttt{number} field},
+}"#,
+ expect![[r#"
+ ROOT@0..556
+ STRING@0..40
+ TYPE@0..7 "@string"
+ L_DELIM@7..8 "{"
+ NAME@8..12 "jams"
+ WHITESPACE@12..16 " "
+ EQ@16..17 "="
+ WHITESPACE@17..18 " "
+ CURLY_GROUP@18..39
+ L_CURLY@18..19 "{"
+ WORD@19..21 "J."
+ NBSP@21..22 "~"
+ WORD@22..27 "Amer."
+ WHITESPACE@27..28 " "
+ WORD@28..33 "Math."
+ WHITESPACE@33..34 " "
+ WORD@34..38 "Soc."
+ R_CURLY@38..39 "}"
+ R_DELIM@39..40 "}"
+ JUNK@40..42 "\n\n"
+ ENTRY@42..556
+ TYPE@42..50 "@article"
+ L_DELIM@50..51 "{"
+ NAME@51..58 "bertram"
+ COMMA@58..59 ","
+ WHITESPACE@59..64 "\n "
+ FIELD@64..119
+ NAME@64..70 "author"
+ WHITESPACE@70..77 " "
+ EQ@77..78 "="
+ WHITESPACE@78..79 " "
+ CURLY_GROUP@79..118
+ L_CURLY@79..80 "{"
+ WORD@80..87 "Bertram"
+ COMMA@87..88 ","
+ WHITESPACE@88..89 " "
+ WORD@89..94 "Aaron"
+ WHITESPACE@94..95 " "
+ WORD@95..98 "and"
+ WHITESPACE@98..99 " "
+ WORD@99..108 "Wentworth"
+ COMMA@108..109 ","
+ WHITESPACE@109..110 " "
+ WORD@110..117 "Richard"
+ R_CURLY@117..118 "}"
+ COMMA@118..119 ","
+ WHITESPACE@119..124 "\n "
+ FIELD@124..202
+ NAME@124..129 "title"
+ WHITESPACE@129..137 " "
+ EQ@137..138 "="
+ WHITESPACE@138..139 " "
+ CURLY_GROUP@139..201
+ L_CURLY@139..140 "{"
+ WORD@140..146 "Gromov"
+ WHITESPACE@146..147 " "
+ WORD@147..157 "invariants"
+ WHITESPACE@157..158 " "
+ WORD@158..161 "for"
+ WHITESPACE@161..162 " "
+ WORD@162..173 "holomorphic"
+ WHITESPACE@173..174 " "
+ WORD@174..178 "maps"
+ WHITESPACE@178..179 " "
+ WORD@179..181 "on"
+ WHITESPACE@181..182 " "
+ CURLY_GROUP@182..191
+ L_CURLY@182..183 "{"
+ WORD@183..190 "Riemann"
+ R_CURLY@190..191 "}"
+ WHITESPACE@191..192 " "
+ WORD@192..200 "surfaces"
+ R_CURLY@200..201 "}"
+ COMMA@201..202 ","
+ WHITESPACE@202..207 "\n "
+ FIELD@207..227
+ NAME@207..219 "journaltitle"
+ WHITESPACE@219..220 " "
+ EQ@220..221 "="
+ WHITESPACE@221..222 " "
+ LITERAL@222..226
+ NAME@222..226 "jams"
+ COMMA@226..227 ","
+ WHITESPACE@227..232 "\n "
+ FIELD@232..252
+ NAME@232..236 "date"
+ WHITESPACE@236..245 " "
+ EQ@245..246 "="
+ WHITESPACE@246..247 " "
+ LITERAL@247..251
+ INTEGER@247..251 "1996"
+ COMMA@251..252 ","
+ WHITESPACE@252..257 "\n "
+ FIELD@257..274
+ NAME@257..263 "volume"
+ WHITESPACE@263..270 " "
+ EQ@270..271 "="
+ WHITESPACE@271..272 " "
+ LITERAL@272..273
+ INTEGER@272..273 "9"
+ COMMA@273..274 ","
+ WHITESPACE@274..279 "\n "
+ FIELD@279..296
+ NAME@279..285 "number"
+ WHITESPACE@285..292 " "
+ EQ@292..293 "="
+ WHITESPACE@293..294 " "
+ LITERAL@294..295
+ INTEGER@294..295 "2"
+ COMMA@295..296 ","
+ WHITESPACE@296..301 "\n "
+ FIELD@301..326
+ NAME@301..306 "pages"
+ WHITESPACE@306..314 " "
+ EQ@314..315 "="
+ WHITESPACE@315..316 " "
+ CURLY_GROUP@316..325
+ L_CURLY@316..317 "{"
+ WORD@317..324 "529-571"
+ R_CURLY@324..325 "}"
+ COMMA@325..326 ","
+ WHITESPACE@326..331 "\n "
+ FIELD@331..356
+ NAME@331..337 "langid"
+ WHITESPACE@337..344 " "
+ EQ@344..345 "="
+ WHITESPACE@345..346 " "
+ CURLY_GROUP@346..355
+ L_CURLY@346..347 "{"
+ WORD@347..354 "english"
+ R_CURLY@354..355 "}"
+ COMMA@355..356 ","
+ WHITESPACE@356..361 "\n "
+ FIELD@361..395
+ NAME@361..371 "langidopts"
+ WHITESPACE@371..374 " "
+ EQ@374..375 "="
+ WHITESPACE@375..376 " "
+ CURLY_GROUP@376..394
+ L_CURLY@376..377 "{"
+ WORD@377..393 "variant=american"
+ R_CURLY@393..394 "}"
+ COMMA@394..395 ","
+ WHITESPACE@395..400 "\n "
+ FIELD@400..435
+ NAME@400..410 "shorttitle"
+ WHITESPACE@410..413 " "
+ EQ@413..414 "="
+ WHITESPACE@414..415 " "
+ CURLY_GROUP@415..434
+ L_CURLY@415..416 "{"
+ WORD@416..422 "Gromov"
+ WHITESPACE@422..423 " "
+ WORD@423..433 "invariants"
+ R_CURLY@433..434 "}"
+ COMMA@434..435 ","
+ WHITESPACE@435..440 "\n "
+ FIELD@440..554
+ NAME@440..450 "annotation"
+ WHITESPACE@450..453 " "
+ EQ@453..454 "="
+ WHITESPACE@454..455 " "
+ CURLY_GROUP@455..553
+ L_CURLY@455..456 "{"
+ WORD@456..458 "An"
+ WHITESPACE@458..459 " "
+ COMMAND@459..466
+ COMMAND_NAME@459..466 "\\texttt"
+ CURLY_GROUP@466..475
+ L_CURLY@466..467 "{"
+ WORD@467..474 "article"
+ R_CURLY@474..475 "}"
+ WHITESPACE@475..476 " "
+ WORD@476..481 "entry"
+ WHITESPACE@481..482 " "
+ WORD@482..486 "with"
+ WHITESPACE@486..487 " "
+ WORD@487..488 "a"
+ WHITESPACE@488..489 " "
+ COMMAND@489..496
+ COMMAND_NAME@489..496 "\\texttt"
+ CURLY_GROUP@496..504
+ L_CURLY@496..497 "{"
+ WORD@497..503 "volume"
+ R_CURLY@503..504 "}"
+ WHITESPACE@504..505 " "
+ WORD@505..508 "and"
+ WHITESPACE@508..509 " "
+ WORD@509..510 "a"
+ WHITESPACE@510..531 "\n "
+ COMMAND@531..538
+ COMMAND_NAME@531..538 "\\texttt"
+ CURLY_GROUP@538..546
+ L_CURLY@538..539 "{"
+ WORD@539..545 "number"
+ R_CURLY@545..546 "}"
+ WHITESPACE@546..547 " "
+ WORD@547..552 "field"
+ R_CURLY@552..553 "}"
+ COMMA@553..554 ","
+ WHITESPACE@554..555 "\n"
+ R_DELIM@555..556 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_blom_2021() {
+ check(
+ r#"@article{DBLP:journals/corr/abs-2107-11903,
+ author = {Michelle L. Blom and
+ Jurlind Budurushi and
+ Ronald L. Rivest and
+ Philip B. Stark and
+ Peter J. Stuckey and
+ Vanessa Teague and
+ Damjan Vukcevic},
+ title = {Assertion-based Approaches to Auditing Complex Elections, with application
+ to party-list proportional elections},
+ journal = {CoRR},
+ volume = {abs/2107.11903},
+ year = {2021},
+ url = {https://arxiv.org/abs/2107.11903},
+ eprinttype = {arXiv},
+ eprint = {2107.11903},
+ timestamp = {Thu, 29 Jul 2021 16:14:15 +0200},
+ biburl = {https://dblp.org/rec/journals/corr/abs-2107-11903.bib},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+}"#,
+ expect![[r#"
+ ROOT@0..860
+ ENTRY@0..860
+ TYPE@0..8 "@article"
+ L_DELIM@8..9 "{"
+ NAME@9..42 "DBLP:journals/corr/ab ..."
+ COMMA@42..43 ","
+ WHITESPACE@43..48 "\n "
+ FIELD@48..322
+ NAME@48..54 "author"
+ WHITESPACE@54..58 " "
+ EQ@58..59 "="
+ WHITESPACE@59..60 " "
+ CURLY_GROUP@60..321
+ L_CURLY@60..61 "{"
+ WORD@61..69 "Michelle"
+ WHITESPACE@69..70 " "
+ WORD@70..72 "L."
+ WHITESPACE@72..73 " "
+ WORD@73..77 "Blom"
+ WHITESPACE@77..78 " "
+ WORD@78..81 "and"
+ WHITESPACE@81..102 "\n "
+ WORD@102..109 "Jurlind"
+ WHITESPACE@109..110 " "
+ WORD@110..119 "Budurushi"
+ WHITESPACE@119..120 " "
+ WORD@120..123 "and"
+ WHITESPACE@123..144 "\n "
+ WORD@144..150 "Ronald"
+ WHITESPACE@150..151 " "
+ WORD@151..153 "L."
+ WHITESPACE@153..154 " "
+ WORD@154..160 "Rivest"
+ WHITESPACE@160..161 " "
+ WORD@161..164 "and"
+ WHITESPACE@164..185 "\n "
+ WORD@185..191 "Philip"
+ WHITESPACE@191..192 " "
+ WORD@192..194 "B."
+ WHITESPACE@194..195 " "
+ WORD@195..200 "Stark"
+ WHITESPACE@200..201 " "
+ WORD@201..204 "and"
+ WHITESPACE@204..225 "\n "
+ WORD@225..230 "Peter"
+ WHITESPACE@230..231 " "
+ WORD@231..233 "J."
+ WHITESPACE@233..234 " "
+ WORD@234..241 "Stuckey"
+ WHITESPACE@241..242 " "
+ WORD@242..245 "and"
+ WHITESPACE@245..266 "\n "
+ WORD@266..273 "Vanessa"
+ WHITESPACE@273..274 " "
+ WORD@274..280 "Teague"
+ WHITESPACE@280..281 " "
+ WORD@281..284 "and"
+ WHITESPACE@284..305 "\n "
+ WORD@305..311 "Damjan"
+ WHITESPACE@311..312 " "
+ WORD@312..320 "Vukcevic"
+ R_CURLY@320..321 "}"
+ COMMA@321..322 ","
+ WHITESPACE@322..327 "\n "
+ FIELD@327..473
+ NAME@327..332 "title"
+ WHITESPACE@332..337 " "
+ EQ@337..338 "="
+ WHITESPACE@338..339 " "
+ CURLY_GROUP@339..472
+ L_CURLY@339..340 "{"
+ WORD@340..355 "Assertion-based"
+ WHITESPACE@355..356 " "
+ WORD@356..366 "Approaches"
+ WHITESPACE@366..367 " "
+ WORD@367..369 "to"
+ WHITESPACE@369..370 " "
+ WORD@370..378 "Auditing"
+ WHITESPACE@378..379 " "
+ WORD@379..386 "Complex"
+ WHITESPACE@386..387 " "
+ WORD@387..396 "Elections"
+ COMMA@396..397 ","
+ WHITESPACE@397..398 " "
+ WORD@398..402 "with"
+ WHITESPACE@402..403 " "
+ WORD@403..414 "application"
+ WHITESPACE@414..435 "\n "
+ WORD@435..437 "to"
+ WHITESPACE@437..438 " "
+ WORD@438..448 "party-list"
+ WHITESPACE@448..449 " "
+ WORD@449..461 "proportional"
+ WHITESPACE@461..462 " "
+ WORD@462..471 "elections"
+ R_CURLY@471..472 "}"
+ COMMA@472..473 ","
+ WHITESPACE@473..478 "\n "
+ FIELD@478..497
+ NAME@478..485 "journal"
+ WHITESPACE@485..488 " "
+ EQ@488..489 "="
+ WHITESPACE@489..490 " "
+ CURLY_GROUP@490..496
+ L_CURLY@490..491 "{"
+ WORD@491..495 "CoRR"
+ R_CURLY@495..496 "}"
+ COMMA@496..497 ","
+ WHITESPACE@497..502 "\n "
+ FIELD@502..531
+ NAME@502..508 "volume"
+ WHITESPACE@508..512 " "
+ EQ@512..513 "="
+ WHITESPACE@513..514 " "
+ CURLY_GROUP@514..530
+ L_CURLY@514..515 "{"
+ WORD@515..529 "abs/2107.11903"
+ R_CURLY@529..530 "}"
+ COMMA@530..531 ","
+ WHITESPACE@531..536 "\n "
+ FIELD@536..555
+ NAME@536..540 "year"
+ WHITESPACE@540..546 " "
+ EQ@546..547 "="
+ WHITESPACE@547..548 " "
+ CURLY_GROUP@548..554
+ L_CURLY@548..549 "{"
+ INTEGER@549..553 "2021"
+ R_CURLY@553..554 "}"
+ COMMA@554..555 ","
+ WHITESPACE@555..560 "\n "
+ FIELD@560..607
+ NAME@560..563 "url"
+ WHITESPACE@563..570 " "
+ EQ@570..571 "="
+ WHITESPACE@571..572 " "
+ CURLY_GROUP@572..606
+ L_CURLY@572..573 "{"
+ WORD@573..605 "https://arxiv.org/abs ..."
+ R_CURLY@605..606 "}"
+ COMMA@606..607 ","
+ WHITESPACE@607..612 "\n "
+ FIELD@612..633
+ NAME@612..622 "eprinttype"
+ WHITESPACE@622..623 " "
+ EQ@623..624 "="
+ WHITESPACE@624..625 " "
+ CURLY_GROUP@625..632
+ L_CURLY@625..626 "{"
+ WORD@626..631 "arXiv"
+ R_CURLY@631..632 "}"
+ COMMA@632..633 ","
+ WHITESPACE@633..638 "\n "
+ FIELD@638..663
+ NAME@638..644 "eprint"
+ WHITESPACE@644..648 " "
+ EQ@648..649 "="
+ WHITESPACE@649..650 " "
+ CURLY_GROUP@650..662
+ L_CURLY@650..651 "{"
+ WORD@651..661 "2107.11903"
+ R_CURLY@661..662 "}"
+ COMMA@662..663 ","
+ WHITESPACE@663..668 "\n "
+ FIELD@668..714
+ NAME@668..677 "timestamp"
+ WHITESPACE@677..678 " "
+ EQ@678..679 "="
+ WHITESPACE@679..680 " "
+ CURLY_GROUP@680..713
+ L_CURLY@680..681 "{"
+ WORD@681..684 "Thu"
+ COMMA@684..685 ","
+ WHITESPACE@685..686 " "
+ INTEGER@686..688 "29"
+ WHITESPACE@688..689 " "
+ WORD@689..692 "Jul"
+ WHITESPACE@692..693 " "
+ INTEGER@693..697 "2021"
+ WHITESPACE@697..698 " "
+ WORD@698..706 "16:14:15"
+ WHITESPACE@706..707 " "
+ WORD@707..712 "+0200"
+ R_CURLY@712..713 "}"
+ COMMA@713..714 ","
+ WHITESPACE@714..719 "\n "
+ FIELD@719..787
+ NAME@719..725 "biburl"
+ WHITESPACE@725..729 " "
+ EQ@729..730 "="
+ WHITESPACE@730..731 " "
+ CURLY_GROUP@731..786
+ L_CURLY@731..732 "{"
+ WORD@732..785 "https://dblp.org/rec/ ..."
+ R_CURLY@785..786 "}"
+ COMMA@786..787 ","
+ WHITESPACE@787..792 "\n "
+ FIELD@792..859
+ NAME@792..801 "bibsource"
+ WHITESPACE@801..802 " "
+ EQ@802..803 "="
+ WHITESPACE@803..804 " "
+ CURLY_GROUP@804..858
+ L_CURLY@804..805 "{"
+ WORD@805..809 "dblp"
+ WHITESPACE@809..810 " "
+ WORD@810..818 "computer"
+ WHITESPACE@818..819 " "
+ WORD@819..826 "science"
+ WHITESPACE@826..827 " "
+ WORD@827..839 "bibliography"
+ COMMA@839..840 ","
+ WHITESPACE@840..841 " "
+ WORD@841..857 "https://dblp.org"
+ R_CURLY@857..858 "}"
+ WHITESPACE@858..859 "\n"
+ R_DELIM@859..860 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_combi_2004() {
+ check(
+ r#"@inproceedings{10.1145/967900.968040,
+ author = {Combi, Carlo and Pozzi, Giuseppe},
+ title = {Architectures for a Temporal Workflow Management System},
+ year = {2004},
+ isbn = {1581138121},
+ publisher = {Association for Computing Machinery},
+ address = {New York, NY, USA},
+ url = {https://doi.org/10.1145/967900.968040},
+ doi = {10.1145/967900.968040},
+ booktitle = {Proceedings of the 2004 ACM Symposium on Applied Computing},
+ pages = {659-666},
+ numpages = {8},
+ keywords = {active DBMS, temporal DBMS, workflow management system - WfMS, temporal workflow management system},
+ location = {Nicosia, Cyprus},
+ series = {SAC '04}
+}"#,
+ expect![[r#"
+ ROOT@0..674
+ ENTRY@0..674
+ TYPE@0..14 "@inproceedings"
+ L_DELIM@14..15 "{"
+ NAME@15..36 "10.1145/967900.968040"
+ COMMA@36..37 ","
+ WHITESPACE@37..42 "\n "
+ FIELD@42..86
+ NAME@42..48 "author"
+ WHITESPACE@48..49 " "
+ EQ@49..50 "="
+ WHITESPACE@50..51 " "
+ CURLY_GROUP@51..85
+ L_CURLY@51..52 "{"
+ WORD@52..57 "Combi"
+ COMMA@57..58 ","
+ WHITESPACE@58..59 " "
+ WORD@59..64 "Carlo"
+ WHITESPACE@64..65 " "
+ WORD@65..68 "and"
+ WHITESPACE@68..69 " "
+ WORD@69..74 "Pozzi"
+ COMMA@74..75 ","
+ WHITESPACE@75..76 " "
+ WORD@76..84 "Giuseppe"
+ R_CURLY@84..85 "}"
+ COMMA@85..86 ","
+ WHITESPACE@86..91 "\n "
+ FIELD@91..157
+ NAME@91..96 "title"
+ WHITESPACE@96..97 " "
+ EQ@97..98 "="
+ WHITESPACE@98..99 " "
+ CURLY_GROUP@99..156
+ L_CURLY@99..100 "{"
+ WORD@100..113 "Architectures"
+ WHITESPACE@113..114 " "
+ WORD@114..117 "for"
+ WHITESPACE@117..118 " "
+ WORD@118..119 "a"
+ WHITESPACE@119..120 " "
+ WORD@120..128 "Temporal"
+ WHITESPACE@128..129 " "
+ WORD@129..137 "Workflow"
+ WHITESPACE@137..138 " "
+ WORD@138..148 "Management"
+ WHITESPACE@148..149 " "
+ WORD@149..155 "System"
+ R_CURLY@155..156 "}"
+ COMMA@156..157 ","
+ WHITESPACE@157..162 "\n "
+ FIELD@162..176
+ NAME@162..166 "year"
+ WHITESPACE@166..167 " "
+ EQ@167..168 "="
+ WHITESPACE@168..169 " "
+ CURLY_GROUP@169..175
+ L_CURLY@169..170 "{"
+ INTEGER@170..174 "2004"
+ R_CURLY@174..175 "}"
+ COMMA@175..176 ","
+ WHITESPACE@176..181 "\n "
+ FIELD@181..201
+ NAME@181..185 "isbn"
+ WHITESPACE@185..186 " "
+ EQ@186..187 "="
+ WHITESPACE@187..188 " "
+ CURLY_GROUP@188..200
+ L_CURLY@188..189 "{"
+ INTEGER@189..199 "1581138121"
+ R_CURLY@199..200 "}"
+ COMMA@200..201 ","
+ WHITESPACE@201..206 "\n "
+ FIELD@206..256
+ NAME@206..215 "publisher"
+ WHITESPACE@215..216 " "
+ EQ@216..217 "="
+ WHITESPACE@217..218 " "
+ CURLY_GROUP@218..255
+ L_CURLY@218..219 "{"
+ WORD@219..230 "Association"
+ WHITESPACE@230..231 " "
+ WORD@231..234 "for"
+ WHITESPACE@234..235 " "
+ WORD@235..244 "Computing"
+ WHITESPACE@244..245 " "
+ WORD@245..254 "Machinery"
+ R_CURLY@254..255 "}"
+ COMMA@255..256 ","
+ WHITESPACE@256..261 "\n "
+ FIELD@261..291
+ NAME@261..268 "address"
+ WHITESPACE@268..269 " "
+ EQ@269..270 "="
+ WHITESPACE@270..271 " "
+ CURLY_GROUP@271..290
+ L_CURLY@271..272 "{"
+ WORD@272..275 "New"
+ WHITESPACE@275..276 " "
+ WORD@276..280 "York"
+ COMMA@280..281 ","
+ WHITESPACE@281..282 " "
+ WORD@282..284 "NY"
+ COMMA@284..285 ","
+ WHITESPACE@285..286 " "
+ WORD@286..289 "USA"
+ R_CURLY@289..290 "}"
+ COMMA@290..291 ","
+ WHITESPACE@291..296 "\n "
+ FIELD@296..342
+ NAME@296..299 "url"
+ WHITESPACE@299..300 " "
+ EQ@300..301 "="
+ WHITESPACE@301..302 " "
+ CURLY_GROUP@302..341
+ L_CURLY@302..303 "{"
+ WORD@303..340 "https://doi.org/10.11 ..."
+ R_CURLY@340..341 "}"
+ COMMA@341..342 ","
+ WHITESPACE@342..347 "\n "
+ FIELD@347..377
+ NAME@347..350 "doi"
+ WHITESPACE@350..351 " "
+ EQ@351..352 "="
+ WHITESPACE@352..353 " "
+ CURLY_GROUP@353..376
+ L_CURLY@353..354 "{"
+ WORD@354..375 "10.1145/967900.968040"
+ R_CURLY@375..376 "}"
+ COMMA@376..377 ","
+ WHITESPACE@377..382 "\n "
+ FIELD@382..455
+ NAME@382..391 "booktitle"
+ WHITESPACE@391..392 " "
+ EQ@392..393 "="
+ WHITESPACE@393..394 " "
+ CURLY_GROUP@394..454
+ L_CURLY@394..395 "{"
+ WORD@395..406 "Proceedings"
+ WHITESPACE@406..407 " "
+ WORD@407..409 "of"
+ WHITESPACE@409..410 " "
+ WORD@410..413 "the"
+ WHITESPACE@413..414 " "
+ INTEGER@414..418 "2004"
+ WHITESPACE@418..419 " "
+ WORD@419..422 "ACM"
+ WHITESPACE@422..423 " "
+ WORD@423..432 "Symposium"
+ WHITESPACE@432..433 " "
+ WORD@433..435 "on"
+ WHITESPACE@435..436 " "
+ WORD@436..443 "Applied"
+ WHITESPACE@443..444 " "
+ WORD@444..453 "Computing"
+ R_CURLY@453..454 "}"
+ COMMA@454..455 ","
+ WHITESPACE@455..460 "\n "
+ FIELD@460..478
+ NAME@460..465 "pages"
+ WHITESPACE@465..466 " "
+ EQ@466..467 "="
+ WHITESPACE@467..468 " "
+ CURLY_GROUP@468..477
+ L_CURLY@468..469 "{"
+ WORD@469..476 "659-666"
+ R_CURLY@476..477 "}"
+ COMMA@477..478 ","
+ WHITESPACE@478..483 "\n "
+ FIELD@483..498
+ NAME@483..491 "numpages"
+ WHITESPACE@491..492 " "
+ EQ@492..493 "="
+ WHITESPACE@493..494 " "
+ CURLY_GROUP@494..497
+ L_CURLY@494..495 "{"
+ INTEGER@495..496 "8"
+ R_CURLY@496..497 "}"
+ COMMA@497..498 ","
+ WHITESPACE@498..503 "\n "
+ FIELD@503..615
+ NAME@503..511 "keywords"
+ WHITESPACE@511..512 " "
+ EQ@512..513 "="
+ WHITESPACE@513..514 " "
+ CURLY_GROUP@514..614
+ L_CURLY@514..515 "{"
+ WORD@515..521 "active"
+ WHITESPACE@521..522 " "
+ WORD@522..526 "DBMS"
+ COMMA@526..527 ","
+ WHITESPACE@527..528 " "
+ WORD@528..536 "temporal"
+ WHITESPACE@536..537 " "
+ WORD@537..541 "DBMS"
+ COMMA@541..542 ","
+ WHITESPACE@542..543 " "
+ WORD@543..551 "workflow"
+ WHITESPACE@551..552 " "
+ WORD@552..562 "management"
+ WHITESPACE@562..563 " "
+ WORD@563..569 "system"
+ WHITESPACE@569..570 " "
+ WORD@570..571 "-"
+ WHITESPACE@571..572 " "
+ WORD@572..576 "WfMS"
+ COMMA@576..577 ","
+ WHITESPACE@577..578 " "
+ WORD@578..586 "temporal"
+ WHITESPACE@586..587 " "
+ WORD@587..595 "workflow"
+ WHITESPACE@595..596 " "
+ WORD@596..606 "management"
+ WHITESPACE@606..607 " "
+ WORD@607..613 "system"
+ R_CURLY@613..614 "}"
+ COMMA@614..615 ","
+ WHITESPACE@615..620 "\n "
+ FIELD@620..649
+ NAME@620..628 "location"
+ WHITESPACE@628..629 " "
+ EQ@629..630 "="
+ WHITESPACE@630..631 " "
+ CURLY_GROUP@631..648
+ L_CURLY@631..632 "{"
+ WORD@632..639 "Nicosia"
+ COMMA@639..640 ","
+ WHITESPACE@640..641 " "
+ WORD@641..647 "Cyprus"
+ R_CURLY@647..648 "}"
+ COMMA@648..649 ","
+ WHITESPACE@649..654 "\n "
+ FIELD@654..673
+ NAME@654..660 "series"
+ WHITESPACE@660..661 " "
+ EQ@661..662 "="
+ WHITESPACE@662..663 " "
+ CURLY_GROUP@663..672
+ L_CURLY@663..664 "{"
+ WORD@664..667 "SAC"
+ WHITESPACE@667..668 " "
+ WORD@668..671 "'04"
+ R_CURLY@671..672 "}"
+ WHITESPACE@672..673 "\n"
+ R_DELIM@673..674 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_erwin_2007() {
+ check(
+ r#"@inproceedings{10.5555/1386993.1386994,
+ author = {Erwin, Alva and Gopalan, Raj P. and Achuthan, N. R.},
+ title = {A Bottom-up Projection Based Algorithm for Mining High Utility Itemsets},
+ year = {2007},
+ isbn = {9781920682651},
+ publisher = {Australian Computer Society, Inc.},
+ address = {AUS},
+ booktitle = {Proceedings of the 2nd International Workshop on Integrating Artificial Intelligence and Data Mining - Volume 84},
+ pages = {3-11},
+ numpages = {9},
+ keywords = {pattern growth, high utility itemset mining},
+ location = {Gold Coast, Australia},
+ series = {AIDM '07}
+}"#,
+ expect![[r#"
+ ROOT@0..615
+ ENTRY@0..615
+ TYPE@0..14 "@inproceedings"
+ L_DELIM@14..15 "{"
+ NAME@15..38 "10.5555/1386993.1386994"
+ COMMA@38..39 ","
+ WHITESPACE@39..44 "\n "
+ FIELD@44..107
+ NAME@44..50 "author"
+ WHITESPACE@50..51 " "
+ EQ@51..52 "="
+ WHITESPACE@52..53 " "
+ CURLY_GROUP@53..106
+ L_CURLY@53..54 "{"
+ WORD@54..59 "Erwin"
+ COMMA@59..60 ","
+ WHITESPACE@60..61 " "
+ WORD@61..65 "Alva"
+ WHITESPACE@65..66 " "
+ WORD@66..69 "and"
+ WHITESPACE@69..70 " "
+ WORD@70..77 "Gopalan"
+ COMMA@77..78 ","
+ WHITESPACE@78..79 " "
+ WORD@79..82 "Raj"
+ WHITESPACE@82..83 " "
+ WORD@83..85 "P."
+ WHITESPACE@85..86 " "
+ WORD@86..89 "and"
+ WHITESPACE@89..90 " "
+ WORD@90..98 "Achuthan"
+ COMMA@98..99 ","
+ WHITESPACE@99..100 " "
+ WORD@100..102 "N."
+ WHITESPACE@102..103 " "
+ WORD@103..105 "R."
+ R_CURLY@105..106 "}"
+ COMMA@106..107 ","
+ WHITESPACE@107..112 "\n "
+ FIELD@112..194
+ NAME@112..117 "title"
+ WHITESPACE@117..118 " "
+ EQ@118..119 "="
+ WHITESPACE@119..120 " "
+ CURLY_GROUP@120..193
+ L_CURLY@120..121 "{"
+ WORD@121..122 "A"
+ WHITESPACE@122..123 " "
+ WORD@123..132 "Bottom-up"
+ WHITESPACE@132..133 " "
+ WORD@133..143 "Projection"
+ WHITESPACE@143..144 " "
+ WORD@144..149 "Based"
+ WHITESPACE@149..150 " "
+ WORD@150..159 "Algorithm"
+ WHITESPACE@159..160 " "
+ WORD@160..163 "for"
+ WHITESPACE@163..164 " "
+ WORD@164..170 "Mining"
+ WHITESPACE@170..171 " "
+ WORD@171..175 "High"
+ WHITESPACE@175..176 " "
+ WORD@176..183 "Utility"
+ WHITESPACE@183..184 " "
+ WORD@184..192 "Itemsets"
+ R_CURLY@192..193 "}"
+ COMMA@193..194 ","
+ WHITESPACE@194..199 "\n "
+ FIELD@199..213
+ NAME@199..203 "year"
+ WHITESPACE@203..204 " "
+ EQ@204..205 "="
+ WHITESPACE@205..206 " "
+ CURLY_GROUP@206..212
+ L_CURLY@206..207 "{"
+ INTEGER@207..211 "2007"
+ R_CURLY@211..212 "}"
+ COMMA@212..213 ","
+ WHITESPACE@213..218 "\n "
+ FIELD@218..241
+ NAME@218..222 "isbn"
+ WHITESPACE@222..223 " "
+ EQ@223..224 "="
+ WHITESPACE@224..225 " "
+ CURLY_GROUP@225..240
+ L_CURLY@225..226 "{"
+ INTEGER@226..239 "9781920682651"
+ R_CURLY@239..240 "}"
+ COMMA@240..241 ","
+ WHITESPACE@241..246 "\n "
+ FIELD@246..294
+ NAME@246..255 "publisher"
+ WHITESPACE@255..256 " "
+ EQ@256..257 "="
+ WHITESPACE@257..258 " "
+ CURLY_GROUP@258..293
+ L_CURLY@258..259 "{"
+ WORD@259..269 "Australian"
+ WHITESPACE@269..270 " "
+ WORD@270..278 "Computer"
+ WHITESPACE@278..279 " "
+ WORD@279..286 "Society"
+ COMMA@286..287 ","
+ WHITESPACE@287..288 " "
+ WORD@288..292 "Inc."
+ R_CURLY@292..293 "}"
+ COMMA@293..294 ","
+ WHITESPACE@294..299 "\n "
+ FIELD@299..315
+ NAME@299..306 "address"
+ WHITESPACE@306..307 " "
+ EQ@307..308 "="
+ WHITESPACE@308..309 " "
+ CURLY_GROUP@309..314
+ L_CURLY@309..310 "{"
+ WORD@310..313 "AUS"
+ R_CURLY@313..314 "}"
+ COMMA@314..315 ","
+ WHITESPACE@315..320 "\n "
+ FIELD@320..447
+ NAME@320..329 "booktitle"
+ WHITESPACE@329..330 " "
+ EQ@330..331 "="
+ WHITESPACE@331..332 " "
+ CURLY_GROUP@332..446
+ L_CURLY@332..333 "{"
+ WORD@333..344 "Proceedings"
+ WHITESPACE@344..345 " "
+ WORD@345..347 "of"
+ WHITESPACE@347..348 " "
+ WORD@348..351 "the"
+ WHITESPACE@351..352 " "
+ WORD@352..355 "2nd"
+ WHITESPACE@355..356 " "
+ WORD@356..369 "International"
+ WHITESPACE@369..370 " "
+ WORD@370..378 "Workshop"
+ WHITESPACE@378..379 " "
+ WORD@379..381 "on"
+ WHITESPACE@381..382 " "
+ WORD@382..393 "Integrating"
+ WHITESPACE@393..394 " "
+ WORD@394..404 "Artificial"
+ WHITESPACE@404..405 " "
+ WORD@405..417 "Intelligence"
+ WHITESPACE@417..418 " "
+ WORD@418..421 "and"
+ WHITESPACE@421..422 " "
+ WORD@422..426 "Data"
+ WHITESPACE@426..427 " "
+ WORD@427..433 "Mining"
+ WHITESPACE@433..434 " "
+ WORD@434..435 "-"
+ WHITESPACE@435..436 " "
+ WORD@436..442 "Volume"
+ WHITESPACE@442..443 " "
+ INTEGER@443..445 "84"
+ R_CURLY@445..446 "}"
+ COMMA@446..447 ","
+ WHITESPACE@447..452 "\n "
+ FIELD@452..467
+ NAME@452..457 "pages"
+ WHITESPACE@457..458 " "
+ EQ@458..459 "="
+ WHITESPACE@459..460 " "
+ CURLY_GROUP@460..466
+ L_CURLY@460..461 "{"
+ WORD@461..465 "3-11"
+ R_CURLY@465..466 "}"
+ COMMA@466..467 ","
+ WHITESPACE@467..472 "\n "
+ FIELD@472..487
+ NAME@472..480 "numpages"
+ WHITESPACE@480..481 " "
+ EQ@481..482 "="
+ WHITESPACE@482..483 " "
+ CURLY_GROUP@483..486
+ L_CURLY@483..484 "{"
+ INTEGER@484..485 "9"
+ R_CURLY@485..486 "}"
+ COMMA@486..487 ","
+ WHITESPACE@487..492 "\n "
+ FIELD@492..549
+ NAME@492..500 "keywords"
+ WHITESPACE@500..501 " "
+ EQ@501..502 "="
+ WHITESPACE@502..503 " "
+ CURLY_GROUP@503..548
+ L_CURLY@503..504 "{"
+ WORD@504..511 "pattern"
+ WHITESPACE@511..512 " "
+ WORD@512..518 "growth"
+ COMMA@518..519 ","
+ WHITESPACE@519..520 " "
+ WORD@520..524 "high"
+ WHITESPACE@524..525 " "
+ WORD@525..532 "utility"
+ WHITESPACE@532..533 " "
+ WORD@533..540 "itemset"
+ WHITESPACE@540..541 " "
+ WORD@541..547 "mining"
+ R_CURLY@547..548 "}"
+ COMMA@548..549 ","
+ WHITESPACE@549..554 "\n "
+ FIELD@554..589
+ NAME@554..562 "location"
+ WHITESPACE@562..563 " "
+ EQ@563..564 "="
+ WHITESPACE@564..565 " "
+ CURLY_GROUP@565..588
+ L_CURLY@565..566 "{"
+ WORD@566..570 "Gold"
+ WHITESPACE@570..571 " "
+ WORD@571..576 "Coast"
+ COMMA@576..577 ","
+ WHITESPACE@577..578 " "
+ WORD@578..587 "Australia"
+ R_CURLY@587..588 "}"
+ COMMA@588..589 ","
+ WHITESPACE@589..594 "\n "
+ FIELD@594..614
+ NAME@594..600 "series"
+ WHITESPACE@600..601 " "
+ EQ@601..602 "="
+ WHITESPACE@602..603 " "
+ CURLY_GROUP@603..613
+ L_CURLY@603..604 "{"
+ WORD@604..608 "AIDM"
+ WHITESPACE@608..609 " "
+ WORD@609..612 "'07"
+ R_CURLY@612..613 "}"
+ WHITESPACE@613..614 "\n"
+ R_DELIM@614..615 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_jain_1999() {
+ check(
+ r#"@article{10.1145/331499.331504,
+ author = {Jain, A. K. and Murty, M. N. and Flynn, P. J.},
+ title = {Data Clustering: A Review},
+ year = {1999},
+ issue_date = {Sept. 1999},
+ publisher = {Association for Computing Machinery},
+ address = {New York, NY, USA},
+ volume = {31},
+ number = {3},
+ issn = {0360-0300},
+ url = {https://doi.org/10.1145/331499.331504},
+ doi = {10.1145/331499.331504},
+ journal = {ACM Comput. Surv.},
+ month = {sep},
+ pages = {264-323},
+ numpages = {60},
+ keywords = {incremental clustering, clustering applications, exploratory data analysis, cluster analysis, similarity indices, unsupervised learning}
+}"#,
+ expect![[r#"
+ ROOT@0..674
+ ENTRY@0..674
+ TYPE@0..8 "@article"
+ L_DELIM@8..9 "{"
+ NAME@9..30 "10.1145/331499.331504"
+ COMMA@30..31 ","
+ WHITESPACE@31..36 "\n "
+ FIELD@36..93
+ NAME@36..42 "author"
+ WHITESPACE@42..43 " "
+ EQ@43..44 "="
+ WHITESPACE@44..45 " "
+ CURLY_GROUP@45..92
+ L_CURLY@45..46 "{"
+ WORD@46..50 "Jain"
+ COMMA@50..51 ","
+ WHITESPACE@51..52 " "
+ WORD@52..54 "A."
+ WHITESPACE@54..55 " "
+ WORD@55..57 "K."
+ WHITESPACE@57..58 " "
+ WORD@58..61 "and"
+ WHITESPACE@61..62 " "
+ WORD@62..67 "Murty"
+ COMMA@67..68 ","
+ WHITESPACE@68..69 " "
+ WORD@69..71 "M."
+ WHITESPACE@71..72 " "
+ WORD@72..74 "N."
+ WHITESPACE@74..75 " "
+ WORD@75..78 "and"
+ WHITESPACE@78..79 " "
+ WORD@79..84 "Flynn"
+ COMMA@84..85 ","
+ WHITESPACE@85..86 " "
+ WORD@86..88 "P."
+ WHITESPACE@88..89 " "
+ WORD@89..91 "J."
+ R_CURLY@91..92 "}"
+ COMMA@92..93 ","
+ WHITESPACE@93..98 "\n "
+ FIELD@98..134
+ NAME@98..103 "title"
+ WHITESPACE@103..104 " "
+ EQ@104..105 "="
+ WHITESPACE@105..106 " "
+ CURLY_GROUP@106..133
+ L_CURLY@106..107 "{"
+ WORD@107..111 "Data"
+ WHITESPACE@111..112 " "
+ WORD@112..123 "Clustering:"
+ WHITESPACE@123..124 " "
+ WORD@124..125 "A"
+ WHITESPACE@125..126 " "
+ WORD@126..132 "Review"
+ R_CURLY@132..133 "}"
+ COMMA@133..134 ","
+ WHITESPACE@134..139 "\n "
+ FIELD@139..153
+ NAME@139..143 "year"
+ WHITESPACE@143..144 " "
+ EQ@144..145 "="
+ WHITESPACE@145..146 " "
+ CURLY_GROUP@146..152
+ L_CURLY@146..147 "{"
+ INTEGER@147..151 "1999"
+ R_CURLY@151..152 "}"
+ COMMA@152..153 ","
+ WHITESPACE@153..158 "\n "
+ FIELD@158..184
+ NAME@158..168 "issue_date"
+ WHITESPACE@168..169 " "
+ EQ@169..170 "="
+ WHITESPACE@170..171 " "
+ CURLY_GROUP@171..183
+ L_CURLY@171..172 "{"
+ WORD@172..177 "Sept."
+ WHITESPACE@177..178 " "
+ INTEGER@178..182 "1999"
+ R_CURLY@182..183 "}"
+ COMMA@183..184 ","
+ WHITESPACE@184..189 "\n "
+ FIELD@189..239
+ NAME@189..198 "publisher"
+ WHITESPACE@198..199 " "
+ EQ@199..200 "="
+ WHITESPACE@200..201 " "
+ CURLY_GROUP@201..238
+ L_CURLY@201..202 "{"
+ WORD@202..213 "Association"
+ WHITESPACE@213..214 " "
+ WORD@214..217 "for"
+ WHITESPACE@217..218 " "
+ WORD@218..227 "Computing"
+ WHITESPACE@227..228 " "
+ WORD@228..237 "Machinery"
+ R_CURLY@237..238 "}"
+ COMMA@238..239 ","
+ WHITESPACE@239..244 "\n "
+ FIELD@244..274
+ NAME@244..251 "address"
+ WHITESPACE@251..252 " "
+ EQ@252..253 "="
+ WHITESPACE@253..254 " "
+ CURLY_GROUP@254..273
+ L_CURLY@254..255 "{"
+ WORD@255..258 "New"
+ WHITESPACE@258..259 " "
+ WORD@259..263 "York"
+ COMMA@263..264 ","
+ WHITESPACE@264..265 " "
+ WORD@265..267 "NY"
+ COMMA@267..268 ","
+ WHITESPACE@268..269 " "
+ WORD@269..272 "USA"
+ R_CURLY@272..273 "}"
+ COMMA@273..274 ","
+ WHITESPACE@274..279 "\n "
+ FIELD@279..293
+ NAME@279..285 "volume"
+ WHITESPACE@285..286 " "
+ EQ@286..287 "="
+ WHITESPACE@287..288 " "
+ CURLY_GROUP@288..292
+ L_CURLY@288..289 "{"
+ INTEGER@289..291 "31"
+ R_CURLY@291..292 "}"
+ COMMA@292..293 ","
+ WHITESPACE@293..298 "\n "
+ FIELD@298..311
+ NAME@298..304 "number"
+ WHITESPACE@304..305 " "
+ EQ@305..306 "="
+ WHITESPACE@306..307 " "
+ CURLY_GROUP@307..310
+ L_CURLY@307..308 "{"
+ INTEGER@308..309 "3"
+ R_CURLY@309..310 "}"
+ COMMA@310..311 ","
+ WHITESPACE@311..316 "\n "
+ FIELD@316..335
+ NAME@316..320 "issn"
+ WHITESPACE@320..321 " "
+ EQ@321..322 "="
+ WHITESPACE@322..323 " "
+ CURLY_GROUP@323..334
+ L_CURLY@323..324 "{"
+ WORD@324..333 "0360-0300"
+ R_CURLY@333..334 "}"
+ COMMA@334..335 ","
+ WHITESPACE@335..340 "\n "
+ FIELD@340..386
+ NAME@340..343 "url"
+ WHITESPACE@343..344 " "
+ EQ@344..345 "="
+ WHITESPACE@345..346 " "
+ CURLY_GROUP@346..385
+ L_CURLY@346..347 "{"
+ WORD@347..384 "https://doi.org/10.11 ..."
+ R_CURLY@384..385 "}"
+ COMMA@385..386 ","
+ WHITESPACE@386..391 "\n "
+ FIELD@391..421
+ NAME@391..394 "doi"
+ WHITESPACE@394..395 " "
+ EQ@395..396 "="
+ WHITESPACE@396..397 " "
+ CURLY_GROUP@397..420
+ L_CURLY@397..398 "{"
+ WORD@398..419 "10.1145/331499.331504"
+ R_CURLY@419..420 "}"
+ COMMA@420..421 ","
+ WHITESPACE@421..426 "\n "
+ FIELD@426..456
+ NAME@426..433 "journal"
+ WHITESPACE@433..434 " "
+ EQ@434..435 "="
+ WHITESPACE@435..436 " "
+ CURLY_GROUP@436..455
+ L_CURLY@436..437 "{"
+ WORD@437..440 "ACM"
+ WHITESPACE@440..441 " "
+ WORD@441..448 "Comput."
+ WHITESPACE@448..449 " "
+ WORD@449..454 "Surv."
+ R_CURLY@454..455 "}"
+ COMMA@455..456 ","
+ WHITESPACE@456..461 "\n "
+ FIELD@461..475
+ NAME@461..466 "month"
+ WHITESPACE@466..467 " "
+ EQ@467..468 "="
+ WHITESPACE@468..469 " "
+ CURLY_GROUP@469..474
+ L_CURLY@469..470 "{"
+ WORD@470..473 "sep"
+ R_CURLY@473..474 "}"
+ COMMA@474..475 ","
+ WHITESPACE@475..480 "\n "
+ FIELD@480..498
+ NAME@480..485 "pages"
+ WHITESPACE@485..486 " "
+ EQ@486..487 "="
+ WHITESPACE@487..488 " "
+ CURLY_GROUP@488..497
+ L_CURLY@488..489 "{"
+ WORD@489..496 "264-323"
+ R_CURLY@496..497 "}"
+ COMMA@497..498 ","
+ WHITESPACE@498..503 "\n "
+ FIELD@503..519
+ NAME@503..511 "numpages"
+ WHITESPACE@511..512 " "
+ EQ@512..513 "="
+ WHITESPACE@513..514 " "
+ CURLY_GROUP@514..518
+ L_CURLY@514..515 "{"
+ INTEGER@515..517 "60"
+ R_CURLY@517..518 "}"
+ COMMA@518..519 ","
+ WHITESPACE@519..524 "\n "
+ FIELD@524..673
+ NAME@524..532 "keywords"
+ WHITESPACE@532..533 " "
+ EQ@533..534 "="
+ WHITESPACE@534..535 " "
+ CURLY_GROUP@535..672
+ L_CURLY@535..536 "{"
+ WORD@536..547 "incremental"
+ WHITESPACE@547..548 " "
+ WORD@548..558 "clustering"
+ COMMA@558..559 ","
+ WHITESPACE@559..560 " "
+ WORD@560..570 "clustering"
+ WHITESPACE@570..571 " "
+ WORD@571..583 "applications"
+ COMMA@583..584 ","
+ WHITESPACE@584..585 " "
+ WORD@585..596 "exploratory"
+ WHITESPACE@596..597 " "
+ WORD@597..601 "data"
+ WHITESPACE@601..602 " "
+ WORD@602..610 "analysis"
+ COMMA@610..611 ","
+ WHITESPACE@611..612 " "
+ WORD@612..619 "cluster"
+ WHITESPACE@619..620 " "
+ WORD@620..628 "analysis"
+ COMMA@628..629 ","
+ WHITESPACE@629..630 " "
+ WORD@630..640 "similarity"
+ WHITESPACE@640..641 " "
+ WORD@641..648 "indices"
+ COMMA@648..649 ","
+ WHITESPACE@649..650 " "
+ WORD@650..662 "unsupervised"
+ WHITESPACE@662..663 " "
+ WORD@663..671 "learning"
+ R_CURLY@671..672 "}"
+ WHITESPACE@672..673 "\n"
+ R_DELIM@673..674 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_kastenholz_2006() {
+ check(
+ r#"@string{jchph = {J.~Chem. Phys.}}
+
+@article{kastenholz,
+ author = {Kastenholz, M. A. and H{\"u}nenberger, Philippe H.},
+ title = {Computation of methodology\hyphen independent ionic solvation
+ free energies from molecular simulations},
+ journaltitle = jchph,
+ date = 2006,
+ subtitle = {{I}. {The} electrostatic potential in molecular liquids},
+ volume = 124,
+ eid = 124106,
+ doi = {10.1063/1.2172593},
+ langid = {english},
+ langidopts = {variant=american},
+ indextitle = {Computation of ionic solvation free energies},
+ annotation = {An \texttt{article} entry with an \texttt{eid} and a
+ \texttt{doi} field. Note that the \textsc{doi} is transformed
+ into a clickable link if \texttt{hyperref} support has been
+ enabled},
+}"#,
+ expect![[r#"
+ ROOT@0..898
+ STRING@0..35
+ TYPE@0..7 "@string"
+ L_DELIM@7..8 "{"
+ NAME@8..13 "jchph"
+ WHITESPACE@13..16 " "
+ EQ@16..17 "="
+ WHITESPACE@17..18 " "
+ CURLY_GROUP@18..34
+ L_CURLY@18..19 "{"
+ WORD@19..21 "J."
+ NBSP@21..22 "~"
+ WORD@22..27 "Chem."
+ WHITESPACE@27..28 " "
+ WORD@28..33 "Phys."
+ R_CURLY@33..34 "}"
+ R_DELIM@34..35 "}"
+ JUNK@35..37 "\n\n"
+ ENTRY@37..898
+ TYPE@37..45 "@article"
+ L_DELIM@45..46 "{"
+ NAME@46..56 "kastenholz"
+ COMMA@56..57 ","
+ WHITESPACE@57..62 "\n "
+ FIELD@62..130
+ NAME@62..68 "author"
+ WHITESPACE@68..75 " "
+ EQ@75..76 "="
+ WHITESPACE@76..77 " "
+ CURLY_GROUP@77..129
+ L_CURLY@77..78 "{"
+ WORD@78..88 "Kastenholz"
+ COMMA@88..89 ","
+ WHITESPACE@89..90 " "
+ WORD@90..92 "M."
+ WHITESPACE@92..93 " "
+ WORD@93..95 "A."
+ WHITESPACE@95..96 " "
+ WORD@96..99 "and"
+ WHITESPACE@99..100 " "
+ WORD@100..101 "H"
+ CURLY_GROUP@101..106
+ L_CURLY@101..102 "{"
+ ACCENT@102..105
+ ACCENT_NAME@102..104 "\\\""
+ WORD@104..105 "u"
+ R_CURLY@105..106 "}"
+ WORD@106..115 "nenberger"
+ COMMA@115..116 ","
+ WHITESPACE@116..117 " "
+ WORD@117..125 "Philippe"
+ WHITESPACE@125..126 " "
+ WORD@126..128 "H."
+ R_CURLY@128..129 "}"
+ COMMA@129..130 ","
+ WHITESPACE@130..135 "\n "
+ FIELD@135..275
+ NAME@135..140 "title"
+ WHITESPACE@140..148 " "
+ EQ@148..149 "="
+ WHITESPACE@149..150 " "
+ CURLY_GROUP@150..274
+ L_CURLY@150..151 "{"
+ WORD@151..162 "Computation"
+ WHITESPACE@162..163 " "
+ WORD@163..165 "of"
+ WHITESPACE@165..166 " "
+ WORD@166..177 "methodology"
+ COMMAND@177..184
+ COMMAND_NAME@177..184 "\\hyphen"
+ WHITESPACE@184..185 " "
+ WORD@185..196 "independent"
+ WHITESPACE@196..197 " "
+ WORD@197..202 "ionic"
+ WHITESPACE@202..203 " "
+ WORD@203..212 "solvation"
+ WHITESPACE@212..233 "\n "
+ WORD@233..237 "free"
+ WHITESPACE@237..238 " "
+ WORD@238..246 "energies"
+ WHITESPACE@246..247 " "
+ WORD@247..251 "from"
+ WHITESPACE@251..252 " "
+ WORD@252..261 "molecular"
+ WHITESPACE@261..262 " "
+ WORD@262..273 "simulations"
+ R_CURLY@273..274 "}"
+ COMMA@274..275 ","
+ WHITESPACE@275..280 "\n "
+ FIELD@280..301
+ NAME@280..292 "journaltitle"
+ WHITESPACE@292..293 " "
+ EQ@293..294 "="
+ WHITESPACE@294..295 " "
+ LITERAL@295..300
+ NAME@295..300 "jchph"
+ COMMA@300..301 ","
+ WHITESPACE@301..306 "\n "
+ FIELD@306..326
+ NAME@306..310 "date"
+ WHITESPACE@310..319 " "
+ EQ@319..320 "="
+ WHITESPACE@320..321 " "
+ LITERAL@321..325
+ INTEGER@321..325 "2006"
+ COMMA@325..326 ","
+ WHITESPACE@326..331 "\n "
+ FIELD@331..404
+ NAME@331..339 "subtitle"
+ WHITESPACE@339..344 " "
+ EQ@344..345 "="
+ WHITESPACE@345..346 " "
+ CURLY_GROUP@346..403
+ L_CURLY@346..347 "{"
+ CURLY_GROUP@347..350
+ L_CURLY@347..348 "{"
+ WORD@348..349 "I"
+ R_CURLY@349..350 "}"
+ WORD@350..351 "."
+ WHITESPACE@351..352 " "
+ CURLY_GROUP@352..357
+ L_CURLY@352..353 "{"
+ WORD@353..356 "The"
+ R_CURLY@356..357 "}"
+ WHITESPACE@357..358 " "
+ WORD@358..371 "electrostatic"
+ WHITESPACE@371..372 " "
+ WORD@372..381 "potential"
+ WHITESPACE@381..382 " "
+ WORD@382..384 "in"
+ WHITESPACE@384..385 " "
+ WORD@385..394 "molecular"
+ WHITESPACE@394..395 " "
+ WORD@395..402 "liquids"
+ R_CURLY@402..403 "}"
+ COMMA@403..404 ","
+ WHITESPACE@404..409 "\n "
+ FIELD@409..428
+ NAME@409..415 "volume"
+ WHITESPACE@415..422 " "
+ EQ@422..423 "="
+ WHITESPACE@423..424 " "
+ LITERAL@424..427
+ INTEGER@424..427 "124"
+ COMMA@427..428 ","
+ WHITESPACE@428..433 "\n "
+ FIELD@433..455
+ NAME@433..436 "eid"
+ WHITESPACE@436..446 " "
+ EQ@446..447 "="
+ WHITESPACE@447..448 " "
+ LITERAL@448..454
+ INTEGER@448..454 "124106"
+ COMMA@454..455 ","
+ WHITESPACE@455..460 "\n "
+ FIELD@460..495
+ NAME@460..463 "doi"
+ WHITESPACE@463..473 " "
+ EQ@473..474 "="
+ WHITESPACE@474..475 " "
+ CURLY_GROUP@475..494
+ L_CURLY@475..476 "{"
+ WORD@476..493 "10.1063/1.2172593"
+ R_CURLY@493..494 "}"
+ COMMA@494..495 ","
+ WHITESPACE@495..500 "\n "
+ FIELD@500..525
+ NAME@500..506 "langid"
+ WHITESPACE@506..513 " "
+ EQ@513..514 "="
+ WHITESPACE@514..515 " "
+ CURLY_GROUP@515..524
+ L_CURLY@515..516 "{"
+ WORD@516..523 "english"
+ R_CURLY@523..524 "}"
+ COMMA@524..525 ","
+ WHITESPACE@525..530 "\n "
+ FIELD@530..564
+ NAME@530..540 "langidopts"
+ WHITESPACE@540..543 " "
+ EQ@543..544 "="
+ WHITESPACE@544..545 " "
+ CURLY_GROUP@545..563
+ L_CURLY@545..546 "{"
+ WORD@546..562 "variant=american"
+ R_CURLY@562..563 "}"
+ COMMA@563..564 ","
+ WHITESPACE@564..569 "\n "
+ FIELD@569..631
+ NAME@569..579 "indextitle"
+ WHITESPACE@579..582 " "
+ EQ@582..583 "="
+ WHITESPACE@583..584 " "
+ CURLY_GROUP@584..630
+ L_CURLY@584..585 "{"
+ WORD@585..596 "Computation"
+ WHITESPACE@596..597 " "
+ WORD@597..599 "of"
+ WHITESPACE@599..600 " "
+ WORD@600..605 "ionic"
+ WHITESPACE@605..606 " "
+ WORD@606..615 "solvation"
+ WHITESPACE@615..616 " "
+ WORD@616..620 "free"
+ WHITESPACE@620..621 " "
+ WORD@621..629 "energies"
+ R_CURLY@629..630 "}"
+ COMMA@630..631 ","
+ WHITESPACE@631..636 "\n "
+ FIELD@636..896
+ NAME@636..646 "annotation"
+ WHITESPACE@646..649 " "
+ EQ@649..650 "="
+ WHITESPACE@650..651 " "
+ CURLY_GROUP@651..895
+ L_CURLY@651..652 "{"
+ WORD@652..654 "An"
+ WHITESPACE@654..655 " "
+ COMMAND@655..662
+ COMMAND_NAME@655..662 "\\texttt"
+ CURLY_GROUP@662..671
+ L_CURLY@662..663 "{"
+ WORD@663..670 "article"
+ R_CURLY@670..671 "}"
+ WHITESPACE@671..672 " "
+ WORD@672..677 "entry"
+ WHITESPACE@677..678 " "
+ WORD@678..682 "with"
+ WHITESPACE@682..683 " "
+ WORD@683..685 "an"
+ WHITESPACE@685..686 " "
+ COMMAND@686..693
+ COMMAND_NAME@686..693 "\\texttt"
+ CURLY_GROUP@693..698
+ L_CURLY@693..694 "{"
+ WORD@694..697 "eid"
+ R_CURLY@697..698 "}"
+ WHITESPACE@698..699 " "
+ WORD@699..702 "and"
+ WHITESPACE@702..703 " "
+ WORD@703..704 "a"
+ WHITESPACE@704..725 "\n "
+ COMMAND@725..732
+ COMMAND_NAME@725..732 "\\texttt"
+ CURLY_GROUP@732..737
+ L_CURLY@732..733 "{"
+ WORD@733..736 "doi"
+ R_CURLY@736..737 "}"
+ WHITESPACE@737..738 " "
+ WORD@738..744 "field."
+ WHITESPACE@744..745 " "
+ WORD@745..749 "Note"
+ WHITESPACE@749..750 " "
+ WORD@750..754 "that"
+ WHITESPACE@754..755 " "
+ WORD@755..758 "the"
+ WHITESPACE@758..759 " "
+ COMMAND@759..766
+ COMMAND_NAME@759..766 "\\textsc"
+ CURLY_GROUP@766..771
+ L_CURLY@766..767 "{"
+ WORD@767..770 "doi"
+ R_CURLY@770..771 "}"
+ WHITESPACE@771..772 " "
+ WORD@772..774 "is"
+ WHITESPACE@774..775 " "
+ WORD@775..786 "transformed"
+ WHITESPACE@786..807 "\n "
+ WORD@807..811 "into"
+ WHITESPACE@811..812 " "
+ WORD@812..813 "a"
+ WHITESPACE@813..814 " "
+ WORD@814..823 "clickable"
+ WHITESPACE@823..824 " "
+ WORD@824..828 "link"
+ WHITESPACE@828..829 " "
+ WORD@829..831 "if"
+ WHITESPACE@831..832 " "
+ COMMAND@832..839
+ COMMAND_NAME@832..839 "\\texttt"
+ CURLY_GROUP@839..849
+ L_CURLY@839..840 "{"
+ WORD@840..848 "hyperref"
+ R_CURLY@848..849 "}"
+ WHITESPACE@849..850 " "
+ WORD@850..857 "support"
+ WHITESPACE@857..858 " "
+ WORD@858..861 "has"
+ WHITESPACE@861..862 " "
+ WORD@862..866 "been"
+ WHITESPACE@866..887 "\n "
+ WORD@887..894 "enabled"
+ R_CURLY@894..895 "}"
+ COMMA@895..896 ","
+ WHITESPACE@896..897 "\n"
+ R_DELIM@897..898 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_knuth_1984() {
+ check(
+ r#"@book{knuth:ct:a,
+ author = {Knuth, Donald E.},
+ title = {The {\TeX book}},
+ date = 1984,
+ maintitle = {Computers \& Typesetting},
+ volume = {A},
+ publisher = {Addison-Wesley},
+ location = {Reading, Mass.},
+ langid = {english},
+ langidopts = {variant=american},
+ sorttitle = {Computers & Typesetting A},
+ indexsorttitle= {The TeXbook},
+ indextitle = {\protect\TeX book, The},
+ shorttitle = {\TeX book},
+ annotation = {The first volume of a five-volume book. Note the
+ \texttt{sorttitle} field. We want this
+ volume to be listed after the entry referring to the entire
+ five-volume set. Also note the \texttt{indextitle} and
+ \texttt{indexsorttitle} fields. Indexing packages that don't
+ generate robust index entries require some control sequences
+ to be protected from expansion},
+}"#,
+ expect![[r#"
+ ROOT@0..993
+ ENTRY@0..993
+ TYPE@0..5 "@book"
+ L_DELIM@5..6 "{"
+ NAME@6..16 "knuth:ct:a"
+ COMMA@16..17 ","
+ WHITESPACE@17..22 "\n "
+ FIELD@22..56
+ NAME@22..28 "author"
+ WHITESPACE@28..35 " "
+ EQ@35..36 "="
+ WHITESPACE@36..37 " "
+ CURLY_GROUP@37..55
+ L_CURLY@37..38 "{"
+ WORD@38..43 "Knuth"
+ COMMA@43..44 ","
+ WHITESPACE@44..45 " "
+ WORD@45..51 "Donald"
+ WHITESPACE@51..52 " "
+ WORD@52..54 "E."
+ R_CURLY@54..55 "}"
+ COMMA@55..56 ","
+ WHITESPACE@56..61 "\n "
+ FIELD@61..94
+ NAME@61..66 "title"
+ WHITESPACE@66..74 " "
+ EQ@74..75 "="
+ WHITESPACE@75..76 " "
+ CURLY_GROUP@76..93
+ L_CURLY@76..77 "{"
+ WORD@77..80 "The"
+ WHITESPACE@80..81 " "
+ CURLY_GROUP@81..92
+ L_CURLY@81..82 "{"
+ COMMAND@82..86
+ COMMAND_NAME@82..86 "\\TeX"
+ WHITESPACE@86..87 " "
+ WORD@87..91 "book"
+ R_CURLY@91..92 "}"
+ R_CURLY@92..93 "}"
+ COMMA@93..94 ","
+ WHITESPACE@94..99 "\n "
+ FIELD@99..119
+ NAME@99..103 "date"
+ WHITESPACE@103..112 " "
+ EQ@112..113 "="
+ WHITESPACE@113..114 " "
+ LITERAL@114..118
+ INTEGER@114..118 "1984"
+ COMMA@118..119 ","
+ WHITESPACE@119..124 "\n "
+ FIELD@124..166
+ NAME@124..133 "maintitle"
+ WHITESPACE@133..137 " "
+ EQ@137..138 "="
+ WHITESPACE@138..139 " "
+ CURLY_GROUP@139..165
+ L_CURLY@139..140 "{"
+ WORD@140..149 "Computers"
+ WHITESPACE@149..150 " "
+ COMMAND@150..152
+ COMMAND_NAME@150..152 "\\&"
+ WHITESPACE@152..153 " "
+ WORD@153..164 "Typesetting"
+ R_CURLY@164..165 "}"
+ COMMA@165..166 ","
+ WHITESPACE@166..171 "\n "
+ FIELD@171..190
+ NAME@171..177 "volume"
+ WHITESPACE@177..184 " "
+ EQ@184..185 "="
+ WHITESPACE@185..186 " "
+ CURLY_GROUP@186..189
+ L_CURLY@186..187 "{"
+ WORD@187..188 "A"
+ R_CURLY@188..189 "}"
+ COMMA@189..190 ","
+ WHITESPACE@190..195 "\n "
+ FIELD@195..227
+ NAME@195..204 "publisher"
+ WHITESPACE@204..208 " "
+ EQ@208..209 "="
+ WHITESPACE@209..210 " "
+ CURLY_GROUP@210..226
+ L_CURLY@210..211 "{"
+ WORD@211..225 "Addison-Wesley"
+ R_CURLY@225..226 "}"
+ COMMA@226..227 ","
+ WHITESPACE@227..232 "\n "
+ FIELD@232..264
+ NAME@232..240 "location"
+ WHITESPACE@240..245 " "
+ EQ@245..246 "="
+ WHITESPACE@246..247 " "
+ CURLY_GROUP@247..263
+ L_CURLY@247..248 "{"
+ WORD@248..255 "Reading"
+ COMMA@255..256 ","
+ WHITESPACE@256..257 " "
+ WORD@257..262 "Mass."
+ R_CURLY@262..263 "}"
+ COMMA@263..264 ","
+ WHITESPACE@264..269 "\n "
+ FIELD@269..294
+ NAME@269..275 "langid"
+ WHITESPACE@275..282 " "
+ EQ@282..283 "="
+ WHITESPACE@283..284 " "
+ CURLY_GROUP@284..293
+ L_CURLY@284..285 "{"
+ WORD@285..292 "english"
+ R_CURLY@292..293 "}"
+ COMMA@293..294 ","
+ WHITESPACE@294..299 "\n "
+ FIELD@299..333
+ NAME@299..309 "langidopts"
+ WHITESPACE@309..312 " "
+ EQ@312..313 "="
+ WHITESPACE@313..314 " "
+ CURLY_GROUP@314..332
+ L_CURLY@314..315 "{"
+ WORD@315..331 "variant=american"
+ R_CURLY@331..332 "}"
+ COMMA@332..333 ","
+ WHITESPACE@333..338 "\n "
+ FIELD@338..381
+ NAME@338..347 "sorttitle"
+ WHITESPACE@347..351 " "
+ EQ@351..352 "="
+ WHITESPACE@352..353 " "
+ CURLY_GROUP@353..380
+ L_CURLY@353..354 "{"
+ WORD@354..363 "Computers"
+ WHITESPACE@363..364 " "
+ WORD@364..365 "&"
+ WHITESPACE@365..366 " "
+ WORD@366..377 "Typesetting"
+ WHITESPACE@377..378 " "
+ WORD@378..379 "A"
+ R_CURLY@379..380 "}"
+ COMMA@380..381 ","
+ WHITESPACE@381..386 "\n "
+ FIELD@386..416
+ NAME@386..400 "indexsorttitle"
+ EQ@400..401 "="
+ WHITESPACE@401..402 " "
+ CURLY_GROUP@402..415
+ L_CURLY@402..403 "{"
+ WORD@403..406 "The"
+ WHITESPACE@406..407 " "
+ WORD@407..414 "TeXbook"
+ R_CURLY@414..415 "}"
+ COMMA@415..416 ","
+ WHITESPACE@416..421 "\n "
+ FIELD@421..461
+ NAME@421..431 "indextitle"
+ WHITESPACE@431..434 " "
+ EQ@434..435 "="
+ WHITESPACE@435..436 " "
+ CURLY_GROUP@436..460
+ L_CURLY@436..437 "{"
+ COMMAND@437..445
+ COMMAND_NAME@437..445 "\\protect"
+ COMMAND@445..449
+ COMMAND_NAME@445..449 "\\TeX"
+ WHITESPACE@449..450 " "
+ WORD@450..454 "book"
+ COMMA@454..455 ","
+ WHITESPACE@455..456 " "
+ WORD@456..459 "The"
+ R_CURLY@459..460 "}"
+ COMMA@460..461 ","
+ WHITESPACE@461..466 "\n "
+ FIELD@466..493
+ NAME@466..476 "shorttitle"
+ WHITESPACE@476..479 " "
+ EQ@479..480 "="
+ WHITESPACE@480..481 " "
+ CURLY_GROUP@481..492
+ L_CURLY@481..482 "{"
+ COMMAND@482..486
+ COMMAND_NAME@482..486 "\\TeX"
+ WHITESPACE@486..487 " "
+ WORD@487..491 "book"
+ R_CURLY@491..492 "}"
+ COMMA@492..493 ","
+ WHITESPACE@493..498 "\n "
+ FIELD@498..991
+ NAME@498..508 "annotation"
+ WHITESPACE@508..511 " "
+ EQ@511..512 "="
+ WHITESPACE@512..513 " "
+ CURLY_GROUP@513..990
+ L_CURLY@513..514 "{"
+ WORD@514..517 "The"
+ WHITESPACE@517..518 " "
+ WORD@518..523 "first"
+ WHITESPACE@523..524 " "
+ WORD@524..530 "volume"
+ WHITESPACE@530..531 " "
+ WORD@531..533 "of"
+ WHITESPACE@533..534 " "
+ WORD@534..535 "a"
+ WHITESPACE@535..536 " "
+ WORD@536..547 "five-volume"
+ WHITESPACE@547..548 " "
+ WORD@548..553 "book."
+ WHITESPACE@553..554 " "
+ WORD@554..558 "Note"
+ WHITESPACE@558..559 " "
+ WORD@559..562 "the"
+ WHITESPACE@562..583 "\n "
+ COMMAND@583..590
+ COMMAND_NAME@583..590 "\\texttt"
+ CURLY_GROUP@590..601
+ L_CURLY@590..591 "{"
+ WORD@591..600 "sorttitle"
+ R_CURLY@600..601 "}"
+ WHITESPACE@601..602 " "
+ WORD@602..608 "field."
+ WHITESPACE@608..609 " "
+ WORD@609..611 "We"
+ WHITESPACE@611..612 " "
+ WORD@612..616 "want"
+ WHITESPACE@616..617 " "
+ WORD@617..621 "this"
+ WHITESPACE@621..642 "\n "
+ WORD@642..648 "volume"
+ WHITESPACE@648..649 " "
+ WORD@649..651 "to"
+ WHITESPACE@651..652 " "
+ WORD@652..654 "be"
+ WHITESPACE@654..655 " "
+ WORD@655..661 "listed"
+ WHITESPACE@661..662 " "
+ WORD@662..667 "after"
+ WHITESPACE@667..668 " "
+ WORD@668..671 "the"
+ WHITESPACE@671..672 " "
+ WORD@672..677 "entry"
+ WHITESPACE@677..678 " "
+ WORD@678..687 "referring"
+ WHITESPACE@687..688 " "
+ WORD@688..690 "to"
+ WHITESPACE@690..691 " "
+ WORD@691..694 "the"
+ WHITESPACE@694..695 " "
+ WORD@695..701 "entire"
+ WHITESPACE@701..722 "\n "
+ WORD@722..733 "five-volume"
+ WHITESPACE@733..734 " "
+ WORD@734..738 "set."
+ WHITESPACE@738..739 " "
+ WORD@739..743 "Also"
+ WHITESPACE@743..744 " "
+ WORD@744..748 "note"
+ WHITESPACE@748..749 " "
+ WORD@749..752 "the"
+ WHITESPACE@752..753 " "
+ COMMAND@753..760
+ COMMAND_NAME@753..760 "\\texttt"
+ CURLY_GROUP@760..772
+ L_CURLY@760..761 "{"
+ WORD@761..771 "indextitle"
+ R_CURLY@771..772 "}"
+ WHITESPACE@772..773 " "
+ WORD@773..776 "and"
+ WHITESPACE@776..797 "\n "
+ COMMAND@797..804
+ COMMAND_NAME@797..804 "\\texttt"
+ CURLY_GROUP@804..820
+ L_CURLY@804..805 "{"
+ WORD@805..819 "indexsorttitle"
+ R_CURLY@819..820 "}"
+ WHITESPACE@820..821 " "
+ WORD@821..828 "fields."
+ WHITESPACE@828..829 " "
+ WORD@829..837 "Indexing"
+ WHITESPACE@837..838 " "
+ WORD@838..846 "packages"
+ WHITESPACE@846..847 " "
+ WORD@847..851 "that"
+ WHITESPACE@851..852 " "
+ WORD@852..857 "don't"
+ WHITESPACE@857..878 "\n "
+ WORD@878..886 "generate"
+ WHITESPACE@886..887 " "
+ WORD@887..893 "robust"
+ WHITESPACE@893..894 " "
+ WORD@894..899 "index"
+ WHITESPACE@899..900 " "
+ WORD@900..907 "entries"
+ WHITESPACE@907..908 " "
+ WORD@908..915 "require"
+ WHITESPACE@915..916 " "
+ WORD@916..920 "some"
+ WHITESPACE@920..921 " "
+ WORD@921..928 "control"
+ WHITESPACE@928..929 " "
+ WORD@929..938 "sequences"
+ WHITESPACE@938..959 "\n "
+ WORD@959..961 "to"
+ WHITESPACE@961..962 " "
+ WORD@962..964 "be"
+ WHITESPACE@964..965 " "
+ WORD@965..974 "protected"
+ WHITESPACE@974..975 " "
+ WORD@975..979 "from"
+ WHITESPACE@979..980 " "
+ WORD@980..989 "expansion"
+ R_CURLY@989..990 "}"
+ COMMA@990..991 ","
+ WHITESPACE@991..992 "\n"
+ R_DELIM@992..993 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_matuz_1990() {
+ check(
+ r#"@collection{matuz:doody,
+ editor = {Matuz, Roger},
+ title = {Contemporary Literary Criticism},
+ year = 1990,
+ volume = 61,
+ publisher = {Gale},
+ location = {Detroit},
+ pages = {204-208},
+ langid = {english},
+ langidopts = {variant=american},
+ annotation = {A \texttt{collection} entry providing the excerpt information
+ for the \texttt{doody} entry. Note the format of the
+ \texttt{pages} field},
+}"#,
+ expect![[r#"
+ ROOT@0..517
+ ENTRY@0..517
+ TYPE@0..11 "@collection"
+ L_DELIM@11..12 "{"
+ NAME@12..23 "matuz:doody"
+ COMMA@23..24 ","
+ WHITESPACE@24..29 "\n "
+ FIELD@29..59
+ NAME@29..35 "editor"
+ WHITESPACE@35..42 " "
+ EQ@42..43 "="
+ WHITESPACE@43..44 " "
+ CURLY_GROUP@44..58
+ L_CURLY@44..45 "{"
+ WORD@45..50 "Matuz"
+ COMMA@50..51 ","
+ WHITESPACE@51..52 " "
+ WORD@52..57 "Roger"
+ R_CURLY@57..58 "}"
+ COMMA@58..59 ","
+ WHITESPACE@59..64 "\n "
+ FIELD@64..113
+ NAME@64..69 "title"
+ WHITESPACE@69..77 " "
+ EQ@77..78 "="
+ WHITESPACE@78..79 " "
+ CURLY_GROUP@79..112
+ L_CURLY@79..80 "{"
+ WORD@80..92 "Contemporary"
+ WHITESPACE@92..93 " "
+ WORD@93..101 "Literary"
+ WHITESPACE@101..102 " "
+ WORD@102..111 "Criticism"
+ R_CURLY@111..112 "}"
+ COMMA@112..113 ","
+ WHITESPACE@113..118 "\n "
+ FIELD@118..138
+ NAME@118..122 "year"
+ WHITESPACE@122..131 " "
+ EQ@131..132 "="
+ WHITESPACE@132..133 " "
+ LITERAL@133..137
+ INTEGER@133..137 "1990"
+ COMMA@137..138 ","
+ WHITESPACE@138..143 "\n "
+ FIELD@143..161
+ NAME@143..149 "volume"
+ WHITESPACE@149..156 " "
+ EQ@156..157 "="
+ WHITESPACE@157..158 " "
+ LITERAL@158..160
+ INTEGER@158..160 "61"
+ COMMA@160..161 ","
+ WHITESPACE@161..166 "\n "
+ FIELD@166..188
+ NAME@166..175 "publisher"
+ WHITESPACE@175..179 " "
+ EQ@179..180 "="
+ WHITESPACE@180..181 " "
+ CURLY_GROUP@181..187
+ L_CURLY@181..182 "{"
+ WORD@182..186 "Gale"
+ R_CURLY@186..187 "}"
+ COMMA@187..188 ","
+ WHITESPACE@188..193 "\n "
+ FIELD@193..218
+ NAME@193..201 "location"
+ WHITESPACE@201..206 " "
+ EQ@206..207 "="
+ WHITESPACE@207..208 " "
+ CURLY_GROUP@208..217
+ L_CURLY@208..209 "{"
+ WORD@209..216 "Detroit"
+ R_CURLY@216..217 "}"
+ COMMA@217..218 ","
+ WHITESPACE@218..223 "\n "
+ FIELD@223..248
+ NAME@223..228 "pages"
+ WHITESPACE@228..236 " "
+ EQ@236..237 "="
+ WHITESPACE@237..238 " "
+ CURLY_GROUP@238..247
+ L_CURLY@238..239 "{"
+ WORD@239..246 "204-208"
+ R_CURLY@246..247 "}"
+ COMMA@247..248 ","
+ WHITESPACE@248..253 "\n "
+ FIELD@253..278
+ NAME@253..259 "langid"
+ WHITESPACE@259..266 " "
+ EQ@266..267 "="
+ WHITESPACE@267..268 " "
+ CURLY_GROUP@268..277
+ L_CURLY@268..269 "{"
+ WORD@269..276 "english"
+ R_CURLY@276..277 "}"
+ COMMA@277..278 ","
+ WHITESPACE@278..283 "\n "
+ FIELD@283..317
+ NAME@283..293 "langidopts"
+ WHITESPACE@293..296 " "
+ EQ@296..297 "="
+ WHITESPACE@297..298 " "
+ CURLY_GROUP@298..316
+ L_CURLY@298..299 "{"
+ WORD@299..315 "variant=american"
+ R_CURLY@315..316 "}"
+ COMMA@316..317 ","
+ WHITESPACE@317..322 "\n "
+ FIELD@322..515
+ NAME@322..332 "annotation"
+ WHITESPACE@332..335 " "
+ EQ@335..336 "="
+ WHITESPACE@336..337 " "
+ CURLY_GROUP@337..514
+ L_CURLY@337..338 "{"
+ WORD@338..339 "A"
+ WHITESPACE@339..340 " "
+ COMMAND@340..347
+ COMMAND_NAME@340..347 "\\texttt"
+ CURLY_GROUP@347..359
+ L_CURLY@347..348 "{"
+ WORD@348..358 "collection"
+ R_CURLY@358..359 "}"
+ WHITESPACE@359..360 " "
+ WORD@360..365 "entry"
+ WHITESPACE@365..366 " "
+ WORD@366..375 "providing"
+ WHITESPACE@375..376 " "
+ WORD@376..379 "the"
+ WHITESPACE@379..380 " "
+ WORD@380..387 "excerpt"
+ WHITESPACE@387..388 " "
+ WORD@388..399 "information"
+ WHITESPACE@399..420 "\n "
+ WORD@420..423 "for"
+ WHITESPACE@423..424 " "
+ WORD@424..427 "the"
+ WHITESPACE@427..428 " "
+ COMMAND@428..435
+ COMMAND_NAME@428..435 "\\texttt"
+ CURLY_GROUP@435..442
+ L_CURLY@435..436 "{"
+ WORD@436..441 "doody"
+ R_CURLY@441..442 "}"
+ WHITESPACE@442..443 " "
+ WORD@443..449 "entry."
+ WHITESPACE@449..450 " "
+ WORD@450..454 "Note"
+ WHITESPACE@454..455 " "
+ WORD@455..458 "the"
+ WHITESPACE@458..459 " "
+ WORD@459..465 "format"
+ WHITESPACE@465..466 " "
+ WORD@466..468 "of"
+ WHITESPACE@468..469 " "
+ WORD@469..472 "the"
+ WHITESPACE@472..493 "\n "
+ COMMAND@493..500
+ COMMAND_NAME@493..500 "\\texttt"
+ CURLY_GROUP@500..507
+ L_CURLY@500..501 "{"
+ WORD@501..506 "pages"
+ R_CURLY@506..507 "}"
+ WHITESPACE@507..508 " "
+ WORD@508..513 "field"
+ R_CURLY@513..514 "}"
+ COMMA@514..515 ","
+ WHITESPACE@515..516 "\n"
+ R_DELIM@516..517 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_nietzsche_1998() {
+ check(
+ r#"@string{dtv = {Deutscher Taschenbuch-Verlag}}
+
+@mvbook{nietzsche:ksa,
+ author = {Nietzsche, Friedrich},
+ title = {S{\"a}mtliche Werke},
+ date = 1988,
+ editor = {Colli, Giorgio and Montinari, Mazzino},
+ edition = 2,
+ volumes = 15,
+ publisher = dtv # { and Walter de Gruyter},
+ location = {M{\"u}nchen and Berlin and New York},
+ langid = {german},
+ sorttitle = {Werke-00-000},
+ indexsorttitle= {Samtliche Werke},
+ subtitle = {Kritische Studienausgabe},
+ annotation = {The critical edition of Nietzsche's works. This is a
+ \texttt{mvbook} entry referring to a 15-volume work as a
+ whole. Note the \texttt{volumes} field and the format of the
+ \texttt{publisher} and \texttt{location} fields in the
+ database file. Also note the \texttt{sorttitle} and
+ field which is used to fine-tune the
+ sorting order of the bibliography. We want this item listed
+ first in the bibliography},
+}"#,
+ expect![[r##"
+ ROOT@0..1112
+ STRING@0..49
+ TYPE@0..7 "@string"
+ L_DELIM@7..8 "{"
+ NAME@8..11 "dtv"
+ WHITESPACE@11..16 " "
+ EQ@16..17 "="
+ WHITESPACE@17..18 " "
+ CURLY_GROUP@18..48
+ L_CURLY@18..19 "{"
+ WORD@19..28 "Deutscher"
+ WHITESPACE@28..29 " "
+ WORD@29..47 "Taschenbuch-Verlag"
+ R_CURLY@47..48 "}"
+ R_DELIM@48..49 "}"
+ JUNK@49..51 "\n\n"
+ ENTRY@51..1112
+ TYPE@51..58 "@mvbook"
+ L_DELIM@58..59 "{"
+ NAME@59..72 "nietzsche:ksa"
+ COMMA@72..73 ","
+ WHITESPACE@73..78 "\n "
+ FIELD@78..116
+ NAME@78..84 "author"
+ WHITESPACE@84..91 " "
+ EQ@91..92 "="
+ WHITESPACE@92..93 " "
+ CURLY_GROUP@93..115
+ L_CURLY@93..94 "{"
+ WORD@94..103 "Nietzsche"
+ COMMA@103..104 ","
+ WHITESPACE@104..105 " "
+ WORD@105..114 "Friedrich"
+ R_CURLY@114..115 "}"
+ COMMA@115..116 ","
+ WHITESPACE@116..121 "\n "
+ FIELD@121..158
+ NAME@121..126 "title"
+ WHITESPACE@126..134 " "
+ EQ@134..135 "="
+ WHITESPACE@135..136 " "
+ CURLY_GROUP@136..157
+ L_CURLY@136..137 "{"
+ WORD@137..138 "S"
+ CURLY_GROUP@138..143
+ L_CURLY@138..139 "{"
+ ACCENT@139..142
+ ACCENT_NAME@139..141 "\\\""
+ WORD@141..142 "a"
+ R_CURLY@142..143 "}"
+ WORD@143..150 "mtliche"
+ WHITESPACE@150..151 " "
+ WORD@151..156 "Werke"
+ R_CURLY@156..157 "}"
+ COMMA@157..158 ","
+ WHITESPACE@158..163 "\n "
+ FIELD@163..183
+ NAME@163..167 "date"
+ WHITESPACE@167..176 " "
+ EQ@176..177 "="
+ WHITESPACE@177..178 " "
+ LITERAL@178..182
+ INTEGER@178..182 "1988"
+ COMMA@182..183 ","
+ WHITESPACE@183..188 "\n "
+ FIELD@188..243
+ NAME@188..194 "editor"
+ WHITESPACE@194..201 " "
+ EQ@201..202 "="
+ WHITESPACE@202..203 " "
+ CURLY_GROUP@203..242
+ L_CURLY@203..204 "{"
+ WORD@204..209 "Colli"
+ COMMA@209..210 ","
+ WHITESPACE@210..211 " "
+ WORD@211..218 "Giorgio"
+ WHITESPACE@218..219 " "
+ WORD@219..222 "and"
+ WHITESPACE@222..223 " "
+ WORD@223..232 "Montinari"
+ COMMA@232..233 ","
+ WHITESPACE@233..234 " "
+ WORD@234..241 "Mazzino"
+ R_CURLY@241..242 "}"
+ COMMA@242..243 ","
+ WHITESPACE@243..248 "\n "
+ FIELD@248..265
+ NAME@248..255 "edition"
+ WHITESPACE@255..261 " "
+ EQ@261..262 "="
+ WHITESPACE@262..263 " "
+ LITERAL@263..264
+ INTEGER@263..264 "2"
+ COMMA@264..265 ","
+ WHITESPACE@265..270 "\n "
+ FIELD@270..288
+ NAME@270..277 "volumes"
+ WHITESPACE@277..283 " "
+ EQ@283..284 "="
+ WHITESPACE@284..285 " "
+ LITERAL@285..287
+ INTEGER@285..287 "15"
+ COMMA@287..288 ","
+ WHITESPACE@288..293 "\n "
+ FIELD@293..339
+ NAME@293..302 "publisher"
+ WHITESPACE@302..306 " "
+ EQ@306..307 "="
+ WHITESPACE@307..308 " "
+ JOIN@308..338
+ LITERAL@308..311
+ NAME@308..311 "dtv"
+ WHITESPACE@311..312 " "
+ POUND@312..313 "#"
+ WHITESPACE@313..314 " "
+ CURLY_GROUP@314..338
+ L_CURLY@314..315 "{"
+ WHITESPACE@315..316 " "
+ WORD@316..319 "and"
+ WHITESPACE@319..320 " "
+ WORD@320..326 "Walter"
+ WHITESPACE@326..327 " "
+ WORD@327..329 "de"
+ WHITESPACE@329..330 " "
+ WORD@330..337 "Gruyter"
+ R_CURLY@337..338 "}"
+ COMMA@338..339 ","
+ WHITESPACE@339..344 "\n "
+ FIELD@344..397
+ NAME@344..352 "location"
+ WHITESPACE@352..357 " "
+ EQ@357..358 "="
+ WHITESPACE@358..359 " "
+ CURLY_GROUP@359..396
+ L_CURLY@359..360 "{"
+ WORD@360..361 "M"
+ CURLY_GROUP@361..366
+ L_CURLY@361..362 "{"
+ ACCENT@362..365
+ ACCENT_NAME@362..364 "\\\""
+ WORD@364..365 "u"
+ R_CURLY@365..366 "}"
+ WORD@366..371 "nchen"
+ WHITESPACE@371..372 " "
+ WORD@372..375 "and"
+ WHITESPACE@375..376 " "
+ WORD@376..382 "Berlin"
+ WHITESPACE@382..383 " "
+ WORD@383..386 "and"
+ WHITESPACE@386..387 " "
+ WORD@387..390 "New"
+ WHITESPACE@390..391 " "
+ WORD@391..395 "York"
+ R_CURLY@395..396 "}"
+ COMMA@396..397 ","
+ WHITESPACE@397..402 "\n "
+ FIELD@402..426
+ NAME@402..408 "langid"
+ WHITESPACE@408..415 " "
+ EQ@415..416 "="
+ WHITESPACE@416..417 " "
+ CURLY_GROUP@417..425
+ L_CURLY@417..418 "{"
+ WORD@418..424 "german"
+ R_CURLY@424..425 "}"
+ COMMA@425..426 ","
+ WHITESPACE@426..431 "\n "
+ FIELD@431..461
+ NAME@431..440 "sorttitle"
+ WHITESPACE@440..444 " "
+ EQ@444..445 "="
+ WHITESPACE@445..446 " "
+ CURLY_GROUP@446..460
+ L_CURLY@446..447 "{"
+ WORD@447..459 "Werke-00-000"
+ R_CURLY@459..460 "}"
+ COMMA@460..461 ","
+ WHITESPACE@461..466 "\n "
+ FIELD@466..500
+ NAME@466..480 "indexsorttitle"
+ EQ@480..481 "="
+ WHITESPACE@481..482 " "
+ CURLY_GROUP@482..499
+ L_CURLY@482..483 "{"
+ WORD@483..492 "Samtliche"
+ WHITESPACE@492..493 " "
+ WORD@493..498 "Werke"
+ R_CURLY@498..499 "}"
+ COMMA@499..500 ","
+ WHITESPACE@500..505 "\n "
+ FIELD@505..547
+ NAME@505..513 "subtitle"
+ WHITESPACE@513..518 " "
+ EQ@518..519 "="
+ WHITESPACE@519..520 " "
+ CURLY_GROUP@520..546
+ L_CURLY@520..521 "{"
+ WORD@521..530 "Kritische"
+ WHITESPACE@530..531 " "
+ WORD@531..545 "Studienausgabe"
+ R_CURLY@545..546 "}"
+ COMMA@546..547 ","
+ WHITESPACE@547..552 "\n "
+ FIELD@552..1110
+ NAME@552..562 "annotation"
+ WHITESPACE@562..565 " "
+ EQ@565..566 "="
+ WHITESPACE@566..567 " "
+ CURLY_GROUP@567..1109
+ L_CURLY@567..568 "{"
+ WORD@568..571 "The"
+ WHITESPACE@571..572 " "
+ WORD@572..580 "critical"
+ WHITESPACE@580..581 " "
+ WORD@581..588 "edition"
+ WHITESPACE@588..589 " "
+ WORD@589..591 "of"
+ WHITESPACE@591..592 " "
+ WORD@592..603 "Nietzsche's"
+ WHITESPACE@603..604 " "
+ WORD@604..610 "works."
+ WHITESPACE@610..611 " "
+ WORD@611..615 "This"
+ WHITESPACE@615..616 " "
+ WORD@616..618 "is"
+ WHITESPACE@618..619 " "
+ WORD@619..620 "a"
+ WHITESPACE@620..641 "\n "
+ COMMAND@641..648
+ COMMAND_NAME@641..648 "\\texttt"
+ CURLY_GROUP@648..656
+ L_CURLY@648..649 "{"
+ WORD@649..655 "mvbook"
+ R_CURLY@655..656 "}"
+ WHITESPACE@656..657 " "
+ WORD@657..662 "entry"
+ WHITESPACE@662..663 " "
+ WORD@663..672 "referring"
+ WHITESPACE@672..673 " "
+ WORD@673..675 "to"
+ WHITESPACE@675..676 " "
+ WORD@676..677 "a"
+ WHITESPACE@677..678 " "
+ WORD@678..687 "15-volume"
+ WHITESPACE@687..688 " "
+ WORD@688..692 "work"
+ WHITESPACE@692..693 " "
+ WORD@693..695 "as"
+ WHITESPACE@695..696 " "
+ WORD@696..697 "a"
+ WHITESPACE@697..718 "\n "
+ WORD@718..724 "whole."
+ WHITESPACE@724..725 " "
+ WORD@725..729 "Note"
+ WHITESPACE@729..730 " "
+ WORD@730..733 "the"
+ WHITESPACE@733..734 " "
+ COMMAND@734..741
+ COMMAND_NAME@734..741 "\\texttt"
+ CURLY_GROUP@741..750
+ L_CURLY@741..742 "{"
+ WORD@742..749 "volumes"
+ R_CURLY@749..750 "}"
+ WHITESPACE@750..751 " "
+ WORD@751..756 "field"
+ WHITESPACE@756..757 " "
+ WORD@757..760 "and"
+ WHITESPACE@760..761 " "
+ WORD@761..764 "the"
+ WHITESPACE@764..765 " "
+ WORD@765..771 "format"
+ WHITESPACE@771..772 " "
+ WORD@772..774 "of"
+ WHITESPACE@774..775 " "
+ WORD@775..778 "the"
+ WHITESPACE@778..799 "\n "
+ COMMAND@799..806
+ COMMAND_NAME@799..806 "\\texttt"
+ CURLY_GROUP@806..817
+ L_CURLY@806..807 "{"
+ WORD@807..816 "publisher"
+ R_CURLY@816..817 "}"
+ WHITESPACE@817..818 " "
+ WORD@818..821 "and"
+ WHITESPACE@821..822 " "
+ COMMAND@822..829
+ COMMAND_NAME@822..829 "\\texttt"
+ CURLY_GROUP@829..839
+ L_CURLY@829..830 "{"
+ WORD@830..838 "location"
+ R_CURLY@838..839 "}"
+ WHITESPACE@839..840 " "
+ WORD@840..846 "fields"
+ WHITESPACE@846..847 " "
+ WORD@847..849 "in"
+ WHITESPACE@849..850 " "
+ WORD@850..853 "the"
+ WHITESPACE@853..874 "\n "
+ WORD@874..882 "database"
+ WHITESPACE@882..883 " "
+ WORD@883..888 "file."
+ WHITESPACE@888..889 " "
+ WORD@889..893 "Also"
+ WHITESPACE@893..894 " "
+ WORD@894..898 "note"
+ WHITESPACE@898..899 " "
+ WORD@899..902 "the"
+ WHITESPACE@902..903 " "
+ COMMAND@903..910
+ COMMAND_NAME@903..910 "\\texttt"
+ CURLY_GROUP@910..921
+ L_CURLY@910..911 "{"
+ WORD@911..920 "sorttitle"
+ R_CURLY@920..921 "}"
+ WHITESPACE@921..922 " "
+ WORD@922..925 "and"
+ WHITESPACE@925..946 "\n "
+ WORD@946..951 "field"
+ WHITESPACE@951..952 " "
+ WORD@952..957 "which"
+ WHITESPACE@957..958 " "
+ WORD@958..960 "is"
+ WHITESPACE@960..961 " "
+ WORD@961..965 "used"
+ WHITESPACE@965..966 " "
+ WORD@966..968 "to"
+ WHITESPACE@968..969 " "
+ WORD@969..978 "fine-tune"
+ WHITESPACE@978..979 " "
+ WORD@979..982 "the"
+ WHITESPACE@982..1003 "\n "
+ WORD@1003..1010 "sorting"
+ WHITESPACE@1010..1011 " "
+ WORD@1011..1016 "order"
+ WHITESPACE@1016..1017 " "
+ WORD@1017..1019 "of"
+ WHITESPACE@1019..1020 " "
+ WORD@1020..1023 "the"
+ WHITESPACE@1023..1024 " "
+ WORD@1024..1037 "bibliography."
+ WHITESPACE@1037..1038 " "
+ WORD@1038..1040 "We"
+ WHITESPACE@1040..1041 " "
+ WORD@1041..1045 "want"
+ WHITESPACE@1045..1046 " "
+ WORD@1046..1050 "this"
+ WHITESPACE@1050..1051 " "
+ WORD@1051..1055 "item"
+ WHITESPACE@1055..1056 " "
+ WORD@1056..1062 "listed"
+ WHITESPACE@1062..1083 "\n "
+ WORD@1083..1088 "first"
+ WHITESPACE@1088..1089 " "
+ WORD@1089..1091 "in"
+ WHITESPACE@1091..1092 " "
+ WORD@1092..1095 "the"
+ WHITESPACE@1095..1096 " "
+ WORD@1096..1108 "bibliography"
+ R_CURLY@1108..1109 "}"
+ COMMA@1109..1110 ","
+ WHITESPACE@1110..1111 "\n"
+ R_DELIM@1111..1112 "}"
+
+ "##]],
+ );
+}
+
+#[test]
+fn test_rivest_1978() {
+ check(
+ r#"@article{10.1145/359340.359342,
+ author = {Rivest, R. L. and Shamir, A. and Adleman, L.},
+ title = {A Method for Obtaining Digital Signatures and Public-Key Cryptosystems},
+ year = {1978},
+ issue_date = {Feb. 1978},
+ publisher = {Association for Computing Machinery},
+ address = {New York, NY, USA},
+ volume = {21},
+ number = {2},
+ issn = {0001-0782},
+ url = {https://doi.org/10.1145/359340.359342},
+ doi = {10.1145/359340.359342},
+ journal = {Commun. ACM},
+ month = {feb},
+ pages = {120-126},
+ numpages = {7},
+}"#,
+ expect![[r#"
+ ROOT@0..557
+ ENTRY@0..557
+ TYPE@0..8 "@article"
+ L_DELIM@8..9 "{"
+ NAME@9..30 "10.1145/359340.359342"
+ COMMA@30..31 ","
+ WHITESPACE@31..36 "\n "
+ FIELD@36..92
+ NAME@36..42 "author"
+ WHITESPACE@42..43 " "
+ EQ@43..44 "="
+ WHITESPACE@44..45 " "
+ CURLY_GROUP@45..91
+ L_CURLY@45..46 "{"
+ WORD@46..52 "Rivest"
+ COMMA@52..53 ","
+ WHITESPACE@53..54 " "
+ WORD@54..56 "R."
+ WHITESPACE@56..57 " "
+ WORD@57..59 "L."
+ WHITESPACE@59..60 " "
+ WORD@60..63 "and"
+ WHITESPACE@63..64 " "
+ WORD@64..70 "Shamir"
+ COMMA@70..71 ","
+ WHITESPACE@71..72 " "
+ WORD@72..74 "A."
+ WHITESPACE@74..75 " "
+ WORD@75..78 "and"
+ WHITESPACE@78..79 " "
+ WORD@79..86 "Adleman"
+ COMMA@86..87 ","
+ WHITESPACE@87..88 " "
+ WORD@88..90 "L."
+ R_CURLY@90..91 "}"
+ COMMA@91..92 ","
+ WHITESPACE@92..97 "\n "
+ FIELD@97..178
+ NAME@97..102 "title"
+ WHITESPACE@102..103 " "
+ EQ@103..104 "="
+ WHITESPACE@104..105 " "
+ CURLY_GROUP@105..177
+ L_CURLY@105..106 "{"
+ WORD@106..107 "A"
+ WHITESPACE@107..108 " "
+ WORD@108..114 "Method"
+ WHITESPACE@114..115 " "
+ WORD@115..118 "for"
+ WHITESPACE@118..119 " "
+ WORD@119..128 "Obtaining"
+ WHITESPACE@128..129 " "
+ WORD@129..136 "Digital"
+ WHITESPACE@136..137 " "
+ WORD@137..147 "Signatures"
+ WHITESPACE@147..148 " "
+ WORD@148..151 "and"
+ WHITESPACE@151..152 " "
+ WORD@152..162 "Public-Key"
+ WHITESPACE@162..163 " "
+ WORD@163..176 "Cryptosystems"
+ R_CURLY@176..177 "}"
+ COMMA@177..178 ","
+ WHITESPACE@178..183 "\n "
+ FIELD@183..197
+ NAME@183..187 "year"
+ WHITESPACE@187..188 " "
+ EQ@188..189 "="
+ WHITESPACE@189..190 " "
+ CURLY_GROUP@190..196
+ L_CURLY@190..191 "{"
+ INTEGER@191..195 "1978"
+ R_CURLY@195..196 "}"
+ COMMA@196..197 ","
+ WHITESPACE@197..202 "\n "
+ FIELD@202..227
+ NAME@202..212 "issue_date"
+ WHITESPACE@212..213 " "
+ EQ@213..214 "="
+ WHITESPACE@214..215 " "
+ CURLY_GROUP@215..226
+ L_CURLY@215..216 "{"
+ WORD@216..220 "Feb."
+ WHITESPACE@220..221 " "
+ INTEGER@221..225 "1978"
+ R_CURLY@225..226 "}"
+ COMMA@226..227 ","
+ WHITESPACE@227..232 "\n "
+ FIELD@232..282
+ NAME@232..241 "publisher"
+ WHITESPACE@241..242 " "
+ EQ@242..243 "="
+ WHITESPACE@243..244 " "
+ CURLY_GROUP@244..281
+ L_CURLY@244..245 "{"
+ WORD@245..256 "Association"
+ WHITESPACE@256..257 " "
+ WORD@257..260 "for"
+ WHITESPACE@260..261 " "
+ WORD@261..270 "Computing"
+ WHITESPACE@270..271 " "
+ WORD@271..280 "Machinery"
+ R_CURLY@280..281 "}"
+ COMMA@281..282 ","
+ WHITESPACE@282..287 "\n "
+ FIELD@287..317
+ NAME@287..294 "address"
+ WHITESPACE@294..295 " "
+ EQ@295..296 "="
+ WHITESPACE@296..297 " "
+ CURLY_GROUP@297..316
+ L_CURLY@297..298 "{"
+ WORD@298..301 "New"
+ WHITESPACE@301..302 " "
+ WORD@302..306 "York"
+ COMMA@306..307 ","
+ WHITESPACE@307..308 " "
+ WORD@308..310 "NY"
+ COMMA@310..311 ","
+ WHITESPACE@311..312 " "
+ WORD@312..315 "USA"
+ R_CURLY@315..316 "}"
+ COMMA@316..317 ","
+ WHITESPACE@317..322 "\n "
+ FIELD@322..336
+ NAME@322..328 "volume"
+ WHITESPACE@328..329 " "
+ EQ@329..330 "="
+ WHITESPACE@330..331 " "
+ CURLY_GROUP@331..335
+ L_CURLY@331..332 "{"
+ INTEGER@332..334 "21"
+ R_CURLY@334..335 "}"
+ COMMA@335..336 ","
+ WHITESPACE@336..341 "\n "
+ FIELD@341..354
+ NAME@341..347 "number"
+ WHITESPACE@347..348 " "
+ EQ@348..349 "="
+ WHITESPACE@349..350 " "
+ CURLY_GROUP@350..353
+ L_CURLY@350..351 "{"
+ INTEGER@351..352 "2"
+ R_CURLY@352..353 "}"
+ COMMA@353..354 ","
+ WHITESPACE@354..359 "\n "
+ FIELD@359..378
+ NAME@359..363 "issn"
+ WHITESPACE@363..364 " "
+ EQ@364..365 "="
+ WHITESPACE@365..366 " "
+ CURLY_GROUP@366..377
+ L_CURLY@366..367 "{"
+ WORD@367..376 "0001-0782"
+ R_CURLY@376..377 "}"
+ COMMA@377..378 ","
+ WHITESPACE@378..383 "\n "
+ FIELD@383..429
+ NAME@383..386 "url"
+ WHITESPACE@386..387 " "
+ EQ@387..388 "="
+ WHITESPACE@388..389 " "
+ CURLY_GROUP@389..428
+ L_CURLY@389..390 "{"
+ WORD@390..427 "https://doi.org/10.11 ..."
+ R_CURLY@427..428 "}"
+ COMMA@428..429 ","
+ WHITESPACE@429..434 "\n "
+ FIELD@434..464
+ NAME@434..437 "doi"
+ WHITESPACE@437..438 " "
+ EQ@438..439 "="
+ WHITESPACE@439..440 " "
+ CURLY_GROUP@440..463
+ L_CURLY@440..441 "{"
+ WORD@441..462 "10.1145/359340.359342"
+ R_CURLY@462..463 "}"
+ COMMA@463..464 ","
+ WHITESPACE@464..469 "\n "
+ FIELD@469..493
+ NAME@469..476 "journal"
+ WHITESPACE@476..477 " "
+ EQ@477..478 "="
+ WHITESPACE@478..479 " "
+ CURLY_GROUP@479..492
+ L_CURLY@479..480 "{"
+ WORD@480..487 "Commun."
+ WHITESPACE@487..488 " "
+ WORD@488..491 "ACM"
+ R_CURLY@491..492 "}"
+ COMMA@492..493 ","
+ WHITESPACE@493..498 "\n "
+ FIELD@498..512
+ NAME@498..503 "month"
+ WHITESPACE@503..504 " "
+ EQ@504..505 "="
+ WHITESPACE@505..506 " "
+ CURLY_GROUP@506..511
+ L_CURLY@506..507 "{"
+ WORD@507..510 "feb"
+ R_CURLY@510..511 "}"
+ COMMA@511..512 ","
+ WHITESPACE@512..517 "\n "
+ FIELD@517..535
+ NAME@517..522 "pages"
+ WHITESPACE@522..523 " "
+ EQ@523..524 "="
+ WHITESPACE@524..525 " "
+ CURLY_GROUP@525..534
+ L_CURLY@525..526 "{"
+ WORD@526..533 "120-126"
+ R_CURLY@533..534 "}"
+ COMMA@534..535 ","
+ WHITESPACE@535..540 "\n "
+ FIELD@540..555
+ NAME@540..548 "numpages"
+ WHITESPACE@548..549 " "
+ EQ@549..550 "="
+ WHITESPACE@550..551 " "
+ CURLY_GROUP@551..554
+ L_CURLY@551..552 "{"
+ INTEGER@552..553 "7"
+ R_CURLY@553..554 "}"
+ COMMA@554..555 ","
+ WHITESPACE@555..556 "\n"
+ R_DELIM@556..557 "}"
+
+ "#]],
+ );
+}
diff --git a/support/texlab/crates/parser/src/build_log.rs b/support/texlab/crates/parser/src/build_log.rs
index 27f3699a66..420d2dda20 100644
--- a/support/texlab/crates/parser/src/build_log.rs
+++ b/support/texlab/crates/parser/src/build_log.rs
@@ -174,14 +174,4 @@ impl PartialOrd for FileRange {
}
#[cfg(test)]
-mod tests {
- use super::parse_build_log;
-
- #[test]
- fn test_parse() {
- insta::glob!("test_data/build_log/*.txt", |path| {
- let text = std::fs::read_to_string(path).unwrap().replace("\r\n", "\n");
- insta::assert_debug_snapshot!(parse_build_log(&text));
- });
- }
-}
+mod tests;
diff --git a/support/texlab/crates/parser/src/build_log/tests.rs b/support/texlab/crates/parser/src/build_log/tests.rs
new file mode 100644
index 0000000000..20d165e008
--- /dev/null
+++ b/support/texlab/crates/parser/src/build_log/tests.rs
@@ -0,0 +1,1228 @@
+use expect_test::{expect, Expect};
+
+use crate::parse_build_log;
+
+fn check(input: &str, expect: Expect) {
+ expect.assert_debug_eq(&parse_build_log(input));
+}
+
+#[test]
+fn test_001() {
+ check(
+ r#"This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:50
+entering extended mode
+restricted \write18 enabled.
+%&-line parsing enabled.
+**./parent.tex
+(./parent.tex
+LaTeX2e <2017-04-15>
+Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+(/TexLive/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+(/TexLive/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+)
+(/TexLive/texmf-dist/tex/latex/multirow/bigstrut.sty
+Package: bigstrut 2016/11/25 v2.2 Provide larger struts in tabulars
+\bigstrutjot=\dimen103
+)
+(/TexLive/texmf-dist/tex/latex/multirow/multirow.sty
+Package: multirow 2016/11/25 v2.2 Span multiple rows of a table
+\multirow@colwidth=\skip43
+\multirow@cntb=\count87
+\multirow@dima=\skip44
+) (./parent.aux)
+\openout1 = `parent.aux'.
+
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+
+Overfull \hbox (200.00162pt too wide) in paragraph at lines 8--9
+[]\OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+[]
+
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <7> on input line 11.
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <5> on input line 11.
+
+Overfull \vbox (3.19998pt too high) detected at line 23
+[]
+
+[1
+
+{/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux) )
+Here is how much of TeX's memory you used:
+265 strings out of 492995
+3121 string characters out of 6138727
+55074 words of memory out of 5000000
+3896 multiletter control sequences out of 15000+600000
+3640 words of font info for 14 fonts, out of 8000000 for 9000
+1141 hyphenation exceptions out of 8191
+23i,20n,20p,124b,282s stack positions out of 5000i,500n,10000p,200000b,80000s
+</
+TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></TexLive/texmf-d
+ist/fonts/type1/public/amsfonts/cm/cmr7.pfb>
+Output written on parent.pdf (1 page, 17505 bytes).
+PDF statistics:
+16 PDF objects out of 1000 (max. 8388607)
+10 compressed objects within 1 object stream
+0 named destinations out of 1000 (max. 500000)
+1 words of extra memory for PDF output out of 10000 (max. 10000000)"#,
+ expect![[r#"
+ BuildLog {
+ errors: [
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Warning,
+ message: "Overfull \\hbox (200.00162pt too wide) in paragraph at lines 8--9",
+ hint: None,
+ line: Some(
+ 7,
+ ),
+ },
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Warning,
+ message: "Overfull \\vbox (3.19998pt too high) detected at line 23",
+ hint: None,
+ line: Some(
+ 22,
+ ),
+ },
+ ],
+ }
+ "#]],
+ );
+}
+
+#[test]
+fn test_002() {
+ check(
+ r#"This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:52
+entering extended mode
+restricted \write18 enabled.
+%&-line parsing enabled.
+**./parent.tex
+(./parent.tex
+LaTeX2e <2017-04-15>
+Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+(/TexLive/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+(/TexLive/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (./parent.aux (./child.aux))
+\openout1 = `parent.aux'.
+
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+(./child.tex
+! Undefined control sequence.
+l.1 \foo
+
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+) (./parent.aux) )
+Here is how much of TeX's memory you used:
+205 strings out of 492995
+2149 string characters out of 6138727
+54074 words of memory out of 5000000
+3841 multiletter control sequences out of 15000+600000
+3640 words of font info for 14 fonts, out of 8000000 for 9000
+1141 hyphenation exceptions out of 8191
+23i,1n,17p,116b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+No pages of output.
+PDF statistics:
+0 PDF objects out of 1000 (max. 8388607)
+0 named destinations out of 1000 (max. 500000)
+1 words of extra memory for PDF output out of 10000 (max. 10000000)"#,
+ expect![[r#"
+ BuildLog {
+ errors: [
+ BuildError {
+ relative_path: "./child.tex",
+ level: Error,
+ message: "Undefined control sequence.",
+ hint: Some(
+ "\\foo",
+ ),
+ line: Some(
+ 0,
+ ),
+ },
+ ],
+ }
+ "#]],
+ );
+}
+
+#[test]
+fn test_003() {
+ check(
+ r#"This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:51
+entering extended mode
+restricted \write18 enabled.
+%&-line parsing enabled.
+**./parent.tex
+(./parent.tex
+LaTeX2e <2017-04-15>
+Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+(/TexLive/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+(/TexLive/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (./parent.aux)
+\openout1 = `parent.aux'.
+
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
+LaTeX Font Info: ... okay on input line 4.
+
+LaTeX Warning: Citation `foo' on page 1 undefined on input line 6.
+
+[1
+
+{/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux)
+
+LaTeX Warning: There were undefined references.
+
+)
+Here is how much of TeX's memory you used:
+204 strings out of 492995
+2142 string characters out of 6138727
+54074 words of memory out of 5000000
+3842 multiletter control sequences out of 15000+600000
+3948 words of font info for 15 fonts, out of 8000000 for 9000
+1141 hyphenation exceptions out of 8191
+23i,4n,21p,116b,107s stack positions out of 5000i,500n,10000p,200000b,80000s
+</TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></TexLive/
+texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
+Output written on parent.pdf (1 page, 17339 bytes).
+PDF statistics:
+16 PDF objects out of 1000 (max. 8388607)
+10 compressed objects within 1 object stream
+0 named destinations out of 1000 (max. 500000)
+1 words of extra memory for PDF output out of 10000 (max. 10000000)"#,
+ expect![[r#"
+ BuildLog {
+ errors: [
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Warning,
+ message: "LaTeX Warning: Citation `foo' on page 1 undefined on input line 6.",
+ hint: None,
+ line: Some(
+ 5,
+ ),
+ },
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Warning,
+ message: "LaTeX Warning: There were undefined references.",
+ hint: None,
+ line: None,
+ },
+ ],
+ }
+ "#]],
+ );
+}
+
+#[test]
+fn test_004() {
+ check(
+ r#"This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:40
+entering extended mode
+restricted \write18 enabled.
+%&-line parsing enabled.
+**./parent.tex
+(./parent.tex
+LaTeX2e <2017-04-15>
+Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+(/TexLive/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+(/TexLive/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+)
+(/TexLive/texmf-dist/tex/generic/babel/babel.sty
+Package: babel 2017/05/19 3.10 The Babel package
+
+! Package babel Error: Unknown option `foo'. Either you misspelled it
+(babel) or the language definition file foo.ldf was not found.
+
+See the babel package documentation for explanation.
+Type H <return> for immediate help.
+...
+
+l.393 \ProcessOptions*
+
+Valid options are: shorthands=, KeepShorthandsActive,
+activeacute, activegrave, noconfigs, safe=, main=, math=
+headfoot=, strings=, config=, hyphenmap=, or a language name.
+
+! Package babel Error: You haven't specified a language option.
+
+See the babel package documentation for explanation.
+Type H <return> for immediate help.
+...
+
+l.426 ...ry to proceed from here, type x to quit.}
+
+You need to specify a language, either as a global option
+or as an optional argument to the \usepackage command;
+You shouldn't try to proceed from here, type x to quit.
+
+) (./parent.aux)
+\openout1 = `parent.aux'.
+
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 5.
+LaTeX Font Info: ... okay on input line 5.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 5.
+LaTeX Font Info: ... okay on input line 5.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 5.
+LaTeX Font Info: ... okay on input line 5.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 5.
+LaTeX Font Info: ... okay on input line 5.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 5.
+LaTeX Font Info: ... okay on input line 5.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 5.
+LaTeX Font Info: ... okay on input line 5.
+(./parent.aux) )
+Here is how much of TeX's memory you used:
+304 strings out of 492995
+3421 string characters out of 6138727
+56035 words of memory out of 5000000
+3938 multiletter control sequences out of 15000+600000
+3640 words of font info for 14 fonts, out of 8000000 for 9000
+1141 hyphenation exceptions out of 8191
+23i,1n,17p,116b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+No pages of output.
+PDF statistics:
+0 PDF objects out of 1000 (max. 8388607)
+0 named destinations out of 1000 (max. 500000)
+1 words of extra memory for PDF output out of 10000 (max. 10000000)"#,
+ expect![[r#"
+ BuildLog {
+ errors: [
+ BuildError {
+ relative_path: "/TexLive/texmf-dist/tex/generic/babel/babel.sty",
+ level: Error,
+ message: "Package babel Error: Unknown option `foo'. Either you misspelled it or the language definition file foo.ldf was not found.",
+ hint: Some(
+ "\\ProcessOptions*",
+ ),
+ line: Some(
+ 392,
+ ),
+ },
+ BuildError {
+ relative_path: "/TexLive/texmf-dist/tex/generic/babel/babel.sty",
+ level: Error,
+ message: "Package babel Error: You haven't specified a language option.",
+ hint: Some(
+ "ry to proceed from here, type x to quit.}",
+ ),
+ line: Some(
+ 425,
+ ),
+ },
+ ],
+ }
+ "#]],
+ )
+}
+
+#[test]
+fn test_005() {
+ check(
+ r#"This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:45
+entering extended mode
+restricted \write18 enabled.
+%&-line parsing enabled.
+**./parent.tex
+(./parent.tex
+LaTeX2e <2017-04-15>
+Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+(/TexLive/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+(/TexLive/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+)
+(/TexLive/texmf-dist/tex/generic/babel/babel.sty
+Package: babel 2017/05/19 3.10 The Babel package
+
+(/TexLive/texmf-dist/tex/generic/babel-spanish/spanish.ldf
+Language: spanish.ldf 2016/03/03 v5.0p Spanish support from the babel system
+
+(/TexLive/texmf-dist/tex/generic/babel/babel.def
+File: babel.def 2017/05/19 3.10 Babel common definitions
+\babel@savecnt=\count87
+\U@D=\dimen103
+)
+\es@quottoks=\toks14
+\es@quotdepth=\count88
+Package babel Info: Making " an active character on input line 561.
+Package babel Info: Making . an active character on input line 662.
+Package babel Info: Making < an active character on input line 707.
+Package babel Info: Making > an active character on input line 707.
+))
+(/TexLive/texmf-dist/tex/latex/biblatex/biblatex.sty
+Package: biblatex 2016/12/05 v3.7 programmable bibliographies (PK/JW/AB)
+
+(/TexLive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
+Package: pdftexcmds 2017/03/19 v0.25 Utility functions of pdfTeX for LuaTeX (HO
+)
+
+(/TexLive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
+Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO)
+)
+(/TexLive/texmf-dist/tex/generic/oberdiek/ifluatex.sty
+Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO)
+Package ifluatex Info: LuaTeX not detected.
+)
+(/TexLive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
+Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
+)
+(/TexLive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
+Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch
+)
+Package pdftexcmds Info: LuaTeX not detected.
+Package pdftexcmds Info: \pdf@primitive is available.
+Package pdftexcmds Info: \pdf@ifprimitive is available.
+Package pdftexcmds Info: \pdfdraftmode found.
+)
+(/TexLive/texmf-dist/tex/latex/etoolbox/etoolbox.sty
+Package: etoolbox 2017/01/02 v2.4 e-TeX tools for LaTeX (JAW)
+\etb@tempcnta=\count89
+)
+(/TexLive/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks15
+)
+(/TexLive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO)
+
+(/TexLive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
+Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO)
+
+(/TexLive/texmf-dist/tex/generic/oberdiek/etexcmds.sty
+Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
+Package etexcmds Info: Could not find \expanded.
+(etexcmds) That can mean that you are not using pdfTeX 1.50 or
+(etexcmds) that some package has redefined \expanded.
+(etexcmds) In the latter case, load this package earlier.
+)))
+(/TexLive/texmf-dist/tex/latex/logreq/logreq.sty
+Package: logreq 2010/08/04 v1.0 xml request logger
+\lrq@indent=\count90
+
+(/TexLive/texmf-dist/tex/latex/logreq/logreq.def
+File: logreq.def 2010/08/04 v1.0 logreq spec v1.0
+))
+(/TexLive/texmf-dist/tex/latex/base/ifthen.sty
+Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
+)
+(/TexLive/texmf-dist/tex/latex/url/url.sty
+\Urlmuskip=\muskip10
+Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
+)
+(/TexLive/texmf-dist/tex/generic/xstring/xstring.sty
+(/TexLive/texmf-dist/tex/generic/xstring/xstring.tex
+\@xs@message=\write3
+\integerpart=\count91
+\decimalpart=\count92
+)
+Package: xstring 2013/10/13 v1.7c String manipulations (C Tellechea)
+)
+\c@tabx@nest=\count93
+\c@listtotal=\count94
+\c@listcount=\count95
+\c@liststart=\count96
+\c@liststop=\count97
+\c@citecount=\count98
+\c@citetotal=\count99
+\c@multicitecount=\count100
+\c@multicitetotal=\count101
+\c@instcount=\count102
+\c@maxnames=\count103
+\c@minnames=\count104
+\c@maxitems=\count105
+\c@minitems=\count106
+\c@citecounter=\count107
+\c@savedcitecounter=\count108
+\c@uniquelist=\count109
+\c@uniquename=\count110
+\c@refsection=\count111
+\c@refsegment=\count112
+\c@maxextratitle=\count113
+\c@maxextratitleyear=\count114
+\c@maxextrayear=\count115
+\c@maxextraalpha=\count116
+\c@abbrvpenalty=\count117
+\c@highnamepenalty=\count118
+\c@lownamepenalty=\count119
+\c@maxparens=\count120
+\c@parenlevel=\count121
+\blx@tempcnta=\count122
+\blx@tempcntb=\count123
+\blx@tempcntc=\count124
+\blx@maxsection=\count125
+\blx@maxsegment@0=\count126
+\blx@notetype=\count127
+\blx@parenlevel@text=\count128
+\blx@parenlevel@foot=\count129
+\blx@sectionciteorder@0=\count130
+\labelnumberwidth=\skip43
+\labelalphawidth=\skip44
+\biblabelsep=\skip45
+\bibitemsep=\skip46
+\bibnamesep=\skip47
+\bibinitsep=\skip48
+\bibparsep=\skip49
+\bibhang=\skip50
+\blx@bcfin=\read1
+\blx@bcfout=\write4
+\c@mincomprange=\count131
+\c@maxcomprange=\count132
+\c@mincompwidth=\count133
+Package biblatex Info: Trying to load biblatex default data model...
+Package biblatex Info: ... file 'blx-dm.def' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex/blx-dm.def)
+Package biblatex Info: Trying to load biblatex style data model...
+Package biblatex Info: ... file 'ieee.dbx' not found.
+Package biblatex Info: Trying to load biblatex custom data model...
+Package biblatex Info: ... file 'biblatex-dm.cfg' not found.
+\c@afterword=\count134
+\c@savedafterword=\count135
+\c@annotator=\count136
+\c@savedannotator=\count137
+\c@author=\count138
+\c@savedauthor=\count139
+\c@bookauthor=\count140
+\c@savedbookauthor=\count141
+\c@commentator=\count142
+\c@savedcommentator=\count143
+\c@editor=\count144
+\c@savededitor=\count145
+\c@editora=\count146
+\c@savededitora=\count147
+\c@editorb=\count148
+\c@savededitorb=\count149
+\c@editorc=\count150
+\c@savededitorc=\count151
+\c@foreword=\count152
+\c@savedforeword=\count153
+\c@holder=\count154
+\c@savedholder=\count155
+\c@introduction=\count156
+\c@savedintroduction=\count157
+\c@namea=\count158
+\c@savednamea=\count159
+\c@nameb=\count160
+\c@savednameb=\count161
+\c@namec=\count162
+\c@savednamec=\count163
+\c@translator=\count164
+\c@savedtranslator=\count165
+\c@shortauthor=\count166
+\c@savedshortauthor=\count167
+\c@shorteditor=\count168
+\c@savedshorteditor=\count169
+\c@labelname=\count170
+\c@savedlabelname=\count171
+\c@institution=\count172
+\c@savedinstitution=\count173
+\c@lista=\count174
+\c@savedlista=\count175
+\c@listb=\count176
+\c@savedlistb=\count177
+\c@listc=\count178
+\c@savedlistc=\count179
+\c@listd=\count180
+\c@savedlistd=\count181
+\c@liste=\count182
+\c@savedliste=\count183
+\c@listf=\count184
+\c@savedlistf=\count185
+\c@location=\count186
+\c@savedlocation=\count187
+\c@organization=\count188
+\c@savedorganization=\count189
+\c@origlocation=\count190
+\c@savedoriglocation=\count191
+\c@origpublisher=\count192
+\c@savedorigpublisher=\count193
+\c@publisher=\count194
+\c@savedpublisher=\count195
+\c@language=\count196
+\c@savedlanguage=\count197
+\c@pageref=\count198
+\c@savedpageref=\count199
+\shorthandwidth=\skip51
+\shortjournalwidth=\skip52
+\shortserieswidth=\skip53
+\shorttitlewidth=\skip54
+\shortauthorwidth=\skip55
+\shorteditorwidth=\skip56
+Package biblatex Info: Trying to load compatibility code...
+Package biblatex Info: ... file 'blx-compat.def' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex/blx-compat.def
+File: blx-compat.def 2016/12/05 v3.7 biblatex compatibility (PK/JW/AB)
+)
+Package biblatex Info: Trying to load generic definitions...
+Package biblatex Info: ... file 'biblatex.def' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex/biblatex.def
+File: biblatex.def 2016/12/05 v3.7 biblatex compatibility (PK/JW/AB)
+\c@textcitecount=\count266
+\c@textcitetotal=\count267
+\c@textcitemaxnames=\count268
+\c@biburlnumpenalty=\count269
+\c@biburlucpenalty=\count270
+\c@biburllcpenalty=\count271
+\c@smartand=\count272
+)
+Package biblatex Info: Trying to load bibliography style 'ieee'...
+Package biblatex Info: ... file 'ieee.bbx' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex-ieee/ieee.bbx
+File: ieee.bbx 2017/03/27 v1.2d biblatex bibliography style
+Package biblatex Info: Trying to load bibliography style 'numeric-comp'...
+Package biblatex Info: ... file 'numeric-comp.bbx' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex/bbx/numeric-comp.bbx
+File: numeric-comp.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
+Package biblatex Info: Trying to load bibliography style 'numeric'...
+Package biblatex Info: ... file 'numeric.bbx' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx
+File: numeric.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
+Package biblatex Info: Trying to load bibliography style 'standard'...
+Package biblatex Info: ... file 'standard.bbx' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex/bbx/standard.bbx
+File: standard.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
+\c@bbx:relatedcount=\count273
+\c@bbx:relatedtotal=\count274
+))))
+Package biblatex Info: Trying to load citation style 'ieee'...
+Package biblatex Info: ... file 'ieee.cbx' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex-ieee/ieee.cbx
+File: ieee.cbx 2017/03/27 v1.2d biblatex citation style
+Package biblatex Info: Trying to load citation style 'numeric-comp'...
+Package biblatex Info: ... file 'numeric-comp.cbx' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex/cbx/numeric-comp.cbx
+File: numeric-comp.cbx 2016/12/05 v3.7 biblatex citation style (PK/JW/AB)
+\c@cbx@tempcnta=\count275
+\c@cbx@tempcntb=\count276
+Package biblatex Info: Redefining '\cite'.
+Package biblatex Info: Redefining '\parencite'.
+Package biblatex Info: Redefining '\footcite'.
+Package biblatex Info: Redefining '\footcitetext'.
+Package biblatex Info: Redefining '\smartcite'.
+Package biblatex Info: Redefining '\supercite'.
+Package biblatex Info: Redefining '\textcite'.
+Package biblatex Info: Redefining '\textcites'.
+Package biblatex Info: Redefining '\cites'.
+Package biblatex Info: Redefining '\parencites'.
+Package biblatex Info: Redefining '\smartcites'.
+)
+Package biblatex Info: Redefining '\cite'.
+Package biblatex Info: Redefining '\cites'.
+)
+Package biblatex Info: Trying to load configuration file...
+Package biblatex Info: ... file 'biblatex.cfg' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex/biblatex.cfg
+File: biblatex.cfg
+))
+Package biblatex Info: Trying to load language 'spanish'...
+Package biblatex Info: ... file 'spanish.lbx' found.
+
+(/TexLive/texmf-dist/tex/latex/biblatex/lbx/spanish.lbx
+File: spanish.lbx 2016/12/05 v3.7 biblatex localization (PK/JW/AB)
+)
+
+Package biblatex Warning: 'babel/polyglossia' detected but 'csquotes' missing.
+(biblatex) Loading 'csquotes' recommended.
+
+\@quotelevel=\count277
+\@quotereset=\count278
+(./parent.aux)
+\openout1 = `parent.aux'.
+
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 6.
+LaTeX Font Info: ... okay on input line 6.
+LaTeX Info: Redefining \sptext on input line 6.
+LaTeX Info: Redefining \. on input line 6.
+LaTeX Info: Redefining \% on input line 6.
+Package biblatex Info: No input encoding detected.
+(biblatex) Assuming 'ascii'.
+Package biblatex Info: Automatic encoding selection.
+(biblatex) Assuming data encoding 'ascii'.
+\openout4 = `parent.bcf'.
+
+Package biblatex Info: Trying to load bibliographic data...
+Package biblatex Info: ... file 'parent.bbl' not found.
+
+No file parent.bbl.
+Package biblatex Info: Reference section=0 on input line 6.
+Package biblatex Info: Reference segment=0 on input line 6.
+(./parent.aux)
+
+LaTeX Warning: There were undefined references.
+
+Package biblatex Warning: Please (re)run Biber on the file:
+(biblatex) parent
+(biblatex) and rerun LaTeX afterwards.
+
+Package logreq Info: Writing requests to 'parent.run.xml'.
+\openout1 = `parent.run.xml'.
+
+)
+Here is how much of TeX's memory you used:
+7717 strings out of 492995
+133301 string characters out of 6138727
+557258 words of memory out of 5000000
+11248 multiletter control sequences out of 15000+600000
+3640 words of font info for 14 fonts, out of 8000000 for 9000
+1141 hyphenation exceptions out of 8191
+35i,1n,30p,856b,700s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+No pages of output.
+PDF statistics:
+0 PDF objects out of 1000 (max. 8388607)
+0 named destinations out of 1000 (max. 500000)
+1 words of extra memory for PDF output out of 10000 (max. 10000000)"#,
+ expect![[r#"
+ BuildLog {
+ errors: [
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Warning,
+ message: "Package biblatex Warning: 'babel/polyglossia' detected but 'csquotes' missing. Loading 'csquotes' recommended.",
+ hint: None,
+ line: None,
+ },
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Warning,
+ message: "LaTeX Warning: There were undefined references.",
+ hint: None,
+ line: None,
+ },
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Warning,
+ message: "Package biblatex Warning: Please (re)run Biber on the file: parent and rerun LaTeX afterwards.",
+ hint: None,
+ line: None,
+ },
+ ],
+ }
+ "#]],
+ )
+}
+
+#[test]
+fn test_006() {
+ check(
+ r#"This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:33
+entering extended mode
+restricted \write18 enabled.
+%&-line parsing enabled.
+**./parent.tex
+(./parent.tex
+LaTeX2e <2017-04-15>
+Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+(/TexLive/texmf-dist/tex/latex/base/article.cls
+Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+(/TexLive/texmf-dist/tex/latex/base/size10.clo
+File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+)
+\c@part=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+\abovecaptionskip=\skip41
+\belowcaptionskip=\skip42
+\bibindent=\dimen102
+) (./parent.aux
+(./child.tex.aux))
+\openout1 = `parent.aux'.
+
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+\openout2 = `child.aux'.
+
+(./child.tex)
+! Undefined control sequence.
+l.7 \foo
+
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+! Missing $ inserted.
+<inserted text>
+ $
+l.8 \bar
+
+I've inserted a begin-math/end-math symbol since I think
+you left one out. Proceed, with fingers crossed.
+
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <7> on input line 8.
+LaTeX Font Info: External font `cmex10' loaded for size
+(Font) <5> on input line 8.
+! Undefined control sequence.
+l.9 \baz
+
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+! Missing { inserted.
+<to be read again>
+ \par
+l.10
+
+A left brace was mandatory here, so I've put one in.
+You might want to delete and/or insert some corrections
+so that I will find a matching right brace soon.
+(If you're confused by all this, try typing `I}' now.)
+
+! Missing $ inserted.
+<inserted text>
+ $
+l.10
+
+I've inserted a begin-math/end-math symbol since I think
+you left one out. Proceed, with fingers crossed.
+
+! Missing } inserted.
+<inserted text>
+ }
+l.10
+
+I've inserted something that you may have forgotten.
+(See the <inserted text> above.)
+With luck, this will get me unwedged. But if you
+really didn't forget anything, try typing `2' now; then
+my insertion and my current dilemma will both disappear.
+
+[1
+
+{/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux
+(./child.aux)) )
+Here is how much of TeX's memory you used:
+212 strings out of 492995
+2238 string characters out of 6138727
+54074 words of memory out of 5000000
+3843 multiletter control sequences out of 15000+600000
+3640 words of font info for 14 fonts, out of 8000000 for 9000
+1141 hyphenation exceptions out of 8191
+23i,4n,17p,116b,107s stack positions out of 5000i,500n,10000p,200000b,80000s
+</TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb
+>
+Output written on parent.pdf (1 page, 8329 bytes).
+PDF statistics:
+12 PDF objects out of 1000 (max. 8388607)
+7 compressed objects within 1 object stream
+0 named destinations out of 1000 (max. 500000)
+1 words of extra memory for PDF output out of 10000 (max. 10000000)"#,
+ expect![[r#"
+ BuildLog {
+ errors: [
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Error,
+ message: "Undefined control sequence.",
+ hint: Some(
+ "\\foo",
+ ),
+ line: Some(
+ 6,
+ ),
+ },
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Error,
+ message: "Missing $ inserted.",
+ hint: Some(
+ "\\bar",
+ ),
+ line: Some(
+ 7,
+ ),
+ },
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Error,
+ message: "Undefined control sequence.",
+ hint: Some(
+ "\\baz",
+ ),
+ line: Some(
+ 8,
+ ),
+ },
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Error,
+ message: "Missing { inserted.",
+ hint: None,
+ line: Some(
+ 9,
+ ),
+ },
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Error,
+ message: "Missing $ inserted.",
+ hint: None,
+ line: Some(
+ 9,
+ ),
+ },
+ BuildError {
+ relative_path: "./parent.tex",
+ level: Error,
+ message: "Missing } inserted.",
+ hint: None,
+ line: Some(
+ 9,
+ ),
+ },
+ ],
+ }
+ "#]],
+ );
+}
+
+#[test]
+fn test_007() {
+ check(
+ r#"This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021/W32TeX) (preloaded format=pdflatex 2021.6.19) 5 NOV 2021 19:10
+entering extended mode
+restricted \write18 enabled.
+%&-line parsing enabled.
+**/some/folder/a.tex
+(/some/folder/a.tex
+LaTeX2e <2021-06-01> patch level 1
+L3 programming layer <2021-06-18>
+(/texlive/2021/texmf-dist/tex/latex/koma-script/scrartcl.cls
+Document Class: scrartcl 2021/03/17 v3.33 KOMA-Script document class (article)
+(/texlive/2021/texmf-dist/tex/latex/koma-script/scrkbase.sty
+Package: scrkbase 2021/03/17 v3.33 KOMA-Script package (KOMA-Script-dependent b
+asics and keyval usage)
+
+(/texlive/2021/texmf-dist/tex/latex/koma-script/scrbase.sty
+Package: scrbase 2021/03/17 v3.33 KOMA-Script package (KOMA-Script-independent
+basics and keyval usage)
+
+(/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty
+Package: scrlfile 2021/03/17 v3.33 KOMA-Script package (file load hooks)
+
+(/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty
+Package: scrlfile-hook 2021/03/17 v3.33 KOMA-Script package (using LaTeX hooks)
+
+
+(/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty
+Package: scrlogo 2021/03/17 v3.33 KOMA-Script package (logo)
+)))
+(/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty
+Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+\KV@toks@=\toks16
+)
+Applying: [2021/05/01] Usage of raw option list on input line 252.
+Already applied: [0000/00/00] compatibility for LaTeX before 2021/05/01 on inpu
+t line 337.
+))
+==> First Aid for scrkbase.sty no longer applied!
+(/texlive/2021/texmf-dist/tex/latex/koma-script/tocbasic.sty
+Package: tocbasic 2021/03/17 v3.33 KOMA-Script package (handling toc-files)
+\scr@dte@tocline@numberwidth=\skip47
+\scr@dte@tocline@numbox=\box50
+)
+Package tocbasic Info: babel extension for `toc' omitted
+(tocbasic) because of missing \bbl@set@language on input line 135.
+Class scrartcl Info: File `scrsize11pt.clo' used instead of
+(scrartcl) file `scrsize11.clo' to setup font sizes on input line 223
+9.
+
+(/texlive/2021/texmf-dist/tex/latex/koma-script/scrsize11pt.clo
+File: scrsize11pt.clo 2021/03/17 v3.33 KOMA-Script font size class option (11pt
+)
+)
+(/texlive/2021/texmf-dist/tex/latex/koma-script/typearea.sty
+Package: typearea 2021/03/17 v3.33 KOMA-Script package (type area)
+\ta@bcor=\skip48
+\ta@div=\count182
+\ta@hblk=\skip49
+\ta@vblk=\skip50
+\ta@temp=\skip51
+\footheight=\skip52
+Package typearea Info: These are the values describing the layout:
+(typearea) DIV = 10
+(typearea) BCOR = 0.0pt
+(typearea) \paperwidth = 597.50793pt
+(typearea) \textwidth = 418.25555pt
+(typearea) DIV departure = -6%
+(typearea) \evensidemargin = 17.3562pt
+(typearea) \oddsidemargin = 17.3562pt
+(typearea) \paperheight = 845.04694pt
+(typearea) \textheight = 595.80026pt
+(typearea) \topmargin = -25.16531pt
+(typearea) \headheight = 17.0pt
+(typearea) \headsep = 20.40001pt
+(typearea) \topskip = 11.0pt
+(typearea) \footskip = 47.6pt
+(typearea) \baselineskip = 13.6pt
+(typearea) on input line 1741.
+)
+\c@part=\count183
+\c@section=\count184
+\c@subsection=\count185
+\c@subsubsection=\count186
+\c@paragraph=\count187
+\c@subparagraph=\count188
+\scr@dte@section@maxnumwidth=\skip53
+Class scrartcl Info: using compatibility default `runin=bysign'
+(scrartcl) for `\section on input line 4846.
+Class scrartcl Info: using compatibility default `afterindent=bysign'
+(scrartcl) for `\section on input line 4846.
+\scr@dte@part@maxnumwidth=\skip54
+Class scrartcl Info: using compatibility default `afterindent=false'
+(scrartcl) for `\part on input line 4854.
+\scr@dte@subsection@maxnumwidth=\skip55
+Class scrartcl Info: using compatibility default `runin=bysign'
+(scrartcl) for `\subsection on input line 4864.
+Class scrartcl Info: using compatibility default `afterindent=bysign'
+(scrartcl) for `\subsection on input line 4864.
+\scr@dte@subsubsection@maxnumwidth=\skip56
+Class scrartcl Info: using compatibility default `runin=bysign'
+(scrartcl) for `\subsubsection on input line 4874.
+Class scrartcl Info: using compatibility default `afterindent=bysign'
+(scrartcl) for `\subsubsection on input line 4874.
+\scr@dte@paragraph@maxnumwidth=\skip57
+Class scrartcl Info: using compatibility default `runin=bysign'
+(scrartcl) for `\paragraph on input line 4885.
+Class scrartcl Info: using compatibility default `afterindent=bysign'
+(scrartcl) for `\paragraph on input line 4885.
+\scr@dte@subparagraph@maxnumwidth=\skip58
+Class scrartcl Info: using compatibility default `runin=bysign'
+(scrartcl) for `\subparagraph on input line 4895.
+Class scrartcl Info: using compatibility default `afterindent=bysign'
+(scrartcl) for `\subparagraph on input line 4895.
+\abovecaptionskip=\skip59
+\belowcaptionskip=\skip60
+\c@pti@nb@sid@b@x=\box51
+Package tocbasic Info: babel extension for `lof' omitted
+(tocbasic) because of missing \bbl@set@language on input line 6127.
+
+\scr@dte@figure@maxnumwidth=\skip61
+\c@figure=\count189
+Package tocbasic Info: babel extension for `lot' omitted
+(tocbasic) because of missing \bbl@set@language on input line 6139.
+
+\scr@dte@table@maxnumwidth=\skip62
+\c@table=\count190
+Class scrartcl Info: Redefining `\numberline' on input line 6303.
+\bibindent=\dimen138
+)
+(/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
+File: l3backend-pdftex.def 2021-05-07 L3 backend support: PDF output (pdfTeX)
+\l__color_backend_stack_int=\count191
+\l__pdf_internal_box=\box52
+) (./a.aux)
+\openout1 = `a.aux'.
+
+LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 3.
+LaTeX Font Info: ... okay on input line 3.
+Package scrbase Info: activating english \contentsname on input line 3.
+Package scrbase Info: activating english \listfigurename on input line 3.
+Package scrbase Info: activating english \listtablename on input line 3.
+! Undefined control sequence.
+l.4 \lsdkfjlskdfj
+
+The control sequence at the end of the top line
+of your error message was never \def'ed. If you have
+misspelled it (e.g., `\hobx'), type `I' and the correct
+spelling (e.g., `I\hbox'). Otherwise just continue,
+and I'll forget about whatever was undefined.
+
+(./a.aux) )
+Here is how much of TeX's memory you used:
+3199 strings out of 478510
+74549 string characters out of 5853586
+510929 words of memory out of 5000000
+21227 multiletter control sequences out of 15000+600000
+403730 words of font info for 28 fonts, out of 8000000 for 9000
+1141 hyphenation exceptions out of 8191
+108i,1n,108p,10625b,270s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+No pages of output.
+PDF statistics:
+0 PDF objects out of 1000 (max. 8388607)
+0 named destinations out of 1000 (max. 500000)
+1 words of extra memory for PDF output out of 10000 (max. 10000000)"#,
+ expect![[r#"
+ BuildLog {
+ errors: [
+ BuildError {
+ relative_path: "/some/folder/a.tex",
+ level: Error,
+ message: "Undefined control sequence.",
+ hint: Some(
+ "\\lsdkfjlskdfj",
+ ),
+ line: Some(
+ 3,
+ ),
+ },
+ ],
+ }
+ "#]],
+ );
+}
diff --git a/support/texlab/crates/parser/src/latex.rs b/support/texlab/crates/parser/src/latex.rs
index f96d41a722..d88eb39556 100644
--- a/support/texlab/crates/parser/src/latex.rs
+++ b/support/texlab/crates/parser/src/latex.rs
@@ -1201,19 +1201,4 @@ pub fn parse_latex(text: &str, config: &SyntaxConfig) -> GreenNode {
}
#[cfg(test)]
-mod tests {
- use syntax::latex;
-
- use crate::SyntaxConfig;
-
- use super::parse_latex;
-
- #[test]
- fn test_parse() {
- insta::glob!("test_data/latex/{,**/}*.txt", |path| {
- let text = std::fs::read_to_string(path).unwrap().replace("\r\n", "\n");
- let root = latex::SyntaxNode::new_root(parse_latex(&text, &SyntaxConfig::default()));
- insta::assert_debug_snapshot!(root);
- });
- }
-}
+mod tests;
diff --git a/support/texlab/crates/parser/src/latex/tests.rs b/support/texlab/crates/parser/src/latex/tests.rs
new file mode 100644
index 0000000000..a907efc6c3
--- /dev/null
+++ b/support/texlab/crates/parser/src/latex/tests.rs
@@ -0,0 +1,3523 @@
+use expect_test::{expect, Expect};
+
+use crate::{parse_latex, SyntaxConfig};
+
+fn check(input: &str, expect: Expect) {
+ let root = syntax::latex::SyntaxNode::new_root(parse_latex(input, &SyntaxConfig::default()));
+ expect.assert_debug_eq(&root);
+}
+
+#[test]
+fn test_block_comments() {
+ check(
+ r#"Foo
+\iffalse
+Test1
+\fi
+Bar
+\iffalse
+\fii
+\fi
+Baz"#,
+ expect![[r#"
+ ROOT@0..48
+ PREAMBLE@0..48
+ TEXT@0..4
+ WORD@0..3 "Foo"
+ LINE_BREAK@3..4 "\n"
+ BLOCK_COMMENT@4..22
+ COMMAND_NAME@4..12 "\\iffalse"
+ LINE_BREAK@12..13 "\n"
+ WORD@13..18 "Test1"
+ LINE_BREAK@18..19 "\n"
+ COMMAND_NAME@19..22 "\\fi"
+ LINE_BREAK@22..23 "\n"
+ TEXT@23..27
+ WORD@23..26 "Bar"
+ LINE_BREAK@26..27 "\n"
+ BLOCK_COMMENT@27..44
+ COMMAND_NAME@27..35 "\\iffalse"
+ LINE_BREAK@35..36 "\n"
+ COMMAND_NAME@36..40 "\\fii"
+ LINE_BREAK@40..41 "\n"
+ COMMAND_NAME@41..44 "\\fi"
+ LINE_BREAK@44..45 "\n"
+ TEXT@45..48
+ WORD@45..48 "Baz"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_caption_default() {
+ check(
+ r#"\caption[qux]{Foo \Bar Baz}"#,
+ expect![[r#"
+ ROOT@0..27
+ PREAMBLE@0..27
+ CAPTION@0..27
+ COMMAND_NAME@0..8 "\\caption"
+ BRACK_GROUP@8..13
+ L_BRACK@8..9 "["
+ TEXT@9..12
+ WORD@9..12 "qux"
+ R_BRACK@12..13 "]"
+ CURLY_GROUP@13..27
+ L_CURLY@13..14 "{"
+ TEXT@14..18
+ WORD@14..17 "Foo"
+ WHITESPACE@17..18 " "
+ GENERIC_COMMAND@18..23
+ COMMAND_NAME@18..22 "\\Bar"
+ WHITESPACE@22..23 " "
+ TEXT@23..26
+ WORD@23..26 "Baz"
+ R_CURLY@26..27 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_caption_default_error() {
+ check(
+ r#"\caption[qux]{Foo \Bar Baz"#,
+ expect![[r#"
+ ROOT@0..26
+ PREAMBLE@0..26
+ CAPTION@0..26
+ COMMAND_NAME@0..8 "\\caption"
+ BRACK_GROUP@8..13
+ L_BRACK@8..9 "["
+ TEXT@9..12
+ WORD@9..12 "qux"
+ R_BRACK@12..13 "]"
+ CURLY_GROUP@13..26
+ L_CURLY@13..14 "{"
+ TEXT@14..18
+ WORD@14..17 "Foo"
+ WHITESPACE@17..18 " "
+ GENERIC_COMMAND@18..23
+ COMMAND_NAME@18..22 "\\Bar"
+ WHITESPACE@22..23 " "
+ TEXT@23..26
+ WORD@23..26 "Baz"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_caption_figure() {
+ check(
+ r#"\begin{figure}\caption{Foo}\end{figure}"#,
+ expect![[r#"
+ ROOT@0..39
+ PREAMBLE@0..39
+ ENVIRONMENT@0..39
+ BEGIN@0..14
+ COMMAND_NAME@0..6 "\\begin"
+ CURLY_GROUP_WORD@6..14
+ L_CURLY@6..7 "{"
+ KEY@7..13
+ WORD@7..13 "figure"
+ R_CURLY@13..14 "}"
+ CAPTION@14..27
+ COMMAND_NAME@14..22 "\\caption"
+ CURLY_GROUP@22..27
+ L_CURLY@22..23 "{"
+ TEXT@23..26
+ WORD@23..26 "Foo"
+ R_CURLY@26..27 "}"
+ END@27..39
+ COMMAND_NAME@27..31 "\\end"
+ CURLY_GROUP_WORD@31..39
+ L_CURLY@31..32 "{"
+ KEY@32..38
+ WORD@32..38 "figure"
+ R_CURLY@38..39 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_caption_minimal() {
+ check(
+ r#"\caption{Foo \Bar Baz}"#,
+ expect![[r#"
+ ROOT@0..22
+ PREAMBLE@0..22
+ CAPTION@0..22
+ COMMAND_NAME@0..8 "\\caption"
+ CURLY_GROUP@8..22
+ L_CURLY@8..9 "{"
+ TEXT@9..13
+ WORD@9..12 "Foo"
+ WHITESPACE@12..13 " "
+ GENERIC_COMMAND@13..18
+ COMMAND_NAME@13..17 "\\Bar"
+ WHITESPACE@17..18 " "
+ TEXT@18..21
+ WORD@18..21 "Baz"
+ R_CURLY@21..22 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_caption_minimal_error() {
+ check(
+ r#"\caption{Foo \Bar Baz"#,
+ expect![[r#"
+ ROOT@0..21
+ PREAMBLE@0..21
+ CAPTION@0..21
+ COMMAND_NAME@0..8 "\\caption"
+ CURLY_GROUP@8..21
+ L_CURLY@8..9 "{"
+ TEXT@9..13
+ WORD@9..12 "Foo"
+ WHITESPACE@12..13 " "
+ GENERIC_COMMAND@13..18
+ COMMAND_NAME@13..17 "\\Bar"
+ WHITESPACE@17..18 " "
+ TEXT@18..21
+ WORD@18..21 "Baz"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_citation_empty() {
+ check(
+ r#"\cite{}"#,
+ expect![[r#"
+ ROOT@0..7
+ PREAMBLE@0..7
+ CITATION@0..7
+ COMMAND_NAME@0..5 "\\cite"
+ CURLY_GROUP_WORD_LIST@5..7
+ L_CURLY@5..6 "{"
+ R_CURLY@6..7 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_citation_missing_brace() {
+ check(
+ r#"\cite{foo"#,
+ expect![[r#"
+ ROOT@0..9
+ PREAMBLE@0..9
+ CITATION@0..9
+ COMMAND_NAME@0..5 "\\cite"
+ CURLY_GROUP_WORD_LIST@5..9
+ L_CURLY@5..6 "{"
+ KEY@6..9
+ WORD@6..9 "foo"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_citation_multiple_keys() {
+ check(
+ r#"\cite{foo, bar}"#,
+ expect![[r#"
+ ROOT@0..15
+ PREAMBLE@0..15
+ CITATION@0..15
+ COMMAND_NAME@0..5 "\\cite"
+ CURLY_GROUP_WORD_LIST@5..15
+ L_CURLY@5..6 "{"
+ KEY@6..9
+ WORD@6..9 "foo"
+ COMMA@9..10 ","
+ WHITESPACE@10..11 " "
+ KEY@11..14
+ WORD@11..14 "bar"
+ R_CURLY@14..15 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_citation_prenote() {
+ check(
+ r#"\cite[foo]{bar}"#,
+ expect![[r#"
+ ROOT@0..15
+ PREAMBLE@0..15
+ CITATION@0..15
+ COMMAND_NAME@0..5 "\\cite"
+ BRACK_GROUP@5..10
+ L_BRACK@5..6 "["
+ TEXT@6..9
+ WORD@6..9 "foo"
+ R_BRACK@9..10 "]"
+ CURLY_GROUP_WORD_LIST@10..15
+ L_CURLY@10..11 "{"
+ KEY@11..14
+ WORD@11..14 "bar"
+ R_CURLY@14..15 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_citation_prenote_postnote() {
+ check(
+ r#"\cite[foo][bar]{baz}"#,
+ expect![[r#"
+ ROOT@0..20
+ PREAMBLE@0..20
+ CITATION@0..20
+ COMMAND_NAME@0..5 "\\cite"
+ BRACK_GROUP@5..10
+ L_BRACK@5..6 "["
+ TEXT@6..9
+ WORD@6..9 "foo"
+ R_BRACK@9..10 "]"
+ BRACK_GROUP@10..15
+ L_BRACK@10..11 "["
+ TEXT@11..14
+ WORD@11..14 "bar"
+ R_BRACK@14..15 "]"
+ CURLY_GROUP_WORD_LIST@15..20
+ L_CURLY@15..16 "{"
+ KEY@16..19
+ WORD@16..19 "baz"
+ R_CURLY@19..20 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_citation_redundant_comma() {
+ check(
+ r#"\cite{,foo,}"#,
+ expect![[r#"
+ ROOT@0..12
+ PREAMBLE@0..12
+ CITATION@0..12
+ COMMAND_NAME@0..5 "\\cite"
+ CURLY_GROUP_WORD_LIST@5..12
+ L_CURLY@5..6 "{"
+ COMMA@6..7 ","
+ KEY@7..10
+ WORD@7..10 "foo"
+ COMMA@10..11 ","
+ R_CURLY@11..12 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_citation_simple() {
+ check(
+ r#"\cite{foo}"#,
+ expect![[r#"
+ ROOT@0..10
+ PREAMBLE@0..10
+ CITATION@0..10
+ COMMAND_NAME@0..5 "\\cite"
+ CURLY_GROUP_WORD_LIST@5..10
+ L_CURLY@5..6 "{"
+ KEY@6..9
+ WORD@6..9 "foo"
+ R_CURLY@9..10 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_citation_star() {
+ check(
+ r#"\nocite{*}"#,
+ expect![[r#"
+ ROOT@0..10
+ PREAMBLE@0..10
+ CITATION@0..10
+ COMMAND_NAME@0..7 "\\nocite"
+ CURLY_GROUP_WORD_LIST@7..10
+ L_CURLY@7..8 "{"
+ KEY@8..9
+ WORD@8..9 "*"
+ R_CURLY@9..10 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_color_definition_simple() {
+ check(
+ r#"\definecolor{foo}{rgb}{255,168,0}"#,
+ expect![[r#"
+ ROOT@0..33
+ PREAMBLE@0..33
+ COLOR_DEFINITION@0..33
+ COMMAND_NAME@0..12 "\\definecolor"
+ CURLY_GROUP_WORD@12..17
+ L_CURLY@12..13 "{"
+ KEY@13..16
+ WORD@13..16 "foo"
+ R_CURLY@16..17 "}"
+ CURLY_GROUP_WORD@17..22
+ L_CURLY@17..18 "{"
+ KEY@18..21
+ WORD@18..21 "rgb"
+ R_CURLY@21..22 "}"
+ CURLY_GROUP@22..33
+ L_CURLY@22..23 "{"
+ TEXT@23..32
+ WORD@23..26 "255"
+ COMMA@26..27 ","
+ WORD@27..30 "168"
+ COMMA@30..31 ","
+ WORD@31..32 "0"
+ R_CURLY@32..33 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_color_reference_simple() {
+ check(
+ r#"\color{black}"#,
+ expect![[r#"
+ ROOT@0..13
+ PREAMBLE@0..13
+ COLOR_REFERENCE@0..13
+ COMMAND_NAME@0..6 "\\color"
+ CURLY_GROUP_WORD@6..13
+ L_CURLY@6..7 "{"
+ KEY@7..12
+ WORD@7..12 "black"
+ R_CURLY@12..13 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_color_set_definition_error1() {
+ check(
+ r#"\definecolorset[ty]{rgb,HTML}{foo}{bar}"#,
+ expect![[r#"
+ ROOT@0..39
+ PREAMBLE@0..39
+ COLOR_SET_DEFINITION@0..39
+ COMMAND_NAME@0..15 "\\definecolorset"
+ BRACK_GROUP_WORD@15..19
+ L_BRACK@15..16 "["
+ KEY@16..18
+ WORD@16..18 "ty"
+ R_BRACK@18..19 "]"
+ CURLY_GROUP_WORD_LIST@19..29
+ L_CURLY@19..20 "{"
+ KEY@20..23
+ WORD@20..23 "rgb"
+ COMMA@23..24 ","
+ KEY@24..28
+ WORD@24..28 "HTML"
+ R_CURLY@28..29 "}"
+ CURLY_GROUP_WORD@29..34
+ L_CURLY@29..30 "{"
+ KEY@30..33
+ WORD@30..33 "foo"
+ R_CURLY@33..34 "}"
+ CURLY_GROUP_WORD@34..39
+ L_CURLY@34..35 "{"
+ KEY@35..38
+ WORD@35..38 "bar"
+ R_CURLY@38..39 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_color_set_definition_error2() {
+ check(
+ r#"\definecolorset{rgb,HTML}{foo}"#,
+ expect![[r#"
+ ROOT@0..30
+ PREAMBLE@0..30
+ COLOR_SET_DEFINITION@0..30
+ COMMAND_NAME@0..15 "\\definecolorset"
+ CURLY_GROUP_WORD_LIST@15..25
+ L_CURLY@15..16 "{"
+ KEY@16..19
+ WORD@16..19 "rgb"
+ COMMA@19..20 ","
+ KEY@20..24
+ WORD@20..24 "HTML"
+ R_CURLY@24..25 "}"
+ CURLY_GROUP_WORD@25..30
+ L_CURLY@25..26 "{"
+ KEY@26..29
+ WORD@26..29 "foo"
+ R_CURLY@29..30 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_color_set_definition_error3() {
+ check(
+ r#"\definecolorset{rgb,HTML}"#,
+ expect![[r#"
+ ROOT@0..25
+ PREAMBLE@0..25
+ COLOR_SET_DEFINITION@0..25
+ COMMAND_NAME@0..15 "\\definecolorset"
+ CURLY_GROUP_WORD_LIST@15..25
+ L_CURLY@15..16 "{"
+ KEY@16..19
+ WORD@16..19 "rgb"
+ COMMA@19..20 ","
+ KEY@20..24
+ WORD@20..24 "HTML"
+ R_CURLY@24..25 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_color_set_definition_error4() {
+ check(
+ r#"\definecolorset"#,
+ expect![[r#"
+ ROOT@0..15
+ PREAMBLE@0..15
+ COLOR_SET_DEFINITION@0..15
+ COMMAND_NAME@0..15 "\\definecolorset"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_color_set_definition_simple() {
+ check(
+ r#"\definecolorset[ty]{rgb,HTML}{foo}{bar}{baz}"#,
+ expect![[r#"
+ ROOT@0..44
+ PREAMBLE@0..44
+ COLOR_SET_DEFINITION@0..44
+ COMMAND_NAME@0..15 "\\definecolorset"
+ BRACK_GROUP_WORD@15..19
+ L_BRACK@15..16 "["
+ KEY@16..18
+ WORD@16..18 "ty"
+ R_BRACK@18..19 "]"
+ CURLY_GROUP_WORD_LIST@19..29
+ L_CURLY@19..20 "{"
+ KEY@20..23
+ WORD@20..23 "rgb"
+ COMMA@23..24 ","
+ KEY@24..28
+ WORD@24..28 "HTML"
+ R_CURLY@28..29 "}"
+ CURLY_GROUP_WORD@29..34
+ L_CURLY@29..30 "{"
+ KEY@30..33
+ WORD@30..33 "foo"
+ R_CURLY@33..34 "}"
+ CURLY_GROUP_WORD@34..39
+ L_CURLY@34..35 "{"
+ KEY@35..38
+ WORD@35..38 "bar"
+ R_CURLY@38..39 "}"
+ CURLY_GROUP_WORD@39..44
+ L_CURLY@39..40 "{"
+ KEY@40..43
+ WORD@40..43 "baz"
+ R_CURLY@43..44 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+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 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+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 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+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"
+
+ "#]],
+ );
+}
+
+#[test]
+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 "}"
+
+ "##]],
+ );
+}
+
+#[test]
+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 "}"
+
+ "##]],
+ );
+}
+
+#[test]
+fn test_command_definition_with_begin() {
+ check(
+ r#"\newcommand{\CVSubHeadingListStart}{\begin{itemize}[leftmargin=0.5cm, label={}]}"#,
+ expect![[r#"
+ ROOT@0..80
+ PREAMBLE@0..80
+ COMMAND_DEFINITION@0..80
+ COMMAND_NAME@0..11 "\\newcommand"
+ CURLY_GROUP_COMMAND@11..35
+ L_CURLY@11..12 "{"
+ COMMAND_NAME@12..34 "\\CVSubHeadingListStart"
+ R_CURLY@34..35 "}"
+ CURLY_GROUP@35..80
+ L_CURLY@35..36 "{"
+ BEGIN@36..79
+ COMMAND_NAME@36..42 "\\begin"
+ CURLY_GROUP_WORD@42..51
+ L_CURLY@42..43 "{"
+ KEY@43..50
+ WORD@43..50 "itemize"
+ R_CURLY@50..51 "}"
+ BRACK_GROUP@51..79
+ L_BRACK@51..52 "["
+ TEXT@52..62
+ WORD@52..62 "leftmargin"
+ EQUALITY_SIGN@62..63 "="
+ TEXT@63..75
+ WORD@63..68 "0.5cm"
+ COMMA@68..69 ","
+ WHITESPACE@69..70 " "
+ WORD@70..75 "label"
+ EQUALITY_SIGN@75..76 "="
+ CURLY_GROUP@76..78
+ L_CURLY@76..77 "{"
+ R_CURLY@77..78 "}"
+ R_BRACK@78..79 "]"
+ R_CURLY@79..80 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_math_operator_no_impl() {
+ check(
+ r#"\DeclareMathOperator{\foo}"#,
+ expect![[r#"
+ ROOT@0..26
+ PREAMBLE@0..26
+ MATH_OPERATOR@0..26
+ COMMAND_NAME@0..20 "\\DeclareMathOperator"
+ CURLY_GROUP_COMMAND@20..26
+ L_CURLY@20..21 "{"
+ COMMAND_NAME@21..25 "\\foo"
+ R_CURLY@25..26 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_math_operator_simple() {
+ check(
+ r#"\DeclareMathOperator{\foo}{foo}"#,
+ expect![[r#"
+ ROOT@0..31
+ PREAMBLE@0..31
+ MATH_OPERATOR@0..31
+ COMMAND_NAME@0..20 "\\DeclareMathOperator"
+ CURLY_GROUP_COMMAND@20..26
+ L_CURLY@20..21 "{"
+ COMMAND_NAME@21..25 "\\foo"
+ R_CURLY@25..26 "}"
+ CURLY_GROUP@26..31
+ L_CURLY@26..27 "{"
+ TEXT@27..30
+ WORD@27..30 "foo"
+ R_CURLY@30..31 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_environment_asymptote() {
+ check(
+ r#"\begin{asy}
+ printf("Hello World\n");
+\end{asy}"#,
+ expect![[r#"
+ ROOT@0..50
+ PREAMBLE@0..50
+ ENVIRONMENT@0..50
+ BEGIN@0..16
+ COMMAND_NAME@0..6 "\\begin"
+ CURLY_GROUP_WORD@6..16
+ L_CURLY@6..7 "{"
+ KEY@7..10
+ WORD@7..10 "asy"
+ R_CURLY@10..11 "}"
+ LINE_BREAK@11..12 "\n"
+ WHITESPACE@12..16 " "
+ TEXT@16..22
+ WORD@16..22 "printf"
+ MIXED_GROUP@22..39
+ L_PAREN@22..23 "("
+ TEXT@23..35
+ WORD@23..29 "\"Hello"
+ WHITESPACE@29..30 " "
+ WORD@30..35 "World"
+ GENERIC_COMMAND@35..37
+ COMMAND_NAME@35..37 "\\n"
+ TEXT@37..38
+ WORD@37..38 "\""
+ R_PAREN@38..39 ")"
+ TEXT@39..41
+ WORD@39..40 ";"
+ LINE_BREAK@40..41 "\n"
+ END@41..50
+ COMMAND_NAME@41..45 "\\end"
+ CURLY_GROUP_WORD@45..50
+ L_CURLY@45..46 "{"
+ KEY@46..49
+ WORD@46..49 "asy"
+ R_CURLY@49..50 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_environment_definition() {
+ check(
+ r#"\newenvironment{bar}[1]{\begin{foo}}{\end{foo}}"#,
+ expect![[r#"
+ ROOT@0..47
+ PREAMBLE@0..47
+ ENVIRONMENT_DEFINITION@0..47
+ COMMAND_NAME@0..15 "\\newenvironment"
+ CURLY_GROUP_WORD@15..20
+ L_CURLY@15..16 "{"
+ KEY@16..19
+ WORD@16..19 "bar"
+ R_CURLY@19..20 "}"
+ BRACK_GROUP_WORD@20..23
+ L_BRACK@20..21 "["
+ KEY@21..22
+ WORD@21..22 "1"
+ R_BRACK@22..23 "]"
+ CURLY_GROUP@23..36
+ L_CURLY@23..24 "{"
+ GENERIC_COMMAND@24..35
+ COMMAND_NAME@24..30 "\\begin"
+ CURLY_GROUP@30..35
+ L_CURLY@30..31 "{"
+ TEXT@31..34
+ WORD@31..34 "foo"
+ R_CURLY@34..35 "}"
+ R_CURLY@35..36 "}"
+ CURLY_GROUP@36..47
+ L_CURLY@36..37 "{"
+ GENERIC_COMMAND@37..46
+ COMMAND_NAME@37..41 "\\end"
+ CURLY_GROUP@41..46
+ L_CURLY@41..42 "{"
+ TEXT@42..45
+ WORD@42..45 "foo"
+ R_CURLY@45..46 "}"
+ R_CURLY@46..47 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_environment_definition_optional_arg() {
+ check(
+ r#"\newenvironment{foo}[1][default]{begin}{end}"#,
+ expect![[r#"
+ ROOT@0..44
+ PREAMBLE@0..44
+ ENVIRONMENT_DEFINITION@0..44
+ COMMAND_NAME@0..15 "\\newenvironment"
+ CURLY_GROUP_WORD@15..20
+ L_CURLY@15..16 "{"
+ KEY@16..19
+ WORD@16..19 "foo"
+ R_CURLY@19..20 "}"
+ BRACK_GROUP_WORD@20..23
+ L_BRACK@20..21 "["
+ KEY@21..22
+ WORD@21..22 "1"
+ R_BRACK@22..23 "]"
+ BRACK_GROUP@23..32
+ L_BRACK@23..24 "["
+ TEXT@24..31
+ WORD@24..31 "default"
+ R_BRACK@31..32 "]"
+ CURLY_GROUP@32..39
+ L_CURLY@32..33 "{"
+ TEXT@33..38
+ WORD@33..38 "begin"
+ R_CURLY@38..39 "}"
+ CURLY_GROUP@39..44
+ L_CURLY@39..40 "{"
+ TEXT@40..43
+ WORD@40..43 "end"
+ R_CURLY@43..44 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_environment_nested() {
+ check(
+ r#"\begin{foo} \begin{qux} \end{baz} \end{bar}"#,
+ expect![[r#"
+ ROOT@0..43
+ PREAMBLE@0..43
+ ENVIRONMENT@0..43
+ BEGIN@0..12
+ COMMAND_NAME@0..6 "\\begin"
+ CURLY_GROUP_WORD@6..12
+ L_CURLY@6..7 "{"
+ KEY@7..10
+ WORD@7..10 "foo"
+ R_CURLY@10..11 "}"
+ WHITESPACE@11..12 " "
+ ENVIRONMENT@12..34
+ BEGIN@12..24
+ COMMAND_NAME@12..18 "\\begin"
+ CURLY_GROUP_WORD@18..24
+ L_CURLY@18..19 "{"
+ KEY@19..22
+ WORD@19..22 "qux"
+ R_CURLY@22..23 "}"
+ WHITESPACE@23..24 " "
+ END@24..34
+ COMMAND_NAME@24..28 "\\end"
+ CURLY_GROUP_WORD@28..34
+ L_CURLY@28..29 "{"
+ KEY@29..32
+ WORD@29..32 "baz"
+ R_CURLY@32..33 "}"
+ WHITESPACE@33..34 " "
+ END@34..43
+ COMMAND_NAME@34..38 "\\end"
+ CURLY_GROUP_WORD@38..43
+ L_CURLY@38..39 "{"
+ KEY@39..42
+ WORD@39..42 "bar"
+ R_CURLY@42..43 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_environment_nested_missing_braces() {
+ check(
+ r#"\begin{foo \begin{qux Hello World \end{baz} \end{bar"#,
+ expect![[r#"
+ ROOT@0..52
+ PREAMBLE@0..52
+ ENVIRONMENT@0..52
+ BEGIN@0..11
+ COMMAND_NAME@0..6 "\\begin"
+ CURLY_GROUP_WORD@6..11
+ L_CURLY@6..7 "{"
+ KEY@7..11
+ WORD@7..10 "foo"
+ WHITESPACE@10..11 " "
+ ENVIRONMENT@11..44
+ BEGIN@11..34
+ COMMAND_NAME@11..17 "\\begin"
+ CURLY_GROUP_WORD@17..34
+ L_CURLY@17..18 "{"
+ KEY@18..34
+ WORD@18..21 "qux"
+ WHITESPACE@21..22 " "
+ WORD@22..27 "Hello"
+ WHITESPACE@27..28 " "
+ WORD@28..33 "World"
+ WHITESPACE@33..34 " "
+ END@34..44
+ COMMAND_NAME@34..38 "\\end"
+ CURLY_GROUP_WORD@38..44
+ L_CURLY@38..39 "{"
+ KEY@39..42
+ WORD@39..42 "baz"
+ R_CURLY@42..43 "}"
+ WHITESPACE@43..44 " "
+ END@44..52
+ COMMAND_NAME@44..48 "\\end"
+ CURLY_GROUP_WORD@48..52
+ L_CURLY@48..49 "{"
+ KEY@49..52
+ WORD@49..52 "bar"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_environment_simple() {
+ check(
+ r#"\begin{foo} Hello World \end{bar}"#,
+ expect![[r#"
+ ROOT@0..33
+ PREAMBLE@0..33
+ ENVIRONMENT@0..33
+ BEGIN@0..12
+ COMMAND_NAME@0..6 "\\begin"
+ CURLY_GROUP_WORD@6..12
+ L_CURLY@6..7 "{"
+ KEY@7..10
+ WORD@7..10 "foo"
+ R_CURLY@10..11 "}"
+ WHITESPACE@11..12 " "
+ TEXT@12..24
+ WORD@12..17 "Hello"
+ WHITESPACE@17..18 " "
+ WORD@18..23 "World"
+ WHITESPACE@23..24 " "
+ END@24..33
+ COMMAND_NAME@24..28 "\\end"
+ CURLY_GROUP_WORD@28..33
+ L_CURLY@28..29 "{"
+ KEY@29..32
+ WORD@29..32 "bar"
+ R_CURLY@32..33 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_equation() {
+ check(
+ r#"\[ foo bar \]"#,
+ expect![[r#"
+ ROOT@0..13
+ PREAMBLE@0..13
+ EQUATION@0..13
+ COMMAND_NAME@0..2 "\\["
+ WHITESPACE@2..3 " "
+ TEXT@3..11
+ WORD@3..6 "foo"
+ WHITESPACE@6..7 " "
+ WORD@7..10 "bar"
+ WHITESPACE@10..11 " "
+ COMMAND_NAME@11..13 "\\]"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_equation_missing_begin() {
+ check(
+ r#"\begin{a} foo bar \] \end{b}"#,
+ expect![[r#"
+ ROOT@0..28
+ PREAMBLE@0..28
+ ENVIRONMENT@0..28
+ BEGIN@0..10
+ COMMAND_NAME@0..6 "\\begin"
+ CURLY_GROUP_WORD@6..10
+ L_CURLY@6..7 "{"
+ KEY@7..8
+ WORD@7..8 "a"
+ R_CURLY@8..9 "}"
+ WHITESPACE@9..10 " "
+ TEXT@10..18
+ WORD@10..13 "foo"
+ WHITESPACE@13..14 " "
+ WORD@14..17 "bar"
+ WHITESPACE@17..18 " "
+ GENERIC_COMMAND@18..21
+ COMMAND_NAME@18..20 "\\]"
+ WHITESPACE@20..21 " "
+ END@21..28
+ COMMAND_NAME@21..25 "\\end"
+ CURLY_GROUP_WORD@25..28
+ L_CURLY@25..26 "{"
+ KEY@26..27
+ WORD@26..27 "b"
+ R_CURLY@27..28 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_generic_command_args() {
+ check(
+ r#"\foo{bar}[qux]"#,
+ expect![[r#"
+ ROOT@0..14
+ PREAMBLE@0..14
+ GENERIC_COMMAND@0..14
+ COMMAND_NAME@0..4 "\\foo"
+ CURLY_GROUP@4..9
+ L_CURLY@4..5 "{"
+ TEXT@5..8
+ WORD@5..8 "bar"
+ R_CURLY@8..9 "}"
+ MIXED_GROUP@9..14
+ L_BRACK@9..10 "["
+ TEXT@10..13
+ WORD@10..13 "qux"
+ R_BRACK@13..14 "]"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_generic_command_empty() {
+ check(
+ r#"\foo"#,
+ expect![[r#"
+ ROOT@0..4
+ PREAMBLE@0..4
+ GENERIC_COMMAND@0..4
+ COMMAND_NAME@0..4 "\\foo"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_generic_command_escape() {
+ check(
+ r#"\#"#,
+ expect![[r#"
+ ROOT@0..2
+ PREAMBLE@0..2
+ GENERIC_COMMAND@0..2
+ COMMAND_NAME@0..2 "\\#"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_acronym_declaration() {
+ check(
+ r#"\DeclareAcronym{eg}{short = e.g,long = for example,tag = abbrev}"#,
+ expect![[r#"
+ ROOT@0..64
+ PREAMBLE@0..64
+ ACRONYM_DECLARATION@0..64
+ COMMAND_NAME@0..15 "\\DeclareAcronym"
+ CURLY_GROUP_WORD@15..19
+ L_CURLY@15..16 "{"
+ KEY@16..18
+ WORD@16..18 "eg"
+ R_CURLY@18..19 "}"
+ CURLY_GROUP_KEY_VALUE@19..64
+ L_CURLY@19..20 "{"
+ KEY_VALUE_BODY@20..63
+ KEY_VALUE_PAIR@20..31
+ KEY@20..26
+ WORD@20..25 "short"
+ WHITESPACE@25..26 " "
+ EQUALITY_SIGN@26..27 "="
+ WHITESPACE@27..28 " "
+ VALUE@28..31
+ TEXT@28..31
+ WORD@28..31 "e.g"
+ COMMA@31..32 ","
+ KEY_VALUE_PAIR@32..50
+ KEY@32..37
+ WORD@32..36 "long"
+ WHITESPACE@36..37 " "
+ EQUALITY_SIGN@37..38 "="
+ WHITESPACE@38..39 " "
+ VALUE@39..50
+ TEXT@39..50
+ WORD@39..42 "for"
+ WHITESPACE@42..43 " "
+ WORD@43..50 "example"
+ COMMA@50..51 ","
+ KEY_VALUE_PAIR@51..63
+ KEY@51..55
+ WORD@51..54 "tag"
+ WHITESPACE@54..55 " "
+ EQUALITY_SIGN@55..56 "="
+ WHITESPACE@56..57 " "
+ VALUE@57..63
+ TEXT@57..63
+ WORD@57..63 "abbrev"
+ R_CURLY@63..64 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_acronym_definition_options() {
+ check(
+ r#"\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}"#,
+ expect![[r#"
+ ROOT@0..76
+ PREAMBLE@0..76
+ ACRONYM_DEFINITION@0..76
+ COMMAND_NAME@0..11 "\\newacronym"
+ BRACK_GROUP_KEY_VALUE@11..43
+ L_BRACK@11..12 "["
+ KEY_VALUE_BODY@12..42
+ KEY_VALUE_PAIR@12..42
+ KEY@12..22
+ WORD@12..22 "longplural"
+ EQUALITY_SIGN@22..23 "="
+ VALUE@23..42
+ CURLY_GROUP@23..42
+ L_CURLY@23..24 "{"
+ TEXT@24..41
+ WORD@24..30 "Frames"
+ WHITESPACE@30..31 " "
+ WORD@31..34 "per"
+ WHITESPACE@34..35 " "
+ WORD@35..41 "Second"
+ R_CURLY@41..42 "}"
+ R_BRACK@42..43 "]"
+ CURLY_GROUP_WORD@43..53
+ L_CURLY@43..44 "{"
+ KEY@44..52
+ WORD@44..52 "fpsLabel"
+ R_CURLY@52..53 "}"
+ CURLY_GROUP@53..58
+ L_CURLY@53..54 "{"
+ TEXT@54..57
+ WORD@54..57 "FPS"
+ R_CURLY@57..58 "}"
+ CURLY_GROUP@58..76
+ L_CURLY@58..59 "{"
+ TEXT@59..75
+ WORD@59..64 "Frame"
+ WHITESPACE@64..65 " "
+ WORD@65..68 "per"
+ WHITESPACE@68..69 " "
+ WORD@69..75 "Second"
+ R_CURLY@75..76 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_acronym_definition_simple() {
+ check(
+ r#"\newacronym{fpsLabel}{FPS}{Frame per Second}"#,
+ expect![[r#"
+ ROOT@0..44
+ PREAMBLE@0..44
+ ACRONYM_DEFINITION@0..44
+ COMMAND_NAME@0..11 "\\newacronym"
+ CURLY_GROUP_WORD@11..21
+ L_CURLY@11..12 "{"
+ KEY@12..20
+ WORD@12..20 "fpsLabel"
+ R_CURLY@20..21 "}"
+ CURLY_GROUP@21..26
+ L_CURLY@21..22 "{"
+ TEXT@22..25
+ WORD@22..25 "FPS"
+ R_CURLY@25..26 "}"
+ CURLY_GROUP@26..44
+ L_CURLY@26..27 "{"
+ TEXT@27..43
+ WORD@27..32 "Frame"
+ WHITESPACE@32..33 " "
+ WORD@33..36 "per"
+ WHITESPACE@36..37 " "
+ WORD@37..43 "Second"
+ R_CURLY@43..44 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_acronym_package() {
+ check(
+ r#"\acro{fps}[FPS]{Frames per Second}
+"#,
+ expect![[r#"
+ ROOT@0..35
+ PREAMBLE@0..35
+ ACRONYM_DEFINITION@0..35
+ COMMAND_NAME@0..5 "\\acro"
+ CURLY_GROUP_WORD@5..10
+ L_CURLY@5..6 "{"
+ KEY@6..9
+ WORD@6..9 "fps"
+ R_CURLY@9..10 "}"
+ BRACK_GROUP@10..15
+ L_BRACK@10..11 "["
+ TEXT@11..14
+ WORD@11..14 "FPS"
+ R_BRACK@14..15 "]"
+ CURLY_GROUP@15..35
+ L_CURLY@15..16 "{"
+ TEXT@16..33
+ WORD@16..22 "Frames"
+ WHITESPACE@22..23 " "
+ WORD@23..26 "per"
+ WHITESPACE@26..27 " "
+ WORD@27..33 "Second"
+ R_CURLY@33..34 "}"
+ LINE_BREAK@34..35 "\n"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_acronym_reference_options() {
+ check(
+ r#"\acrshort[foo=bar,baz]{fpsLabel}"#,
+ expect![[r#"
+ ROOT@0..32
+ PREAMBLE@0..32
+ ACRONYM_REFERENCE@0..32
+ COMMAND_NAME@0..9 "\\acrshort"
+ BRACK_GROUP_KEY_VALUE@9..22
+ L_BRACK@9..10 "["
+ KEY_VALUE_BODY@10..21
+ KEY_VALUE_PAIR@10..17
+ KEY@10..13
+ WORD@10..13 "foo"
+ EQUALITY_SIGN@13..14 "="
+ VALUE@14..17
+ TEXT@14..17
+ WORD@14..17 "bar"
+ COMMA@17..18 ","
+ KEY_VALUE_PAIR@18..21
+ KEY@18..21
+ WORD@18..21 "baz"
+ R_BRACK@21..22 "]"
+ CURLY_GROUP_WORD@22..32
+ L_CURLY@22..23 "{"
+ KEY@23..31
+ WORD@23..31 "fpsLabel"
+ R_CURLY@31..32 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_acronym_reference_simple() {
+ check(
+ r#"\acrshort{fpsLabel}"#,
+ expect![[r#"
+ ROOT@0..19
+ PREAMBLE@0..19
+ ACRONYM_REFERENCE@0..19
+ COMMAND_NAME@0..9 "\\acrshort"
+ CURLY_GROUP_WORD@9..19
+ L_CURLY@9..10 "{"
+ KEY@10..18
+ WORD@10..18 "fpsLabel"
+ R_CURLY@18..19 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_glossary_entry_definition_simple() {
+ check(
+ r#"\newglossaryentry{foo}{bar = baz, qux,}"#,
+ expect![[r#"
+ ROOT@0..39
+ PREAMBLE@0..39
+ GLOSSARY_ENTRY_DEFINITION@0..39
+ COMMAND_NAME@0..17 "\\newglossaryentry"
+ CURLY_GROUP_WORD@17..22
+ L_CURLY@17..18 "{"
+ KEY@18..21
+ WORD@18..21 "foo"
+ R_CURLY@21..22 "}"
+ CURLY_GROUP_KEY_VALUE@22..39
+ L_CURLY@22..23 "{"
+ KEY_VALUE_BODY@23..38
+ KEY_VALUE_PAIR@23..32
+ KEY@23..27
+ WORD@23..26 "bar"
+ WHITESPACE@26..27 " "
+ EQUALITY_SIGN@27..28 "="
+ WHITESPACE@28..29 " "
+ VALUE@29..32
+ TEXT@29..32
+ WORD@29..32 "baz"
+ COMMA@32..33 ","
+ WHITESPACE@33..34 " "
+ KEY_VALUE_PAIR@34..37
+ KEY@34..37
+ WORD@34..37 "qux"
+ COMMA@37..38 ","
+ R_CURLY@38..39 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_glossary_entry_reference_options() {
+ check(
+ r#"\gls[foo = bar, qux]{baz}"#,
+ expect![[r#"
+ ROOT@0..25
+ PREAMBLE@0..25
+ GLOSSARY_ENTRY_REFERENCE@0..25
+ COMMAND_NAME@0..4 "\\gls"
+ BRACK_GROUP_KEY_VALUE@4..20
+ L_BRACK@4..5 "["
+ KEY_VALUE_BODY@5..19
+ KEY_VALUE_PAIR@5..14
+ KEY@5..9
+ WORD@5..8 "foo"
+ WHITESPACE@8..9 " "
+ EQUALITY_SIGN@9..10 "="
+ WHITESPACE@10..11 " "
+ VALUE@11..14
+ TEXT@11..14
+ WORD@11..14 "bar"
+ COMMA@14..15 ","
+ WHITESPACE@15..16 " "
+ KEY_VALUE_PAIR@16..19
+ KEY@16..19
+ WORD@16..19 "qux"
+ R_BRACK@19..20 "]"
+ CURLY_GROUP_WORD@20..25
+ L_CURLY@20..21 "{"
+ KEY@21..24
+ WORD@21..24 "baz"
+ R_CURLY@24..25 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_glossary_entry_reference_simple() {
+ check(
+ r#"\gls{foo}"#,
+ expect![[r#"
+ ROOT@0..9
+ PREAMBLE@0..9
+ GLOSSARY_ENTRY_REFERENCE@0..9
+ COMMAND_NAME@0..4 "\\gls"
+ CURLY_GROUP_WORD@4..9
+ L_CURLY@4..5 "{"
+ KEY@5..8
+ WORD@5..8 "foo"
+ R_CURLY@8..9 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_graphics_path() {
+ check(
+ r#"\graphicspath{{../figures/}}"#,
+ expect![[r#"
+ ROOT@0..28
+ PREAMBLE@0..28
+ GRAPHICS_PATH@0..28
+ COMMAND_NAME@0..13 "\\graphicspath"
+ CURLY_GROUP@13..28
+ L_CURLY@13..14 "{"
+ CURLY_GROUP_WORD@14..27
+ L_CURLY@14..15 "{"
+ KEY@15..26
+ WORD@15..26 "../figures/"
+ R_CURLY@26..27 "}"
+ R_CURLY@27..28 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_graphics_path_command() {
+ check(
+ r#"\graphicspath{{\subfix{./img/}}}"#,
+ expect![[r#"
+ ROOT@0..32
+ PREAMBLE@0..32
+ GRAPHICS_PATH@0..32
+ COMMAND_NAME@0..13 "\\graphicspath"
+ CURLY_GROUP@13..32
+ L_CURLY@13..14 "{"
+ CURLY_GROUP_WORD@14..31
+ L_CURLY@14..15 "{"
+ KEY@15..30
+ COMMAND_NAME@15..22 "\\subfix"
+ CURLY_GROUP_WORD@22..30
+ L_CURLY@22..23 "{"
+ KEY@23..29
+ WORD@23..29 "./img/"
+ R_CURLY@29..30 "}"
+ R_CURLY@30..31 "}"
+ R_CURLY@31..32 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_graphics_path_options() {
+ check(
+ r#"\graphicspath[foo]{{../figures/}}"#,
+ expect![[r#"
+ ROOT@0..33
+ PREAMBLE@0..33
+ GRAPHICS_PATH@0..13
+ COMMAND_NAME@0..13 "\\graphicspath"
+ MIXED_GROUP@13..18
+ L_BRACK@13..14 "["
+ TEXT@14..17
+ WORD@14..17 "foo"
+ R_BRACK@17..18 "]"
+ CURLY_GROUP@18..33
+ L_CURLY@18..19 "{"
+ CURLY_GROUP@19..32
+ L_CURLY@19..20 "{"
+ TEXT@20..31
+ WORD@20..31 "../figures/"
+ R_CURLY@31..32 "}"
+ R_CURLY@32..33 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_curly_group_missing_end() {
+ check(
+ r#"{hello world"#,
+ expect![[r#"
+ ROOT@0..12
+ PREAMBLE@0..12
+ CURLY_GROUP@0..12
+ L_CURLY@0..1 "{"
+ TEXT@1..12
+ WORD@1..6 "hello"
+ WHITESPACE@6..7 " "
+ WORD@7..12 "world"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_curly_group_simple() {
+ check(
+ r#"{hello world}"#,
+ expect![[r#"
+ ROOT@0..13
+ PREAMBLE@0..13
+ CURLY_GROUP@0..13
+ L_CURLY@0..1 "{"
+ TEXT@1..12
+ WORD@1..6 "hello"
+ WHITESPACE@6..7 " "
+ WORD@7..12 "world"
+ R_CURLY@12..13 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_equation_missing_end() {
+ check(
+ r#"\begin{a} \[ foo bar \end{b}"#,
+ expect![[r#"
+ ROOT@0..28
+ PREAMBLE@0..28
+ ENVIRONMENT@0..28
+ BEGIN@0..10
+ COMMAND_NAME@0..6 "\\begin"
+ CURLY_GROUP_WORD@6..10
+ L_CURLY@6..7 "{"
+ KEY@7..8
+ WORD@7..8 "a"
+ R_CURLY@8..9 "}"
+ WHITESPACE@9..10 " "
+ EQUATION@10..21
+ COMMAND_NAME@10..12 "\\["
+ WHITESPACE@12..13 " "
+ TEXT@13..21
+ WORD@13..16 "foo"
+ WHITESPACE@16..17 " "
+ WORD@17..20 "bar"
+ WHITESPACE@20..21 " "
+ END@21..28
+ COMMAND_NAME@21..25 "\\end"
+ CURLY_GROUP_WORD@25..28
+ L_CURLY@25..26 "{"
+ KEY@26..27
+ WORD@26..27 "b"
+ R_CURLY@27..28 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_escaped_brackets() {
+ check(
+ r#"{[}{]}"#,
+ expect![[r#"
+ ROOT@0..6
+ PREAMBLE@0..6
+ CURLY_GROUP@0..3
+ L_CURLY@0..1 "{"
+ MIXED_GROUP@1..2
+ L_BRACK@1..2 "["
+ R_CURLY@2..3 "}"
+ CURLY_GROUP@3..6
+ L_CURLY@3..4 "{"
+ ERROR@4..5
+ R_BRACK@4..5 "]"
+ R_CURLY@5..6 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_unmatched_braces() {
+ check(
+ r#"}{"#,
+ expect![[r#"
+ ROOT@0..2
+ PREAMBLE@0..2
+ ERROR@0..1
+ R_CURLY@0..1 "}"
+ CURLY_GROUP@1..2
+ L_CURLY@1..2 "{"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_unmatched_brackets() {
+ check(
+ r#"]["#,
+ expect![[r#"
+ ROOT@0..2
+ PREAMBLE@0..2
+ ERROR@0..1
+ R_BRACK@0..1 "]"
+ MIXED_GROUP@1..2
+ L_BRACK@1..2 "["
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_unmatched_brackets_with_group() {
+ check(
+ r#"{][}"#,
+ expect![[r#"
+ ROOT@0..4
+ PREAMBLE@0..4
+ CURLY_GROUP@0..4
+ L_CURLY@0..1 "{"
+ ERROR@1..2
+ R_BRACK@1..2 "]"
+ MIXED_GROUP@2..3
+ L_BRACK@2..3 "["
+ R_CURLY@3..4 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_hello_world() {
+ check(
+ r#"Hello World!"#,
+ expect![[r#"
+ ROOT@0..12
+ PREAMBLE@0..12
+ TEXT@0..12
+ WORD@0..5 "Hello"
+ WHITESPACE@5..6 " "
+ WORD@6..12 "World!"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_biblatex_include_options() {
+ check(
+ r#"\addbibresource[foo=bar, baz]{foo/bar.bib}"#,
+ expect![[r#"
+ ROOT@0..42
+ PREAMBLE@0..42
+ BIBLATEX_INCLUDE@0..42
+ COMMAND_NAME@0..15 "\\addbibresource"
+ BRACK_GROUP_KEY_VALUE@15..29
+ L_BRACK@15..16 "["
+ KEY_VALUE_BODY@16..28
+ KEY_VALUE_PAIR@16..23
+ KEY@16..19
+ WORD@16..19 "foo"
+ EQUALITY_SIGN@19..20 "="
+ VALUE@20..23
+ TEXT@20..23
+ WORD@20..23 "bar"
+ COMMA@23..24 ","
+ WHITESPACE@24..25 " "
+ KEY_VALUE_PAIR@25..28
+ KEY@25..28
+ WORD@25..28 "baz"
+ R_BRACK@28..29 "]"
+ CURLY_GROUP_WORD_LIST@29..42
+ L_CURLY@29..30 "{"
+ KEY@30..41
+ WORD@30..41 "foo/bar.bib"
+ R_CURLY@41..42 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_biblatex_include_simple() {
+ check(
+ r#"\addbibresource{foo/bar.bib}"#,
+ expect![[r#"
+ ROOT@0..28
+ PREAMBLE@0..28
+ BIBLATEX_INCLUDE@0..28
+ COMMAND_NAME@0..15 "\\addbibresource"
+ CURLY_GROUP_WORD_LIST@15..28
+ L_CURLY@15..16 "{"
+ KEY@16..27
+ WORD@16..27 "foo/bar.bib"
+ R_CURLY@27..28 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_bibtex_include_simple() {
+ check(
+ r#"\bibliography{foo/bar}"#,
+ expect![[r#"
+ ROOT@0..22
+ PREAMBLE@0..22
+ BIBTEX_INCLUDE@0..22
+ COMMAND_NAME@0..13 "\\bibliography"
+ CURLY_GROUP_WORD_LIST@13..22
+ L_CURLY@13..14 "{"
+ KEY@14..21
+ WORD@14..21 "foo/bar"
+ R_CURLY@21..22 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_class_include_empty() {
+ check(
+ r#"\documentclass{}"#,
+ expect![[r#"
+ ROOT@0..16
+ PREAMBLE@0..16
+ CLASS_INCLUDE@0..16
+ COMMAND_NAME@0..14 "\\documentclass"
+ CURLY_GROUP_WORD_LIST@14..16
+ L_CURLY@14..15 "{"
+ R_CURLY@15..16 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_class_include_options() {
+ check(
+ r#"\documentclass[foo = bar, baz, qux]{article}"#,
+ expect![[r#"
+ ROOT@0..44
+ PREAMBLE@0..44
+ CLASS_INCLUDE@0..44
+ COMMAND_NAME@0..14 "\\documentclass"
+ BRACK_GROUP_KEY_VALUE@14..35
+ L_BRACK@14..15 "["
+ KEY_VALUE_BODY@15..34
+ KEY_VALUE_PAIR@15..24
+ KEY@15..19
+ WORD@15..18 "foo"
+ WHITESPACE@18..19 " "
+ EQUALITY_SIGN@19..20 "="
+ WHITESPACE@20..21 " "
+ VALUE@21..24
+ TEXT@21..24
+ WORD@21..24 "bar"
+ COMMA@24..25 ","
+ WHITESPACE@25..26 " "
+ KEY_VALUE_PAIR@26..29
+ KEY@26..29
+ WORD@26..29 "baz"
+ COMMA@29..30 ","
+ WHITESPACE@30..31 " "
+ KEY_VALUE_PAIR@31..34
+ KEY@31..34
+ WORD@31..34 "qux"
+ R_BRACK@34..35 "]"
+ CURLY_GROUP_WORD_LIST@35..44
+ L_CURLY@35..36 "{"
+ KEY@36..43
+ WORD@36..43 "article"
+ R_CURLY@43..44 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_class_include_simple() {
+ check(
+ r#"\documentclass{article}"#,
+ expect![[r#"
+ ROOT@0..23
+ PREAMBLE@0..23
+ CLASS_INCLUDE@0..23
+ COMMAND_NAME@0..14 "\\documentclass"
+ CURLY_GROUP_WORD_LIST@14..23
+ L_CURLY@14..15 "{"
+ KEY@15..22
+ WORD@15..22 "article"
+ R_CURLY@22..23 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_graphics_include_command() {
+ check(
+ r#"\includegraphics[width=0.5\textwidth]{\foo.\bar.pdf}"#,
+ expect![[r#"
+ ROOT@0..52
+ PREAMBLE@0..52
+ GRAPHICS_INCLUDE@0..52
+ COMMAND_NAME@0..16 "\\includegraphics"
+ BRACK_GROUP_KEY_VALUE@16..37
+ L_BRACK@16..17 "["
+ KEY_VALUE_BODY@17..36
+ KEY_VALUE_PAIR@17..36
+ KEY@17..22
+ WORD@17..22 "width"
+ EQUALITY_SIGN@22..23 "="
+ VALUE@23..36
+ TEXT@23..26
+ WORD@23..26 "0.5"
+ GENERIC_COMMAND@26..36
+ COMMAND_NAME@26..36 "\\textwidth"
+ R_BRACK@36..37 "]"
+ CURLY_GROUP_WORD_LIST@37..52
+ L_CURLY@37..38 "{"
+ KEY@38..51
+ COMMAND_NAME@38..42 "\\foo"
+ WORD@42..43 "."
+ COMMAND_NAME@43..47 "\\bar"
+ WORD@47..51 ".pdf"
+ R_CURLY@51..52 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_graphics_include_complicated_options() {
+ check(
+ r#"\includegraphics[width=0.5\textwidth]{}"#,
+ expect![[r#"
+ ROOT@0..39
+ PREAMBLE@0..39
+ GRAPHICS_INCLUDE@0..39
+ COMMAND_NAME@0..16 "\\includegraphics"
+ BRACK_GROUP_KEY_VALUE@16..37
+ L_BRACK@16..17 "["
+ KEY_VALUE_BODY@17..36
+ KEY_VALUE_PAIR@17..36
+ KEY@17..22
+ WORD@17..22 "width"
+ EQUALITY_SIGN@22..23 "="
+ VALUE@23..36
+ TEXT@23..26
+ WORD@23..26 "0.5"
+ GENERIC_COMMAND@26..36
+ COMMAND_NAME@26..36 "\\textwidth"
+ R_BRACK@36..37 "]"
+ CURLY_GROUP_WORD_LIST@37..39
+ L_CURLY@37..38 "{"
+ R_CURLY@38..39 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_graphics_include_options() {
+ check(
+ r#"\includegraphics[scale=.5]{foo/bar.pdf}"#,
+ expect![[r#"
+ ROOT@0..39
+ PREAMBLE@0..39
+ GRAPHICS_INCLUDE@0..39
+ COMMAND_NAME@0..16 "\\includegraphics"
+ BRACK_GROUP_KEY_VALUE@16..26
+ L_BRACK@16..17 "["
+ KEY_VALUE_BODY@17..25
+ KEY_VALUE_PAIR@17..25
+ KEY@17..22
+ WORD@17..22 "scale"
+ EQUALITY_SIGN@22..23 "="
+ VALUE@23..25
+ TEXT@23..25
+ WORD@23..25 ".5"
+ R_BRACK@25..26 "]"
+ CURLY_GROUP_WORD_LIST@26..39
+ L_CURLY@26..27 "{"
+ KEY@27..38
+ WORD@27..38 "foo/bar.pdf"
+ R_CURLY@38..39 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_graphics_include_simple() {
+ check(
+ r#"\includegraphics{foo/bar.pdf}"#,
+ expect![[r#"
+ ROOT@0..29
+ PREAMBLE@0..29
+ GRAPHICS_INCLUDE@0..29
+ COMMAND_NAME@0..16 "\\includegraphics"
+ CURLY_GROUP_WORD_LIST@16..29
+ L_CURLY@16..17 "{"
+ KEY@17..28
+ WORD@17..28 "foo/bar.pdf"
+ R_CURLY@28..29 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_import_incomplete() {
+ check(
+ r#"\import{foo"#,
+ expect![[r#"
+ ROOT@0..11
+ PREAMBLE@0..11
+ IMPORT@0..11
+ COMMAND_NAME@0..7 "\\import"
+ CURLY_GROUP_WORD@7..11
+ L_CURLY@7..8 "{"
+ KEY@8..11
+ WORD@8..11 "foo"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_import_simple() {
+ check(
+ r#"\import{foo}{bar}"#,
+ expect![[r#"
+ ROOT@0..17
+ PREAMBLE@0..17
+ IMPORT@0..17
+ COMMAND_NAME@0..7 "\\import"
+ CURLY_GROUP_WORD@7..12
+ L_CURLY@7..8 "{"
+ KEY@8..11
+ WORD@8..11 "foo"
+ R_CURLY@11..12 "}"
+ CURLY_GROUP_WORD@12..17
+ L_CURLY@12..13 "{"
+ KEY@13..16
+ WORD@13..16 "bar"
+ R_CURLY@16..17 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_inkscape_include_options() {
+ check(
+ r#"\includesvg[scale=.5]{foo/bar}"#,
+ expect![[r#"
+ ROOT@0..30
+ PREAMBLE@0..30
+ SVG_INCLUDE@0..30
+ COMMAND_NAME@0..11 "\\includesvg"
+ BRACK_GROUP_KEY_VALUE@11..21
+ L_BRACK@11..12 "["
+ KEY_VALUE_BODY@12..20
+ KEY_VALUE_PAIR@12..20
+ KEY@12..17
+ WORD@12..17 "scale"
+ EQUALITY_SIGN@17..18 "="
+ VALUE@18..20
+ TEXT@18..20
+ WORD@18..20 ".5"
+ R_BRACK@20..21 "]"
+ CURLY_GROUP_WORD_LIST@21..30
+ L_CURLY@21..22 "{"
+ KEY@22..29
+ WORD@22..29 "foo/bar"
+ R_CURLY@29..30 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_inkscape_include_simple() {
+ check(
+ r#"\includesvg{foo/bar}"#,
+ expect![[r#"
+ ROOT@0..20
+ PREAMBLE@0..20
+ SVG_INCLUDE@0..20
+ COMMAND_NAME@0..11 "\\includesvg"
+ CURLY_GROUP_WORD_LIST@11..20
+ L_CURLY@11..12 "{"
+ KEY@12..19
+ WORD@12..19 "foo/bar"
+ R_CURLY@19..20 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_latex_include_equality_sign() {
+ check(
+ r#"\include{foo=bar}"#,
+ expect![[r#"
+ ROOT@0..17
+ PREAMBLE@0..17
+ LATEX_INCLUDE@0..17
+ COMMAND_NAME@0..8 "\\include"
+ CURLY_GROUP_WORD_LIST@8..17
+ L_CURLY@8..9 "{"
+ KEY@9..16
+ WORD@9..12 "foo"
+ EQUALITY_SIGN@12..13 "="
+ WORD@13..16 "bar"
+ R_CURLY@16..17 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_latex_include_simple() {
+ check(
+ r#"\include{foo/bar}"#,
+ expect![[r#"
+ ROOT@0..17
+ PREAMBLE@0..17
+ LATEX_INCLUDE@0..17
+ COMMAND_NAME@0..8 "\\include"
+ CURLY_GROUP_WORD_LIST@8..17
+ L_CURLY@8..9 "{"
+ KEY@9..16
+ WORD@9..16 "foo/bar"
+ R_CURLY@16..17 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_latex_input_path_brackets() {
+ check(
+ r#"\input{foo[bar].tex}"#,
+ expect![[r#"
+ ROOT@0..20
+ PREAMBLE@0..20
+ LATEX_INCLUDE@0..20
+ COMMAND_NAME@0..6 "\\input"
+ CURLY_GROUP_WORD_LIST@6..20
+ L_CURLY@6..7 "{"
+ KEY@7..19
+ WORD@7..10 "foo"
+ L_BRACK@10..11 "["
+ WORD@11..14 "bar"
+ R_BRACK@14..15 "]"
+ WORD@15..19 ".tex"
+ R_CURLY@19..20 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_package_include_empty() {
+ check(
+ r#"\usepackage{}"#,
+ expect![[r#"
+ ROOT@0..13
+ PREAMBLE@0..13
+ PACKAGE_INCLUDE@0..13
+ COMMAND_NAME@0..11 "\\usepackage"
+ CURLY_GROUP_WORD_LIST@11..13
+ L_CURLY@11..12 "{"
+ R_CURLY@12..13 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_package_include_multiple() {
+ check(
+ r#"\usepackage{amsmath, lipsum}"#,
+ expect![[r#"
+ ROOT@0..28
+ PREAMBLE@0..28
+ PACKAGE_INCLUDE@0..28
+ COMMAND_NAME@0..11 "\\usepackage"
+ CURLY_GROUP_WORD_LIST@11..28
+ L_CURLY@11..12 "{"
+ KEY@12..19
+ WORD@12..19 "amsmath"
+ COMMA@19..20 ","
+ WHITESPACE@20..21 " "
+ KEY@21..27
+ WORD@21..27 "lipsum"
+ R_CURLY@27..28 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_package_include_options() {
+ check(
+ r#"\usepackage[foo = bar, baz, qux]{amsmath}"#,
+ expect![[r#"
+ ROOT@0..41
+ PREAMBLE@0..41
+ PACKAGE_INCLUDE@0..41
+ COMMAND_NAME@0..11 "\\usepackage"
+ BRACK_GROUP_KEY_VALUE@11..32
+ L_BRACK@11..12 "["
+ KEY_VALUE_BODY@12..31
+ KEY_VALUE_PAIR@12..21
+ KEY@12..16
+ WORD@12..15 "foo"
+ WHITESPACE@15..16 " "
+ EQUALITY_SIGN@16..17 "="
+ WHITESPACE@17..18 " "
+ VALUE@18..21
+ TEXT@18..21
+ WORD@18..21 "bar"
+ COMMA@21..22 ","
+ WHITESPACE@22..23 " "
+ KEY_VALUE_PAIR@23..26
+ KEY@23..26
+ WORD@23..26 "baz"
+ COMMA@26..27 ","
+ WHITESPACE@27..28 " "
+ KEY_VALUE_PAIR@28..31
+ KEY@28..31
+ WORD@28..31 "qux"
+ R_BRACK@31..32 "]"
+ CURLY_GROUP_WORD_LIST@32..41
+ L_CURLY@32..33 "{"
+ KEY@33..40
+ WORD@33..40 "amsmath"
+ R_CURLY@40..41 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_package_include_simple() {
+ check(
+ r#"\usepackage{amsmath}"#,
+ expect![[r#"
+ ROOT@0..20
+ PREAMBLE@0..20
+ PACKAGE_INCLUDE@0..20
+ COMMAND_NAME@0..11 "\\usepackage"
+ CURLY_GROUP_WORD_LIST@11..20
+ L_CURLY@11..12 "{"
+ KEY@12..19
+ WORD@12..19 "amsmath"
+ R_CURLY@19..20 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_pgf_library_import_simple() {
+ check(
+ r#"\usepgflibrary{foo}"#,
+ expect![[r#"
+ ROOT@0..19
+ PREAMBLE@0..19
+ TIKZ_LIBRARY_IMPORT@0..19
+ COMMAND_NAME@0..14 "\\usepgflibrary"
+ CURLY_GROUP_WORD_LIST@14..19
+ L_CURLY@14..15 "{"
+ KEY@15..18
+ WORD@15..18 "foo"
+ R_CURLY@18..19 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_svg_include_options() {
+ check(
+ r#"\includesvg[scale=.5]{foo/bar.svg}"#,
+ expect![[r#"
+ ROOT@0..34
+ PREAMBLE@0..34
+ SVG_INCLUDE@0..34
+ COMMAND_NAME@0..11 "\\includesvg"
+ BRACK_GROUP_KEY_VALUE@11..21
+ L_BRACK@11..12 "["
+ KEY_VALUE_BODY@12..20
+ KEY_VALUE_PAIR@12..20
+ KEY@12..17
+ WORD@12..17 "scale"
+ EQUALITY_SIGN@17..18 "="
+ VALUE@18..20
+ TEXT@18..20
+ WORD@18..20 ".5"
+ R_BRACK@20..21 "]"
+ CURLY_GROUP_WORD_LIST@21..34
+ L_CURLY@21..22 "{"
+ KEY@22..33
+ WORD@22..33 "foo/bar.svg"
+ R_CURLY@33..34 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_svg_include_simple() {
+ check(
+ r#"\includesvg{foo/bar.svg}"#,
+ expect![[r#"
+ ROOT@0..24
+ PREAMBLE@0..24
+ SVG_INCLUDE@0..24
+ COMMAND_NAME@0..11 "\\includesvg"
+ CURLY_GROUP_WORD_LIST@11..24
+ L_CURLY@11..12 "{"
+ KEY@12..23
+ WORD@12..23 "foo/bar.svg"
+ R_CURLY@23..24 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_tikz_library_import_simple() {
+ check(
+ r#"\usetikzlibrary{foo}"#,
+ expect![[r#"
+ ROOT@0..20
+ PREAMBLE@0..20
+ TIKZ_LIBRARY_IMPORT@0..20
+ COMMAND_NAME@0..15 "\\usetikzlibrary"
+ CURLY_GROUP_WORD_LIST@15..20
+ L_CURLY@15..16 "{"
+ KEY@16..19
+ WORD@16..19 "foo"
+ R_CURLY@19..20 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_verbatim_include_simple() {
+ check(
+ r#"\verbatiminput{foo/bar.txt}"#,
+ expect![[r#"
+ ROOT@0..27
+ PREAMBLE@0..27
+ VERBATIM_INCLUDE@0..27
+ COMMAND_NAME@0..14 "\\verbatiminput"
+ CURLY_GROUP_WORD_LIST@14..27
+ L_CURLY@14..15 "{"
+ KEY@15..26
+ WORD@15..26 "foo/bar.txt"
+ R_CURLY@26..27 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_inline() {
+ check(
+ r#"$x \in [0, \infty)$"#,
+ expect![[r#"
+ ROOT@0..19
+ PREAMBLE@0..19
+ FORMULA@0..19
+ DOLLAR@0..1 "$"
+ TEXT@1..3
+ WORD@1..2 "x"
+ WHITESPACE@2..3 " "
+ GENERIC_COMMAND@3..18
+ COMMAND_NAME@3..6 "\\in"
+ WHITESPACE@6..7 " "
+ MIXED_GROUP@7..18
+ L_BRACK@7..8 "["
+ TEXT@8..11
+ WORD@8..9 "0"
+ COMMA@9..10 ","
+ WHITESPACE@10..11 " "
+ GENERIC_COMMAND@11..17
+ COMMAND_NAME@11..17 "\\infty"
+ R_PAREN@17..18 ")"
+ DOLLAR@18..19 "$"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_inline_double_dollar() {
+ check(
+ r#"$$x \in [0, \infty)$$"#,
+ expect![[r#"
+ ROOT@0..21
+ PREAMBLE@0..21
+ FORMULA@0..21
+ DOLLAR@0..2 "$$"
+ TEXT@2..4
+ WORD@2..3 "x"
+ WHITESPACE@3..4 " "
+ GENERIC_COMMAND@4..19
+ COMMAND_NAME@4..7 "\\in"
+ WHITESPACE@7..8 " "
+ MIXED_GROUP@8..19
+ L_BRACK@8..9 "["
+ TEXT@9..12
+ WORD@9..10 "0"
+ COMMA@10..11 ","
+ WHITESPACE@11..12 " "
+ GENERIC_COMMAND@12..18
+ COMMAND_NAME@12..18 "\\infty"
+ R_PAREN@18..19 ")"
+ DOLLAR@19..21 "$$"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_568() {
+ check(
+ r#"\input{|ipython scripts/test.ipynb}
+\label{fig:x=2}"#,
+ expect![[r#"
+ ROOT@0..51
+ PREAMBLE@0..51
+ LATEX_INCLUDE@0..36
+ COMMAND_NAME@0..6 "\\input"
+ CURLY_GROUP_WORD_LIST@6..36
+ L_CURLY@6..7 "{"
+ WORD@7..8 "|"
+ KEY@8..34
+ WORD@8..15 "ipython"
+ WHITESPACE@15..16 " "
+ WORD@16..34 "scripts/test.ipynb"
+ R_CURLY@34..35 "}"
+ LINE_BREAK@35..36 "\n"
+ LABEL_DEFINITION@36..51
+ COMMAND_NAME@36..42 "\\label"
+ CURLY_GROUP_WORD@42..51
+ L_CURLY@42..43 "{"
+ KEY@43..50
+ WORD@43..48 "fig:x"
+ EQUALITY_SIGN@48..49 "="
+ WORD@49..50 "2"
+ R_CURLY@50..51 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_745() {
+ check(
+ r#"\documentclass{article}
+\usepackage{tabularray}
+
+\ExplSyntaxOn
+\NewDocumentEnvironment{exptblr}{O{}m}
+ {
+ \use:x
+ {
+ \exp_not:N \begin{tblr}
+ [\exp_not:n{#1}]
+ {#2}
+ }
+ }
+ {
+ \end{tblr}
+ }
+\ExplSyntaxOff
+
+\begin{document}
+
+\end{document}"#,
+ expect![[r##"
+ ROOT@0..271
+ PREAMBLE@0..271
+ CLASS_INCLUDE@0..24
+ COMMAND_NAME@0..14 "\\documentclass"
+ CURLY_GROUP_WORD_LIST@14..24
+ L_CURLY@14..15 "{"
+ KEY@15..22
+ WORD@15..22 "article"
+ R_CURLY@22..23 "}"
+ LINE_BREAK@23..24 "\n"
+ PACKAGE_INCLUDE@24..50
+ COMMAND_NAME@24..35 "\\usepackage"
+ CURLY_GROUP_WORD_LIST@35..50
+ L_CURLY@35..36 "{"
+ KEY@36..46
+ WORD@36..46 "tabularray"
+ R_CURLY@46..47 "}"
+ WHITESPACE@47..48 " "
+ LINE_BREAK@48..50 "\n\n"
+ GENERIC_COMMAND@50..64
+ COMMAND_NAME@50..63 "\\ExplSyntaxOn"
+ LINE_BREAK@63..64 "\n"
+ GENERIC_COMMAND@64..223
+ COMMAND_NAME@64..87 "\\NewDocumentEnvironment"
+ CURLY_GROUP@87..96
+ L_CURLY@87..88 "{"
+ TEXT@88..95
+ WORD@88..95 "exptblr"
+ R_CURLY@95..96 "}"
+ CURLY_GROUP@96..107
+ L_CURLY@96..97 "{"
+ TEXT@97..98
+ WORD@97..98 "O"
+ CURLY_GROUP@98..100
+ L_CURLY@98..99 "{"
+ R_CURLY@99..100 "}"
+ TEXT@100..101
+ WORD@100..101 "m"
+ R_CURLY@101..102 "}"
+ LINE_BREAK@102..103 "\n"
+ WHITESPACE@103..107 " "
+ CURLY_GROUP@107..200
+ L_CURLY@107..108 "{"
+ LINE_BREAK@108..109 "\n"
+ WHITESPACE@109..113 " "
+ GENERIC_COMMAND@113..194
+ COMMAND_NAME@113..119 "\\use:x"
+ LINE_BREAK@119..120 "\n"
+ WHITESPACE@120..124 " "
+ CURLY_GROUP@124..194
+ L_CURLY@124..125 "{"
+ LINE_BREAK@125..126 "\n"
+ WHITESPACE@126..130 " "
+ GENERIC_COMMAND@130..141
+ COMMAND_NAME@130..140 "\\exp_not:N"
+ WHITESPACE@140..141 " "
+ ENVIRONMENT@141..188
+ BEGIN@141..179
+ COMMAND_NAME@141..147 "\\begin"
+ CURLY_GROUP_WORD@147..158
+ L_CURLY@147..148 "{"
+ KEY@148..152
+ WORD@148..152 "tblr"
+ R_CURLY@152..153 "}"
+ LINE_BREAK@153..154 "\n"
+ WHITESPACE@154..158 " "
+ BRACK_GROUP@158..179
+ L_BRACK@158..159 "["
+ GENERIC_COMMAND@159..173
+ COMMAND_NAME@159..169 "\\exp_not:n"
+ CURLY_GROUP@169..173
+ L_CURLY@169..170 "{"
+ TEXT@170..172
+ WORD@170..172 "#1"
+ R_CURLY@172..173 "}"
+ R_BRACK@173..174 "]"
+ LINE_BREAK@174..175 "\n"
+ WHITESPACE@175..179 " "
+ CURLY_GROUP@179..188
+ L_CURLY@179..180 "{"
+ TEXT@180..182
+ WORD@180..182 "#2"
+ R_CURLY@182..183 "}"
+ LINE_BREAK@183..184 "\n"
+ WHITESPACE@184..188 " "
+ R_CURLY@188..189 "}"
+ LINE_BREAK@189..190 "\n"
+ WHITESPACE@190..194 " "
+ 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"
+ GENERIC_COMMAND@223..239
+ COMMAND_NAME@223..237 "\\ExplSyntaxOff"
+ LINE_BREAK@237..239 "\n\n"
+ ENVIRONMENT@239..271
+ BEGIN@239..257
+ COMMAND_NAME@239..245 "\\begin"
+ CURLY_GROUP_WORD@245..257
+ L_CURLY@245..246 "{"
+ KEY@246..254
+ WORD@246..254 "document"
+ R_CURLY@254..255 "}"
+ LINE_BREAK@255..257 "\n\n"
+ END@257..271
+ COMMAND_NAME@257..261 "\\end"
+ CURLY_GROUP_WORD@261..271
+ L_CURLY@261..262 "{"
+ KEY@262..270
+ WORD@262..270 "document"
+ R_CURLY@270..271 "}"
+
+ "##]],
+ );
+}
+
+#[test]
+fn test_issue_789() {
+ check(
+ r#"\graphicspath{test}"#,
+ expect![[r#"
+ ROOT@0..19
+ PREAMBLE@0..19
+ GRAPHICS_PATH@0..19
+ COMMAND_NAME@0..13 "\\graphicspath"
+ CURLY_GROUP_WORD@13..19
+ L_CURLY@13..14 "{"
+ KEY@14..18
+ WORD@14..18 "test"
+ R_CURLY@18..19 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_828() {
+ check(
+ r#"\verb|<STATEMENT> if(<expr>){<body>else{<body>|"#,
+ expect![[r#"
+ ROOT@0..51
+ PREAMBLE@0..51
+ GENERIC_COMMAND@0..5
+ COMMAND_NAME@0..5 "\\verb"
+ VERBATIM@5..6 "|"
+ VERBATIM@6..17 "<STATEMENT>"
+ VERBATIM@17..22 " "
+ VERBATIM@22..24 "if"
+ VERBATIM@24..25 "("
+ VERBATIM@25..31 "<expr>"
+ VERBATIM@31..32 ")"
+ VERBATIM@32..33 "{"
+ VERBATIM@33..43 "<body>else"
+ VERBATIM@43..44 "{"
+ VERBATIM@44..50 "<body>"
+ VERBATIM@50..51 "|"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_853() {
+ check(
+ r#"\documentclass{minimal}
+\begin{document}
+This is an asdf undefined command
+\iffalse
+ \iffalse\fi
+ \end{enumerate}
+\fi
+\end{document}"#,
+ expect![[r#"
+ ROOT@0..135
+ PREAMBLE@0..135
+ CLASS_INCLUDE@0..24
+ COMMAND_NAME@0..14 "\\documentclass"
+ CURLY_GROUP_WORD_LIST@14..24
+ L_CURLY@14..15 "{"
+ KEY@15..22
+ WORD@15..22 "minimal"
+ R_CURLY@22..23 "}"
+ LINE_BREAK@23..24 "\n"
+ ENVIRONMENT@24..135
+ BEGIN@24..41
+ COMMAND_NAME@24..30 "\\begin"
+ CURLY_GROUP_WORD@30..41
+ L_CURLY@30..31 "{"
+ KEY@31..39
+ WORD@31..39 "document"
+ R_CURLY@39..40 "}"
+ LINE_BREAK@40..41 "\n"
+ TEXT@41..75
+ WORD@41..45 "This"
+ WHITESPACE@45..46 " "
+ WORD@46..48 "is"
+ WHITESPACE@48..49 " "
+ WORD@49..51 "an"
+ WHITESPACE@51..52 " "
+ WORD@52..56 "asdf"
+ WHITESPACE@56..57 " "
+ WORD@57..66 "undefined"
+ WHITESPACE@66..67 " "
+ WORD@67..74 "command"
+ LINE_BREAK@74..75 "\n"
+ BLOCK_COMMENT@75..120
+ COMMAND_NAME@75..83 "\\iffalse"
+ LINE_BREAK@83..84 "\n"
+ WHITESPACE@84..86 " "
+ BLOCK_COMMENT@86..97
+ COMMAND_NAME@86..94 "\\iffalse"
+ COMMAND_NAME@94..97 "\\fi"
+ LINE_BREAK@97..98 "\n"
+ WHITESPACE@98..100 " "
+ COMMAND_NAME@100..104 "\\end"
+ L_CURLY@104..105 "{"
+ WORD@105..114 "enumerate"
+ R_CURLY@114..115 "}"
+ WHITESPACE@115..116 " "
+ LINE_BREAK@116..117 "\n"
+ COMMAND_NAME@117..120 "\\fi"
+ LINE_BREAK@120..121 "\n"
+ END@121..135
+ COMMAND_NAME@121..125 "\\end"
+ CURLY_GROUP_WORD@125..135
+ L_CURLY@125..126 "{"
+ KEY@126..134
+ WORD@126..134 "document"
+ R_CURLY@134..135 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_857() {
+ check(
+ r#"\newcommand\ö{}
+\newcommand{\öö}{}
+\newcommand\123{}"#,
+ expect![[r#"
+ ROOT@0..55
+ PREAMBLE@0..55
+ COMMAND_DEFINITION@0..11
+ COMMAND_NAME@0..11 "\\newcommand"
+ GENERIC_COMMAND@11..17
+ COMMAND_NAME@11..14 "\\ö"
+ CURLY_GROUP@14..17
+ L_CURLY@14..15 "{"
+ R_CURLY@15..16 "}"
+ LINE_BREAK@16..17 "\n"
+ COMMAND_DEFINITION@17..38
+ COMMAND_NAME@17..28 "\\newcommand"
+ CURLY_GROUP_COMMAND@28..35
+ L_CURLY@28..29 "{"
+ COMMAND_NAME@29..34 "\\öö"
+ R_CURLY@34..35 "}"
+ CURLY_GROUP@35..38
+ L_CURLY@35..36 "{"
+ R_CURLY@36..37 "}"
+ LINE_BREAK@37..38 "\n"
+ COMMAND_DEFINITION@38..49
+ COMMAND_NAME@38..49 "\\newcommand"
+ GENERIC_COMMAND@49..55
+ COMMAND_NAME@49..53 "\\123"
+ CURLY_GROUP@53..55
+ L_CURLY@53..54 "{"
+ R_CURLY@54..55 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_874() {
+ check(
+ r#"\includegraphics[scale=0.2]{7.4).jpg}"#,
+ expect![[r#"
+ ROOT@0..37
+ PREAMBLE@0..37
+ GRAPHICS_INCLUDE@0..37
+ COMMAND_NAME@0..16 "\\includegraphics"
+ BRACK_GROUP_KEY_VALUE@16..27
+ L_BRACK@16..17 "["
+ KEY_VALUE_BODY@17..26
+ KEY_VALUE_PAIR@17..26
+ KEY@17..22
+ WORD@17..22 "scale"
+ EQUALITY_SIGN@22..23 "="
+ VALUE@23..26
+ TEXT@23..26
+ WORD@23..26 "0.2"
+ R_BRACK@26..27 "]"
+ CURLY_GROUP_WORD_LIST@27..37
+ L_CURLY@27..28 "{"
+ KEY@28..36
+ WORD@28..31 "7.4"
+ R_PAREN@31..32 ")"
+ WORD@32..36 ".jpg"
+ R_CURLY@36..37 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_919() {
+ check(
+ r#"\documentclass{article}
+
+\usepackage{
+ lipsum, % provides blindtext
+ booktabs, % better rules for tables
+ %xcolor % easily define colors with \definecolor{}{}{}
+}
+
+\begin{document}
+ \lipsum
+\end{document}
+"#,
+ expect![[r#"
+ ROOT@0..217
+ PREAMBLE@0..217
+ CLASS_INCLUDE@0..25
+ COMMAND_NAME@0..14 "\\documentclass"
+ CURLY_GROUP_WORD_LIST@14..25
+ L_CURLY@14..15 "{"
+ KEY@15..22
+ WORD@15..22 "article"
+ R_CURLY@22..23 "}"
+ LINE_BREAK@23..25 "\n\n"
+ PACKAGE_INCLUDE@25..173
+ COMMAND_NAME@25..36 "\\usepackage"
+ CURLY_GROUP_WORD_LIST@36..173
+ L_CURLY@36..37 "{"
+ LINE_BREAK@37..38 "\n"
+ WHITESPACE@38..42 " "
+ KEY@42..48
+ WORD@42..48 "lipsum"
+ COMMA@48..49 ","
+ WHITESPACE@49..50 " "
+ COMMENT@50..70 "% provides blindtext"
+ LINE_BREAK@70..71 "\n"
+ WHITESPACE@71..75 " "
+ KEY@75..83
+ WORD@75..83 "booktabs"
+ COMMA@83..84 ","
+ WHITESPACE@84..85 " "
+ COMMENT@85..110 "% better rules for ta ..."
+ LINE_BREAK@110..111 "\n"
+ WHITESPACE@111..115 " "
+ COMMENT@115..169 "%xcolor % easily defi ..."
+ LINE_BREAK@169..170 "\n"
+ R_CURLY@170..171 "}"
+ LINE_BREAK@171..173 "\n\n"
+ ENVIRONMENT@173..217
+ BEGIN@173..194
+ COMMAND_NAME@173..179 "\\begin"
+ CURLY_GROUP_WORD@179..194
+ L_CURLY@179..180 "{"
+ KEY@180..188
+ WORD@180..188 "document"
+ R_CURLY@188..189 "}"
+ LINE_BREAK@189..190 "\n"
+ WHITESPACE@190..194 " "
+ GENERIC_COMMAND@194..202
+ COMMAND_NAME@194..201 "\\lipsum"
+ LINE_BREAK@201..202 "\n"
+ END@202..217
+ COMMAND_NAME@202..206 "\\end"
+ CURLY_GROUP_WORD@206..217
+ L_CURLY@206..207 "{"
+ KEY@207..215
+ WORD@207..215 "document"
+ R_CURLY@215..216 "}"
+ LINE_BREAK@216..217 "\n"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_issue_931() {
+ check(
+ r#"\bibliography{$HOME/Literature}"#,
+ expect![[r#"
+ ROOT@0..31
+ PREAMBLE@0..31
+ BIBTEX_INCLUDE@0..31
+ COMMAND_NAME@0..13 "\\bibliography"
+ CURLY_GROUP_WORD_LIST@13..31
+ L_CURLY@13..14 "{"
+ KEY@14..30
+ DOLLAR@14..15 "$"
+ WORD@15..30 "HOME/Literature"
+ R_CURLY@30..31 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_definition_line_break() {
+ check(
+ r#"\label{hello
+world}"#,
+ expect![[r#"
+ ROOT@0..19
+ PREAMBLE@0..19
+ LABEL_DEFINITION@0..13
+ COMMAND_NAME@0..6 "\\label"
+ CURLY_GROUP_WORD@6..13
+ L_CURLY@6..7 "{"
+ KEY@7..13
+ WORD@7..12 "hello"
+ LINE_BREAK@12..13 "\n"
+ TEXT@13..18
+ WORD@13..18 "world"
+ ERROR@18..19
+ R_CURLY@18..19 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_definition_simple() {
+ check(
+ r#"\label{foo}"#,
+ expect![[r#"
+ ROOT@0..11
+ PREAMBLE@0..11
+ LABEL_DEFINITION@0..11
+ COMMAND_NAME@0..6 "\\label"
+ CURLY_GROUP_WORD@6..11
+ L_CURLY@6..7 "{"
+ KEY@7..10
+ WORD@7..10 "foo"
+ R_CURLY@10..11 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_number() {
+ check(
+ r#"\newlabel{foo}{{1.1}}"#,
+ expect![[r#"
+ ROOT@0..21
+ PREAMBLE@0..21
+ LABEL_NUMBER@0..21
+ COMMAND_NAME@0..9 "\\newlabel"
+ CURLY_GROUP_WORD@9..14
+ L_CURLY@9..10 "{"
+ KEY@10..13
+ WORD@10..13 "foo"
+ R_CURLY@13..14 "}"
+ CURLY_GROUP@14..21
+ L_CURLY@14..15 "{"
+ CURLY_GROUP@15..20
+ L_CURLY@15..16 "{"
+ TEXT@16..19
+ WORD@16..19 "1.1"
+ R_CURLY@19..20 "}"
+ R_CURLY@20..21 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_reference_equation() {
+ check(
+ r#"\eqref{foo}"#,
+ expect![[r#"
+ ROOT@0..11
+ PREAMBLE@0..11
+ LABEL_REFERENCE@0..11
+ COMMAND_NAME@0..6 "\\eqref"
+ CURLY_GROUP_WORD_LIST@6..11
+ L_CURLY@6..7 "{"
+ KEY@7..10
+ WORD@7..10 "foo"
+ R_CURLY@10..11 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_reference_incomplete() {
+ check(
+ r#"Equation \eqref{eq is a \emph{useful} identity."#,
+ expect![[r#"
+ ROOT@0..47
+ PREAMBLE@0..47
+ TEXT@0..9
+ WORD@0..8 "Equation"
+ WHITESPACE@8..9 " "
+ LABEL_REFERENCE@9..24
+ COMMAND_NAME@9..15 "\\eqref"
+ CURLY_GROUP_WORD_LIST@15..24
+ L_CURLY@15..16 "{"
+ KEY@16..24
+ WORD@16..18 "eq"
+ WHITESPACE@18..19 " "
+ WORD@19..21 "is"
+ WHITESPACE@21..22 " "
+ WORD@22..23 "a"
+ WHITESPACE@23..24 " "
+ GENERIC_COMMAND@24..38
+ COMMAND_NAME@24..29 "\\emph"
+ CURLY_GROUP@29..38
+ L_CURLY@29..30 "{"
+ TEXT@30..36
+ WORD@30..36 "useful"
+ R_CURLY@36..37 "}"
+ WHITESPACE@37..38 " "
+ TEXT@38..47
+ WORD@38..47 "identity."
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_reference_multiple() {
+ check(
+ r#"\ref{foo, bar}"#,
+ expect![[r#"
+ ROOT@0..14
+ PREAMBLE@0..14
+ LABEL_REFERENCE@0..14
+ COMMAND_NAME@0..4 "\\ref"
+ CURLY_GROUP_WORD_LIST@4..14
+ L_CURLY@4..5 "{"
+ KEY@5..8
+ WORD@5..8 "foo"
+ COMMA@8..9 ","
+ WHITESPACE@9..10 " "
+ KEY@10..13
+ WORD@10..13 "bar"
+ R_CURLY@13..14 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_reference_range_error() {
+ check(
+ r#"\crefrange{foo{bar}"#,
+ expect![[r#"
+ ROOT@0..19
+ PREAMBLE@0..19
+ LABEL_REFERENCE_RANGE@0..19
+ COMMAND_NAME@0..10 "\\crefrange"
+ CURLY_GROUP_WORD@10..14
+ L_CURLY@10..11 "{"
+ KEY@11..14
+ WORD@11..14 "foo"
+ CURLY_GROUP_WORD@14..19
+ L_CURLY@14..15 "{"
+ KEY@15..18
+ WORD@15..18 "bar"
+ R_CURLY@18..19 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_reference_range_incomplete() {
+ check(
+ r#"\crefrange{foo}"#,
+ expect![[r#"
+ ROOT@0..15
+ PREAMBLE@0..15
+ LABEL_REFERENCE_RANGE@0..15
+ COMMAND_NAME@0..10 "\\crefrange"
+ CURLY_GROUP_WORD@10..15
+ L_CURLY@10..11 "{"
+ KEY@11..14
+ WORD@11..14 "foo"
+ R_CURLY@14..15 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_reference_range_simple() {
+ check(
+ r#"\crefrange{foo}{bar}"#,
+ expect![[r#"
+ ROOT@0..20
+ PREAMBLE@0..20
+ LABEL_REFERENCE_RANGE@0..20
+ COMMAND_NAME@0..10 "\\crefrange"
+ CURLY_GROUP_WORD@10..15
+ L_CURLY@10..11 "{"
+ KEY@11..14
+ WORD@11..14 "foo"
+ R_CURLY@14..15 "}"
+ CURLY_GROUP_WORD@15..20
+ L_CURLY@15..16 "{"
+ KEY@16..19
+ WORD@16..19 "bar"
+ R_CURLY@19..20 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_label_reference_simple() {
+ check(
+ r#"\ref{foo}"#,
+ expect![[r#"
+ ROOT@0..9
+ PREAMBLE@0..9
+ LABEL_REFERENCE@0..9
+ COMMAND_NAME@0..4 "\\ref"
+ CURLY_GROUP_WORD_LIST@4..9
+ L_CURLY@4..5 "{"
+ KEY@5..8
+ WORD@5..8 "foo"
+ R_CURLY@8..9 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_parameter() {
+ check(
+ r#"#1"#,
+ expect![[r##"
+ ROOT@0..2
+ PREAMBLE@0..2
+ TEXT@0..2
+ WORD@0..2 "#1"
+
+ "##]],
+ );
+}
+
+#[test]
+fn test_parameter_error() {
+ check(
+ r#"#"#,
+ expect![[r##"
+ ROOT@0..1
+ PREAMBLE@0..1
+ TEXT@0..1
+ WORD@0..1 "#"
+
+ "##]],
+ );
+}
+
+#[test]
+fn test_paragraphs() {
+ check(
+ r#"\section{Section 1}
+Section 1
+
+\paragraph{Paragraph 1}
+Paragraph 1
+
+\paragraph{Paragraph 2}
+Paragraph 2
+
+\section{Section 2}
+Section 2"#,
+ expect![[r#"
+ ROOT@0..134
+ PREAMBLE@0..134
+ SECTION@0..105
+ COMMAND_NAME@0..8 "\\section"
+ CURLY_GROUP@8..20
+ L_CURLY@8..9 "{"
+ TEXT@9..18
+ WORD@9..16 "Section"
+ WHITESPACE@16..17 " "
+ WORD@17..18 "1"
+ R_CURLY@18..19 "}"
+ LINE_BREAK@19..20 "\n"
+ TEXT@20..31
+ WORD@20..27 "Section"
+ WHITESPACE@27..28 " "
+ WORD@28..29 "1"
+ LINE_BREAK@29..31 "\n\n"
+ PARAGRAPH@31..68
+ COMMAND_NAME@31..41 "\\paragraph"
+ CURLY_GROUP@41..55
+ L_CURLY@41..42 "{"
+ TEXT@42..53
+ WORD@42..51 "Paragraph"
+ WHITESPACE@51..52 " "
+ WORD@52..53 "1"
+ R_CURLY@53..54 "}"
+ LINE_BREAK@54..55 "\n"
+ TEXT@55..68
+ WORD@55..64 "Paragraph"
+ WHITESPACE@64..65 " "
+ WORD@65..66 "1"
+ LINE_BREAK@66..68 "\n\n"
+ PARAGRAPH@68..105
+ COMMAND_NAME@68..78 "\\paragraph"
+ CURLY_GROUP@78..92
+ L_CURLY@78..79 "{"
+ TEXT@79..90
+ WORD@79..88 "Paragraph"
+ WHITESPACE@88..89 " "
+ WORD@89..90 "2"
+ R_CURLY@90..91 "}"
+ LINE_BREAK@91..92 "\n"
+ TEXT@92..105
+ WORD@92..101 "Paragraph"
+ WHITESPACE@101..102 " "
+ WORD@102..103 "2"
+ LINE_BREAK@103..105 "\n\n"
+ SECTION@105..134
+ COMMAND_NAME@105..113 "\\section"
+ CURLY_GROUP@113..125
+ L_CURLY@113..114 "{"
+ TEXT@114..123
+ WORD@114..121 "Section"
+ WHITESPACE@121..122 " "
+ WORD@122..123 "2"
+ R_CURLY@123..124 "}"
+ LINE_BREAK@124..125 "\n"
+ TEXT@125..134
+ WORD@125..132 "Section"
+ WHITESPACE@132..133 " "
+ WORD@133..134 "2"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_structure_enum_item() {
+ check(
+ r#"\begin{enumerate} \item 1 \item[2] 2 \item 3 \end{enumerate}"#,
+ expect![[r#"
+ ROOT@0..60
+ PREAMBLE@0..60
+ ENVIRONMENT@0..60
+ BEGIN@0..18
+ COMMAND_NAME@0..6 "\\begin"
+ CURLY_GROUP_WORD@6..18
+ L_CURLY@6..7 "{"
+ KEY@7..16
+ WORD@7..16 "enumerate"
+ R_CURLY@16..17 "}"
+ WHITESPACE@17..18 " "
+ ENUM_ITEM@18..26
+ COMMAND_NAME@18..23 "\\item"
+ WHITESPACE@23..24 " "
+ TEXT@24..26
+ WORD@24..25 "1"
+ WHITESPACE@25..26 " "
+ ENUM_ITEM@26..37
+ COMMAND_NAME@26..31 "\\item"
+ BRACK_GROUP@31..35
+ L_BRACK@31..32 "["
+ TEXT@32..33
+ WORD@32..33 "2"
+ R_BRACK@33..34 "]"
+ WHITESPACE@34..35 " "
+ TEXT@35..37
+ WORD@35..36 "2"
+ WHITESPACE@36..37 " "
+ ENUM_ITEM@37..45
+ COMMAND_NAME@37..42 "\\item"
+ WHITESPACE@42..43 " "
+ TEXT@43..45
+ WORD@43..44 "3"
+ WHITESPACE@44..45 " "
+ END@45..60
+ COMMAND_NAME@45..49 "\\end"
+ CURLY_GROUP_WORD@49..60
+ L_CURLY@49..50 "{"
+ KEY@50..59
+ WORD@50..59 "enumerate"
+ R_CURLY@59..60 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_structure_invalid_nesting() {
+ check(
+ r#"\section{Foo} \chapter{Bar}"#,
+ expect![[r#"
+ ROOT@0..27
+ PREAMBLE@0..27
+ SECTION@0..14
+ COMMAND_NAME@0..8 "\\section"
+ CURLY_GROUP@8..14
+ L_CURLY@8..9 "{"
+ TEXT@9..12
+ WORD@9..12 "Foo"
+ R_CURLY@12..13 "}"
+ WHITESPACE@13..14 " "
+ CHAPTER@14..27
+ COMMAND_NAME@14..22 "\\chapter"
+ CURLY_GROUP@22..27
+ L_CURLY@22..23 "{"
+ TEXT@23..26
+ WORD@23..26 "Bar"
+ R_CURLY@26..27 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_structure_nested() {
+ check(
+ r#"\part{1}\chapter{2}\section{3}\subsection{4}\subsubsection{5}\paragraph{6}\subparagraph{7}"#,
+ expect![[r#"
+ ROOT@0..90
+ PREAMBLE@0..90
+ PART@0..90
+ COMMAND_NAME@0..5 "\\part"
+ CURLY_GROUP@5..8
+ L_CURLY@5..6 "{"
+ TEXT@6..7
+ WORD@6..7 "1"
+ R_CURLY@7..8 "}"
+ CHAPTER@8..90
+ COMMAND_NAME@8..16 "\\chapter"
+ CURLY_GROUP@16..19
+ L_CURLY@16..17 "{"
+ TEXT@17..18
+ WORD@17..18 "2"
+ R_CURLY@18..19 "}"
+ SECTION@19..90
+ COMMAND_NAME@19..27 "\\section"
+ CURLY_GROUP@27..30
+ L_CURLY@27..28 "{"
+ TEXT@28..29
+ WORD@28..29 "3"
+ R_CURLY@29..30 "}"
+ SUBSECTION@30..90
+ COMMAND_NAME@30..41 "\\subsection"
+ CURLY_GROUP@41..44
+ L_CURLY@41..42 "{"
+ TEXT@42..43
+ WORD@42..43 "4"
+ R_CURLY@43..44 "}"
+ SUBSUBSECTION@44..90
+ COMMAND_NAME@44..58 "\\subsubsection"
+ CURLY_GROUP@58..61
+ L_CURLY@58..59 "{"
+ TEXT@59..60
+ WORD@59..60 "5"
+ R_CURLY@60..61 "}"
+ PARAGRAPH@61..90
+ COMMAND_NAME@61..71 "\\paragraph"
+ CURLY_GROUP@71..74
+ L_CURLY@71..72 "{"
+ TEXT@72..73
+ WORD@72..73 "6"
+ R_CURLY@73..74 "}"
+ SUBPARAGRAPH@74..90
+ COMMAND_NAME@74..87 "\\subparagraph"
+ CURLY_GROUP@87..90
+ L_CURLY@87..88 "{"
+ TEXT@88..89
+ WORD@88..89 "7"
+ R_CURLY@89..90 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_structure_siblings() {
+ check(
+ r#"\section{Foo} Foo \section{Bar} Bar"#,
+ expect![[r#"
+ ROOT@0..35
+ PREAMBLE@0..35
+ SECTION@0..18
+ COMMAND_NAME@0..8 "\\section"
+ CURLY_GROUP@8..14
+ L_CURLY@8..9 "{"
+ TEXT@9..12
+ WORD@9..12 "Foo"
+ R_CURLY@12..13 "}"
+ WHITESPACE@13..14 " "
+ TEXT@14..18
+ WORD@14..17 "Foo"
+ WHITESPACE@17..18 " "
+ SECTION@18..35
+ COMMAND_NAME@18..26 "\\section"
+ CURLY_GROUP@26..32
+ L_CURLY@26..27 "{"
+ TEXT@27..30
+ WORD@27..30 "Bar"
+ R_CURLY@30..31 "}"
+ WHITESPACE@31..32 " "
+ TEXT@32..35
+ WORD@32..35 "Bar"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_theorem_definition_full() {
+ check(
+ r#"\newtheorem{foo}[bar]{Foo}[baz]"#,
+ expect![[r#"
+ ROOT@0..31
+ PREAMBLE@0..31
+ THEOREM_DEFINITION_AMSTHM@0..31
+ COMMAND_NAME@0..11 "\\newtheorem"
+ CURLY_GROUP_WORD@11..16
+ L_CURLY@11..12 "{"
+ KEY@12..15
+ WORD@12..15 "foo"
+ R_CURLY@15..16 "}"
+ BRACK_GROUP_WORD@16..21
+ L_BRACK@16..17 "["
+ KEY@17..20
+ WORD@17..20 "bar"
+ R_BRACK@20..21 "]"
+ CURLY_GROUP@21..26
+ L_CURLY@21..22 "{"
+ TEXT@22..25
+ WORD@22..25 "Foo"
+ R_CURLY@25..26 "}"
+ BRACK_GROUP_WORD@26..31
+ L_BRACK@26..27 "["
+ KEY@27..30
+ WORD@27..30 "baz"
+ R_BRACK@30..31 "]"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_theorem_definition_name_with_counter() {
+ check(
+ r#"\newtheorem{foo}[bar]"#,
+ expect![[r#"
+ ROOT@0..21
+ PREAMBLE@0..21
+ THEOREM_DEFINITION_AMSTHM@0..21
+ COMMAND_NAME@0..11 "\\newtheorem"
+ CURLY_GROUP_WORD@11..16
+ L_CURLY@11..12 "{"
+ KEY@12..15
+ WORD@12..15 "foo"
+ R_CURLY@15..16 "}"
+ BRACK_GROUP_WORD@16..21
+ L_BRACK@16..17 "["
+ KEY@17..20
+ WORD@17..20 "bar"
+ R_BRACK@20..21 "]"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_theorem_definition_name_with_description() {
+ check(
+ r#"\newtheorem{foo}{Foo}"#,
+ expect![[r#"
+ ROOT@0..21
+ PREAMBLE@0..21
+ THEOREM_DEFINITION_AMSTHM@0..21
+ COMMAND_NAME@0..11 "\\newtheorem"
+ CURLY_GROUP_WORD@11..16
+ L_CURLY@11..12 "{"
+ KEY@12..15
+ WORD@12..15 "foo"
+ R_CURLY@15..16 "}"
+ CURLY_GROUP@16..21
+ L_CURLY@16..17 "{"
+ TEXT@17..20
+ WORD@17..20 "Foo"
+ R_CURLY@20..21 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_theorem_definition_name_with_description_and_counter() {
+ check(
+ r#"\newtheorem{foo}[bar]{Foo}"#,
+ expect![[r#"
+ ROOT@0..26
+ PREAMBLE@0..26
+ THEOREM_DEFINITION_AMSTHM@0..26
+ COMMAND_NAME@0..11 "\\newtheorem"
+ CURLY_GROUP_WORD@11..16
+ L_CURLY@11..12 "{"
+ KEY@12..15
+ WORD@12..15 "foo"
+ R_CURLY@15..16 "}"
+ BRACK_GROUP_WORD@16..21
+ L_BRACK@16..17 "["
+ KEY@17..20
+ WORD@17..20 "bar"
+ R_BRACK@20..21 "]"
+ CURLY_GROUP@21..26
+ L_CURLY@21..22 "{"
+ TEXT@22..25
+ WORD@22..25 "Foo"
+ R_CURLY@25..26 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_theorem_definition_only_name() {
+ check(
+ r#"\newtheorem{foo}"#,
+ expect![[r#"
+ ROOT@0..16
+ PREAMBLE@0..16
+ THEOREM_DEFINITION_AMSTHM@0..16
+ COMMAND_NAME@0..11 "\\newtheorem"
+ CURLY_GROUP_WORD@11..16
+ L_CURLY@11..12 "{"
+ KEY@12..15
+ WORD@12..15 "foo"
+ R_CURLY@15..16 "}"
+
+ "#]],
+ );
+}
+
+#[test]
+fn test_theorem_definition_thmtools() {
+ check(
+ r#"\declaretheorem[style=foo, name=bar]{baz}"#,
+ expect![[r#"
+ ROOT@0..41
+ PREAMBLE@0..41
+ THEOREM_DEFINITION_THMTOOLS@0..41
+ COMMAND_NAME@0..15 "\\declaretheorem"
+ BRACK_GROUP_KEY_VALUE@15..36
+ L_BRACK@15..16 "["
+ KEY_VALUE_BODY@16..35
+ KEY_VALUE_PAIR@16..25
+ KEY@16..21
+ WORD@16..21 "style"
+ EQUALITY_SIGN@21..22 "="
+ VALUE@22..25
+ TEXT@22..25
+ WORD@22..25 "foo"
+ COMMA@25..26 ","
+ WHITESPACE@26..27 " "
+ KEY_VALUE_PAIR@27..35
+ KEY@27..31
+ WORD@27..31 "name"
+ EQUALITY_SIGN@31..32 "="
+ VALUE@32..35
+ TEXT@32..35
+ WORD@32..35 "bar"
+ R_BRACK@35..36 "]"
+ CURLY_GROUP_WORD@36..41
+ L_CURLY@36..37 "{"
+ KEY@37..40
+ WORD@37..40 "baz"
+ R_CURLY@40..41 "}"
+
+ "#]],
+ );
+}
diff --git a/support/texlab/crates/parser/src/latexmkrc.rs b/support/texlab/crates/parser/src/latexmkrc.rs
new file mode 100644
index 0000000000..63c92bd353
--- /dev/null
+++ b/support/texlab/crates/parser/src/latexmkrc.rs
@@ -0,0 +1,52 @@
+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);
+
+ 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",
+ )
+ })?;
+
+ Ok(LatexmkrcData {
+ aux_dir: Some(aux_dir),
+ out_dir: Some(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)))
+}
diff --git a/support/texlab/crates/parser/src/lib.rs b/support/texlab/crates/parser/src/lib.rs
index fab576a041..2a4190b7e2 100644
--- a/support/texlab/crates/parser/src/lib.rs
+++ b/support/texlab/crates/parser/src/lib.rs
@@ -2,5 +2,9 @@ mod bibtex;
mod build_log;
mod config;
mod latex;
+mod latexmkrc;
-pub use self::{bibtex::parse_bibtex, build_log::parse_build_log, config::*, latex::parse_latex};
+pub use self::{
+ bibtex::parse_bibtex, build_log::parse_build_log, config::*, latex::parse_latex,
+ latexmkrc::parse_latexmkrc,
+};
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@comment.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@comment.txt.snap
deleted file mode 100644
index 7c665e628a..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@comment.txt.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/comment.txt
----
-ROOT@0..82
- JUNK@0..16 "Some junk here\n\n"
- TYPE@16..24 "@comment"
- JUNK@24..82 "{foo,\n author = {F ..."
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_809.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_809.txt.snap
deleted file mode 100644
index 84c9f86ec0..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_809.txt.snap
+++ /dev/null
@@ -1,32 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/issue_809.txt
----
-ROOT@0..50
- ENTRY@0..50
- TYPE@0..8 "@article"
- L_DELIM@8..9 "{"
- NAME@9..18 "issue_809"
- COMMA@18..19 ","
- WHITESPACE@19..22 "\n "
- FIELD@22..48
- NAME@22..27 "title"
- WHITESPACE@27..28 " "
- EQ@28..29 "="
- WHITESPACE@29..30 " "
- CURLY_GROUP@30..47
- L_CURLY@30..31 "{"
- WORD@31..34 "foo"
- WHITESPACE@34..35 " "
- WORD@35..36 "("
- QUOTE@36..37 "\""
- WHITESPACE@37..38 " "
- WORD@38..42 "bar)"
- WHITESPACE@42..43 " "
- WORD@43..46 "baz"
- R_CURLY@46..47 "}"
- COMMA@47..48 ","
- WHITESPACE@48..49 "\n"
- R_DELIM@49..50 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_945.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_945.txt.snap
deleted file mode 100644
index 11a2955b1c..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_945.txt.snap
+++ /dev/null
@@ -1,27 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/issue_945.txt
----
-ROOT@0..33
- ENTRY@0..33
- TYPE@0..8 "@article"
- L_DELIM@8..9 "{"
- NAME@9..13 "test"
- COMMA@13..14 ","
- WHITESPACE@14..15 " "
- FIELD@15..32
- NAME@15..21 "author"
- WHITESPACE@21..22 " "
- EQ@22..23 "="
- WHITESPACE@23..24 " "
- CURLY_GROUP@24..32
- L_CURLY@24..25 "{"
- ACCENT@25..31
- ACCENT_NAME@25..27 "\\\""
- L_CURLY@27..28 "{"
- COMMAND_NAME@28..30 "\\i"
- R_CURLY@30..31 "}"
- R_CURLY@31..32 "}"
- R_DELIM@32..33 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@preamble.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@preamble.txt.snap
deleted file mode 100644
index b0d043b1a7..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@preamble.txt.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/preamble.txt
----
-ROOT@0..25
- PREAMBLE@0..25
- TYPE@0..9 "@preamble"
- L_DELIM@9..10 "{"
- QUOTE_GROUP@10..24
- QUOTE@10..11 "\""
- WORD@11..16 "Hello"
- WHITESPACE@16..17 " "
- WORD@17..23 "World!"
- QUOTE@23..24 "\""
- R_DELIM@24..25 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aho_2006.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aho_2006.txt.snap
deleted file mode 100644
index 36db1ebb4c..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aho_2006.txt.snap
+++ /dev/null
@@ -1,132 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/aho_2006.txt
----
-ROOT@0..314
- ENTRY@0..314
- TYPE@0..5 "@book"
- L_DELIM@5..6 "{"
- NAME@6..21 "10.5555/1177220"
- COMMA@21..22 ","
- WHITESPACE@22..27 "\n "
- FIELD@27..111
- NAME@27..33 "author"
- WHITESPACE@33..34 " "
- EQ@34..35 "="
- WHITESPACE@35..36 " "
- CURLY_GROUP@36..110
- L_CURLY@36..37 "{"
- WORD@37..40 "Aho"
- COMMA@40..41 ","
- WHITESPACE@41..42 " "
- WORD@42..48 "Alfred"
- WHITESPACE@48..49 " "
- WORD@49..51 "V."
- WHITESPACE@51..52 " "
- WORD@52..55 "and"
- WHITESPACE@55..56 " "
- WORD@56..59 "Lam"
- COMMA@59..60 ","
- WHITESPACE@60..61 " "
- WORD@61..67 "Monica"
- WHITESPACE@67..68 " "
- WORD@68..70 "S."
- WHITESPACE@70..71 " "
- WORD@71..74 "and"
- WHITESPACE@74..75 " "
- WORD@75..80 "Sethi"
- COMMA@80..81 ","
- WHITESPACE@81..82 " "
- WORD@82..86 "Ravi"
- WHITESPACE@86..87 " "
- WORD@87..90 "and"
- WHITESPACE@90..91 " "
- WORD@91..97 "Ullman"
- COMMA@97..98 ","
- WHITESPACE@98..99 " "
- WORD@99..106 "Jeffrey"
- WHITESPACE@106..107 " "
- WORD@107..109 "D."
- R_CURLY@109..110 "}"
- COMMA@110..111 ","
- WHITESPACE@111..116 "\n "
- FIELD@116..185
- NAME@116..121 "title"
- WHITESPACE@121..122 " "
- EQ@122..123 "="
- WHITESPACE@123..124 " "
- CURLY_GROUP@124..184
- L_CURLY@124..125 "{"
- WORD@125..135 "Compilers:"
- WHITESPACE@135..136 " "
- WORD@136..146 "Principles"
- COMMA@146..147 ","
- WHITESPACE@147..148 " "
- WORD@148..158 "Techniques"
- COMMA@158..159 ","
- WHITESPACE@159..160 " "
- WORD@160..163 "and"
- WHITESPACE@163..164 " "
- WORD@164..169 "Tools"
- WHITESPACE@169..170 " "
- WORD@170..174 "(2nd"
- WHITESPACE@174..175 " "
- WORD@175..183 "Edition)"
- R_CURLY@183..184 "}"
- COMMA@184..185 ","
- WHITESPACE@185..190 "\n "
- FIELD@190..204
- NAME@190..194 "year"
- WHITESPACE@194..195 " "
- EQ@195..196 "="
- WHITESPACE@196..197 " "
- CURLY_GROUP@197..203
- L_CURLY@197..198 "{"
- INTEGER@198..202 "2006"
- R_CURLY@202..203 "}"
- COMMA@203..204 ","
- WHITESPACE@204..209 "\n "
- FIELD@209..229
- NAME@209..213 "isbn"
- WHITESPACE@213..214 " "
- EQ@214..215 "="
- WHITESPACE@215..216 " "
- CURLY_GROUP@216..228
- L_CURLY@216..217 "{"
- INTEGER@217..227 "0321486811"
- R_CURLY@227..228 "}"
- COMMA@228..229 ","
- WHITESPACE@229..234 "\n "
- FIELD@234..292
- NAME@234..243 "publisher"
- WHITESPACE@243..244 " "
- EQ@244..245 "="
- WHITESPACE@245..246 " "
- CURLY_GROUP@246..291
- L_CURLY@246..247 "{"
- WORD@247..261 "Addison-Wesley"
- WHITESPACE@261..262 " "
- WORD@262..269 "Longman"
- WHITESPACE@269..270 " "
- WORD@270..280 "Publishing"
- WHITESPACE@280..281 " "
- WORD@281..284 "Co."
- COMMA@284..285 ","
- WHITESPACE@285..286 " "
- WORD@286..290 "Inc."
- R_CURLY@290..291 "}"
- COMMA@291..292 ","
- WHITESPACE@292..297 "\n "
- FIELD@297..313
- NAME@297..304 "address"
- WHITESPACE@304..305 " "
- EQ@305..306 "="
- WHITESPACE@306..307 " "
- CURLY_GROUP@307..312
- L_CURLY@307..308 "{"
- WORD@308..311 "USA"
- R_CURLY@311..312 "}"
- WHITESPACE@312..313 "\n"
- R_DELIM@313..314 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aksin_2006.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aksin_2006.txt.snap
deleted file mode 100644
index 6b273d63a2..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aksin_2006.txt.snap
+++ /dev/null
@@ -1,258 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/aksin_2006.txt
----
-ROOT@0..679
- STRING@0..40
- TYPE@0..7 "@string"
- L_DELIM@7..8 "{"
- NAME@8..13 "jomch"
- WHITESPACE@13..16 " "
- EQ@16..17 "="
- WHITESPACE@17..18 " "
- CURLY_GROUP@18..39
- L_CURLY@18..19 "{"
- WORD@19..21 "J."
- NBSP@21..22 "~"
- WORD@22..32 "Organomet."
- WHITESPACE@32..33 " "
- WORD@33..38 "Chem."
- R_CURLY@38..39 "}"
- R_DELIM@39..40 "}"
- JUNK@40..42 "\n\n"
- ENTRY@42..679
- TYPE@42..50 "@article"
- L_DELIM@50..51 "{"
- NAME@51..56 "aksin"
- COMMA@56..57 ","
- WHITESPACE@57..62 "\n "
- FIELD@62..284
- NAME@62..68 "author"
- WHITESPACE@68..75 " "
- EQ@75..76 "="
- WHITESPACE@76..77 " "
- CURLY_GROUP@77..283
- L_CURLY@77..78 "{"
- WORD@78..81 "Aks"
- CURLY_GROUP@81..85
- L_CURLY@81..82 "{"
- COMMAND@82..84
- COMMAND_NAME@82..84 "\\i"
- R_CURLY@84..85 "}"
- WORD@85..86 "n"
- COMMA@86..87 ","
- WHITESPACE@87..88 " "
- CURLY_GROUP@88..93
- L_CURLY@88..89 "{"
- ACCENT@89..92
- ACCENT_NAME@89..91 "\\\""
- WORD@91..92 "O"
- R_CURLY@92..93 "}"
- WORD@93..96 "zge"
- WHITESPACE@96..97 " "
- WORD@97..100 "and"
- WHITESPACE@100..101 " "
- WORD@101..102 "T"
- CURLY_GROUP@102..107
- L_CURLY@102..103 "{"
- ACCENT@103..106
- ACCENT_NAME@103..105 "\\\""
- WORD@105..106 "u"
- R_CURLY@106..107 "}"
- WORD@107..112 "rkmen"
- COMMA@112..113 ","
- WHITESPACE@113..114 " "
- WORD@114..120 "Hayati"
- WHITESPACE@120..121 " "
- WORD@121..124 "and"
- WHITESPACE@124..125 " "
- WORD@125..130 "Artok"
- COMMA@130..131 ","
- WHITESPACE@131..132 " "
- WORD@132..138 "Levent"
- WHITESPACE@138..159 "\n "
- WORD@159..162 "and"
- WHITESPACE@162..163 " "
- CURLY_GROUP@163..170
- L_CURLY@163..164 "{"
- ACCENT@164..169
- ACCENT_NAME@164..166 "\\c"
- L_CURLY@166..167 "{"
- WORD@167..168 "C"
- R_CURLY@168..169 "}"
- R_CURLY@169..170 "}"
- WORD@170..178 "etinkaya"
- COMMA@178..179 ","
- WHITESPACE@179..180 " "
- WORD@180..185 "Bekir"
- WHITESPACE@185..186 " "
- WORD@186..189 "and"
- WHITESPACE@189..190 " "
- WORD@190..192 "Ni"
- COMMA@192..193 ","
- WHITESPACE@193..194 " "
- WORD@194..202 "Chaoying"
- WHITESPACE@202..203 " "
- WORD@203..206 "and"
- WHITESPACE@206..227 "\n "
- WORD@227..228 "B"
- CURLY_GROUP@228..233
- L_CURLY@228..229 "{"
- ACCENT@229..232
- ACCENT_NAME@229..231 "\\\""
- WORD@231..232 "u"
- R_CURLY@232..233 "}"
- WORD@233..234 "y"
- CURLY_GROUP@234..239
- L_CURLY@234..235 "{"
- ACCENT@235..238
- ACCENT_NAME@235..237 "\\\""
- WORD@237..238 "u"
- R_CURLY@238..239 "}"
- WORD@239..241 "kg"
- CURLY_GROUP@241..246
- L_CURLY@241..242 "{"
- ACCENT@242..245
- ACCENT_NAME@242..244 "\\\""
- WORD@244..245 "u"
- R_CURLY@245..246 "}"
- WORD@246..248 "ng"
- CURLY_GROUP@248..253
- L_CURLY@248..249 "{"
- ACCENT@249..252
- ACCENT_NAME@249..251 "\\\""
- WORD@251..252 "o"
- R_CURLY@252..253 "}"
- WORD@253..254 "r"
- COMMA@254..255 ","
- WHITESPACE@255..256 " "
- WORD@256..261 "Orhan"
- WHITESPACE@261..262 " "
- WORD@262..265 "and"
- WHITESPACE@265..266 " "
- CURLY_GROUP@266..271
- L_CURLY@266..267 "{"
- ACCENT@267..270
- ACCENT_NAME@267..269 "\\\""
- WORD@269..270 "O"
- R_CURLY@270..271 "}"
- WORD@271..275 "zkal"
- COMMA@275..276 ","
- WHITESPACE@276..277 " "
- WORD@277..282 "Erhan"
- R_CURLY@282..283 "}"
- COMMA@283..284 ","
- WHITESPACE@284..289 "\n "
- FIELD@289..471
- NAME@289..294 "title"
- WHITESPACE@294..302 " "
- EQ@302..303 "="
- WHITESPACE@303..304 " "
- CURLY_GROUP@304..470
- L_CURLY@304..305 "{"
- WORD@305..311 "Effect"
- WHITESPACE@311..312 " "
- WORD@312..314 "of"
- WHITESPACE@314..315 " "
- WORD@315..329 "immobilization"
- WHITESPACE@329..330 " "
- WORD@330..332 "on"
- WHITESPACE@332..333 " "
- WORD@333..342 "catalytic"
- WHITESPACE@342..343 " "
- WORD@343..358 "characteristics"
- WHITESPACE@358..359 " "
- WORD@359..361 "of"
- WHITESPACE@361..382 "\n "
- WORD@382..391 "saturated"
- WHITESPACE@391..392 " "
- CURLY_GROUP@392..398
- L_CURLY@392..393 "{"
- WORD@393..397 "Pd-N"
- R_CURLY@397..398 "}"
- WORD@398..411 "-heterocyclic"
- WHITESPACE@411..412 " "
- WORD@412..420 "carbenes"
- WHITESPACE@420..421 " "
- WORD@421..423 "in"
- WHITESPACE@423..424 " "
- CURLY_GROUP@424..439
- L_CURLY@424..425 "{"
- WORD@425..438 "Mizoroki-Heck"
- R_CURLY@438..439 "}"
- WHITESPACE@439..460 "\n "
- WORD@460..469 "reactions"
- R_CURLY@469..470 "}"
- COMMA@470..471 ","
- WHITESPACE@471..476 "\n "
- FIELD@476..497
- NAME@476..488 "journaltitle"
- WHITESPACE@488..489 " "
- EQ@489..490 "="
- WHITESPACE@490..491 " "
- LITERAL@491..496
- NAME@491..496 "jomch"
- COMMA@496..497 ","
- WHITESPACE@497..502 "\n "
- FIELD@502..522
- NAME@502..506 "date"
- WHITESPACE@506..515 " "
- EQ@515..516 "="
- WHITESPACE@516..517 " "
- LITERAL@517..521
- INTEGER@517..521 "2006"
- COMMA@521..522 ","
- WHITESPACE@522..527 "\n "
- FIELD@527..546
- NAME@527..533 "volume"
- WHITESPACE@533..540 " "
- EQ@540..541 "="
- WHITESPACE@541..542 " "
- LITERAL@542..545
- INTEGER@542..545 "691"
- COMMA@545..546 ","
- WHITESPACE@546..551 "\n "
- FIELD@551..569
- NAME@551..557 "number"
- WHITESPACE@557..564 " "
- EQ@564..565 "="
- WHITESPACE@565..566 " "
- LITERAL@566..568
- INTEGER@566..568 "13"
- COMMA@568..569 ","
- WHITESPACE@569..574 "\n "
- FIELD@574..601
- NAME@574..579 "pages"
- WHITESPACE@579..587 " "
- EQ@587..588 "="
- WHITESPACE@588..589 " "
- CURLY_GROUP@589..600
- L_CURLY@589..590 "{"
- WORD@590..599 "3027-3036"
- R_CURLY@599..600 "}"
- COMMA@600..601 ","
- WHITESPACE@601..606 "\n "
- FIELD@606..677
- NAME@606..616 "indextitle"
- WHITESPACE@616..619 " "
- EQ@619..620 "="
- WHITESPACE@620..621 " "
- CURLY_GROUP@621..676
- L_CURLY@621..622 "{"
- WORD@622..628 "Effect"
- WHITESPACE@628..629 " "
- WORD@629..631 "of"
- WHITESPACE@631..632 " "
- WORD@632..646 "immobilization"
- WHITESPACE@646..647 " "
- WORD@647..649 "on"
- WHITESPACE@649..650 " "
- WORD@650..659 "catalytic"
- WHITESPACE@659..660 " "
- WORD@660..675 "characteristics"
- R_CURLY@675..676 "}"
- COMMA@676..677 ","
- WHITESPACE@677..678 "\n"
- R_DELIM@678..679 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__almendro_1998.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__almendro_1998.txt.snap
deleted file mode 100644
index 280dd5a4cf..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__almendro_1998.txt.snap
+++ /dev/null
@@ -1,246 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/almendro_1998.txt
----
-ROOT@0..706
- ENTRY@0..706
- TYPE@0..7 "@patent"
- L_DELIM@7..8 "{"
- NAME@8..16 "almendro"
- COMMA@16..17 ","
- WHITESPACE@17..22 "\n "
- FIELD@22..150
- NAME@22..28 "author"
- WHITESPACE@28..35 " "
- EQ@35..36 "="
- WHITESPACE@36..37 " "
- CURLY_GROUP@37..149
- L_CURLY@37..38 "{"
- WORD@38..46 "Almendro"
- COMMA@46..47 ","
- WHITESPACE@47..48 " "
- WORD@48..51 "Jos"
- CURLY_GROUP@51..56
- L_CURLY@51..52 "{"
- ACCENT@52..55
- ACCENT_NAME@52..54 "\\'"
- WORD@54..55 "e"
- R_CURLY@55..56 "}"
- WHITESPACE@56..57 " "
- WORD@57..59 "L."
- WHITESPACE@59..60 " "
- WORD@60..63 "and"
- WHITESPACE@63..64 " "
- WORD@64..68 "Mart"
- CURLY_GROUP@68..73
- L_CURLY@68..69 "{"
- ACCENT@69..72
- ACCENT_NAME@69..71 "\\'"
- WORD@71..72 "i"
- R_CURLY@72..73 "}"
- WORD@73..74 "n"
- COMMA@74..75 ","
- WHITESPACE@75..76 " "
- WORD@76..83 "Jacinto"
- WHITESPACE@83..84 " "
- WORD@84..87 "and"
- WHITESPACE@87..88 " "
- WORD@88..89 "S"
- CURLY_GROUP@89..94
- L_CURLY@89..90 "{"
- ACCENT@90..93
- ACCENT_NAME@90..92 "\\'"
- WORD@92..93 "a"
- R_CURLY@93..94 "}"
- WORD@94..99 "nchez"
- COMMA@99..100 ","
- WHITESPACE@100..121 "\n "
- WORD@121..128 "Alberto"
- WHITESPACE@128..129 " "
- WORD@129..132 "and"
- WHITESPACE@132..133 " "
- WORD@133..138 "Nozal"
- COMMA@138..139 ","
- WHITESPACE@139..140 " "
- WORD@140..148 "Fernando"
- R_CURLY@148..149 "}"
- COMMA@149..150 ","
- WHITESPACE@150..155 "\n "
- FIELD@155..203
- NAME@155..160 "title"
- WHITESPACE@160..168 " "
- EQ@168..169 "="
- WHITESPACE@169..170 " "
- CURLY_GROUP@170..202
- L_CURLY@170..171 "{"
- WORD@171..190 "Elektromagnetisches"
- WHITESPACE@190..191 " "
- WORD@191..201 "Signalhorn"
- R_CURLY@201..202 "}"
- COMMA@202..203 ","
- WHITESPACE@203..208 "\n "
- FIELD@208..238
- NAME@208..214 "number"
- WHITESPACE@214..221 " "
- EQ@221..222 "="
- WHITESPACE@222..223 " "
- CURLY_GROUP@223..237
- L_CURLY@223..224 "{"
- WORD@224..236 "EU-29702195U"
- R_CURLY@236..237 "}"
- COMMA@237..238 ","
- WHITESPACE@238..243 "\n "
- FIELD@243..263
- NAME@243..247 "date"
- WHITESPACE@247..256 " "
- EQ@256..257 "="
- WHITESPACE@257..258 " "
- LITERAL@258..262
- INTEGER@258..262 "1998"
- COMMA@262..263 ","
- WHITESPACE@263..268 "\n "
- FIELD@268..323
- NAME@268..276 "location"
- WHITESPACE@276..281 " "
- EQ@281..282 "="
- WHITESPACE@282..283 " "
- CURLY_GROUP@283..322
- L_CURLY@283..284 "{"
- WORD@284..293 "countryfr"
- WHITESPACE@293..294 " "
- WORD@294..297 "and"
- WHITESPACE@297..298 " "
- WORD@298..307 "countryuk"
- WHITESPACE@307..308 " "
- WORD@308..311 "and"
- WHITESPACE@311..312 " "
- WORD@312..321 "countryde"
- R_CURLY@321..322 "}"
- COMMA@322..323 ","
- WHITESPACE@323..328 "\n "
- FIELD@328..352
- NAME@328..334 "langid"
- WHITESPACE@334..341 " "
- EQ@341..342 "="
- WHITESPACE@342..343 " "
- CURLY_GROUP@343..351
- L_CURLY@343..344 "{"
- WORD@344..350 "german"
- R_CURLY@350..351 "}"
- COMMA@351..352 ","
- WHITESPACE@352..357 "\n "
- FIELD@357..704
- NAME@357..367 "annotation"
- WHITESPACE@367..370 " "
- EQ@370..371 "="
- WHITESPACE@371..372 " "
- CURLY_GROUP@372..703
- L_CURLY@372..373 "{"
- WORD@373..377 "This"
- WHITESPACE@377..378 " "
- WORD@378..380 "is"
- WHITESPACE@380..381 " "
- WORD@381..382 "a"
- WHITESPACE@382..383 " "
- COMMAND@383..390
- COMMAND_NAME@383..390 "\\texttt"
- CURLY_GROUP@390..398
- L_CURLY@390..391 "{"
- WORD@391..397 "patent"
- R_CURLY@397..398 "}"
- WHITESPACE@398..399 " "
- WORD@399..404 "entry"
- WHITESPACE@404..405 " "
- WORD@405..409 "with"
- WHITESPACE@409..410 " "
- WORD@410..411 "a"
- WHITESPACE@411..412 " "
- COMMAND@412..419
- COMMAND_NAME@412..419 "\\texttt"
- CURLY_GROUP@419..429
- L_CURLY@419..420 "{"
- WORD@420..428 "location"
- R_CURLY@428..429 "}"
- WHITESPACE@429..450 "\n "
- WORD@450..456 "field."
- WHITESPACE@456..457 " "
- WORD@457..460 "The"
- WHITESPACE@460..461 " "
- WORD@461..467 "number"
- WHITESPACE@467..468 " "
- WORD@468..470 "is"
- WHITESPACE@470..471 " "
- WORD@471..476 "given"
- WHITESPACE@476..477 " "
- WORD@477..479 "in"
- WHITESPACE@479..480 " "
- WORD@480..483 "the"
- WHITESPACE@483..484 " "
- COMMAND@484..491
- COMMAND_NAME@484..491 "\\texttt"
- CURLY_GROUP@491..499
- L_CURLY@491..492 "{"
- WORD@492..498 "number"
- R_CURLY@498..499 "}"
- WHITESPACE@499..500 " "
- WORD@500..506 "field."
- WHITESPACE@506..507 " "
- WORD@507..511 "Note"
- WHITESPACE@511..532 "\n "
- WORD@532..535 "the"
- WHITESPACE@535..536 " "
- WORD@536..542 "format"
- WHITESPACE@542..543 " "
- WORD@543..545 "of"
- WHITESPACE@545..546 " "
- WORD@546..549 "the"
- WHITESPACE@549..550 " "
- COMMAND@550..557
- COMMAND_NAME@550..557 "\\texttt"
- CURLY_GROUP@557..567
- L_CURLY@557..558 "{"
- WORD@558..566 "location"
- R_CURLY@566..567 "}"
- WHITESPACE@567..568 " "
- WORD@568..573 "field"
- WHITESPACE@573..574 " "
- WORD@574..576 "in"
- WHITESPACE@576..577 " "
- WORD@577..580 "the"
- WHITESPACE@580..581 " "
- WORD@581..589 "database"
- WHITESPACE@589..610 "\n "
- WORD@610..615 "file."
- WHITESPACE@615..616 " "
- WORD@616..623 "Compare"
- WHITESPACE@623..624 " "
- COMMAND@624..631
- COMMAND_NAME@624..631 "\\texttt"
- CURLY_GROUP@631..643
- L_CURLY@631..632 "{"
- WORD@632..642 "laufenberg"
- R_CURLY@642..643 "}"
- COMMA@643..644 ","
- WHITESPACE@644..645 " "
- COMMAND@645..652
- COMMAND_NAME@645..652 "\\texttt"
- CURLY_GROUP@652..660
- L_CURLY@652..653 "{"
- WORD@653..659 "sorace"
- R_CURLY@659..660 "}"
- COMMA@660..661 ","
- WHITESPACE@661..662 " "
- WORD@662..665 "and"
- WHITESPACE@665..686 "\n "
- COMMAND@686..693
- COMMAND_NAME@686..693 "\\texttt"
- CURLY_GROUP@693..702
- L_CURLY@693..694 "{"
- WORD@694..701 "kowalik"
- R_CURLY@701..702 "}"
- R_CURLY@702..703 "}"
- COMMA@703..704 ","
- WHITESPACE@704..705 "\n"
- R_DELIM@705..706 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__averroes_1998.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__averroes_1998.txt.snap
deleted file mode 100644
index 8fb5a718d0..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__averroes_1998.txt.snap
+++ /dev/null
@@ -1,351 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/averroes_1998.txt
----
-ROOT@0..1008
- ENTRY@0..1008
- TYPE@0..5 "@book"
- L_DELIM@5..6 "{"
- NAME@6..20 "averroes/bland"
- COMMA@20..21 ","
- WHITESPACE@21..26 "\n "
- FIELD@26..52
- NAME@26..32 "author"
- WHITESPACE@32..39 " "
- EQ@39..40 "="
- WHITESPACE@40..41 " "
- CURLY_GROUP@41..51
- L_CURLY@41..42 "{"
- WORD@42..50 "Averroes"
- R_CURLY@50..51 "}"
- COMMA@51..52 ","
- WHITESPACE@52..57 "\n "
- FIELD@57..220
- NAME@57..62 "title"
- WHITESPACE@62..70 " "
- EQ@70..71 "="
- WHITESPACE@71..72 " "
- CURLY_GROUP@72..219
- L_CURLY@72..73 "{"
- WORD@73..76 "The"
- WHITESPACE@76..77 " "
- WORD@77..84 "Epistle"
- WHITESPACE@84..85 " "
- WORD@85..87 "on"
- WHITESPACE@87..88 " "
- WORD@88..91 "the"
- WHITESPACE@91..92 " "
- WORD@92..103 "Possibility"
- WHITESPACE@103..104 " "
- WORD@104..106 "of"
- WHITESPACE@106..107 " "
- WORD@107..118 "Conjunction"
- WHITESPACE@118..119 " "
- WORD@119..123 "with"
- WHITESPACE@123..124 " "
- WORD@124..127 "the"
- WHITESPACE@127..128 " "
- WORD@128..134 "Active"
- WHITESPACE@134..155 "\n "
- WORD@155..164 "Intellect"
- WHITESPACE@164..165 " "
- WORD@165..167 "by"
- WHITESPACE@167..168 " "
- CURLY_GROUP@168..179
- L_CURLY@168..169 "{"
- WORD@169..172 "Ibn"
- WHITESPACE@172..173 " "
- WORD@173..178 "Rushd"
- R_CURLY@178..179 "}"
- WHITESPACE@179..180 " "
- WORD@180..184 "with"
- WHITESPACE@184..185 " "
- WORD@185..188 "the"
- WHITESPACE@188..189 " "
- WORD@189..199 "Commentary"
- WHITESPACE@199..200 " "
- WORD@200..202 "of"
- WHITESPACE@202..203 " "
- CURLY_GROUP@203..218
- L_CURLY@203..204 "{"
- WORD@204..209 "Moses"
- WHITESPACE@209..210 " "
- WORD@210..217 "Narboni"
- R_CURLY@217..218 "}"
- R_CURLY@218..219 "}"
- COMMA@219..220 ","
- WHITESPACE@220..225 "\n "
- FIELD@225..245
- NAME@225..229 "date"
- WHITESPACE@229..238 " "
- EQ@238..239 "="
- WHITESPACE@239..240 " "
- LITERAL@240..244
- INTEGER@240..244 "1982"
- COMMA@244..245 ","
- WHITESPACE@245..250 "\n "
- FIELD@250..284
- NAME@250..256 "editor"
- WHITESPACE@256..263 " "
- EQ@263..264 "="
- WHITESPACE@264..265 " "
- CURLY_GROUP@265..283
- L_CURLY@265..266 "{"
- WORD@266..271 "Bland"
- COMMA@271..272 ","
- WHITESPACE@272..273 " "
- WORD@273..279 "Kalman"
- WHITESPACE@279..280 " "
- WORD@280..282 "P."
- R_CURLY@282..283 "}"
- COMMA@283..284 ","
- WHITESPACE@284..289 "\n "
- FIELD@289..323
- NAME@289..299 "translator"
- WHITESPACE@299..302 " "
- EQ@302..303 "="
- WHITESPACE@303..304 " "
- CURLY_GROUP@304..322
- L_CURLY@304..305 "{"
- WORD@305..310 "Bland"
- COMMA@310..311 ","
- WHITESPACE@311..312 " "
- WORD@312..318 "Kalman"
- WHITESPACE@318..319 " "
- WORD@319..321 "P."
- R_CURLY@321..322 "}"
- COMMA@322..323 ","
- WHITESPACE@323..328 "\n "
- FIELD@328..407
- NAME@328..334 "series"
- WHITESPACE@334..341 " "
- EQ@341..342 "="
- WHITESPACE@342..343 " "
- CURLY_GROUP@343..406
- L_CURLY@343..344 "{"
- WORD@344..353 "Moreshet:"
- WHITESPACE@353..354 " "
- WORD@354..361 "Studies"
- WHITESPACE@361..362 " "
- WORD@362..364 "in"
- WHITESPACE@364..365 " "
- CURLY_GROUP@365..373
- L_CURLY@365..366 "{"
- WORD@366..372 "Jewish"
- R_CURLY@372..373 "}"
- WHITESPACE@373..374 " "
- WORD@374..381 "History"
- COMMA@381..382 ","
- WHITESPACE@382..383 " "
- WORD@383..393 "Literature"
- WHITESPACE@393..394 " "
- WORD@394..397 "and"
- WHITESPACE@397..398 " "
- WORD@398..405 "Thought"
- R_CURLY@405..406 "}"
- COMMA@406..407 ","
- WHITESPACE@407..412 "\n "
- FIELD@412..429
- NAME@412..418 "number"
- WHITESPACE@418..425 " "
- EQ@425..426 "="
- WHITESPACE@426..427 " "
- LITERAL@427..428
- INTEGER@427..428 "7"
- COMMA@428..429 ","
- WHITESPACE@429..434 "\n "
- FIELD@434..490
- NAME@434..443 "publisher"
- WHITESPACE@443..447 " "
- EQ@447..448 "="
- WHITESPACE@448..449 " "
- CURLY_GROUP@449..489
- L_CURLY@449..450 "{"
- WORD@450..456 "Jewish"
- WHITESPACE@456..457 " "
- WORD@457..468 "Theological"
- WHITESPACE@468..469 " "
- WORD@469..477 "Seminary"
- WHITESPACE@477..478 " "
- WORD@478..480 "of"
- WHITESPACE@480..481 " "
- WORD@481..488 "America"
- R_CURLY@488..489 "}"
- COMMA@489..490 ","
- WHITESPACE@490..495 "\n "
- FIELD@495..521
- NAME@495..503 "location"
- WHITESPACE@503..508 " "
- EQ@508..509 "="
- WHITESPACE@509..510 " "
- CURLY_GROUP@510..520
- L_CURLY@510..511 "{"
- WORD@511..514 "New"
- WHITESPACE@514..515 " "
- WORD@515..519 "York"
- R_CURLY@519..520 "}"
- COMMA@520..521 ","
- WHITESPACE@521..526 "\n "
- FIELD@526..551
- NAME@526..534 "keywords"
- WHITESPACE@534..539 " "
- EQ@539..540 "="
- WHITESPACE@540..541 " "
- CURLY_GROUP@541..550
- L_CURLY@541..542 "{"
- WORD@542..549 "primary"
- R_CURLY@549..550 "}"
- COMMA@550..551 ","
- WHITESPACE@551..556 "\n "
- FIELD@556..581
- NAME@556..562 "langid"
- WHITESPACE@562..569 " "
- EQ@569..570 "="
- WHITESPACE@570..571 " "
- CURLY_GROUP@571..580
- L_CURLY@571..572 "{"
- WORD@572..579 "english"
- R_CURLY@579..580 "}"
- COMMA@580..581 ","
- WHITESPACE@581..586 "\n "
- FIELD@586..620
- NAME@586..596 "langidopts"
- WHITESPACE@596..599 " "
- EQ@599..600 "="
- WHITESPACE@600..601 " "
- CURLY_GROUP@601..619
- L_CURLY@601..602 "{"
- WORD@602..618 "variant=american"
- R_CURLY@618..619 "}"
- COMMA@619..620 ","
- WHITESPACE@620..625 "\n "
- FIELD@625..689
- NAME@625..635 "indextitle"
- WHITESPACE@635..638 " "
- EQ@638..639 "="
- WHITESPACE@639..640 " "
- CURLY_GROUP@640..688
- L_CURLY@640..641 "{"
- WORD@641..648 "Epistle"
- WHITESPACE@648..649 " "
- WORD@649..651 "on"
- WHITESPACE@651..652 " "
- WORD@652..655 "the"
- WHITESPACE@655..656 " "
- WORD@656..667 "Possibility"
- WHITESPACE@667..668 " "
- WORD@668..670 "of"
- WHITESPACE@670..671 " "
- WORD@671..682 "Conjunction"
- COMMA@682..683 ","
- WHITESPACE@683..684 " "
- WORD@684..687 "The"
- R_CURLY@687..688 "}"
- COMMA@688..689 ","
- WHITESPACE@689..694 "\n "
- FIELD@694..738
- NAME@694..704 "shorttitle"
- WHITESPACE@704..707 " "
- EQ@707..708 "="
- WHITESPACE@708..709 " "
- CURLY_GROUP@709..737
- L_CURLY@709..710 "{"
- WORD@710..721 "Possibility"
- WHITESPACE@721..722 " "
- WORD@722..724 "of"
- WHITESPACE@724..725 " "
- WORD@725..736 "Conjunction"
- R_CURLY@736..737 "}"
- COMMA@737..738 ","
- WHITESPACE@738..743 "\n "
- FIELD@743..1006
- NAME@743..753 "annotation"
- WHITESPACE@753..756 " "
- EQ@756..757 "="
- WHITESPACE@757..758 " "
- CURLY_GROUP@758..1005
- L_CURLY@758..759 "{"
- WORD@759..760 "A"
- WHITESPACE@760..761 " "
- COMMAND@761..768
- COMMAND_NAME@761..768 "\\texttt"
- CURLY_GROUP@768..774
- L_CURLY@768..769 "{"
- WORD@769..773 "book"
- R_CURLY@773..774 "}"
- WHITESPACE@774..775 " "
- WORD@775..780 "entry"
- WHITESPACE@780..781 " "
- WORD@781..785 "with"
- WHITESPACE@785..786 " "
- WORD@786..787 "a"
- WHITESPACE@787..788 " "
- COMMAND@788..795
- COMMAND_NAME@788..795 "\\texttt"
- CURLY_GROUP@795..803
- L_CURLY@795..796 "{"
- WORD@796..802 "series"
- R_CURLY@802..803 "}"
- WHITESPACE@803..804 " "
- WORD@804..807 "and"
- WHITESPACE@807..808 " "
- WORD@808..809 "a"
- WHITESPACE@809..830 "\n "
- COMMAND@830..837
- COMMAND_NAME@830..837 "\\texttt"
- CURLY_GROUP@837..845
- L_CURLY@837..838 "{"
- WORD@838..844 "number"
- R_CURLY@844..845 "}"
- WORD@845..846 "."
- WHITESPACE@846..847 " "
- WORD@847..851 "Note"
- WHITESPACE@851..852 " "
- WORD@852..855 "the"
- WHITESPACE@855..856 " "
- WORD@856..869 "concatenation"
- WHITESPACE@869..870 " "
- WORD@870..872 "of"
- WHITESPACE@872..873 " "
- WORD@873..876 "the"
- WHITESPACE@876..877 " "
- COMMAND@877..884
- COMMAND_NAME@877..884 "\\texttt"
- CURLY_GROUP@884..892
- L_CURLY@884..885 "{"
- WORD@885..891 "editor"
- R_CURLY@891..892 "}"
- WHITESPACE@892..913 "\n "
- WORD@913..916 "and"
- WHITESPACE@916..917 " "
- COMMAND@917..924
- COMMAND_NAME@917..924 "\\texttt"
- CURLY_GROUP@924..936
- L_CURLY@924..925 "{"
- WORD@925..935 "translator"
- R_CURLY@935..936 "}"
- WHITESPACE@936..937 " "
- WORD@937..943 "fields"
- WHITESPACE@943..944 " "
- WORD@944..946 "as"
- WHITESPACE@946..947 " "
- WORD@947..951 "well"
- WHITESPACE@951..952 " "
- WORD@952..954 "as"
- WHITESPACE@954..955 " "
- WORD@955..958 "the"
- WHITESPACE@958..979 "\n "
- COMMAND@979..986
- COMMAND_NAME@979..986 "\\texttt"
- CURLY_GROUP@986..998
- L_CURLY@986..987 "{"
- WORD@987..997 "indextitle"
- R_CURLY@997..998 "}"
- WHITESPACE@998..999 " "
- WORD@999..1004 "field"
- R_CURLY@1004..1005 "}"
- COMMA@1005..1006 ","
- WHITESPACE@1006..1007 "\n"
- R_DELIM@1007..1008 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__betram_1996.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__betram_1996.txt.snap
deleted file mode 100644
index 417041cde4..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__betram_1996.txt.snap
+++ /dev/null
@@ -1,208 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/betram_1996.txt
----
-ROOT@0..556
- STRING@0..40
- TYPE@0..7 "@string"
- L_DELIM@7..8 "{"
- NAME@8..12 "jams"
- WHITESPACE@12..16 " "
- EQ@16..17 "="
- WHITESPACE@17..18 " "
- CURLY_GROUP@18..39
- L_CURLY@18..19 "{"
- WORD@19..21 "J."
- NBSP@21..22 "~"
- WORD@22..27 "Amer."
- WHITESPACE@27..28 " "
- WORD@28..33 "Math."
- WHITESPACE@33..34 " "
- WORD@34..38 "Soc."
- R_CURLY@38..39 "}"
- R_DELIM@39..40 "}"
- JUNK@40..42 "\n\n"
- ENTRY@42..556
- TYPE@42..50 "@article"
- L_DELIM@50..51 "{"
- NAME@51..58 "bertram"
- COMMA@58..59 ","
- WHITESPACE@59..64 "\n "
- FIELD@64..119
- NAME@64..70 "author"
- WHITESPACE@70..77 " "
- EQ@77..78 "="
- WHITESPACE@78..79 " "
- CURLY_GROUP@79..118
- L_CURLY@79..80 "{"
- WORD@80..87 "Bertram"
- COMMA@87..88 ","
- WHITESPACE@88..89 " "
- WORD@89..94 "Aaron"
- WHITESPACE@94..95 " "
- WORD@95..98 "and"
- WHITESPACE@98..99 " "
- WORD@99..108 "Wentworth"
- COMMA@108..109 ","
- WHITESPACE@109..110 " "
- WORD@110..117 "Richard"
- R_CURLY@117..118 "}"
- COMMA@118..119 ","
- WHITESPACE@119..124 "\n "
- FIELD@124..202
- NAME@124..129 "title"
- WHITESPACE@129..137 " "
- EQ@137..138 "="
- WHITESPACE@138..139 " "
- CURLY_GROUP@139..201
- L_CURLY@139..140 "{"
- WORD@140..146 "Gromov"
- WHITESPACE@146..147 " "
- WORD@147..157 "invariants"
- WHITESPACE@157..158 " "
- WORD@158..161 "for"
- WHITESPACE@161..162 " "
- WORD@162..173 "holomorphic"
- WHITESPACE@173..174 " "
- WORD@174..178 "maps"
- WHITESPACE@178..179 " "
- WORD@179..181 "on"
- WHITESPACE@181..182 " "
- CURLY_GROUP@182..191
- L_CURLY@182..183 "{"
- WORD@183..190 "Riemann"
- R_CURLY@190..191 "}"
- WHITESPACE@191..192 " "
- WORD@192..200 "surfaces"
- R_CURLY@200..201 "}"
- COMMA@201..202 ","
- WHITESPACE@202..207 "\n "
- FIELD@207..227
- NAME@207..219 "journaltitle"
- WHITESPACE@219..220 " "
- EQ@220..221 "="
- WHITESPACE@221..222 " "
- LITERAL@222..226
- NAME@222..226 "jams"
- COMMA@226..227 ","
- WHITESPACE@227..232 "\n "
- FIELD@232..252
- NAME@232..236 "date"
- WHITESPACE@236..245 " "
- EQ@245..246 "="
- WHITESPACE@246..247 " "
- LITERAL@247..251
- INTEGER@247..251 "1996"
- COMMA@251..252 ","
- WHITESPACE@252..257 "\n "
- FIELD@257..274
- NAME@257..263 "volume"
- WHITESPACE@263..270 " "
- EQ@270..271 "="
- WHITESPACE@271..272 " "
- LITERAL@272..273
- INTEGER@272..273 "9"
- COMMA@273..274 ","
- WHITESPACE@274..279 "\n "
- FIELD@279..296
- NAME@279..285 "number"
- WHITESPACE@285..292 " "
- EQ@292..293 "="
- WHITESPACE@293..294 " "
- LITERAL@294..295
- INTEGER@294..295 "2"
- COMMA@295..296 ","
- WHITESPACE@296..301 "\n "
- FIELD@301..326
- NAME@301..306 "pages"
- WHITESPACE@306..314 " "
- EQ@314..315 "="
- WHITESPACE@315..316 " "
- CURLY_GROUP@316..325
- L_CURLY@316..317 "{"
- WORD@317..324 "529-571"
- R_CURLY@324..325 "}"
- COMMA@325..326 ","
- WHITESPACE@326..331 "\n "
- FIELD@331..356
- NAME@331..337 "langid"
- WHITESPACE@337..344 " "
- EQ@344..345 "="
- WHITESPACE@345..346 " "
- CURLY_GROUP@346..355
- L_CURLY@346..347 "{"
- WORD@347..354 "english"
- R_CURLY@354..355 "}"
- COMMA@355..356 ","
- WHITESPACE@356..361 "\n "
- FIELD@361..395
- NAME@361..371 "langidopts"
- WHITESPACE@371..374 " "
- EQ@374..375 "="
- WHITESPACE@375..376 " "
- CURLY_GROUP@376..394
- L_CURLY@376..377 "{"
- WORD@377..393 "variant=american"
- R_CURLY@393..394 "}"
- COMMA@394..395 ","
- WHITESPACE@395..400 "\n "
- FIELD@400..435
- NAME@400..410 "shorttitle"
- WHITESPACE@410..413 " "
- EQ@413..414 "="
- WHITESPACE@414..415 " "
- CURLY_GROUP@415..434
- L_CURLY@415..416 "{"
- WORD@416..422 "Gromov"
- WHITESPACE@422..423 " "
- WORD@423..433 "invariants"
- R_CURLY@433..434 "}"
- COMMA@434..435 ","
- WHITESPACE@435..440 "\n "
- FIELD@440..554
- NAME@440..450 "annotation"
- WHITESPACE@450..453 " "
- EQ@453..454 "="
- WHITESPACE@454..455 " "
- CURLY_GROUP@455..553
- L_CURLY@455..456 "{"
- WORD@456..458 "An"
- WHITESPACE@458..459 " "
- COMMAND@459..466
- COMMAND_NAME@459..466 "\\texttt"
- CURLY_GROUP@466..475
- L_CURLY@466..467 "{"
- WORD@467..474 "article"
- R_CURLY@474..475 "}"
- WHITESPACE@475..476 " "
- WORD@476..481 "entry"
- WHITESPACE@481..482 " "
- WORD@482..486 "with"
- WHITESPACE@486..487 " "
- WORD@487..488 "a"
- WHITESPACE@488..489 " "
- COMMAND@489..496
- COMMAND_NAME@489..496 "\\texttt"
- CURLY_GROUP@496..504
- L_CURLY@496..497 "{"
- WORD@497..503 "volume"
- R_CURLY@503..504 "}"
- WHITESPACE@504..505 " "
- WORD@505..508 "and"
- WHITESPACE@508..509 " "
- WORD@509..510 "a"
- WHITESPACE@510..531 "\n "
- COMMAND@531..538
- COMMAND_NAME@531..538 "\\texttt"
- CURLY_GROUP@538..546
- L_CURLY@538..539 "{"
- WORD@539..545 "number"
- R_CURLY@545..546 "}"
- WHITESPACE@546..547 " "
- WORD@547..552 "field"
- R_CURLY@552..553 "}"
- COMMA@553..554 ","
- WHITESPACE@554..555 "\n"
- R_DELIM@555..556 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__blom_2021.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__blom_2021.txt.snap
deleted file mode 100644
index 86ee736c2b..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__blom_2021.txt.snap
+++ /dev/null
@@ -1,223 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/blom_2021.txt
----
-ROOT@0..860
- ENTRY@0..860
- TYPE@0..8 "@article"
- L_DELIM@8..9 "{"
- NAME@9..42 "DBLP:journals/corr/ab ..."
- COMMA@42..43 ","
- WHITESPACE@43..48 "\n "
- FIELD@48..322
- NAME@48..54 "author"
- WHITESPACE@54..58 " "
- EQ@58..59 "="
- WHITESPACE@59..60 " "
- CURLY_GROUP@60..321
- L_CURLY@60..61 "{"
- WORD@61..69 "Michelle"
- WHITESPACE@69..70 " "
- WORD@70..72 "L."
- WHITESPACE@72..73 " "
- WORD@73..77 "Blom"
- WHITESPACE@77..78 " "
- WORD@78..81 "and"
- WHITESPACE@81..102 "\n "
- WORD@102..109 "Jurlind"
- WHITESPACE@109..110 " "
- WORD@110..119 "Budurushi"
- WHITESPACE@119..120 " "
- WORD@120..123 "and"
- WHITESPACE@123..144 "\n "
- WORD@144..150 "Ronald"
- WHITESPACE@150..151 " "
- WORD@151..153 "L."
- WHITESPACE@153..154 " "
- WORD@154..160 "Rivest"
- WHITESPACE@160..161 " "
- WORD@161..164 "and"
- WHITESPACE@164..185 "\n "
- WORD@185..191 "Philip"
- WHITESPACE@191..192 " "
- WORD@192..194 "B."
- WHITESPACE@194..195 " "
- WORD@195..200 "Stark"
- WHITESPACE@200..201 " "
- WORD@201..204 "and"
- WHITESPACE@204..225 "\n "
- WORD@225..230 "Peter"
- WHITESPACE@230..231 " "
- WORD@231..233 "J."
- WHITESPACE@233..234 " "
- WORD@234..241 "Stuckey"
- WHITESPACE@241..242 " "
- WORD@242..245 "and"
- WHITESPACE@245..266 "\n "
- WORD@266..273 "Vanessa"
- WHITESPACE@273..274 " "
- WORD@274..280 "Teague"
- WHITESPACE@280..281 " "
- WORD@281..284 "and"
- WHITESPACE@284..305 "\n "
- WORD@305..311 "Damjan"
- WHITESPACE@311..312 " "
- WORD@312..320 "Vukcevic"
- R_CURLY@320..321 "}"
- COMMA@321..322 ","
- WHITESPACE@322..327 "\n "
- FIELD@327..473
- NAME@327..332 "title"
- WHITESPACE@332..337 " "
- EQ@337..338 "="
- WHITESPACE@338..339 " "
- CURLY_GROUP@339..472
- L_CURLY@339..340 "{"
- WORD@340..355 "Assertion-based"
- WHITESPACE@355..356 " "
- WORD@356..366 "Approaches"
- WHITESPACE@366..367 " "
- WORD@367..369 "to"
- WHITESPACE@369..370 " "
- WORD@370..378 "Auditing"
- WHITESPACE@378..379 " "
- WORD@379..386 "Complex"
- WHITESPACE@386..387 " "
- WORD@387..396 "Elections"
- COMMA@396..397 ","
- WHITESPACE@397..398 " "
- WORD@398..402 "with"
- WHITESPACE@402..403 " "
- WORD@403..414 "application"
- WHITESPACE@414..435 "\n "
- WORD@435..437 "to"
- WHITESPACE@437..438 " "
- WORD@438..448 "party-list"
- WHITESPACE@448..449 " "
- WORD@449..461 "proportional"
- WHITESPACE@461..462 " "
- WORD@462..471 "elections"
- R_CURLY@471..472 "}"
- COMMA@472..473 ","
- WHITESPACE@473..478 "\n "
- FIELD@478..497
- NAME@478..485 "journal"
- WHITESPACE@485..488 " "
- EQ@488..489 "="
- WHITESPACE@489..490 " "
- CURLY_GROUP@490..496
- L_CURLY@490..491 "{"
- WORD@491..495 "CoRR"
- R_CURLY@495..496 "}"
- COMMA@496..497 ","
- WHITESPACE@497..502 "\n "
- FIELD@502..531
- NAME@502..508 "volume"
- WHITESPACE@508..512 " "
- EQ@512..513 "="
- WHITESPACE@513..514 " "
- CURLY_GROUP@514..530
- L_CURLY@514..515 "{"
- WORD@515..529 "abs/2107.11903"
- R_CURLY@529..530 "}"
- COMMA@530..531 ","
- WHITESPACE@531..536 "\n "
- FIELD@536..555
- NAME@536..540 "year"
- WHITESPACE@540..546 " "
- EQ@546..547 "="
- WHITESPACE@547..548 " "
- CURLY_GROUP@548..554
- L_CURLY@548..549 "{"
- INTEGER@549..553 "2021"
- R_CURLY@553..554 "}"
- COMMA@554..555 ","
- WHITESPACE@555..560 "\n "
- FIELD@560..607
- NAME@560..563 "url"
- WHITESPACE@563..570 " "
- EQ@570..571 "="
- WHITESPACE@571..572 " "
- CURLY_GROUP@572..606
- L_CURLY@572..573 "{"
- WORD@573..605 "https://arxiv.org/abs ..."
- R_CURLY@605..606 "}"
- COMMA@606..607 ","
- WHITESPACE@607..612 "\n "
- FIELD@612..633
- NAME@612..622 "eprinttype"
- WHITESPACE@622..623 " "
- EQ@623..624 "="
- WHITESPACE@624..625 " "
- CURLY_GROUP@625..632
- L_CURLY@625..626 "{"
- WORD@626..631 "arXiv"
- R_CURLY@631..632 "}"
- COMMA@632..633 ","
- WHITESPACE@633..638 "\n "
- FIELD@638..663
- NAME@638..644 "eprint"
- WHITESPACE@644..648 " "
- EQ@648..649 "="
- WHITESPACE@649..650 " "
- CURLY_GROUP@650..662
- L_CURLY@650..651 "{"
- WORD@651..661 "2107.11903"
- R_CURLY@661..662 "}"
- COMMA@662..663 ","
- WHITESPACE@663..668 "\n "
- FIELD@668..714
- NAME@668..677 "timestamp"
- WHITESPACE@677..678 " "
- EQ@678..679 "="
- WHITESPACE@679..680 " "
- CURLY_GROUP@680..713
- L_CURLY@680..681 "{"
- WORD@681..684 "Thu"
- COMMA@684..685 ","
- WHITESPACE@685..686 " "
- INTEGER@686..688 "29"
- WHITESPACE@688..689 " "
- WORD@689..692 "Jul"
- WHITESPACE@692..693 " "
- INTEGER@693..697 "2021"
- WHITESPACE@697..698 " "
- WORD@698..706 "16:14:15"
- WHITESPACE@706..707 " "
- WORD@707..712 "+0200"
- R_CURLY@712..713 "}"
- COMMA@713..714 ","
- WHITESPACE@714..719 "\n "
- FIELD@719..787
- NAME@719..725 "biburl"
- WHITESPACE@725..729 " "
- EQ@729..730 "="
- WHITESPACE@730..731 " "
- CURLY_GROUP@731..786
- L_CURLY@731..732 "{"
- WORD@732..785 "https://dblp.org/rec/ ..."
- R_CURLY@785..786 "}"
- COMMA@786..787 ","
- WHITESPACE@787..792 "\n "
- FIELD@792..859
- NAME@792..801 "bibsource"
- WHITESPACE@801..802 " "
- EQ@802..803 "="
- WHITESPACE@803..804 " "
- CURLY_GROUP@804..858
- L_CURLY@804..805 "{"
- WORD@805..809 "dblp"
- WHITESPACE@809..810 " "
- WORD@810..818 "computer"
- WHITESPACE@818..819 " "
- WORD@819..826 "science"
- WHITESPACE@826..827 " "
- WORD@827..839 "bibliography"
- COMMA@839..840 ","
- WHITESPACE@840..841 " "
- WORD@841..857 "https://dblp.org"
- R_CURLY@857..858 "}"
- WHITESPACE@858..859 "\n"
- R_DELIM@859..860 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__combi_2004.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__combi_2004.txt.snap
deleted file mode 100644
index d633886ced..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__combi_2004.txt.snap
+++ /dev/null
@@ -1,251 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/combi_2004.txt
----
-ROOT@0..674
- ENTRY@0..674
- TYPE@0..14 "@inproceedings"
- L_DELIM@14..15 "{"
- NAME@15..36 "10.1145/967900.968040"
- COMMA@36..37 ","
- WHITESPACE@37..42 "\n "
- FIELD@42..86
- NAME@42..48 "author"
- WHITESPACE@48..49 " "
- EQ@49..50 "="
- WHITESPACE@50..51 " "
- CURLY_GROUP@51..85
- L_CURLY@51..52 "{"
- WORD@52..57 "Combi"
- COMMA@57..58 ","
- WHITESPACE@58..59 " "
- WORD@59..64 "Carlo"
- WHITESPACE@64..65 " "
- WORD@65..68 "and"
- WHITESPACE@68..69 " "
- WORD@69..74 "Pozzi"
- COMMA@74..75 ","
- WHITESPACE@75..76 " "
- WORD@76..84 "Giuseppe"
- R_CURLY@84..85 "}"
- COMMA@85..86 ","
- WHITESPACE@86..91 "\n "
- FIELD@91..157
- NAME@91..96 "title"
- WHITESPACE@96..97 " "
- EQ@97..98 "="
- WHITESPACE@98..99 " "
- CURLY_GROUP@99..156
- L_CURLY@99..100 "{"
- WORD@100..113 "Architectures"
- WHITESPACE@113..114 " "
- WORD@114..117 "for"
- WHITESPACE@117..118 " "
- WORD@118..119 "a"
- WHITESPACE@119..120 " "
- WORD@120..128 "Temporal"
- WHITESPACE@128..129 " "
- WORD@129..137 "Workflow"
- WHITESPACE@137..138 " "
- WORD@138..148 "Management"
- WHITESPACE@148..149 " "
- WORD@149..155 "System"
- R_CURLY@155..156 "}"
- COMMA@156..157 ","
- WHITESPACE@157..162 "\n "
- FIELD@162..176
- NAME@162..166 "year"
- WHITESPACE@166..167 " "
- EQ@167..168 "="
- WHITESPACE@168..169 " "
- CURLY_GROUP@169..175
- L_CURLY@169..170 "{"
- INTEGER@170..174 "2004"
- R_CURLY@174..175 "}"
- COMMA@175..176 ","
- WHITESPACE@176..181 "\n "
- FIELD@181..201
- NAME@181..185 "isbn"
- WHITESPACE@185..186 " "
- EQ@186..187 "="
- WHITESPACE@187..188 " "
- CURLY_GROUP@188..200
- L_CURLY@188..189 "{"
- INTEGER@189..199 "1581138121"
- R_CURLY@199..200 "}"
- COMMA@200..201 ","
- WHITESPACE@201..206 "\n "
- FIELD@206..256
- NAME@206..215 "publisher"
- WHITESPACE@215..216 " "
- EQ@216..217 "="
- WHITESPACE@217..218 " "
- CURLY_GROUP@218..255
- L_CURLY@218..219 "{"
- WORD@219..230 "Association"
- WHITESPACE@230..231 " "
- WORD@231..234 "for"
- WHITESPACE@234..235 " "
- WORD@235..244 "Computing"
- WHITESPACE@244..245 " "
- WORD@245..254 "Machinery"
- R_CURLY@254..255 "}"
- COMMA@255..256 ","
- WHITESPACE@256..261 "\n "
- FIELD@261..291
- NAME@261..268 "address"
- WHITESPACE@268..269 " "
- EQ@269..270 "="
- WHITESPACE@270..271 " "
- CURLY_GROUP@271..290
- L_CURLY@271..272 "{"
- WORD@272..275 "New"
- WHITESPACE@275..276 " "
- WORD@276..280 "York"
- COMMA@280..281 ","
- WHITESPACE@281..282 " "
- WORD@282..284 "NY"
- COMMA@284..285 ","
- WHITESPACE@285..286 " "
- WORD@286..289 "USA"
- R_CURLY@289..290 "}"
- COMMA@290..291 ","
- WHITESPACE@291..296 "\n "
- FIELD@296..342
- NAME@296..299 "url"
- WHITESPACE@299..300 " "
- EQ@300..301 "="
- WHITESPACE@301..302 " "
- CURLY_GROUP@302..341
- L_CURLY@302..303 "{"
- WORD@303..340 "https://doi.org/10.11 ..."
- R_CURLY@340..341 "}"
- COMMA@341..342 ","
- WHITESPACE@342..347 "\n "
- FIELD@347..377
- NAME@347..350 "doi"
- WHITESPACE@350..351 " "
- EQ@351..352 "="
- WHITESPACE@352..353 " "
- CURLY_GROUP@353..376
- L_CURLY@353..354 "{"
- WORD@354..375 "10.1145/967900.968040"
- R_CURLY@375..376 "}"
- COMMA@376..377 ","
- WHITESPACE@377..382 "\n "
- FIELD@382..455
- NAME@382..391 "booktitle"
- WHITESPACE@391..392 " "
- EQ@392..393 "="
- WHITESPACE@393..394 " "
- CURLY_GROUP@394..454
- L_CURLY@394..395 "{"
- WORD@395..406 "Proceedings"
- WHITESPACE@406..407 " "
- WORD@407..409 "of"
- WHITESPACE@409..410 " "
- WORD@410..413 "the"
- WHITESPACE@413..414 " "
- INTEGER@414..418 "2004"
- WHITESPACE@418..419 " "
- WORD@419..422 "ACM"
- WHITESPACE@422..423 " "
- WORD@423..432 "Symposium"
- WHITESPACE@432..433 " "
- WORD@433..435 "on"
- WHITESPACE@435..436 " "
- WORD@436..443 "Applied"
- WHITESPACE@443..444 " "
- WORD@444..453 "Computing"
- R_CURLY@453..454 "}"
- COMMA@454..455 ","
- WHITESPACE@455..460 "\n "
- FIELD@460..478
- NAME@460..465 "pages"
- WHITESPACE@465..466 " "
- EQ@466..467 "="
- WHITESPACE@467..468 " "
- CURLY_GROUP@468..477
- L_CURLY@468..469 "{"
- WORD@469..476 "659-666"
- R_CURLY@476..477 "}"
- COMMA@477..478 ","
- WHITESPACE@478..483 "\n "
- FIELD@483..498
- NAME@483..491 "numpages"
- WHITESPACE@491..492 " "
- EQ@492..493 "="
- WHITESPACE@493..494 " "
- CURLY_GROUP@494..497
- L_CURLY@494..495 "{"
- INTEGER@495..496 "8"
- R_CURLY@496..497 "}"
- COMMA@497..498 ","
- WHITESPACE@498..503 "\n "
- FIELD@503..615
- NAME@503..511 "keywords"
- WHITESPACE@511..512 " "
- EQ@512..513 "="
- WHITESPACE@513..514 " "
- CURLY_GROUP@514..614
- L_CURLY@514..515 "{"
- WORD@515..521 "active"
- WHITESPACE@521..522 " "
- WORD@522..526 "DBMS"
- COMMA@526..527 ","
- WHITESPACE@527..528 " "
- WORD@528..536 "temporal"
- WHITESPACE@536..537 " "
- WORD@537..541 "DBMS"
- COMMA@541..542 ","
- WHITESPACE@542..543 " "
- WORD@543..551 "workflow"
- WHITESPACE@551..552 " "
- WORD@552..562 "management"
- WHITESPACE@562..563 " "
- WORD@563..569 "system"
- WHITESPACE@569..570 " "
- WORD@570..571 "-"
- WHITESPACE@571..572 " "
- WORD@572..576 "WfMS"
- COMMA@576..577 ","
- WHITESPACE@577..578 " "
- WORD@578..586 "temporal"
- WHITESPACE@586..587 " "
- WORD@587..595 "workflow"
- WHITESPACE@595..596 " "
- WORD@596..606 "management"
- WHITESPACE@606..607 " "
- WORD@607..613 "system"
- R_CURLY@613..614 "}"
- COMMA@614..615 ","
- WHITESPACE@615..620 "\n "
- FIELD@620..649
- NAME@620..628 "location"
- WHITESPACE@628..629 " "
- EQ@629..630 "="
- WHITESPACE@630..631 " "
- CURLY_GROUP@631..648
- L_CURLY@631..632 "{"
- WORD@632..639 "Nicosia"
- COMMA@639..640 ","
- WHITESPACE@640..641 " "
- WORD@641..647 "Cyprus"
- R_CURLY@647..648 "}"
- COMMA@648..649 ","
- WHITESPACE@649..654 "\n "
- FIELD@654..673
- NAME@654..660 "series"
- WHITESPACE@660..661 " "
- EQ@661..662 "="
- WHITESPACE@662..663 " "
- CURLY_GROUP@663..672
- L_CURLY@663..664 "{"
- WORD@664..667 "SAC"
- WHITESPACE@667..668 " "
- WORD@668..671 "'04"
- R_CURLY@671..672 "}"
- WHITESPACE@672..673 "\n"
- R_DELIM@673..674 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__erwin_2007.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__erwin_2007.txt.snap
deleted file mode 100644
index 2275d58d08..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__erwin_2007.txt.snap
+++ /dev/null
@@ -1,239 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/erwin_2007.txt
----
-ROOT@0..615
- ENTRY@0..615
- TYPE@0..14 "@inproceedings"
- L_DELIM@14..15 "{"
- NAME@15..38 "10.5555/1386993.1386994"
- COMMA@38..39 ","
- WHITESPACE@39..44 "\n "
- FIELD@44..107
- NAME@44..50 "author"
- WHITESPACE@50..51 " "
- EQ@51..52 "="
- WHITESPACE@52..53 " "
- CURLY_GROUP@53..106
- L_CURLY@53..54 "{"
- WORD@54..59 "Erwin"
- COMMA@59..60 ","
- WHITESPACE@60..61 " "
- WORD@61..65 "Alva"
- WHITESPACE@65..66 " "
- WORD@66..69 "and"
- WHITESPACE@69..70 " "
- WORD@70..77 "Gopalan"
- COMMA@77..78 ","
- WHITESPACE@78..79 " "
- WORD@79..82 "Raj"
- WHITESPACE@82..83 " "
- WORD@83..85 "P."
- WHITESPACE@85..86 " "
- WORD@86..89 "and"
- WHITESPACE@89..90 " "
- WORD@90..98 "Achuthan"
- COMMA@98..99 ","
- WHITESPACE@99..100 " "
- WORD@100..102 "N."
- WHITESPACE@102..103 " "
- WORD@103..105 "R."
- R_CURLY@105..106 "}"
- COMMA@106..107 ","
- WHITESPACE@107..112 "\n "
- FIELD@112..194
- NAME@112..117 "title"
- WHITESPACE@117..118 " "
- EQ@118..119 "="
- WHITESPACE@119..120 " "
- CURLY_GROUP@120..193
- L_CURLY@120..121 "{"
- WORD@121..122 "A"
- WHITESPACE@122..123 " "
- WORD@123..132 "Bottom-up"
- WHITESPACE@132..133 " "
- WORD@133..143 "Projection"
- WHITESPACE@143..144 " "
- WORD@144..149 "Based"
- WHITESPACE@149..150 " "
- WORD@150..159 "Algorithm"
- WHITESPACE@159..160 " "
- WORD@160..163 "for"
- WHITESPACE@163..164 " "
- WORD@164..170 "Mining"
- WHITESPACE@170..171 " "
- WORD@171..175 "High"
- WHITESPACE@175..176 " "
- WORD@176..183 "Utility"
- WHITESPACE@183..184 " "
- WORD@184..192 "Itemsets"
- R_CURLY@192..193 "}"
- COMMA@193..194 ","
- WHITESPACE@194..199 "\n "
- FIELD@199..213
- NAME@199..203 "year"
- WHITESPACE@203..204 " "
- EQ@204..205 "="
- WHITESPACE@205..206 " "
- CURLY_GROUP@206..212
- L_CURLY@206..207 "{"
- INTEGER@207..211 "2007"
- R_CURLY@211..212 "}"
- COMMA@212..213 ","
- WHITESPACE@213..218 "\n "
- FIELD@218..241
- NAME@218..222 "isbn"
- WHITESPACE@222..223 " "
- EQ@223..224 "="
- WHITESPACE@224..225 " "
- CURLY_GROUP@225..240
- L_CURLY@225..226 "{"
- INTEGER@226..239 "9781920682651"
- R_CURLY@239..240 "}"
- COMMA@240..241 ","
- WHITESPACE@241..246 "\n "
- FIELD@246..294
- NAME@246..255 "publisher"
- WHITESPACE@255..256 " "
- EQ@256..257 "="
- WHITESPACE@257..258 " "
- CURLY_GROUP@258..293
- L_CURLY@258..259 "{"
- WORD@259..269 "Australian"
- WHITESPACE@269..270 " "
- WORD@270..278 "Computer"
- WHITESPACE@278..279 " "
- WORD@279..286 "Society"
- COMMA@286..287 ","
- WHITESPACE@287..288 " "
- WORD@288..292 "Inc."
- R_CURLY@292..293 "}"
- COMMA@293..294 ","
- WHITESPACE@294..299 "\n "
- FIELD@299..315
- NAME@299..306 "address"
- WHITESPACE@306..307 " "
- EQ@307..308 "="
- WHITESPACE@308..309 " "
- CURLY_GROUP@309..314
- L_CURLY@309..310 "{"
- WORD@310..313 "AUS"
- R_CURLY@313..314 "}"
- COMMA@314..315 ","
- WHITESPACE@315..320 "\n "
- FIELD@320..447
- NAME@320..329 "booktitle"
- WHITESPACE@329..330 " "
- EQ@330..331 "="
- WHITESPACE@331..332 " "
- CURLY_GROUP@332..446
- L_CURLY@332..333 "{"
- WORD@333..344 "Proceedings"
- WHITESPACE@344..345 " "
- WORD@345..347 "of"
- WHITESPACE@347..348 " "
- WORD@348..351 "the"
- WHITESPACE@351..352 " "
- WORD@352..355 "2nd"
- WHITESPACE@355..356 " "
- WORD@356..369 "International"
- WHITESPACE@369..370 " "
- WORD@370..378 "Workshop"
- WHITESPACE@378..379 " "
- WORD@379..381 "on"
- WHITESPACE@381..382 " "
- WORD@382..393 "Integrating"
- WHITESPACE@393..394 " "
- WORD@394..404 "Artificial"
- WHITESPACE@404..405 " "
- WORD@405..417 "Intelligence"
- WHITESPACE@417..418 " "
- WORD@418..421 "and"
- WHITESPACE@421..422 " "
- WORD@422..426 "Data"
- WHITESPACE@426..427 " "
- WORD@427..433 "Mining"
- WHITESPACE@433..434 " "
- WORD@434..435 "-"
- WHITESPACE@435..436 " "
- WORD@436..442 "Volume"
- WHITESPACE@442..443 " "
- INTEGER@443..445 "84"
- R_CURLY@445..446 "}"
- COMMA@446..447 ","
- WHITESPACE@447..452 "\n "
- FIELD@452..467
- NAME@452..457 "pages"
- WHITESPACE@457..458 " "
- EQ@458..459 "="
- WHITESPACE@459..460 " "
- CURLY_GROUP@460..466
- L_CURLY@460..461 "{"
- WORD@461..465 "3-11"
- R_CURLY@465..466 "}"
- COMMA@466..467 ","
- WHITESPACE@467..472 "\n "
- FIELD@472..487
- NAME@472..480 "numpages"
- WHITESPACE@480..481 " "
- EQ@481..482 "="
- WHITESPACE@482..483 " "
- CURLY_GROUP@483..486
- L_CURLY@483..484 "{"
- INTEGER@484..485 "9"
- R_CURLY@485..486 "}"
- COMMA@486..487 ","
- WHITESPACE@487..492 "\n "
- FIELD@492..549
- NAME@492..500 "keywords"
- WHITESPACE@500..501 " "
- EQ@501..502 "="
- WHITESPACE@502..503 " "
- CURLY_GROUP@503..548
- L_CURLY@503..504 "{"
- WORD@504..511 "pattern"
- WHITESPACE@511..512 " "
- WORD@512..518 "growth"
- COMMA@518..519 ","
- WHITESPACE@519..520 " "
- WORD@520..524 "high"
- WHITESPACE@524..525 " "
- WORD@525..532 "utility"
- WHITESPACE@532..533 " "
- WORD@533..540 "itemset"
- WHITESPACE@540..541 " "
- WORD@541..547 "mining"
- R_CURLY@547..548 "}"
- COMMA@548..549 ","
- WHITESPACE@549..554 "\n "
- FIELD@554..589
- NAME@554..562 "location"
- WHITESPACE@562..563 " "
- EQ@563..564 "="
- WHITESPACE@564..565 " "
- CURLY_GROUP@565..588
- L_CURLY@565..566 "{"
- WORD@566..570 "Gold"
- WHITESPACE@570..571 " "
- WORD@571..576 "Coast"
- COMMA@576..577 ","
- WHITESPACE@577..578 " "
- WORD@578..587 "Australia"
- R_CURLY@587..588 "}"
- COMMA@588..589 ","
- WHITESPACE@589..594 "\n "
- FIELD@594..614
- NAME@594..600 "series"
- WHITESPACE@600..601 " "
- EQ@601..602 "="
- WHITESPACE@602..603 " "
- CURLY_GROUP@603..613
- L_CURLY@603..604 "{"
- WORD@604..608 "AIDM"
- WHITESPACE@608..609 " "
- WORD@609..612 "'07"
- R_CURLY@612..613 "}"
- WHITESPACE@613..614 "\n"
- R_DELIM@614..615 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__jain_1999.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__jain_1999.txt.snap
deleted file mode 100644
index d409435d09..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__jain_1999.txt.snap
+++ /dev/null
@@ -1,267 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/jain_1999.txt
----
-ROOT@0..674
- ENTRY@0..674
- TYPE@0..8 "@article"
- L_DELIM@8..9 "{"
- NAME@9..30 "10.1145/331499.331504"
- COMMA@30..31 ","
- WHITESPACE@31..36 "\n "
- FIELD@36..93
- NAME@36..42 "author"
- WHITESPACE@42..43 " "
- EQ@43..44 "="
- WHITESPACE@44..45 " "
- CURLY_GROUP@45..92
- L_CURLY@45..46 "{"
- WORD@46..50 "Jain"
- COMMA@50..51 ","
- WHITESPACE@51..52 " "
- WORD@52..54 "A."
- WHITESPACE@54..55 " "
- WORD@55..57 "K."
- WHITESPACE@57..58 " "
- WORD@58..61 "and"
- WHITESPACE@61..62 " "
- WORD@62..67 "Murty"
- COMMA@67..68 ","
- WHITESPACE@68..69 " "
- WORD@69..71 "M."
- WHITESPACE@71..72 " "
- WORD@72..74 "N."
- WHITESPACE@74..75 " "
- WORD@75..78 "and"
- WHITESPACE@78..79 " "
- WORD@79..84 "Flynn"
- COMMA@84..85 ","
- WHITESPACE@85..86 " "
- WORD@86..88 "P."
- WHITESPACE@88..89 " "
- WORD@89..91 "J."
- R_CURLY@91..92 "}"
- COMMA@92..93 ","
- WHITESPACE@93..98 "\n "
- FIELD@98..134
- NAME@98..103 "title"
- WHITESPACE@103..104 " "
- EQ@104..105 "="
- WHITESPACE@105..106 " "
- CURLY_GROUP@106..133
- L_CURLY@106..107 "{"
- WORD@107..111 "Data"
- WHITESPACE@111..112 " "
- WORD@112..123 "Clustering:"
- WHITESPACE@123..124 " "
- WORD@124..125 "A"
- WHITESPACE@125..126 " "
- WORD@126..132 "Review"
- R_CURLY@132..133 "}"
- COMMA@133..134 ","
- WHITESPACE@134..139 "\n "
- FIELD@139..153
- NAME@139..143 "year"
- WHITESPACE@143..144 " "
- EQ@144..145 "="
- WHITESPACE@145..146 " "
- CURLY_GROUP@146..152
- L_CURLY@146..147 "{"
- INTEGER@147..151 "1999"
- R_CURLY@151..152 "}"
- COMMA@152..153 ","
- WHITESPACE@153..158 "\n "
- FIELD@158..184
- NAME@158..168 "issue_date"
- WHITESPACE@168..169 " "
- EQ@169..170 "="
- WHITESPACE@170..171 " "
- CURLY_GROUP@171..183
- L_CURLY@171..172 "{"
- WORD@172..177 "Sept."
- WHITESPACE@177..178 " "
- INTEGER@178..182 "1999"
- R_CURLY@182..183 "}"
- COMMA@183..184 ","
- WHITESPACE@184..189 "\n "
- FIELD@189..239
- NAME@189..198 "publisher"
- WHITESPACE@198..199 " "
- EQ@199..200 "="
- WHITESPACE@200..201 " "
- CURLY_GROUP@201..238
- L_CURLY@201..202 "{"
- WORD@202..213 "Association"
- WHITESPACE@213..214 " "
- WORD@214..217 "for"
- WHITESPACE@217..218 " "
- WORD@218..227 "Computing"
- WHITESPACE@227..228 " "
- WORD@228..237 "Machinery"
- R_CURLY@237..238 "}"
- COMMA@238..239 ","
- WHITESPACE@239..244 "\n "
- FIELD@244..274
- NAME@244..251 "address"
- WHITESPACE@251..252 " "
- EQ@252..253 "="
- WHITESPACE@253..254 " "
- CURLY_GROUP@254..273
- L_CURLY@254..255 "{"
- WORD@255..258 "New"
- WHITESPACE@258..259 " "
- WORD@259..263 "York"
- COMMA@263..264 ","
- WHITESPACE@264..265 " "
- WORD@265..267 "NY"
- COMMA@267..268 ","
- WHITESPACE@268..269 " "
- WORD@269..272 "USA"
- R_CURLY@272..273 "}"
- COMMA@273..274 ","
- WHITESPACE@274..279 "\n "
- FIELD@279..293
- NAME@279..285 "volume"
- WHITESPACE@285..286 " "
- EQ@286..287 "="
- WHITESPACE@287..288 " "
- CURLY_GROUP@288..292
- L_CURLY@288..289 "{"
- INTEGER@289..291 "31"
- R_CURLY@291..292 "}"
- COMMA@292..293 ","
- WHITESPACE@293..298 "\n "
- FIELD@298..311
- NAME@298..304 "number"
- WHITESPACE@304..305 " "
- EQ@305..306 "="
- WHITESPACE@306..307 " "
- CURLY_GROUP@307..310
- L_CURLY@307..308 "{"
- INTEGER@308..309 "3"
- R_CURLY@309..310 "}"
- COMMA@310..311 ","
- WHITESPACE@311..316 "\n "
- FIELD@316..335
- NAME@316..320 "issn"
- WHITESPACE@320..321 " "
- EQ@321..322 "="
- WHITESPACE@322..323 " "
- CURLY_GROUP@323..334
- L_CURLY@323..324 "{"
- WORD@324..333 "0360-0300"
- R_CURLY@333..334 "}"
- COMMA@334..335 ","
- WHITESPACE@335..340 "\n "
- FIELD@340..386
- NAME@340..343 "url"
- WHITESPACE@343..344 " "
- EQ@344..345 "="
- WHITESPACE@345..346 " "
- CURLY_GROUP@346..385
- L_CURLY@346..347 "{"
- WORD@347..384 "https://doi.org/10.11 ..."
- R_CURLY@384..385 "}"
- COMMA@385..386 ","
- WHITESPACE@386..391 "\n "
- FIELD@391..421
- NAME@391..394 "doi"
- WHITESPACE@394..395 " "
- EQ@395..396 "="
- WHITESPACE@396..397 " "
- CURLY_GROUP@397..420
- L_CURLY@397..398 "{"
- WORD@398..419 "10.1145/331499.331504"
- R_CURLY@419..420 "}"
- COMMA@420..421 ","
- WHITESPACE@421..426 "\n "
- FIELD@426..456
- NAME@426..433 "journal"
- WHITESPACE@433..434 " "
- EQ@434..435 "="
- WHITESPACE@435..436 " "
- CURLY_GROUP@436..455
- L_CURLY@436..437 "{"
- WORD@437..440 "ACM"
- WHITESPACE@440..441 " "
- WORD@441..448 "Comput."
- WHITESPACE@448..449 " "
- WORD@449..454 "Surv."
- R_CURLY@454..455 "}"
- COMMA@455..456 ","
- WHITESPACE@456..461 "\n "
- FIELD@461..475
- NAME@461..466 "month"
- WHITESPACE@466..467 " "
- EQ@467..468 "="
- WHITESPACE@468..469 " "
- CURLY_GROUP@469..474
- L_CURLY@469..470 "{"
- WORD@470..473 "sep"
- R_CURLY@473..474 "}"
- COMMA@474..475 ","
- WHITESPACE@475..480 "\n "
- FIELD@480..498
- NAME@480..485 "pages"
- WHITESPACE@485..486 " "
- EQ@486..487 "="
- WHITESPACE@487..488 " "
- CURLY_GROUP@488..497
- L_CURLY@488..489 "{"
- WORD@489..496 "264-323"
- R_CURLY@496..497 "}"
- COMMA@497..498 ","
- WHITESPACE@498..503 "\n "
- FIELD@503..519
- NAME@503..511 "numpages"
- WHITESPACE@511..512 " "
- EQ@512..513 "="
- WHITESPACE@513..514 " "
- CURLY_GROUP@514..518
- L_CURLY@514..515 "{"
- INTEGER@515..517 "60"
- R_CURLY@517..518 "}"
- COMMA@518..519 ","
- WHITESPACE@519..524 "\n "
- FIELD@524..673
- NAME@524..532 "keywords"
- WHITESPACE@532..533 " "
- EQ@533..534 "="
- WHITESPACE@534..535 " "
- CURLY_GROUP@535..672
- L_CURLY@535..536 "{"
- WORD@536..547 "incremental"
- WHITESPACE@547..548 " "
- WORD@548..558 "clustering"
- COMMA@558..559 ","
- WHITESPACE@559..560 " "
- WORD@560..570 "clustering"
- WHITESPACE@570..571 " "
- WORD@571..583 "applications"
- COMMA@583..584 ","
- WHITESPACE@584..585 " "
- WORD@585..596 "exploratory"
- WHITESPACE@596..597 " "
- WORD@597..601 "data"
- WHITESPACE@601..602 " "
- WORD@602..610 "analysis"
- COMMA@610..611 ","
- WHITESPACE@611..612 " "
- WORD@612..619 "cluster"
- WHITESPACE@619..620 " "
- WORD@620..628 "analysis"
- COMMA@628..629 ","
- WHITESPACE@629..630 " "
- WORD@630..640 "similarity"
- WHITESPACE@640..641 " "
- WORD@641..648 "indices"
- COMMA@648..649 ","
- WHITESPACE@649..650 " "
- WORD@650..662 "unsupervised"
- WHITESPACE@662..663 " "
- WORD@663..671 "learning"
- R_CURLY@671..672 "}"
- WHITESPACE@672..673 "\n"
- R_DELIM@673..674 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap
deleted file mode 100644
index e93f8ce6cb..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap
+++ /dev/null
@@ -1,302 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/kastenholz_2006.txt
----
-ROOT@0..898
- STRING@0..35
- TYPE@0..7 "@string"
- L_DELIM@7..8 "{"
- NAME@8..13 "jchph"
- WHITESPACE@13..16 " "
- EQ@16..17 "="
- WHITESPACE@17..18 " "
- CURLY_GROUP@18..34
- L_CURLY@18..19 "{"
- WORD@19..21 "J."
- NBSP@21..22 "~"
- WORD@22..27 "Chem."
- WHITESPACE@27..28 " "
- WORD@28..33 "Phys."
- R_CURLY@33..34 "}"
- R_DELIM@34..35 "}"
- JUNK@35..37 "\n\n"
- ENTRY@37..898
- TYPE@37..45 "@article"
- L_DELIM@45..46 "{"
- NAME@46..56 "kastenholz"
- COMMA@56..57 ","
- WHITESPACE@57..62 "\n "
- FIELD@62..130
- NAME@62..68 "author"
- WHITESPACE@68..75 " "
- EQ@75..76 "="
- WHITESPACE@76..77 " "
- CURLY_GROUP@77..129
- L_CURLY@77..78 "{"
- WORD@78..88 "Kastenholz"
- COMMA@88..89 ","
- WHITESPACE@89..90 " "
- WORD@90..92 "M."
- WHITESPACE@92..93 " "
- WORD@93..95 "A."
- WHITESPACE@95..96 " "
- WORD@96..99 "and"
- WHITESPACE@99..100 " "
- WORD@100..101 "H"
- CURLY_GROUP@101..106
- L_CURLY@101..102 "{"
- ACCENT@102..105
- ACCENT_NAME@102..104 "\\\""
- WORD@104..105 "u"
- R_CURLY@105..106 "}"
- WORD@106..115 "nenberger"
- COMMA@115..116 ","
- WHITESPACE@116..117 " "
- WORD@117..125 "Philippe"
- WHITESPACE@125..126 " "
- WORD@126..128 "H."
- R_CURLY@128..129 "}"
- COMMA@129..130 ","
- WHITESPACE@130..135 "\n "
- FIELD@135..275
- NAME@135..140 "title"
- WHITESPACE@140..148 " "
- EQ@148..149 "="
- WHITESPACE@149..150 " "
- CURLY_GROUP@150..274
- L_CURLY@150..151 "{"
- WORD@151..162 "Computation"
- WHITESPACE@162..163 " "
- WORD@163..165 "of"
- WHITESPACE@165..166 " "
- WORD@166..177 "methodology"
- COMMAND@177..184
- COMMAND_NAME@177..184 "\\hyphen"
- WHITESPACE@184..185 " "
- WORD@185..196 "independent"
- WHITESPACE@196..197 " "
- WORD@197..202 "ionic"
- WHITESPACE@202..203 " "
- WORD@203..212 "solvation"
- WHITESPACE@212..233 "\n "
- WORD@233..237 "free"
- WHITESPACE@237..238 " "
- WORD@238..246 "energies"
- WHITESPACE@246..247 " "
- WORD@247..251 "from"
- WHITESPACE@251..252 " "
- WORD@252..261 "molecular"
- WHITESPACE@261..262 " "
- WORD@262..273 "simulations"
- R_CURLY@273..274 "}"
- COMMA@274..275 ","
- WHITESPACE@275..280 "\n "
- FIELD@280..301
- NAME@280..292 "journaltitle"
- WHITESPACE@292..293 " "
- EQ@293..294 "="
- WHITESPACE@294..295 " "
- LITERAL@295..300
- NAME@295..300 "jchph"
- COMMA@300..301 ","
- WHITESPACE@301..306 "\n "
- FIELD@306..326
- NAME@306..310 "date"
- WHITESPACE@310..319 " "
- EQ@319..320 "="
- WHITESPACE@320..321 " "
- LITERAL@321..325
- INTEGER@321..325 "2006"
- COMMA@325..326 ","
- WHITESPACE@326..331 "\n "
- FIELD@331..404
- NAME@331..339 "subtitle"
- WHITESPACE@339..344 " "
- EQ@344..345 "="
- WHITESPACE@345..346 " "
- CURLY_GROUP@346..403
- L_CURLY@346..347 "{"
- CURLY_GROUP@347..350
- L_CURLY@347..348 "{"
- WORD@348..349 "I"
- R_CURLY@349..350 "}"
- WORD@350..351 "."
- WHITESPACE@351..352 " "
- CURLY_GROUP@352..357
- L_CURLY@352..353 "{"
- WORD@353..356 "The"
- R_CURLY@356..357 "}"
- WHITESPACE@357..358 " "
- WORD@358..371 "electrostatic"
- WHITESPACE@371..372 " "
- WORD@372..381 "potential"
- WHITESPACE@381..382 " "
- WORD@382..384 "in"
- WHITESPACE@384..385 " "
- WORD@385..394 "molecular"
- WHITESPACE@394..395 " "
- WORD@395..402 "liquids"
- R_CURLY@402..403 "}"
- COMMA@403..404 ","
- WHITESPACE@404..409 "\n "
- FIELD@409..428
- NAME@409..415 "volume"
- WHITESPACE@415..422 " "
- EQ@422..423 "="
- WHITESPACE@423..424 " "
- LITERAL@424..427
- INTEGER@424..427 "124"
- COMMA@427..428 ","
- WHITESPACE@428..433 "\n "
- FIELD@433..455
- NAME@433..436 "eid"
- WHITESPACE@436..446 " "
- EQ@446..447 "="
- WHITESPACE@447..448 " "
- LITERAL@448..454
- INTEGER@448..454 "124106"
- COMMA@454..455 ","
- WHITESPACE@455..460 "\n "
- FIELD@460..495
- NAME@460..463 "doi"
- WHITESPACE@463..473 " "
- EQ@473..474 "="
- WHITESPACE@474..475 " "
- CURLY_GROUP@475..494
- L_CURLY@475..476 "{"
- WORD@476..493 "10.1063/1.2172593"
- R_CURLY@493..494 "}"
- COMMA@494..495 ","
- WHITESPACE@495..500 "\n "
- FIELD@500..525
- NAME@500..506 "langid"
- WHITESPACE@506..513 " "
- EQ@513..514 "="
- WHITESPACE@514..515 " "
- CURLY_GROUP@515..524
- L_CURLY@515..516 "{"
- WORD@516..523 "english"
- R_CURLY@523..524 "}"
- COMMA@524..525 ","
- WHITESPACE@525..530 "\n "
- FIELD@530..564
- NAME@530..540 "langidopts"
- WHITESPACE@540..543 " "
- EQ@543..544 "="
- WHITESPACE@544..545 " "
- CURLY_GROUP@545..563
- L_CURLY@545..546 "{"
- WORD@546..562 "variant=american"
- R_CURLY@562..563 "}"
- COMMA@563..564 ","
- WHITESPACE@564..569 "\n "
- FIELD@569..631
- NAME@569..579 "indextitle"
- WHITESPACE@579..582 " "
- EQ@582..583 "="
- WHITESPACE@583..584 " "
- CURLY_GROUP@584..630
- L_CURLY@584..585 "{"
- WORD@585..596 "Computation"
- WHITESPACE@596..597 " "
- WORD@597..599 "of"
- WHITESPACE@599..600 " "
- WORD@600..605 "ionic"
- WHITESPACE@605..606 " "
- WORD@606..615 "solvation"
- WHITESPACE@615..616 " "
- WORD@616..620 "free"
- WHITESPACE@620..621 " "
- WORD@621..629 "energies"
- R_CURLY@629..630 "}"
- COMMA@630..631 ","
- WHITESPACE@631..636 "\n "
- FIELD@636..896
- NAME@636..646 "annotation"
- WHITESPACE@646..649 " "
- EQ@649..650 "="
- WHITESPACE@650..651 " "
- CURLY_GROUP@651..895
- L_CURLY@651..652 "{"
- WORD@652..654 "An"
- WHITESPACE@654..655 " "
- COMMAND@655..662
- COMMAND_NAME@655..662 "\\texttt"
- CURLY_GROUP@662..671
- L_CURLY@662..663 "{"
- WORD@663..670 "article"
- R_CURLY@670..671 "}"
- WHITESPACE@671..672 " "
- WORD@672..677 "entry"
- WHITESPACE@677..678 " "
- WORD@678..682 "with"
- WHITESPACE@682..683 " "
- WORD@683..685 "an"
- WHITESPACE@685..686 " "
- COMMAND@686..693
- COMMAND_NAME@686..693 "\\texttt"
- CURLY_GROUP@693..698
- L_CURLY@693..694 "{"
- WORD@694..697 "eid"
- R_CURLY@697..698 "}"
- WHITESPACE@698..699 " "
- WORD@699..702 "and"
- WHITESPACE@702..703 " "
- WORD@703..704 "a"
- WHITESPACE@704..725 "\n "
- COMMAND@725..732
- COMMAND_NAME@725..732 "\\texttt"
- CURLY_GROUP@732..737
- L_CURLY@732..733 "{"
- WORD@733..736 "doi"
- R_CURLY@736..737 "}"
- WHITESPACE@737..738 " "
- WORD@738..744 "field."
- WHITESPACE@744..745 " "
- WORD@745..749 "Note"
- WHITESPACE@749..750 " "
- WORD@750..754 "that"
- WHITESPACE@754..755 " "
- WORD@755..758 "the"
- WHITESPACE@758..759 " "
- COMMAND@759..766
- COMMAND_NAME@759..766 "\\textsc"
- CURLY_GROUP@766..771
- L_CURLY@766..767 "{"
- WORD@767..770 "doi"
- R_CURLY@770..771 "}"
- WHITESPACE@771..772 " "
- WORD@772..774 "is"
- WHITESPACE@774..775 " "
- WORD@775..786 "transformed"
- WHITESPACE@786..807 "\n "
- WORD@807..811 "into"
- WHITESPACE@811..812 " "
- WORD@812..813 "a"
- WHITESPACE@813..814 " "
- WORD@814..823 "clickable"
- WHITESPACE@823..824 " "
- WORD@824..828 "link"
- WHITESPACE@828..829 " "
- WORD@829..831 "if"
- WHITESPACE@831..832 " "
- COMMAND@832..839
- COMMAND_NAME@832..839 "\\texttt"
- CURLY_GROUP@839..849
- L_CURLY@839..840 "{"
- WORD@840..848 "hyperref"
- R_CURLY@848..849 "}"
- WHITESPACE@849..850 " "
- WORD@850..857 "support"
- WHITESPACE@857..858 " "
- WORD@858..861 "has"
- WHITESPACE@861..862 " "
- WORD@862..866 "been"
- WHITESPACE@866..887 "\n "
- WORD@887..894 "enabled"
- R_CURLY@894..895 "}"
- COMMA@895..896 ","
- WHITESPACE@896..897 "\n"
- R_DELIM@897..898 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__knuth_1984.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__knuth_1984.txt.snap
deleted file mode 100644
index 59e678cbee..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__knuth_1984.txt.snap
+++ /dev/null
@@ -1,320 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/knuth_1984.txt
----
-ROOT@0..993
- ENTRY@0..993
- TYPE@0..5 "@book"
- L_DELIM@5..6 "{"
- NAME@6..16 "knuth:ct:a"
- COMMA@16..17 ","
- WHITESPACE@17..22 "\n "
- FIELD@22..56
- NAME@22..28 "author"
- WHITESPACE@28..35 " "
- EQ@35..36 "="
- WHITESPACE@36..37 " "
- CURLY_GROUP@37..55
- L_CURLY@37..38 "{"
- WORD@38..43 "Knuth"
- COMMA@43..44 ","
- WHITESPACE@44..45 " "
- WORD@45..51 "Donald"
- WHITESPACE@51..52 " "
- WORD@52..54 "E."
- R_CURLY@54..55 "}"
- COMMA@55..56 ","
- WHITESPACE@56..61 "\n "
- FIELD@61..94
- NAME@61..66 "title"
- WHITESPACE@66..74 " "
- EQ@74..75 "="
- WHITESPACE@75..76 " "
- CURLY_GROUP@76..93
- L_CURLY@76..77 "{"
- WORD@77..80 "The"
- WHITESPACE@80..81 " "
- CURLY_GROUP@81..92
- L_CURLY@81..82 "{"
- COMMAND@82..86
- COMMAND_NAME@82..86 "\\TeX"
- WHITESPACE@86..87 " "
- WORD@87..91 "book"
- R_CURLY@91..92 "}"
- R_CURLY@92..93 "}"
- COMMA@93..94 ","
- WHITESPACE@94..99 "\n "
- FIELD@99..119
- NAME@99..103 "date"
- WHITESPACE@103..112 " "
- EQ@112..113 "="
- WHITESPACE@113..114 " "
- LITERAL@114..118
- INTEGER@114..118 "1984"
- COMMA@118..119 ","
- WHITESPACE@119..124 "\n "
- FIELD@124..166
- NAME@124..133 "maintitle"
- WHITESPACE@133..137 " "
- EQ@137..138 "="
- WHITESPACE@138..139 " "
- CURLY_GROUP@139..165
- L_CURLY@139..140 "{"
- WORD@140..149 "Computers"
- WHITESPACE@149..150 " "
- COMMAND@150..152
- COMMAND_NAME@150..152 "\\&"
- WHITESPACE@152..153 " "
- WORD@153..164 "Typesetting"
- R_CURLY@164..165 "}"
- COMMA@165..166 ","
- WHITESPACE@166..171 "\n "
- FIELD@171..190
- NAME@171..177 "volume"
- WHITESPACE@177..184 " "
- EQ@184..185 "="
- WHITESPACE@185..186 " "
- CURLY_GROUP@186..189
- L_CURLY@186..187 "{"
- WORD@187..188 "A"
- R_CURLY@188..189 "}"
- COMMA@189..190 ","
- WHITESPACE@190..195 "\n "
- FIELD@195..227
- NAME@195..204 "publisher"
- WHITESPACE@204..208 " "
- EQ@208..209 "="
- WHITESPACE@209..210 " "
- CURLY_GROUP@210..226
- L_CURLY@210..211 "{"
- WORD@211..225 "Addison-Wesley"
- R_CURLY@225..226 "}"
- COMMA@226..227 ","
- WHITESPACE@227..232 "\n "
- FIELD@232..264
- NAME@232..240 "location"
- WHITESPACE@240..245 " "
- EQ@245..246 "="
- WHITESPACE@246..247 " "
- CURLY_GROUP@247..263
- L_CURLY@247..248 "{"
- WORD@248..255 "Reading"
- COMMA@255..256 ","
- WHITESPACE@256..257 " "
- WORD@257..262 "Mass."
- R_CURLY@262..263 "}"
- COMMA@263..264 ","
- WHITESPACE@264..269 "\n "
- FIELD@269..294
- NAME@269..275 "langid"
- WHITESPACE@275..282 " "
- EQ@282..283 "="
- WHITESPACE@283..284 " "
- CURLY_GROUP@284..293
- L_CURLY@284..285 "{"
- WORD@285..292 "english"
- R_CURLY@292..293 "}"
- COMMA@293..294 ","
- WHITESPACE@294..299 "\n "
- FIELD@299..333
- NAME@299..309 "langidopts"
- WHITESPACE@309..312 " "
- EQ@312..313 "="
- WHITESPACE@313..314 " "
- CURLY_GROUP@314..332
- L_CURLY@314..315 "{"
- WORD@315..331 "variant=american"
- R_CURLY@331..332 "}"
- COMMA@332..333 ","
- WHITESPACE@333..338 "\n "
- FIELD@338..381
- NAME@338..347 "sorttitle"
- WHITESPACE@347..351 " "
- EQ@351..352 "="
- WHITESPACE@352..353 " "
- CURLY_GROUP@353..380
- L_CURLY@353..354 "{"
- WORD@354..363 "Computers"
- WHITESPACE@363..364 " "
- WORD@364..365 "&"
- WHITESPACE@365..366 " "
- WORD@366..377 "Typesetting"
- WHITESPACE@377..378 " "
- WORD@378..379 "A"
- R_CURLY@379..380 "}"
- COMMA@380..381 ","
- WHITESPACE@381..386 "\n "
- FIELD@386..416
- NAME@386..400 "indexsorttitle"
- EQ@400..401 "="
- WHITESPACE@401..402 " "
- CURLY_GROUP@402..415
- L_CURLY@402..403 "{"
- WORD@403..406 "The"
- WHITESPACE@406..407 " "
- WORD@407..414 "TeXbook"
- R_CURLY@414..415 "}"
- COMMA@415..416 ","
- WHITESPACE@416..421 "\n "
- FIELD@421..461
- NAME@421..431 "indextitle"
- WHITESPACE@431..434 " "
- EQ@434..435 "="
- WHITESPACE@435..436 " "
- CURLY_GROUP@436..460
- L_CURLY@436..437 "{"
- COMMAND@437..445
- COMMAND_NAME@437..445 "\\protect"
- COMMAND@445..449
- COMMAND_NAME@445..449 "\\TeX"
- WHITESPACE@449..450 " "
- WORD@450..454 "book"
- COMMA@454..455 ","
- WHITESPACE@455..456 " "
- WORD@456..459 "The"
- R_CURLY@459..460 "}"
- COMMA@460..461 ","
- WHITESPACE@461..466 "\n "
- FIELD@466..493
- NAME@466..476 "shorttitle"
- WHITESPACE@476..479 " "
- EQ@479..480 "="
- WHITESPACE@480..481 " "
- CURLY_GROUP@481..492
- L_CURLY@481..482 "{"
- COMMAND@482..486
- COMMAND_NAME@482..486 "\\TeX"
- WHITESPACE@486..487 " "
- WORD@487..491 "book"
- R_CURLY@491..492 "}"
- COMMA@492..493 ","
- WHITESPACE@493..498 "\n "
- FIELD@498..991
- NAME@498..508 "annotation"
- WHITESPACE@508..511 " "
- EQ@511..512 "="
- WHITESPACE@512..513 " "
- CURLY_GROUP@513..990
- L_CURLY@513..514 "{"
- WORD@514..517 "The"
- WHITESPACE@517..518 " "
- WORD@518..523 "first"
- WHITESPACE@523..524 " "
- WORD@524..530 "volume"
- WHITESPACE@530..531 " "
- WORD@531..533 "of"
- WHITESPACE@533..534 " "
- WORD@534..535 "a"
- WHITESPACE@535..536 " "
- WORD@536..547 "five-volume"
- WHITESPACE@547..548 " "
- WORD@548..553 "book."
- WHITESPACE@553..554 " "
- WORD@554..558 "Note"
- WHITESPACE@558..559 " "
- WORD@559..562 "the"
- WHITESPACE@562..583 "\n "
- COMMAND@583..590
- COMMAND_NAME@583..590 "\\texttt"
- CURLY_GROUP@590..601
- L_CURLY@590..591 "{"
- WORD@591..600 "sorttitle"
- R_CURLY@600..601 "}"
- WHITESPACE@601..602 " "
- WORD@602..608 "field."
- WHITESPACE@608..609 " "
- WORD@609..611 "We"
- WHITESPACE@611..612 " "
- WORD@612..616 "want"
- WHITESPACE@616..617 " "
- WORD@617..621 "this"
- WHITESPACE@621..642 "\n "
- WORD@642..648 "volume"
- WHITESPACE@648..649 " "
- WORD@649..651 "to"
- WHITESPACE@651..652 " "
- WORD@652..654 "be"
- WHITESPACE@654..655 " "
- WORD@655..661 "listed"
- WHITESPACE@661..662 " "
- WORD@662..667 "after"
- WHITESPACE@667..668 " "
- WORD@668..671 "the"
- WHITESPACE@671..672 " "
- WORD@672..677 "entry"
- WHITESPACE@677..678 " "
- WORD@678..687 "referring"
- WHITESPACE@687..688 " "
- WORD@688..690 "to"
- WHITESPACE@690..691 " "
- WORD@691..694 "the"
- WHITESPACE@694..695 " "
- WORD@695..701 "entire"
- WHITESPACE@701..722 "\n "
- WORD@722..733 "five-volume"
- WHITESPACE@733..734 " "
- WORD@734..738 "set."
- WHITESPACE@738..739 " "
- WORD@739..743 "Also"
- WHITESPACE@743..744 " "
- WORD@744..748 "note"
- WHITESPACE@748..749 " "
- WORD@749..752 "the"
- WHITESPACE@752..753 " "
- COMMAND@753..760
- COMMAND_NAME@753..760 "\\texttt"
- CURLY_GROUP@760..772
- L_CURLY@760..761 "{"
- WORD@761..771 "indextitle"
- R_CURLY@771..772 "}"
- WHITESPACE@772..773 " "
- WORD@773..776 "and"
- WHITESPACE@776..797 "\n "
- COMMAND@797..804
- COMMAND_NAME@797..804 "\\texttt"
- CURLY_GROUP@804..820
- L_CURLY@804..805 "{"
- WORD@805..819 "indexsorttitle"
- R_CURLY@819..820 "}"
- WHITESPACE@820..821 " "
- WORD@821..828 "fields."
- WHITESPACE@828..829 " "
- WORD@829..837 "Indexing"
- WHITESPACE@837..838 " "
- WORD@838..846 "packages"
- WHITESPACE@846..847 " "
- WORD@847..851 "that"
- WHITESPACE@851..852 " "
- WORD@852..857 "don't"
- WHITESPACE@857..878 "\n "
- WORD@878..886 "generate"
- WHITESPACE@886..887 " "
- WORD@887..893 "robust"
- WHITESPACE@893..894 " "
- WORD@894..899 "index"
- WHITESPACE@899..900 " "
- WORD@900..907 "entries"
- WHITESPACE@907..908 " "
- WORD@908..915 "require"
- WHITESPACE@915..916 " "
- WORD@916..920 "some"
- WHITESPACE@920..921 " "
- WORD@921..928 "control"
- WHITESPACE@928..929 " "
- WORD@929..938 "sequences"
- WHITESPACE@938..959 "\n "
- WORD@959..961 "to"
- WHITESPACE@961..962 " "
- WORD@962..964 "be"
- WHITESPACE@964..965 " "
- WORD@965..974 "protected"
- WHITESPACE@974..975 " "
- WORD@975..979 "from"
- WHITESPACE@979..980 " "
- WORD@980..989 "expansion"
- R_CURLY@989..990 "}"
- COMMA@990..991 ","
- WHITESPACE@991..992 "\n"
- R_DELIM@992..993 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__matuz_1990.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__matuz_1990.txt.snap
deleted file mode 100644
index 75f0293f23..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__matuz_1990.txt.snap
+++ /dev/null
@@ -1,176 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/matuz_1990.txt
----
-ROOT@0..517
- ENTRY@0..517
- TYPE@0..11 "@collection"
- L_DELIM@11..12 "{"
- NAME@12..23 "matuz:doody"
- COMMA@23..24 ","
- WHITESPACE@24..29 "\n "
- FIELD@29..59
- NAME@29..35 "editor"
- WHITESPACE@35..42 " "
- EQ@42..43 "="
- WHITESPACE@43..44 " "
- CURLY_GROUP@44..58
- L_CURLY@44..45 "{"
- WORD@45..50 "Matuz"
- COMMA@50..51 ","
- WHITESPACE@51..52 " "
- WORD@52..57 "Roger"
- R_CURLY@57..58 "}"
- COMMA@58..59 ","
- WHITESPACE@59..64 "\n "
- FIELD@64..113
- NAME@64..69 "title"
- WHITESPACE@69..77 " "
- EQ@77..78 "="
- WHITESPACE@78..79 " "
- CURLY_GROUP@79..112
- L_CURLY@79..80 "{"
- WORD@80..92 "Contemporary"
- WHITESPACE@92..93 " "
- WORD@93..101 "Literary"
- WHITESPACE@101..102 " "
- WORD@102..111 "Criticism"
- R_CURLY@111..112 "}"
- COMMA@112..113 ","
- WHITESPACE@113..118 "\n "
- FIELD@118..138
- NAME@118..122 "year"
- WHITESPACE@122..131 " "
- EQ@131..132 "="
- WHITESPACE@132..133 " "
- LITERAL@133..137
- INTEGER@133..137 "1990"
- COMMA@137..138 ","
- WHITESPACE@138..143 "\n "
- FIELD@143..161
- NAME@143..149 "volume"
- WHITESPACE@149..156 " "
- EQ@156..157 "="
- WHITESPACE@157..158 " "
- LITERAL@158..160
- INTEGER@158..160 "61"
- COMMA@160..161 ","
- WHITESPACE@161..166 "\n "
- FIELD@166..188
- NAME@166..175 "publisher"
- WHITESPACE@175..179 " "
- EQ@179..180 "="
- WHITESPACE@180..181 " "
- CURLY_GROUP@181..187
- L_CURLY@181..182 "{"
- WORD@182..186 "Gale"
- R_CURLY@186..187 "}"
- COMMA@187..188 ","
- WHITESPACE@188..193 "\n "
- FIELD@193..218
- NAME@193..201 "location"
- WHITESPACE@201..206 " "
- EQ@206..207 "="
- WHITESPACE@207..208 " "
- CURLY_GROUP@208..217
- L_CURLY@208..209 "{"
- WORD@209..216 "Detroit"
- R_CURLY@216..217 "}"
- COMMA@217..218 ","
- WHITESPACE@218..223 "\n "
- FIELD@223..248
- NAME@223..228 "pages"
- WHITESPACE@228..236 " "
- EQ@236..237 "="
- WHITESPACE@237..238 " "
- CURLY_GROUP@238..247
- L_CURLY@238..239 "{"
- WORD@239..246 "204-208"
- R_CURLY@246..247 "}"
- COMMA@247..248 ","
- WHITESPACE@248..253 "\n "
- FIELD@253..278
- NAME@253..259 "langid"
- WHITESPACE@259..266 " "
- EQ@266..267 "="
- WHITESPACE@267..268 " "
- CURLY_GROUP@268..277
- L_CURLY@268..269 "{"
- WORD@269..276 "english"
- R_CURLY@276..277 "}"
- COMMA@277..278 ","
- WHITESPACE@278..283 "\n "
- FIELD@283..317
- NAME@283..293 "langidopts"
- WHITESPACE@293..296 " "
- EQ@296..297 "="
- WHITESPACE@297..298 " "
- CURLY_GROUP@298..316
- L_CURLY@298..299 "{"
- WORD@299..315 "variant=american"
- R_CURLY@315..316 "}"
- COMMA@316..317 ","
- WHITESPACE@317..322 "\n "
- FIELD@322..515
- NAME@322..332 "annotation"
- WHITESPACE@332..335 " "
- EQ@335..336 "="
- WHITESPACE@336..337 " "
- CURLY_GROUP@337..514
- L_CURLY@337..338 "{"
- WORD@338..339 "A"
- WHITESPACE@339..340 " "
- COMMAND@340..347
- COMMAND_NAME@340..347 "\\texttt"
- CURLY_GROUP@347..359
- L_CURLY@347..348 "{"
- WORD@348..358 "collection"
- R_CURLY@358..359 "}"
- WHITESPACE@359..360 " "
- WORD@360..365 "entry"
- WHITESPACE@365..366 " "
- WORD@366..375 "providing"
- WHITESPACE@375..376 " "
- WORD@376..379 "the"
- WHITESPACE@379..380 " "
- WORD@380..387 "excerpt"
- WHITESPACE@387..388 " "
- WORD@388..399 "information"
- WHITESPACE@399..420 "\n "
- WORD@420..423 "for"
- WHITESPACE@423..424 " "
- WORD@424..427 "the"
- WHITESPACE@427..428 " "
- COMMAND@428..435
- COMMAND_NAME@428..435 "\\texttt"
- CURLY_GROUP@435..442
- L_CURLY@435..436 "{"
- WORD@436..441 "doody"
- R_CURLY@441..442 "}"
- WHITESPACE@442..443 " "
- WORD@443..449 "entry."
- WHITESPACE@449..450 " "
- WORD@450..454 "Note"
- WHITESPACE@454..455 " "
- WORD@455..458 "the"
- WHITESPACE@458..459 " "
- WORD@459..465 "format"
- WHITESPACE@465..466 " "
- WORD@466..468 "of"
- WHITESPACE@468..469 " "
- WORD@469..472 "the"
- WHITESPACE@472..493 "\n "
- COMMAND@493..500
- COMMAND_NAME@493..500 "\\texttt"
- CURLY_GROUP@500..507
- L_CURLY@500..501 "{"
- WORD@501..506 "pages"
- R_CURLY@506..507 "}"
- WHITESPACE@507..508 " "
- WORD@508..513 "field"
- R_CURLY@513..514 "}"
- COMMA@514..515 ","
- WHITESPACE@515..516 "\n"
- R_DELIM@516..517 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap
deleted file mode 100644
index 97fe0cf087..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap
+++ /dev/null
@@ -1,368 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/nietzsche_1998.txt
----
-ROOT@0..1112
- STRING@0..49
- TYPE@0..7 "@string"
- L_DELIM@7..8 "{"
- NAME@8..11 "dtv"
- WHITESPACE@11..16 " "
- EQ@16..17 "="
- WHITESPACE@17..18 " "
- CURLY_GROUP@18..48
- L_CURLY@18..19 "{"
- WORD@19..28 "Deutscher"
- WHITESPACE@28..29 " "
- WORD@29..47 "Taschenbuch-Verlag"
- R_CURLY@47..48 "}"
- R_DELIM@48..49 "}"
- JUNK@49..51 "\n\n"
- ENTRY@51..1112
- TYPE@51..58 "@mvbook"
- L_DELIM@58..59 "{"
- NAME@59..72 "nietzsche:ksa"
- COMMA@72..73 ","
- WHITESPACE@73..78 "\n "
- FIELD@78..116
- NAME@78..84 "author"
- WHITESPACE@84..91 " "
- EQ@91..92 "="
- WHITESPACE@92..93 " "
- CURLY_GROUP@93..115
- L_CURLY@93..94 "{"
- WORD@94..103 "Nietzsche"
- COMMA@103..104 ","
- WHITESPACE@104..105 " "
- WORD@105..114 "Friedrich"
- R_CURLY@114..115 "}"
- COMMA@115..116 ","
- WHITESPACE@116..121 "\n "
- FIELD@121..158
- NAME@121..126 "title"
- WHITESPACE@126..134 " "
- EQ@134..135 "="
- WHITESPACE@135..136 " "
- CURLY_GROUP@136..157
- L_CURLY@136..137 "{"
- WORD@137..138 "S"
- CURLY_GROUP@138..143
- L_CURLY@138..139 "{"
- ACCENT@139..142
- ACCENT_NAME@139..141 "\\\""
- WORD@141..142 "a"
- R_CURLY@142..143 "}"
- WORD@143..150 "mtliche"
- WHITESPACE@150..151 " "
- WORD@151..156 "Werke"
- R_CURLY@156..157 "}"
- COMMA@157..158 ","
- WHITESPACE@158..163 "\n "
- FIELD@163..183
- NAME@163..167 "date"
- WHITESPACE@167..176 " "
- EQ@176..177 "="
- WHITESPACE@177..178 " "
- LITERAL@178..182
- INTEGER@178..182 "1988"
- COMMA@182..183 ","
- WHITESPACE@183..188 "\n "
- FIELD@188..243
- NAME@188..194 "editor"
- WHITESPACE@194..201 " "
- EQ@201..202 "="
- WHITESPACE@202..203 " "
- CURLY_GROUP@203..242
- L_CURLY@203..204 "{"
- WORD@204..209 "Colli"
- COMMA@209..210 ","
- WHITESPACE@210..211 " "
- WORD@211..218 "Giorgio"
- WHITESPACE@218..219 " "
- WORD@219..222 "and"
- WHITESPACE@222..223 " "
- WORD@223..232 "Montinari"
- COMMA@232..233 ","
- WHITESPACE@233..234 " "
- WORD@234..241 "Mazzino"
- R_CURLY@241..242 "}"
- COMMA@242..243 ","
- WHITESPACE@243..248 "\n "
- FIELD@248..265
- NAME@248..255 "edition"
- WHITESPACE@255..261 " "
- EQ@261..262 "="
- WHITESPACE@262..263 " "
- LITERAL@263..264
- INTEGER@263..264 "2"
- COMMA@264..265 ","
- WHITESPACE@265..270 "\n "
- FIELD@270..288
- NAME@270..277 "volumes"
- WHITESPACE@277..283 " "
- EQ@283..284 "="
- WHITESPACE@284..285 " "
- LITERAL@285..287
- INTEGER@285..287 "15"
- COMMA@287..288 ","
- WHITESPACE@288..293 "\n "
- FIELD@293..339
- NAME@293..302 "publisher"
- WHITESPACE@302..306 " "
- EQ@306..307 "="
- WHITESPACE@307..308 " "
- JOIN@308..338
- LITERAL@308..311
- NAME@308..311 "dtv"
- WHITESPACE@311..312 " "
- POUND@312..313 "#"
- WHITESPACE@313..314 " "
- CURLY_GROUP@314..338
- L_CURLY@314..315 "{"
- WHITESPACE@315..316 " "
- WORD@316..319 "and"
- WHITESPACE@319..320 " "
- WORD@320..326 "Walter"
- WHITESPACE@326..327 " "
- WORD@327..329 "de"
- WHITESPACE@329..330 " "
- WORD@330..337 "Gruyter"
- R_CURLY@337..338 "}"
- COMMA@338..339 ","
- WHITESPACE@339..344 "\n "
- FIELD@344..397
- NAME@344..352 "location"
- WHITESPACE@352..357 " "
- EQ@357..358 "="
- WHITESPACE@358..359 " "
- CURLY_GROUP@359..396
- L_CURLY@359..360 "{"
- WORD@360..361 "M"
- CURLY_GROUP@361..366
- L_CURLY@361..362 "{"
- ACCENT@362..365
- ACCENT_NAME@362..364 "\\\""
- WORD@364..365 "u"
- R_CURLY@365..366 "}"
- WORD@366..371 "nchen"
- WHITESPACE@371..372 " "
- WORD@372..375 "and"
- WHITESPACE@375..376 " "
- WORD@376..382 "Berlin"
- WHITESPACE@382..383 " "
- WORD@383..386 "and"
- WHITESPACE@386..387 " "
- WORD@387..390 "New"
- WHITESPACE@390..391 " "
- WORD@391..395 "York"
- R_CURLY@395..396 "}"
- COMMA@396..397 ","
- WHITESPACE@397..402 "\n "
- FIELD@402..426
- NAME@402..408 "langid"
- WHITESPACE@408..415 " "
- EQ@415..416 "="
- WHITESPACE@416..417 " "
- CURLY_GROUP@417..425
- L_CURLY@417..418 "{"
- WORD@418..424 "german"
- R_CURLY@424..425 "}"
- COMMA@425..426 ","
- WHITESPACE@426..431 "\n "
- FIELD@431..461
- NAME@431..440 "sorttitle"
- WHITESPACE@440..444 " "
- EQ@444..445 "="
- WHITESPACE@445..446 " "
- CURLY_GROUP@446..460
- L_CURLY@446..447 "{"
- WORD@447..459 "Werke-00-000"
- R_CURLY@459..460 "}"
- COMMA@460..461 ","
- WHITESPACE@461..466 "\n "
- FIELD@466..500
- NAME@466..480 "indexsorttitle"
- EQ@480..481 "="
- WHITESPACE@481..482 " "
- CURLY_GROUP@482..499
- L_CURLY@482..483 "{"
- WORD@483..492 "Samtliche"
- WHITESPACE@492..493 " "
- WORD@493..498 "Werke"
- R_CURLY@498..499 "}"
- COMMA@499..500 ","
- WHITESPACE@500..505 "\n "
- FIELD@505..547
- NAME@505..513 "subtitle"
- WHITESPACE@513..518 " "
- EQ@518..519 "="
- WHITESPACE@519..520 " "
- CURLY_GROUP@520..546
- L_CURLY@520..521 "{"
- WORD@521..530 "Kritische"
- WHITESPACE@530..531 " "
- WORD@531..545 "Studienausgabe"
- R_CURLY@545..546 "}"
- COMMA@546..547 ","
- WHITESPACE@547..552 "\n "
- FIELD@552..1110
- NAME@552..562 "annotation"
- WHITESPACE@562..565 " "
- EQ@565..566 "="
- WHITESPACE@566..567 " "
- CURLY_GROUP@567..1109
- L_CURLY@567..568 "{"
- WORD@568..571 "The"
- WHITESPACE@571..572 " "
- WORD@572..580 "critical"
- WHITESPACE@580..581 " "
- WORD@581..588 "edition"
- WHITESPACE@588..589 " "
- WORD@589..591 "of"
- WHITESPACE@591..592 " "
- WORD@592..603 "Nietzsche's"
- WHITESPACE@603..604 " "
- WORD@604..610 "works."
- WHITESPACE@610..611 " "
- WORD@611..615 "This"
- WHITESPACE@615..616 " "
- WORD@616..618 "is"
- WHITESPACE@618..619 " "
- WORD@619..620 "a"
- WHITESPACE@620..641 "\n "
- COMMAND@641..648
- COMMAND_NAME@641..648 "\\texttt"
- CURLY_GROUP@648..656
- L_CURLY@648..649 "{"
- WORD@649..655 "mvbook"
- R_CURLY@655..656 "}"
- WHITESPACE@656..657 " "
- WORD@657..662 "entry"
- WHITESPACE@662..663 " "
- WORD@663..672 "referring"
- WHITESPACE@672..673 " "
- WORD@673..675 "to"
- WHITESPACE@675..676 " "
- WORD@676..677 "a"
- WHITESPACE@677..678 " "
- WORD@678..687 "15-volume"
- WHITESPACE@687..688 " "
- WORD@688..692 "work"
- WHITESPACE@692..693 " "
- WORD@693..695 "as"
- WHITESPACE@695..696 " "
- WORD@696..697 "a"
- WHITESPACE@697..718 "\n "
- WORD@718..724 "whole."
- WHITESPACE@724..725 " "
- WORD@725..729 "Note"
- WHITESPACE@729..730 " "
- WORD@730..733 "the"
- WHITESPACE@733..734 " "
- COMMAND@734..741
- COMMAND_NAME@734..741 "\\texttt"
- CURLY_GROUP@741..750
- L_CURLY@741..742 "{"
- WORD@742..749 "volumes"
- R_CURLY@749..750 "}"
- WHITESPACE@750..751 " "
- WORD@751..756 "field"
- WHITESPACE@756..757 " "
- WORD@757..760 "and"
- WHITESPACE@760..761 " "
- WORD@761..764 "the"
- WHITESPACE@764..765 " "
- WORD@765..771 "format"
- WHITESPACE@771..772 " "
- WORD@772..774 "of"
- WHITESPACE@774..775 " "
- WORD@775..778 "the"
- WHITESPACE@778..799 "\n "
- COMMAND@799..806
- COMMAND_NAME@799..806 "\\texttt"
- CURLY_GROUP@806..817
- L_CURLY@806..807 "{"
- WORD@807..816 "publisher"
- R_CURLY@816..817 "}"
- WHITESPACE@817..818 " "
- WORD@818..821 "and"
- WHITESPACE@821..822 " "
- COMMAND@822..829
- COMMAND_NAME@822..829 "\\texttt"
- CURLY_GROUP@829..839
- L_CURLY@829..830 "{"
- WORD@830..838 "location"
- R_CURLY@838..839 "}"
- WHITESPACE@839..840 " "
- WORD@840..846 "fields"
- WHITESPACE@846..847 " "
- WORD@847..849 "in"
- WHITESPACE@849..850 " "
- WORD@850..853 "the"
- WHITESPACE@853..874 "\n "
- WORD@874..882 "database"
- WHITESPACE@882..883 " "
- WORD@883..888 "file."
- WHITESPACE@888..889 " "
- WORD@889..893 "Also"
- WHITESPACE@893..894 " "
- WORD@894..898 "note"
- WHITESPACE@898..899 " "
- WORD@899..902 "the"
- WHITESPACE@902..903 " "
- COMMAND@903..910
- COMMAND_NAME@903..910 "\\texttt"
- CURLY_GROUP@910..921
- L_CURLY@910..911 "{"
- WORD@911..920 "sorttitle"
- R_CURLY@920..921 "}"
- WHITESPACE@921..922 " "
- WORD@922..925 "and"
- WHITESPACE@925..946 "\n "
- WORD@946..951 "field"
- WHITESPACE@951..952 " "
- WORD@952..957 "which"
- WHITESPACE@957..958 " "
- WORD@958..960 "is"
- WHITESPACE@960..961 " "
- WORD@961..965 "used"
- WHITESPACE@965..966 " "
- WORD@966..968 "to"
- WHITESPACE@968..969 " "
- WORD@969..978 "fine-tune"
- WHITESPACE@978..979 " "
- WORD@979..982 "the"
- WHITESPACE@982..1003 "\n "
- WORD@1003..1010 "sorting"
- WHITESPACE@1010..1011 " "
- WORD@1011..1016 "order"
- WHITESPACE@1016..1017 " "
- WORD@1017..1019 "of"
- WHITESPACE@1019..1020 " "
- WORD@1020..1023 "the"
- WHITESPACE@1023..1024 " "
- WORD@1024..1037 "bibliography."
- WHITESPACE@1037..1038 " "
- WORD@1038..1040 "We"
- WHITESPACE@1040..1041 " "
- WORD@1041..1045 "want"
- WHITESPACE@1045..1046 " "
- WORD@1046..1050 "this"
- WHITESPACE@1050..1051 " "
- WORD@1051..1055 "item"
- WHITESPACE@1055..1056 " "
- WORD@1056..1062 "listed"
- WHITESPACE@1062..1083 "\n "
- WORD@1083..1088 "first"
- WHITESPACE@1088..1089 " "
- WORD@1089..1091 "in"
- WHITESPACE@1091..1092 " "
- WORD@1092..1095 "the"
- WHITESPACE@1095..1096 " "
- WORD@1096..1108 "bibliography"
- R_CURLY@1108..1109 "}"
- COMMA@1109..1110 ","
- WHITESPACE@1110..1111 "\n"
- R_DELIM@1111..1112 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__rivest_1978.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__rivest_1978.txt.snap
deleted file mode 100644
index 11a8f38bac..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__rivest_1978.txt.snap
+++ /dev/null
@@ -1,232 +0,0 @@
----
-source: crates/parser/src/bibtex.rs
-expression: root
-input_file: crates/parser/src/test_data/bibtex/samples/rivest_1978.txt
----
-ROOT@0..557
- ENTRY@0..557
- TYPE@0..8 "@article"
- L_DELIM@8..9 "{"
- NAME@9..30 "10.1145/359340.359342"
- COMMA@30..31 ","
- WHITESPACE@31..36 "\n "
- FIELD@36..92
- NAME@36..42 "author"
- WHITESPACE@42..43 " "
- EQ@43..44 "="
- WHITESPACE@44..45 " "
- CURLY_GROUP@45..91
- L_CURLY@45..46 "{"
- WORD@46..52 "Rivest"
- COMMA@52..53 ","
- WHITESPACE@53..54 " "
- WORD@54..56 "R."
- WHITESPACE@56..57 " "
- WORD@57..59 "L."
- WHITESPACE@59..60 " "
- WORD@60..63 "and"
- WHITESPACE@63..64 " "
- WORD@64..70 "Shamir"
- COMMA@70..71 ","
- WHITESPACE@71..72 " "
- WORD@72..74 "A."
- WHITESPACE@74..75 " "
- WORD@75..78 "and"
- WHITESPACE@78..79 " "
- WORD@79..86 "Adleman"
- COMMA@86..87 ","
- WHITESPACE@87..88 " "
- WORD@88..90 "L."
- R_CURLY@90..91 "}"
- COMMA@91..92 ","
- WHITESPACE@92..97 "\n "
- FIELD@97..178
- NAME@97..102 "title"
- WHITESPACE@102..103 " "
- EQ@103..104 "="
- WHITESPACE@104..105 " "
- CURLY_GROUP@105..177
- L_CURLY@105..106 "{"
- WORD@106..107 "A"
- WHITESPACE@107..108 " "
- WORD@108..114 "Method"
- WHITESPACE@114..115 " "
- WORD@115..118 "for"
- WHITESPACE@118..119 " "
- WORD@119..128 "Obtaining"
- WHITESPACE@128..129 " "
- WORD@129..136 "Digital"
- WHITESPACE@136..137 " "
- WORD@137..147 "Signatures"
- WHITESPACE@147..148 " "
- WORD@148..151 "and"
- WHITESPACE@151..152 " "
- WORD@152..162 "Public-Key"
- WHITESPACE@162..163 " "
- WORD@163..176 "Cryptosystems"
- R_CURLY@176..177 "}"
- COMMA@177..178 ","
- WHITESPACE@178..183 "\n "
- FIELD@183..197
- NAME@183..187 "year"
- WHITESPACE@187..188 " "
- EQ@188..189 "="
- WHITESPACE@189..190 " "
- CURLY_GROUP@190..196
- L_CURLY@190..191 "{"
- INTEGER@191..195 "1978"
- R_CURLY@195..196 "}"
- COMMA@196..197 ","
- WHITESPACE@197..202 "\n "
- FIELD@202..227
- NAME@202..212 "issue_date"
- WHITESPACE@212..213 " "
- EQ@213..214 "="
- WHITESPACE@214..215 " "
- CURLY_GROUP@215..226
- L_CURLY@215..216 "{"
- WORD@216..220 "Feb."
- WHITESPACE@220..221 " "
- INTEGER@221..225 "1978"
- R_CURLY@225..226 "}"
- COMMA@226..227 ","
- WHITESPACE@227..232 "\n "
- FIELD@232..282
- NAME@232..241 "publisher"
- WHITESPACE@241..242 " "
- EQ@242..243 "="
- WHITESPACE@243..244 " "
- CURLY_GROUP@244..281
- L_CURLY@244..245 "{"
- WORD@245..256 "Association"
- WHITESPACE@256..257 " "
- WORD@257..260 "for"
- WHITESPACE@260..261 " "
- WORD@261..270 "Computing"
- WHITESPACE@270..271 " "
- WORD@271..280 "Machinery"
- R_CURLY@280..281 "}"
- COMMA@281..282 ","
- WHITESPACE@282..287 "\n "
- FIELD@287..317
- NAME@287..294 "address"
- WHITESPACE@294..295 " "
- EQ@295..296 "="
- WHITESPACE@296..297 " "
- CURLY_GROUP@297..316
- L_CURLY@297..298 "{"
- WORD@298..301 "New"
- WHITESPACE@301..302 " "
- WORD@302..306 "York"
- COMMA@306..307 ","
- WHITESPACE@307..308 " "
- WORD@308..310 "NY"
- COMMA@310..311 ","
- WHITESPACE@311..312 " "
- WORD@312..315 "USA"
- R_CURLY@315..316 "}"
- COMMA@316..317 ","
- WHITESPACE@317..322 "\n "
- FIELD@322..336
- NAME@322..328 "volume"
- WHITESPACE@328..329 " "
- EQ@329..330 "="
- WHITESPACE@330..331 " "
- CURLY_GROUP@331..335
- L_CURLY@331..332 "{"
- INTEGER@332..334 "21"
- R_CURLY@334..335 "}"
- COMMA@335..336 ","
- WHITESPACE@336..341 "\n "
- FIELD@341..354
- NAME@341..347 "number"
- WHITESPACE@347..348 " "
- EQ@348..349 "="
- WHITESPACE@349..350 " "
- CURLY_GROUP@350..353
- L_CURLY@350..351 "{"
- INTEGER@351..352 "2"
- R_CURLY@352..353 "}"
- COMMA@353..354 ","
- WHITESPACE@354..359 "\n "
- FIELD@359..378
- NAME@359..363 "issn"
- WHITESPACE@363..364 " "
- EQ@364..365 "="
- WHITESPACE@365..366 " "
- CURLY_GROUP@366..377
- L_CURLY@366..367 "{"
- WORD@367..376 "0001-0782"
- R_CURLY@376..377 "}"
- COMMA@377..378 ","
- WHITESPACE@378..383 "\n "
- FIELD@383..429
- NAME@383..386 "url"
- WHITESPACE@386..387 " "
- EQ@387..388 "="
- WHITESPACE@388..389 " "
- CURLY_GROUP@389..428
- L_CURLY@389..390 "{"
- WORD@390..427 "https://doi.org/10.11 ..."
- R_CURLY@427..428 "}"
- COMMA@428..429 ","
- WHITESPACE@429..434 "\n "
- FIELD@434..464
- NAME@434..437 "doi"
- WHITESPACE@437..438 " "
- EQ@438..439 "="
- WHITESPACE@439..440 " "
- CURLY_GROUP@440..463
- L_CURLY@440..441 "{"
- WORD@441..462 "10.1145/359340.359342"
- R_CURLY@462..463 "}"
- COMMA@463..464 ","
- WHITESPACE@464..469 "\n "
- FIELD@469..493
- NAME@469..476 "journal"
- WHITESPACE@476..477 " "
- EQ@477..478 "="
- WHITESPACE@478..479 " "
- CURLY_GROUP@479..492
- L_CURLY@479..480 "{"
- WORD@480..487 "Commun."
- WHITESPACE@487..488 " "
- WORD@488..491 "ACM"
- R_CURLY@491..492 "}"
- COMMA@492..493 ","
- WHITESPACE@493..498 "\n "
- FIELD@498..512
- NAME@498..503 "month"
- WHITESPACE@503..504 " "
- EQ@504..505 "="
- WHITESPACE@505..506 " "
- CURLY_GROUP@506..511
- L_CURLY@506..507 "{"
- WORD@507..510 "feb"
- R_CURLY@510..511 "}"
- COMMA@511..512 ","
- WHITESPACE@512..517 "\n "
- FIELD@517..535
- NAME@517..522 "pages"
- WHITESPACE@522..523 " "
- EQ@523..524 "="
- WHITESPACE@524..525 " "
- CURLY_GROUP@525..534
- L_CURLY@525..526 "{"
- WORD@526..533 "120-126"
- R_CURLY@533..534 "}"
- COMMA@534..535 ","
- WHITESPACE@535..540 "\n "
- FIELD@540..555
- NAME@540..548 "numpages"
- WHITESPACE@548..549 " "
- EQ@549..550 "="
- WHITESPACE@550..551 " "
- CURLY_GROUP@551..554
- L_CURLY@551..552 "{"
- INTEGER@552..553 "7"
- R_CURLY@553..554 "}"
- COMMA@554..555 ","
- WHITESPACE@555..556 "\n"
- R_DELIM@556..557 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@001.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@001.txt.snap
deleted file mode 100644
index 39808505c1..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@001.txt.snap
+++ /dev/null
@@ -1,27 +0,0 @@
----
-source: crates/parser/src/build_log.rs
-expression: parse_build_log(&text)
-input_file: crates/parser/src/test_data/build_log/001.txt
----
-BuildLog {
- errors: [
- BuildError {
- relative_path: "./parent.tex",
- level: Warning,
- message: "Overfull \\hbox (200.00162pt too wide) in paragraph at lines 8--9",
- hint: None,
- line: Some(
- 7,
- ),
- },
- BuildError {
- relative_path: "./parent.tex",
- level: Warning,
- message: "Overfull \\vbox (3.19998pt too high) detected at line 23",
- hint: None,
- line: Some(
- 22,
- ),
- },
- ],
-}
diff --git a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@002.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@002.txt.snap
deleted file mode 100644
index 6d4001e120..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@002.txt.snap
+++ /dev/null
@@ -1,20 +0,0 @@
----
-source: crates/parser/src/build_log.rs
-expression: parse_build_log(&text)
-input_file: crates/parser/src/test_data/build_log/002.txt
----
-BuildLog {
- errors: [
- BuildError {
- relative_path: "./child.tex",
- level: Error,
- message: "Undefined control sequence.",
- hint: Some(
- "\\foo",
- ),
- line: Some(
- 0,
- ),
- },
- ],
-}
diff --git a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@003.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@003.txt.snap
deleted file mode 100644
index bbc50a44c2..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@003.txt.snap
+++ /dev/null
@@ -1,25 +0,0 @@
----
-source: crates/parser/src/build_log.rs
-expression: parse_build_log(&text)
-input_file: crates/parser/src/test_data/build_log/003.txt
----
-BuildLog {
- errors: [
- BuildError {
- relative_path: "./parent.tex",
- level: Warning,
- message: "LaTeX Warning: Citation `foo' on page 1 undefined on input line 6.",
- hint: None,
- line: Some(
- 5,
- ),
- },
- BuildError {
- relative_path: "./parent.tex",
- level: Warning,
- message: "LaTeX Warning: There were undefined references.",
- hint: None,
- line: None,
- },
- ],
-}
diff --git a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@004.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@004.txt.snap
deleted file mode 100644
index c4f2ce5c72..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@004.txt.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: crates/parser/src/build_log.rs
-expression: parse_build_log(&text)
-input_file: crates/parser/src/test_data/build_log/004.txt
----
-BuildLog {
- errors: [
- BuildError {
- relative_path: "/TexLive/texmf-dist/tex/generic/babel/babel.sty",
- level: Error,
- message: "Package babel Error: Unknown option `foo'. Either you misspelled it or the language definition file foo.ldf was not found.",
- hint: Some(
- "\\ProcessOptions*",
- ),
- line: Some(
- 392,
- ),
- },
- BuildError {
- relative_path: "/TexLive/texmf-dist/tex/generic/babel/babel.sty",
- level: Error,
- message: "Package babel Error: You haven't specified a language option.",
- hint: Some(
- "ry to proceed from here, type x to quit.}",
- ),
- line: Some(
- 425,
- ),
- },
- ],
-}
diff --git a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@005.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@005.txt.snap
deleted file mode 100644
index dafd6a4506..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@005.txt.snap
+++ /dev/null
@@ -1,30 +0,0 @@
----
-source: crates/parser/src/build_log.rs
-expression: parse_build_log(&text)
-input_file: crates/parser/src/test_data/build_log/005.txt
----
-BuildLog {
- errors: [
- BuildError {
- relative_path: "./parent.tex",
- level: Warning,
- message: "Package biblatex Warning: 'babel/polyglossia' detected but 'csquotes' missing. Loading 'csquotes' recommended.",
- hint: None,
- line: None,
- },
- BuildError {
- relative_path: "./parent.tex",
- level: Warning,
- message: "LaTeX Warning: There were undefined references.",
- hint: None,
- line: None,
- },
- BuildError {
- relative_path: "./parent.tex",
- level: Warning,
- message: "Package biblatex Warning: Please (re)run Biber on the file: parent and rerun LaTeX afterwards.",
- hint: None,
- line: None,
- },
- ],
-}
diff --git a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@006.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@006.txt.snap
deleted file mode 100644
index ca9318c68d..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@006.txt.snap
+++ /dev/null
@@ -1,69 +0,0 @@
----
-source: crates/parser/src/build_log.rs
-expression: parse_build_log(&text)
-input_file: crates/parser/src/test_data/build_log/006.txt
----
-BuildLog {
- errors: [
- BuildError {
- relative_path: "./parent.tex",
- level: Error,
- message: "Undefined control sequence.",
- hint: Some(
- "\\foo",
- ),
- line: Some(
- 6,
- ),
- },
- BuildError {
- relative_path: "./parent.tex",
- level: Error,
- message: "Missing $ inserted.",
- hint: Some(
- "\\bar",
- ),
- line: Some(
- 7,
- ),
- },
- BuildError {
- relative_path: "./parent.tex",
- level: Error,
- message: "Undefined control sequence.",
- hint: Some(
- "\\baz",
- ),
- line: Some(
- 8,
- ),
- },
- BuildError {
- relative_path: "./parent.tex",
- level: Error,
- message: "Missing { inserted.",
- hint: None,
- line: Some(
- 9,
- ),
- },
- BuildError {
- relative_path: "./parent.tex",
- level: Error,
- message: "Missing $ inserted.",
- hint: None,
- line: Some(
- 9,
- ),
- },
- BuildError {
- relative_path: "./parent.tex",
- level: Error,
- message: "Missing } inserted.",
- hint: None,
- line: Some(
- 9,
- ),
- },
- ],
-}
diff --git a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@007.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@007.txt.snap
deleted file mode 100644
index bf0c832fe2..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@007.txt.snap
+++ /dev/null
@@ -1,20 +0,0 @@
----
-source: crates/parser/src/build_log.rs
-expression: parse_build_log(&text)
-input_file: crates/parser/src/test_data/build_log/007.txt
----
-BuildLog {
- errors: [
- BuildError {
- relative_path: "/some/folder/a.tex",
- level: Error,
- message: "Undefined control sequence.",
- hint: Some(
- "\\lsdkfjlskdfj",
- ),
- line: Some(
- 3,
- ),
- },
- ],
-}
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@block_comments.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@block_comments.txt.snap
deleted file mode 100644
index b93689a3b9..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@block_comments.txt.snap
+++ /dev/null
@@ -1,30 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/block_comments.txt
----
-ROOT@0..48
- PREAMBLE@0..48
- TEXT@0..4
- WORD@0..3 "Foo"
- LINE_BREAK@3..4 "\n"
- BLOCK_COMMENT@4..22
- COMMAND_NAME@4..12 "\\iffalse"
- LINE_BREAK@12..13 "\n"
- WORD@13..18 "Test1"
- LINE_BREAK@18..19 "\n"
- COMMAND_NAME@19..22 "\\fi"
- LINE_BREAK@22..23 "\n"
- TEXT@23..27
- WORD@23..26 "Bar"
- LINE_BREAK@26..27 "\n"
- BLOCK_COMMENT@27..44
- COMMAND_NAME@27..35 "\\iffalse"
- LINE_BREAK@35..36 "\n"
- COMMAND_NAME@36..40 "\\fii"
- LINE_BREAK@40..41 "\n"
- COMMAND_NAME@41..44 "\\fi"
- LINE_BREAK@44..45 "\n"
- TEXT@45..48
- WORD@45..48 "Baz"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default.txt.snap
deleted file mode 100644
index bb82661568..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default.txt.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/caption/caption_default.txt
----
-ROOT@0..27
- PREAMBLE@0..27
- CAPTION@0..27
- COMMAND_NAME@0..8 "\\caption"
- BRACK_GROUP@8..13
- L_BRACK@8..9 "["
- TEXT@9..12
- WORD@9..12 "qux"
- R_BRACK@12..13 "]"
- CURLY_GROUP@13..27
- L_CURLY@13..14 "{"
- TEXT@14..18
- WORD@14..17 "Foo"
- WHITESPACE@17..18 " "
- GENERIC_COMMAND@18..23
- COMMAND_NAME@18..22 "\\Bar"
- WHITESPACE@22..23 " "
- TEXT@23..26
- WORD@23..26 "Baz"
- R_CURLY@26..27 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default_error.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default_error.txt.snap
deleted file mode 100644
index 741d4ea0c4..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default_error.txt.snap
+++ /dev/null
@@ -1,25 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/caption/caption_default_error.txt
----
-ROOT@0..26
- PREAMBLE@0..26
- CAPTION@0..26
- COMMAND_NAME@0..8 "\\caption"
- BRACK_GROUP@8..13
- L_BRACK@8..9 "["
- TEXT@9..12
- WORD@9..12 "qux"
- R_BRACK@12..13 "]"
- CURLY_GROUP@13..26
- L_CURLY@13..14 "{"
- TEXT@14..18
- WORD@14..17 "Foo"
- WHITESPACE@17..18 " "
- GENERIC_COMMAND@18..23
- COMMAND_NAME@18..22 "\\Bar"
- WHITESPACE@22..23 " "
- TEXT@23..26
- WORD@23..26 "Baz"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_figure.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_figure.txt.snap
deleted file mode 100644
index 56735873f9..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_figure.txt.snap
+++ /dev/null
@@ -1,30 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/caption/caption_figure.txt
----
-ROOT@0..39
- PREAMBLE@0..39
- ENVIRONMENT@0..39
- BEGIN@0..14
- COMMAND_NAME@0..6 "\\begin"
- CURLY_GROUP_WORD@6..14
- L_CURLY@6..7 "{"
- KEY@7..13
- WORD@7..13 "figure"
- R_CURLY@13..14 "}"
- CAPTION@14..27
- COMMAND_NAME@14..22 "\\caption"
- CURLY_GROUP@22..27
- L_CURLY@22..23 "{"
- TEXT@23..26
- WORD@23..26 "Foo"
- R_CURLY@26..27 "}"
- END@27..39
- COMMAND_NAME@27..31 "\\end"
- CURLY_GROUP_WORD@31..39
- L_CURLY@31..32 "{"
- KEY@32..38
- WORD@32..38 "figure"
- R_CURLY@38..39 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal.txt.snap
deleted file mode 100644
index 12ef5ffebb..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal.txt.snap
+++ /dev/null
@@ -1,21 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/caption/caption_minimal.txt
----
-ROOT@0..22
- PREAMBLE@0..22
- CAPTION@0..22
- COMMAND_NAME@0..8 "\\caption"
- CURLY_GROUP@8..22
- L_CURLY@8..9 "{"
- TEXT@9..13
- WORD@9..12 "Foo"
- WHITESPACE@12..13 " "
- GENERIC_COMMAND@13..18
- COMMAND_NAME@13..17 "\\Bar"
- WHITESPACE@17..18 " "
- TEXT@18..21
- WORD@18..21 "Baz"
- R_CURLY@21..22 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal_error.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal_error.txt.snap
deleted file mode 100644
index 7bc85c0b20..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal_error.txt.snap
+++ /dev/null
@@ -1,20 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/caption/caption_minimal_error.txt
----
-ROOT@0..21
- PREAMBLE@0..21
- CAPTION@0..21
- COMMAND_NAME@0..8 "\\caption"
- CURLY_GROUP@8..21
- L_CURLY@8..9 "{"
- TEXT@9..13
- WORD@9..12 "Foo"
- WHITESPACE@12..13 " "
- GENERIC_COMMAND@13..18
- COMMAND_NAME@13..17 "\\Bar"
- WHITESPACE@17..18 " "
- TEXT@18..21
- WORD@18..21 "Baz"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_empty.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_empty.txt.snap
deleted file mode 100644
index d35246b26c..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_empty.txt.snap
+++ /dev/null
@@ -1,13 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/citation/citation_empty.txt
----
-ROOT@0..7
- PREAMBLE@0..7
- CITATION@0..7
- COMMAND_NAME@0..5 "\\cite"
- CURLY_GROUP_WORD_LIST@5..7
- L_CURLY@5..6 "{"
- R_CURLY@6..7 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_missing_brace.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_missing_brace.txt.snap
deleted file mode 100644
index 0855ea49ad..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_missing_brace.txt.snap
+++ /dev/null
@@ -1,14 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/citation/citation_missing_brace.txt
----
-ROOT@0..9
- PREAMBLE@0..9
- CITATION@0..9
- COMMAND_NAME@0..5 "\\cite"
- CURLY_GROUP_WORD_LIST@5..9
- L_CURLY@5..6 "{"
- KEY@6..9
- WORD@6..9 "foo"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap
deleted file mode 100644
index e4d49e796e..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/citation/citation_multiple_keys.txt
----
-ROOT@0..15
- PREAMBLE@0..15
- CITATION@0..15
- COMMAND_NAME@0..5 "\\cite"
- CURLY_GROUP_WORD_LIST@5..15
- L_CURLY@5..6 "{"
- KEY@6..9
- WORD@6..9 "foo"
- COMMA@9..10 ","
- WHITESPACE@10..11 " "
- KEY@11..14
- WORD@11..14 "bar"
- R_CURLY@14..15 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote.txt.snap
deleted file mode 100644
index 654b97dfd9..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote.txt.snap
+++ /dev/null
@@ -1,20 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/citation/citation_prenote.txt
----
-ROOT@0..15
- PREAMBLE@0..15
- CITATION@0..15
- COMMAND_NAME@0..5 "\\cite"
- BRACK_GROUP@5..10
- L_BRACK@5..6 "["
- TEXT@6..9
- WORD@6..9 "foo"
- R_BRACK@9..10 "]"
- CURLY_GROUP_WORD_LIST@10..15
- L_CURLY@10..11 "{"
- KEY@11..14
- WORD@11..14 "bar"
- R_CURLY@14..15 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap
deleted file mode 100644
index ca83218dfb..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap
+++ /dev/null
@@ -1,25 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/citation/citation_prenote_postnote.txt
----
-ROOT@0..20
- PREAMBLE@0..20
- CITATION@0..20
- COMMAND_NAME@0..5 "\\cite"
- BRACK_GROUP@5..10
- L_BRACK@5..6 "["
- TEXT@6..9
- WORD@6..9 "foo"
- R_BRACK@9..10 "]"
- BRACK_GROUP@10..15
- L_BRACK@10..11 "["
- TEXT@11..14
- WORD@11..14 "bar"
- R_BRACK@14..15 "]"
- CURLY_GROUP_WORD_LIST@15..20
- L_CURLY@15..16 "{"
- KEY@16..19
- WORD@16..19 "baz"
- R_CURLY@19..20 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap
deleted file mode 100644
index 015abf7011..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/citation/citation_redundant_comma.txt
----
-ROOT@0..12
- PREAMBLE@0..12
- CITATION@0..12
- COMMAND_NAME@0..5 "\\cite"
- CURLY_GROUP_WORD_LIST@5..12
- L_CURLY@5..6 "{"
- COMMA@6..7 ","
- KEY@7..10
- WORD@7..10 "foo"
- COMMA@10..11 ","
- R_CURLY@11..12 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_simple.txt.snap
deleted file mode 100644
index 99cc891d2b..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/citation/citation_simple.txt
----
-ROOT@0..10
- PREAMBLE@0..10
- CITATION@0..10
- COMMAND_NAME@0..5 "\\cite"
- CURLY_GROUP_WORD_LIST@5..10
- L_CURLY@5..6 "{"
- KEY@6..9
- WORD@6..9 "foo"
- R_CURLY@9..10 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_star.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_star.txt.snap
deleted file mode 100644
index 4b66a7e7d9..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_star.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/citation/citation_star.txt
----
-ROOT@0..10
- PREAMBLE@0..10
- CITATION@0..10
- COMMAND_NAME@0..7 "\\nocite"
- CURLY_GROUP_WORD_LIST@7..10
- L_CURLY@7..8 "{"
- KEY@8..9
- WORD@8..9 "*"
- R_CURLY@9..10 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_definition_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_definition_simple.txt.snap
deleted file mode 100644
index d38951b148..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_definition_simple.txt.snap
+++ /dev/null
@@ -1,29 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/color/color_definition_simple.txt
----
-ROOT@0..33
- PREAMBLE@0..33
- COLOR_DEFINITION@0..33
- COMMAND_NAME@0..12 "\\definecolor"
- CURLY_GROUP_WORD@12..17
- L_CURLY@12..13 "{"
- KEY@13..16
- WORD@13..16 "foo"
- R_CURLY@16..17 "}"
- CURLY_GROUP_WORD@17..22
- L_CURLY@17..18 "{"
- KEY@18..21
- WORD@18..21 "rgb"
- R_CURLY@21..22 "}"
- CURLY_GROUP@22..33
- L_CURLY@22..23 "{"
- TEXT@23..32
- WORD@23..26 "255"
- COMMA@26..27 ","
- WORD@27..30 "168"
- COMMA@30..31 ","
- WORD@31..32 "0"
- R_CURLY@32..33 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_reference_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_reference_simple.txt.snap
deleted file mode 100644
index dbf153dc18..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_reference_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/color/color_reference_simple.txt
----
-ROOT@0..13
- PREAMBLE@0..13
- COLOR_REFERENCE@0..13
- COMMAND_NAME@0..6 "\\color"
- CURLY_GROUP_WORD@6..13
- L_CURLY@6..7 "{"
- KEY@7..12
- WORD@7..12 "black"
- R_CURLY@12..13 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error1.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error1.txt.snap
deleted file mode 100644
index 9e3317ac05..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error1.txt.snap
+++ /dev/null
@@ -1,33 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/color/color_set_definition_error1.txt
----
-ROOT@0..39
- PREAMBLE@0..39
- COLOR_SET_DEFINITION@0..39
- COMMAND_NAME@0..15 "\\definecolorset"
- BRACK_GROUP_WORD@15..19
- L_BRACK@15..16 "["
- KEY@16..18
- WORD@16..18 "ty"
- R_BRACK@18..19 "]"
- CURLY_GROUP_WORD_LIST@19..29
- L_CURLY@19..20 "{"
- KEY@20..23
- WORD@20..23 "rgb"
- COMMA@23..24 ","
- KEY@24..28
- WORD@24..28 "HTML"
- R_CURLY@28..29 "}"
- CURLY_GROUP_WORD@29..34
- L_CURLY@29..30 "{"
- KEY@30..33
- WORD@30..33 "foo"
- R_CURLY@33..34 "}"
- CURLY_GROUP_WORD@34..39
- L_CURLY@34..35 "{"
- KEY@35..38
- WORD@35..38 "bar"
- R_CURLY@38..39 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error2.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error2.txt.snap
deleted file mode 100644
index 04b75973e5..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error2.txt.snap
+++ /dev/null
@@ -1,23 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/color/color_set_definition_error2.txt
----
-ROOT@0..30
- PREAMBLE@0..30
- COLOR_SET_DEFINITION@0..30
- COMMAND_NAME@0..15 "\\definecolorset"
- CURLY_GROUP_WORD_LIST@15..25
- L_CURLY@15..16 "{"
- KEY@16..19
- WORD@16..19 "rgb"
- COMMA@19..20 ","
- KEY@20..24
- WORD@20..24 "HTML"
- R_CURLY@24..25 "}"
- CURLY_GROUP_WORD@25..30
- L_CURLY@25..26 "{"
- KEY@26..29
- WORD@26..29 "foo"
- R_CURLY@29..30 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error3.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error3.txt.snap
deleted file mode 100644
index 1133778fbf..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error3.txt.snap
+++ /dev/null
@@ -1,18 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/color/color_set_definition_error3.txt
----
-ROOT@0..25
- PREAMBLE@0..25
- COLOR_SET_DEFINITION@0..25
- COMMAND_NAME@0..15 "\\definecolorset"
- CURLY_GROUP_WORD_LIST@15..25
- L_CURLY@15..16 "{"
- KEY@16..19
- WORD@16..19 "rgb"
- COMMA@19..20 ","
- KEY@20..24
- WORD@20..24 "HTML"
- R_CURLY@24..25 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error4.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error4.txt.snap
deleted file mode 100644
index 11d175d732..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error4.txt.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/color/color_set_definition_error4.txt
----
-ROOT@0..15
- PREAMBLE@0..15
- COLOR_SET_DEFINITION@0..15
- COMMAND_NAME@0..15 "\\definecolorset"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_simple.txt.snap
deleted file mode 100644
index 903a780989..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_simple.txt.snap
+++ /dev/null
@@ -1,38 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/color/color_set_definition_simple.txt
----
-ROOT@0..44
- PREAMBLE@0..44
- COLOR_SET_DEFINITION@0..44
- COMMAND_NAME@0..15 "\\definecolorset"
- BRACK_GROUP_WORD@15..19
- L_BRACK@15..16 "["
- KEY@16..18
- WORD@16..18 "ty"
- R_BRACK@18..19 "]"
- CURLY_GROUP_WORD_LIST@19..29
- L_CURLY@19..20 "{"
- KEY@20..23
- WORD@20..23 "rgb"
- COMMA@23..24 ","
- KEY@24..28
- WORD@24..28 "HTML"
- R_CURLY@28..29 "}"
- CURLY_GROUP_WORD@29..34
- L_CURLY@29..30 "{"
- KEY@30..33
- WORD@30..33 "foo"
- R_CURLY@33..34 "}"
- CURLY_GROUP_WORD@34..39
- L_CURLY@34..35 "{"
- KEY@35..38
- WORD@35..38 "bar"
- R_CURLY@38..39 "}"
- CURLY_GROUP_WORD@39..44
- L_CURLY@39..40 "{"
- KEY@40..43
- WORD@40..43 "baz"
- R_CURLY@43..44 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap
deleted file mode 100644
index c4d51b8248..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/command_definition/command_definition_no_argc.txt
----
-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 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap
deleted file mode 100644
index 4170bbb233..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap
+++ /dev/null
@@ -1,14 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/command_definition/command_definition_no_impl.txt
----
-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 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap
deleted file mode 100644
index 8a3bd36895..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap
+++ /dev/null
@@ -1,13 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/command_definition/command_definition_no_impl_error.txt
----
-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"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap
deleted file mode 100644
index ff11be61d4..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap
+++ /dev/null
@@ -1,29 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/command_definition/command_definition_optional.txt
----
-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 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap
deleted file mode 100644
index 1d5fb28686..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap
+++ /dev/null
@@ -1,25 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/command_definition/command_definition_simple.txt
----
-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 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap
deleted file mode 100644
index 3e58111e6b..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap
+++ /dev/null
@@ -1,39 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/command_definition/command_definition_with_begin.txt
----
-ROOT@0..80
- PREAMBLE@0..80
- COMMAND_DEFINITION@0..80
- COMMAND_NAME@0..11 "\\newcommand"
- CURLY_GROUP_COMMAND@11..35
- L_CURLY@11..12 "{"
- COMMAND_NAME@12..34 "\\CVSubHeadingListStart"
- R_CURLY@34..35 "}"
- CURLY_GROUP@35..80
- L_CURLY@35..36 "{"
- BEGIN@36..79
- COMMAND_NAME@36..42 "\\begin"
- CURLY_GROUP_WORD@42..51
- L_CURLY@42..43 "{"
- KEY@43..50
- WORD@43..50 "itemize"
- R_CURLY@50..51 "}"
- BRACK_GROUP@51..79
- L_BRACK@51..52 "["
- TEXT@52..62
- WORD@52..62 "leftmargin"
- EQUALITY_SIGN@62..63 "="
- TEXT@63..75
- WORD@63..68 "0.5cm"
- COMMA@68..69 ","
- WHITESPACE@69..70 " "
- WORD@70..75 "label"
- EQUALITY_SIGN@75..76 "="
- CURLY_GROUP@76..78
- L_CURLY@76..77 "{"
- R_CURLY@77..78 "}"
- R_BRACK@78..79 "]"
- R_CURLY@79..80 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap
deleted file mode 100644
index ea401584af..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap
+++ /dev/null
@@ -1,14 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/command_definition/math_operator_no_impl.txt
----
-ROOT@0..26
- PREAMBLE@0..26
- MATH_OPERATOR@0..26
- COMMAND_NAME@0..20 "\\DeclareMathOperator"
- CURLY_GROUP_COMMAND@20..26
- L_CURLY@20..21 "{"
- COMMAND_NAME@21..25 "\\foo"
- R_CURLY@25..26 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap
deleted file mode 100644
index 2833943059..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/command_definition/math_operator_simple.txt
----
-ROOT@0..31
- PREAMBLE@0..31
- MATH_OPERATOR@0..31
- COMMAND_NAME@0..20 "\\DeclareMathOperator"
- CURLY_GROUP_COMMAND@20..26
- L_CURLY@20..21 "{"
- COMMAND_NAME@21..25 "\\foo"
- R_CURLY@25..26 "}"
- CURLY_GROUP@26..31
- L_CURLY@26..27 "{"
- TEXT@27..30
- WORD@27..30 "foo"
- R_CURLY@30..31 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_asymptote.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_asymptote.txt.snap
deleted file mode 100644
index 48f11f6285..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_asymptote.txt.snap
+++ /dev/null
@@ -1,41 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/environment/environment_asymptote.txt
----
-ROOT@0..50
- PREAMBLE@0..50
- ENVIRONMENT@0..50
- BEGIN@0..16
- COMMAND_NAME@0..6 "\\begin"
- CURLY_GROUP_WORD@6..16
- L_CURLY@6..7 "{"
- KEY@7..10
- WORD@7..10 "asy"
- R_CURLY@10..11 "}"
- LINE_BREAK@11..12 "\n"
- WHITESPACE@12..16 " "
- TEXT@16..22
- WORD@16..22 "printf"
- MIXED_GROUP@22..39
- L_PAREN@22..23 "("
- TEXT@23..35
- WORD@23..29 "\"Hello"
- WHITESPACE@29..30 " "
- WORD@30..35 "World"
- GENERIC_COMMAND@35..37
- COMMAND_NAME@35..37 "\\n"
- TEXT@37..38
- WORD@37..38 "\""
- R_PAREN@38..39 ")"
- TEXT@39..41
- WORD@39..40 ";"
- LINE_BREAK@40..41 "\n"
- END@41..50
- COMMAND_NAME@41..45 "\\end"
- CURLY_GROUP_WORD@45..50
- L_CURLY@45..46 "{"
- KEY@46..49
- WORD@46..49 "asy"
- R_CURLY@49..50 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition.txt.snap
deleted file mode 100644
index 2403d60ef1..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition.txt.snap
+++ /dev/null
@@ -1,40 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/environment/environment_definition.txt
----
-ROOT@0..47
- PREAMBLE@0..47
- ENVIRONMENT_DEFINITION@0..47
- COMMAND_NAME@0..15 "\\newenvironment"
- CURLY_GROUP_WORD@15..20
- L_CURLY@15..16 "{"
- KEY@16..19
- WORD@16..19 "bar"
- R_CURLY@19..20 "}"
- BRACK_GROUP_WORD@20..23
- L_BRACK@20..21 "["
- KEY@21..22
- WORD@21..22 "1"
- R_BRACK@22..23 "]"
- CURLY_GROUP@23..36
- L_CURLY@23..24 "{"
- GENERIC_COMMAND@24..35
- COMMAND_NAME@24..30 "\\begin"
- CURLY_GROUP@30..35
- L_CURLY@30..31 "{"
- TEXT@31..34
- WORD@31..34 "foo"
- R_CURLY@34..35 "}"
- R_CURLY@35..36 "}"
- CURLY_GROUP@36..47
- L_CURLY@36..37 "{"
- GENERIC_COMMAND@37..46
- COMMAND_NAME@37..41 "\\end"
- CURLY_GROUP@41..46
- L_CURLY@41..42 "{"
- TEXT@42..45
- WORD@42..45 "foo"
- R_CURLY@45..46 "}"
- R_CURLY@46..47 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap
deleted file mode 100644
index ae0fbd931a..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap
+++ /dev/null
@@ -1,35 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/environment/environment_definition_optional_arg.txt
----
-ROOT@0..44
- PREAMBLE@0..44
- ENVIRONMENT_DEFINITION@0..44
- COMMAND_NAME@0..15 "\\newenvironment"
- CURLY_GROUP_WORD@15..20
- L_CURLY@15..16 "{"
- KEY@16..19
- WORD@16..19 "foo"
- R_CURLY@19..20 "}"
- BRACK_GROUP_WORD@20..23
- L_BRACK@20..21 "["
- KEY@21..22
- WORD@21..22 "1"
- R_BRACK@22..23 "]"
- BRACK_GROUP@23..32
- L_BRACK@23..24 "["
- TEXT@24..31
- WORD@24..31 "default"
- R_BRACK@31..32 "]"
- CURLY_GROUP@32..39
- L_CURLY@32..33 "{"
- TEXT@33..38
- WORD@33..38 "begin"
- R_CURLY@38..39 "}"
- CURLY_GROUP@39..44
- L_CURLY@39..40 "{"
- TEXT@40..43
- WORD@40..43 "end"
- R_CURLY@43..44 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested.txt.snap
deleted file mode 100644
index b4e1d6a458..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested.txt.snap
+++ /dev/null
@@ -1,41 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/environment/environment_nested.txt
----
-ROOT@0..43
- PREAMBLE@0..43
- ENVIRONMENT@0..43
- BEGIN@0..12
- COMMAND_NAME@0..6 "\\begin"
- CURLY_GROUP_WORD@6..12
- L_CURLY@6..7 "{"
- KEY@7..10
- WORD@7..10 "foo"
- R_CURLY@10..11 "}"
- WHITESPACE@11..12 " "
- ENVIRONMENT@12..34
- BEGIN@12..24
- COMMAND_NAME@12..18 "\\begin"
- CURLY_GROUP_WORD@18..24
- L_CURLY@18..19 "{"
- KEY@19..22
- WORD@19..22 "qux"
- R_CURLY@22..23 "}"
- WHITESPACE@23..24 " "
- END@24..34
- COMMAND_NAME@24..28 "\\end"
- CURLY_GROUP_WORD@28..34
- L_CURLY@28..29 "{"
- KEY@29..32
- WORD@29..32 "baz"
- R_CURLY@32..33 "}"
- WHITESPACE@33..34 " "
- END@34..43
- COMMAND_NAME@34..38 "\\end"
- CURLY_GROUP_WORD@38..43
- L_CURLY@38..39 "{"
- KEY@39..42
- WORD@39..42 "bar"
- R_CURLY@42..43 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap
deleted file mode 100644
index 5d67bfe665..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap
+++ /dev/null
@@ -1,42 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/environment/environment_nested_missing_braces.txt
----
-ROOT@0..52
- PREAMBLE@0..52
- ENVIRONMENT@0..52
- BEGIN@0..11
- COMMAND_NAME@0..6 "\\begin"
- CURLY_GROUP_WORD@6..11
- L_CURLY@6..7 "{"
- KEY@7..11
- WORD@7..10 "foo"
- WHITESPACE@10..11 " "
- ENVIRONMENT@11..44
- BEGIN@11..34
- COMMAND_NAME@11..17 "\\begin"
- CURLY_GROUP_WORD@17..34
- L_CURLY@17..18 "{"
- KEY@18..34
- WORD@18..21 "qux"
- WHITESPACE@21..22 " "
- WORD@22..27 "Hello"
- WHITESPACE@27..28 " "
- WORD@28..33 "World"
- WHITESPACE@33..34 " "
- END@34..44
- COMMAND_NAME@34..38 "\\end"
- CURLY_GROUP_WORD@38..44
- L_CURLY@38..39 "{"
- KEY@39..42
- WORD@39..42 "baz"
- R_CURLY@42..43 "}"
- WHITESPACE@43..44 " "
- END@44..52
- COMMAND_NAME@44..48 "\\end"
- CURLY_GROUP_WORD@48..52
- L_CURLY@48..49 "{"
- KEY@49..52
- WORD@49..52 "bar"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_simple.txt.snap
deleted file mode 100644
index f74b68fdf7..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_simple.txt.snap
+++ /dev/null
@@ -1,29 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/environment/environment_simple.txt
----
-ROOT@0..33
- PREAMBLE@0..33
- ENVIRONMENT@0..33
- BEGIN@0..12
- COMMAND_NAME@0..6 "\\begin"
- CURLY_GROUP_WORD@6..12
- L_CURLY@6..7 "{"
- KEY@7..10
- WORD@7..10 "foo"
- R_CURLY@10..11 "}"
- WHITESPACE@11..12 " "
- TEXT@12..24
- WORD@12..17 "Hello"
- WHITESPACE@17..18 " "
- WORD@18..23 "World"
- WHITESPACE@23..24 " "
- END@24..33
- COMMAND_NAME@24..28 "\\end"
- CURLY_GROUP_WORD@28..33
- L_CURLY@28..29 "{"
- KEY@29..32
- WORD@29..32 "bar"
- R_CURLY@32..33 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation.txt.snap
deleted file mode 100644
index 71fff49984..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation.txt.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/equation.txt
----
-ROOT@0..13
- PREAMBLE@0..13
- EQUATION@0..13
- COMMAND_NAME@0..2 "\\["
- WHITESPACE@2..3 " "
- TEXT@3..11
- WORD@3..6 "foo"
- WHITESPACE@6..7 " "
- WORD@7..10 "bar"
- WHITESPACE@10..11 " "
- COMMAND_NAME@11..13 "\\]"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation_missing_begin.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation_missing_begin.txt.snap
deleted file mode 100644
index 1590fbed73..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation_missing_begin.txt.snap
+++ /dev/null
@@ -1,32 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/equation_missing_begin.txt
----
-ROOT@0..28
- PREAMBLE@0..28
- ENVIRONMENT@0..28
- BEGIN@0..10
- COMMAND_NAME@0..6 "\\begin"
- CURLY_GROUP_WORD@6..10
- L_CURLY@6..7 "{"
- KEY@7..8
- WORD@7..8 "a"
- R_CURLY@8..9 "}"
- WHITESPACE@9..10 " "
- TEXT@10..18
- WORD@10..13 "foo"
- WHITESPACE@13..14 " "
- WORD@14..17 "bar"
- WHITESPACE@17..18 " "
- GENERIC_COMMAND@18..21
- COMMAND_NAME@18..20 "\\]"
- WHITESPACE@20..21 " "
- END@21..28
- COMMAND_NAME@21..25 "\\end"
- CURLY_GROUP_WORD@25..28
- L_CURLY@25..26 "{"
- KEY@26..27
- WORD@26..27 "b"
- R_CURLY@27..28 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_args.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_args.txt.snap
deleted file mode 100644
index 9057d8f024..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_args.txt.snap
+++ /dev/null
@@ -1,20 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/generic_command_args.txt
----
-ROOT@0..14
- PREAMBLE@0..14
- GENERIC_COMMAND@0..14
- COMMAND_NAME@0..4 "\\foo"
- CURLY_GROUP@4..9
- L_CURLY@4..5 "{"
- TEXT@5..8
- WORD@5..8 "bar"
- R_CURLY@8..9 "}"
- MIXED_GROUP@9..14
- L_BRACK@9..10 "["
- TEXT@10..13
- WORD@10..13 "qux"
- R_BRACK@13..14 "]"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_empty.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_empty.txt.snap
deleted file mode 100644
index ee8f593395..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_empty.txt.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/generic_command_empty.txt
----
-ROOT@0..4
- PREAMBLE@0..4
- GENERIC_COMMAND@0..4
- COMMAND_NAME@0..4 "\\foo"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_escape.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_escape.txt.snap
deleted file mode 100644
index f973be4b12..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_escape.txt.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/generic_command_escape.txt
----
-ROOT@0..2
- PREAMBLE@0..2
- GENERIC_COMMAND@0..2
- COMMAND_NAME@0..2 "\\#"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_declaration.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_declaration.txt.snap
deleted file mode 100644
index fb24afbf24..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_declaration.txt.snap
+++ /dev/null
@@ -1,50 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/glossary/acronym_declaration.txt
----
-ROOT@0..64
- PREAMBLE@0..64
- ACRONYM_DECLARATION@0..64
- COMMAND_NAME@0..15 "\\DeclareAcronym"
- CURLY_GROUP_WORD@15..19
- L_CURLY@15..16 "{"
- KEY@16..18
- WORD@16..18 "eg"
- R_CURLY@18..19 "}"
- CURLY_GROUP_KEY_VALUE@19..64
- L_CURLY@19..20 "{"
- KEY_VALUE_BODY@20..63
- KEY_VALUE_PAIR@20..31
- KEY@20..26
- WORD@20..25 "short"
- WHITESPACE@25..26 " "
- EQUALITY_SIGN@26..27 "="
- WHITESPACE@27..28 " "
- VALUE@28..31
- TEXT@28..31
- WORD@28..31 "e.g"
- COMMA@31..32 ","
- KEY_VALUE_PAIR@32..50
- KEY@32..37
- WORD@32..36 "long"
- WHITESPACE@36..37 " "
- EQUALITY_SIGN@37..38 "="
- WHITESPACE@38..39 " "
- VALUE@39..50
- TEXT@39..50
- WORD@39..42 "for"
- WHITESPACE@42..43 " "
- WORD@43..50 "example"
- COMMA@50..51 ","
- KEY_VALUE_PAIR@51..63
- KEY@51..55
- WORD@51..54 "tag"
- WHITESPACE@54..55 " "
- EQUALITY_SIGN@55..56 "="
- WHITESPACE@56..57 " "
- VALUE@57..63
- TEXT@57..63
- WORD@57..63 "abbrev"
- R_CURLY@63..64 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap
deleted file mode 100644
index 8dd76abbf3..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap
+++ /dev/null
@@ -1,47 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/glossary/acronym_definition_options.txt
----
-ROOT@0..76
- PREAMBLE@0..76
- ACRONYM_DEFINITION@0..76
- COMMAND_NAME@0..11 "\\newacronym"
- BRACK_GROUP_KEY_VALUE@11..43
- L_BRACK@11..12 "["
- KEY_VALUE_BODY@12..42
- KEY_VALUE_PAIR@12..42
- KEY@12..22
- WORD@12..22 "longplural"
- EQUALITY_SIGN@22..23 "="
- VALUE@23..42
- CURLY_GROUP@23..42
- L_CURLY@23..24 "{"
- TEXT@24..41
- WORD@24..30 "Frames"
- WHITESPACE@30..31 " "
- WORD@31..34 "per"
- WHITESPACE@34..35 " "
- WORD@35..41 "Second"
- R_CURLY@41..42 "}"
- R_BRACK@42..43 "]"
- CURLY_GROUP_WORD@43..53
- L_CURLY@43..44 "{"
- KEY@44..52
- WORD@44..52 "fpsLabel"
- R_CURLY@52..53 "}"
- CURLY_GROUP@53..58
- L_CURLY@53..54 "{"
- TEXT@54..57
- WORD@54..57 "FPS"
- R_CURLY@57..58 "}"
- CURLY_GROUP@58..76
- L_CURLY@58..59 "{"
- TEXT@59..75
- WORD@59..64 "Frame"
- WHITESPACE@64..65 " "
- WORD@65..68 "per"
- WHITESPACE@68..69 " "
- WORD@69..75 "Second"
- R_CURLY@75..76 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap
deleted file mode 100644
index cf630440f8..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap
+++ /dev/null
@@ -1,29 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/glossary/acronym_definition_simple.txt
----
-ROOT@0..44
- PREAMBLE@0..44
- ACRONYM_DEFINITION@0..44
- COMMAND_NAME@0..11 "\\newacronym"
- CURLY_GROUP_WORD@11..21
- L_CURLY@11..12 "{"
- KEY@12..20
- WORD@12..20 "fpsLabel"
- R_CURLY@20..21 "}"
- CURLY_GROUP@21..26
- L_CURLY@21..22 "{"
- TEXT@22..25
- WORD@22..25 "FPS"
- R_CURLY@25..26 "}"
- CURLY_GROUP@26..44
- L_CURLY@26..27 "{"
- TEXT@27..43
- WORD@27..32 "Frame"
- WHITESPACE@32..33 " "
- WORD@33..36 "per"
- WHITESPACE@36..37 " "
- WORD@37..43 "Second"
- R_CURLY@43..44 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_package.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_package.txt.snap
deleted file mode 100644
index 721dfa5bf9..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_package.txt.snap
+++ /dev/null
@@ -1,30 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/glossary/acronym_package.txt
----
-ROOT@0..35
- PREAMBLE@0..35
- ACRONYM_DEFINITION@0..35
- COMMAND_NAME@0..5 "\\acro"
- CURLY_GROUP_WORD@5..10
- L_CURLY@5..6 "{"
- KEY@6..9
- WORD@6..9 "fps"
- R_CURLY@9..10 "}"
- BRACK_GROUP@10..15
- L_BRACK@10..11 "["
- TEXT@11..14
- WORD@11..14 "FPS"
- R_BRACK@14..15 "]"
- CURLY_GROUP@15..35
- L_CURLY@15..16 "{"
- TEXT@16..33
- WORD@16..22 "Frames"
- WHITESPACE@22..23 " "
- WORD@23..26 "per"
- WHITESPACE@26..27 " "
- WORD@27..33 "Second"
- R_CURLY@33..34 "}"
- LINE_BREAK@34..35 "\n"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap
deleted file mode 100644
index 6e470c3add..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap
+++ /dev/null
@@ -1,30 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/glossary/acronym_reference_options.txt
----
-ROOT@0..32
- PREAMBLE@0..32
- ACRONYM_REFERENCE@0..32
- COMMAND_NAME@0..9 "\\acrshort"
- BRACK_GROUP_KEY_VALUE@9..22
- L_BRACK@9..10 "["
- KEY_VALUE_BODY@10..21
- KEY_VALUE_PAIR@10..17
- KEY@10..13
- WORD@10..13 "foo"
- EQUALITY_SIGN@13..14 "="
- VALUE@14..17
- TEXT@14..17
- WORD@14..17 "bar"
- COMMA@17..18 ","
- KEY_VALUE_PAIR@18..21
- KEY@18..21
- WORD@18..21 "baz"
- R_BRACK@21..22 "]"
- CURLY_GROUP_WORD@22..32
- L_CURLY@22..23 "{"
- KEY@23..31
- WORD@23..31 "fpsLabel"
- R_CURLY@31..32 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap
deleted file mode 100644
index 5b83135522..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/glossary/acronym_reference_simple.txt
----
-ROOT@0..19
- PREAMBLE@0..19
- ACRONYM_REFERENCE@0..19
- COMMAND_NAME@0..9 "\\acrshort"
- CURLY_GROUP_WORD@9..19
- L_CURLY@9..10 "{"
- KEY@10..18
- WORD@10..18 "fpsLabel"
- R_CURLY@18..19 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap
deleted file mode 100644
index 52037c6bbf..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap
+++ /dev/null
@@ -1,34 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/glossary/glossary_entry_definition_simple.txt
----
-ROOT@0..39
- PREAMBLE@0..39
- GLOSSARY_ENTRY_DEFINITION@0..39
- COMMAND_NAME@0..17 "\\newglossaryentry"
- CURLY_GROUP_WORD@17..22
- L_CURLY@17..18 "{"
- KEY@18..21
- WORD@18..21 "foo"
- R_CURLY@21..22 "}"
- CURLY_GROUP_KEY_VALUE@22..39
- L_CURLY@22..23 "{"
- KEY_VALUE_BODY@23..38
- KEY_VALUE_PAIR@23..32
- KEY@23..27
- WORD@23..26 "bar"
- WHITESPACE@26..27 " "
- EQUALITY_SIGN@27..28 "="
- WHITESPACE@28..29 " "
- VALUE@29..32
- TEXT@29..32
- WORD@29..32 "baz"
- COMMA@32..33 ","
- WHITESPACE@33..34 " "
- KEY_VALUE_PAIR@34..37
- KEY@34..37
- WORD@34..37 "qux"
- COMMA@37..38 ","
- R_CURLY@38..39 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap
deleted file mode 100644
index 07d1d8cdfa..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap
+++ /dev/null
@@ -1,33 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/glossary/glossary_entry_reference_options.txt
----
-ROOT@0..25
- PREAMBLE@0..25
- GLOSSARY_ENTRY_REFERENCE@0..25
- COMMAND_NAME@0..4 "\\gls"
- BRACK_GROUP_KEY_VALUE@4..20
- L_BRACK@4..5 "["
- KEY_VALUE_BODY@5..19
- KEY_VALUE_PAIR@5..14
- KEY@5..9
- WORD@5..8 "foo"
- WHITESPACE@8..9 " "
- EQUALITY_SIGN@9..10 "="
- WHITESPACE@10..11 " "
- VALUE@11..14
- TEXT@11..14
- WORD@11..14 "bar"
- COMMA@14..15 ","
- WHITESPACE@15..16 " "
- KEY_VALUE_PAIR@16..19
- KEY@16..19
- WORD@16..19 "qux"
- R_BRACK@19..20 "]"
- CURLY_GROUP_WORD@20..25
- L_CURLY@20..21 "{"
- KEY@21..24
- WORD@21..24 "baz"
- R_CURLY@24..25 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap
deleted file mode 100644
index db50fc3298..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/glossary/glossary_entry_reference_simple.txt
----
-ROOT@0..9
- PREAMBLE@0..9
- GLOSSARY_ENTRY_REFERENCE@0..9
- COMMAND_NAME@0..4 "\\gls"
- CURLY_GROUP_WORD@4..9
- L_CURLY@4..5 "{"
- KEY@5..8
- WORD@5..8 "foo"
- R_CURLY@8..9 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path.txt.snap
deleted file mode 100644
index 80bf58d783..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path.txt.snap
+++ /dev/null
@@ -1,18 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/graphics_path.txt
----
-ROOT@0..28
- PREAMBLE@0..28
- GRAPHICS_PATH@0..28
- COMMAND_NAME@0..13 "\\graphicspath"
- CURLY_GROUP@13..28
- L_CURLY@13..14 "{"
- CURLY_GROUP_WORD@14..27
- L_CURLY@14..15 "{"
- KEY@15..26
- WORD@15..26 "../figures/"
- R_CURLY@26..27 "}"
- R_CURLY@27..28 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_command.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_command.txt.snap
deleted file mode 100644
index c8521d2de7..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_command.txt.snap
+++ /dev/null
@@ -1,23 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/graphics_path_command.txt
----
-ROOT@0..32
- PREAMBLE@0..32
- GRAPHICS_PATH@0..32
- COMMAND_NAME@0..13 "\\graphicspath"
- CURLY_GROUP@13..32
- L_CURLY@13..14 "{"
- CURLY_GROUP_WORD@14..31
- L_CURLY@14..15 "{"
- KEY@15..30
- COMMAND_NAME@15..22 "\\subfix"
- CURLY_GROUP_WORD@22..30
- L_CURLY@22..23 "{"
- KEY@23..29
- WORD@23..29 "./img/"
- R_CURLY@29..30 "}"
- R_CURLY@30..31 "}"
- R_CURLY@31..32 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_options.txt.snap
deleted file mode 100644
index 4ca53d2fe2..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_options.txt.snap
+++ /dev/null
@@ -1,23 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/graphics_path_options.txt
----
-ROOT@0..33
- PREAMBLE@0..33
- GRAPHICS_PATH@0..13
- COMMAND_NAME@0..13 "\\graphicspath"
- MIXED_GROUP@13..18
- L_BRACK@13..14 "["
- TEXT@14..17
- WORD@14..17 "foo"
- R_BRACK@17..18 "]"
- CURLY_GROUP@18..33
- L_CURLY@18..19 "{"
- CURLY_GROUP@19..32
- L_CURLY@19..20 "{"
- TEXT@20..31
- WORD@20..31 "../figures/"
- R_CURLY@31..32 "}"
- R_CURLY@32..33 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_missing_end.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_missing_end.txt.snap
deleted file mode 100644
index 902cacfdd5..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_missing_end.txt.snap
+++ /dev/null
@@ -1,14 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/group/curly_group_missing_end.txt
----
-ROOT@0..12
- PREAMBLE@0..12
- CURLY_GROUP@0..12
- L_CURLY@0..1 "{"
- TEXT@1..12
- WORD@1..6 "hello"
- WHITESPACE@6..7 " "
- WORD@7..12 "world"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_simple.txt.snap
deleted file mode 100644
index 4f1b8473be..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/group/curly_group_simple.txt
----
-ROOT@0..13
- PREAMBLE@0..13
- CURLY_GROUP@0..13
- L_CURLY@0..1 "{"
- TEXT@1..12
- WORD@1..6 "hello"
- WHITESPACE@6..7 " "
- WORD@7..12 "world"
- R_CURLY@12..13 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__equation_missing_end.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__equation_missing_end.txt.snap
deleted file mode 100644
index dfddb20f85..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__equation_missing_end.txt.snap
+++ /dev/null
@@ -1,32 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/group/equation_missing_end.txt
----
-ROOT@0..28
- PREAMBLE@0..28
- ENVIRONMENT@0..28
- BEGIN@0..10
- COMMAND_NAME@0..6 "\\begin"
- CURLY_GROUP_WORD@6..10
- L_CURLY@6..7 "{"
- KEY@7..8
- WORD@7..8 "a"
- R_CURLY@8..9 "}"
- WHITESPACE@9..10 " "
- EQUATION@10..21
- COMMAND_NAME@10..12 "\\["
- WHITESPACE@12..13 " "
- TEXT@13..21
- WORD@13..16 "foo"
- WHITESPACE@16..17 " "
- WORD@17..20 "bar"
- WHITESPACE@20..21 " "
- END@21..28
- COMMAND_NAME@21..25 "\\end"
- CURLY_GROUP_WORD@25..28
- L_CURLY@25..26 "{"
- KEY@26..27
- WORD@26..27 "b"
- R_CURLY@27..28 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__escaped_brackets.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__escaped_brackets.txt.snap
deleted file mode 100644
index d9e1636cf8..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__escaped_brackets.txt.snap
+++ /dev/null
@@ -1,18 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/group/escaped_brackets.txt
----
-ROOT@0..6
- PREAMBLE@0..6
- CURLY_GROUP@0..3
- L_CURLY@0..1 "{"
- MIXED_GROUP@1..2
- L_BRACK@1..2 "["
- R_CURLY@2..3 "}"
- CURLY_GROUP@3..6
- L_CURLY@3..4 "{"
- ERROR@4..5
- R_BRACK@4..5 "]"
- R_CURLY@5..6 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_braces.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_braces.txt.snap
deleted file mode 100644
index 922776c8c5..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_braces.txt.snap
+++ /dev/null
@@ -1,12 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/group/unmatched_braces.txt
----
-ROOT@0..2
- PREAMBLE@0..2
- ERROR@0..1
- R_CURLY@0..1 "}"
- CURLY_GROUP@1..2
- L_CURLY@1..2 "{"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets.txt.snap
deleted file mode 100644
index 12e455b505..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets.txt.snap
+++ /dev/null
@@ -1,12 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/group/unmatched_brackets.txt
----
-ROOT@0..2
- PREAMBLE@0..2
- ERROR@0..1
- R_BRACK@0..1 "]"
- MIXED_GROUP@1..2
- L_BRACK@1..2 "["
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap
deleted file mode 100644
index 765c7e4a8d..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/group/unmatched_brackets_with_group.txt
----
-ROOT@0..4
- PREAMBLE@0..4
- CURLY_GROUP@0..4
- L_CURLY@0..1 "{"
- ERROR@1..2
- R_BRACK@1..2 "]"
- MIXED_GROUP@2..3
- L_BRACK@2..3 "["
- R_CURLY@3..4 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@hello_world.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@hello_world.txt.snap
deleted file mode 100644
index 27bca69893..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@hello_world.txt.snap
+++ /dev/null
@@ -1,12 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/hello_world.txt
----
-ROOT@0..12
- PREAMBLE@0..12
- TEXT@0..12
- WORD@0..5 "Hello"
- WHITESPACE@5..6 " "
- WORD@6..12 "World!"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_options.txt.snap
deleted file mode 100644
index e3e34a68f6..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_options.txt.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/biblatex_include_options.txt
----
-ROOT@0..42
- PREAMBLE@0..42
- BIBLATEX_INCLUDE@0..42
- COMMAND_NAME@0..15 "\\addbibresource"
- BRACK_GROUP_KEY_VALUE@15..29
- L_BRACK@15..16 "["
- KEY_VALUE_BODY@16..28
- KEY_VALUE_PAIR@16..23
- KEY@16..19
- WORD@16..19 "foo"
- EQUALITY_SIGN@19..20 "="
- VALUE@20..23
- TEXT@20..23
- WORD@20..23 "bar"
- COMMA@23..24 ","
- WHITESPACE@24..25 " "
- KEY_VALUE_PAIR@25..28
- KEY@25..28
- WORD@25..28 "baz"
- R_BRACK@28..29 "]"
- CURLY_GROUP_WORD_LIST@29..42
- L_CURLY@29..30 "{"
- KEY@30..41
- WORD@30..41 "foo/bar.bib"
- R_CURLY@41..42 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_simple.txt.snap
deleted file mode 100644
index b4b4193dba..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/biblatex_include_simple.txt
----
-ROOT@0..28
- PREAMBLE@0..28
- BIBLATEX_INCLUDE@0..28
- COMMAND_NAME@0..15 "\\addbibresource"
- CURLY_GROUP_WORD_LIST@15..28
- L_CURLY@15..16 "{"
- KEY@16..27
- WORD@16..27 "foo/bar.bib"
- R_CURLY@27..28 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__bibtex_include_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__bibtex_include_simple.txt.snap
deleted file mode 100644
index c39c9e2c68..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__bibtex_include_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/bibtex_include_simple.txt
----
-ROOT@0..22
- PREAMBLE@0..22
- BIBTEX_INCLUDE@0..22
- COMMAND_NAME@0..13 "\\bibliography"
- CURLY_GROUP_WORD_LIST@13..22
- L_CURLY@13..14 "{"
- KEY@14..21
- WORD@14..21 "foo/bar"
- R_CURLY@21..22 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_empty.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_empty.txt.snap
deleted file mode 100644
index a8d5a7077f..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_empty.txt.snap
+++ /dev/null
@@ -1,13 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/class_include_empty.txt
----
-ROOT@0..16
- PREAMBLE@0..16
- CLASS_INCLUDE@0..16
- COMMAND_NAME@0..14 "\\documentclass"
- CURLY_GROUP_WORD_LIST@14..16
- L_CURLY@14..15 "{"
- R_CURLY@15..16 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_options.txt.snap
deleted file mode 100644
index 4cf4473cfa..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_options.txt.snap
+++ /dev/null
@@ -1,38 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/class_include_options.txt
----
-ROOT@0..44
- PREAMBLE@0..44
- CLASS_INCLUDE@0..44
- COMMAND_NAME@0..14 "\\documentclass"
- BRACK_GROUP_KEY_VALUE@14..35
- L_BRACK@14..15 "["
- KEY_VALUE_BODY@15..34
- KEY_VALUE_PAIR@15..24
- KEY@15..19
- WORD@15..18 "foo"
- WHITESPACE@18..19 " "
- EQUALITY_SIGN@19..20 "="
- WHITESPACE@20..21 " "
- VALUE@21..24
- TEXT@21..24
- WORD@21..24 "bar"
- COMMA@24..25 ","
- WHITESPACE@25..26 " "
- KEY_VALUE_PAIR@26..29
- KEY@26..29
- WORD@26..29 "baz"
- COMMA@29..30 ","
- WHITESPACE@30..31 " "
- KEY_VALUE_PAIR@31..34
- KEY@31..34
- WORD@31..34 "qux"
- R_BRACK@34..35 "]"
- CURLY_GROUP_WORD_LIST@35..44
- L_CURLY@35..36 "{"
- KEY@36..43
- WORD@36..43 "article"
- R_CURLY@43..44 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_simple.txt.snap
deleted file mode 100644
index a6be2ec496..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/class_include_simple.txt
----
-ROOT@0..23
- PREAMBLE@0..23
- CLASS_INCLUDE@0..23
- COMMAND_NAME@0..14 "\\documentclass"
- CURLY_GROUP_WORD_LIST@14..23
- L_CURLY@14..15 "{"
- KEY@15..22
- WORD@15..22 "article"
- R_CURLY@22..23 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_command.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_command.txt.snap
deleted file mode 100644
index 6f9f736d1f..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_command.txt.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/graphics_include_command.txt
----
-ROOT@0..52
- PREAMBLE@0..52
- GRAPHICS_INCLUDE@0..52
- COMMAND_NAME@0..16 "\\includegraphics"
- BRACK_GROUP_KEY_VALUE@16..37
- L_BRACK@16..17 "["
- KEY_VALUE_BODY@17..36
- KEY_VALUE_PAIR@17..36
- KEY@17..22
- WORD@17..22 "width"
- EQUALITY_SIGN@22..23 "="
- VALUE@23..36
- TEXT@23..26
- WORD@23..26 "0.5"
- GENERIC_COMMAND@26..36
- COMMAND_NAME@26..36 "\\textwidth"
- R_BRACK@36..37 "]"
- CURLY_GROUP_WORD_LIST@37..52
- L_CURLY@37..38 "{"
- KEY@38..51
- COMMAND_NAME@38..42 "\\foo"
- WORD@42..43 "."
- COMMAND_NAME@43..47 "\\bar"
- WORD@47..51 ".pdf"
- R_CURLY@51..52 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap
deleted file mode 100644
index 4b422dcd64..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/graphics_include_complicated_options.txt
----
-ROOT@0..39
- PREAMBLE@0..39
- GRAPHICS_INCLUDE@0..39
- COMMAND_NAME@0..16 "\\includegraphics"
- BRACK_GROUP_KEY_VALUE@16..37
- L_BRACK@16..17 "["
- KEY_VALUE_BODY@17..36
- KEY_VALUE_PAIR@17..36
- KEY@17..22
- WORD@17..22 "width"
- EQUALITY_SIGN@22..23 "="
- VALUE@23..36
- TEXT@23..26
- WORD@23..26 "0.5"
- GENERIC_COMMAND@26..36
- COMMAND_NAME@26..36 "\\textwidth"
- R_BRACK@36..37 "]"
- CURLY_GROUP_WORD_LIST@37..39
- L_CURLY@37..38 "{"
- R_CURLY@38..39 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_options.txt.snap
deleted file mode 100644
index 656d68c1ef..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_options.txt.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/graphics_include_options.txt
----
-ROOT@0..39
- PREAMBLE@0..39
- GRAPHICS_INCLUDE@0..39
- COMMAND_NAME@0..16 "\\includegraphics"
- BRACK_GROUP_KEY_VALUE@16..26
- L_BRACK@16..17 "["
- KEY_VALUE_BODY@17..25
- KEY_VALUE_PAIR@17..25
- KEY@17..22
- WORD@17..22 "scale"
- EQUALITY_SIGN@22..23 "="
- VALUE@23..25
- TEXT@23..25
- WORD@23..25 ".5"
- R_BRACK@25..26 "]"
- CURLY_GROUP_WORD_LIST@26..39
- L_CURLY@26..27 "{"
- KEY@27..38
- WORD@27..38 "foo/bar.pdf"
- R_CURLY@38..39 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_simple.txt.snap
deleted file mode 100644
index 39cb634ec2..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/graphics_include_simple.txt
----
-ROOT@0..29
- PREAMBLE@0..29
- GRAPHICS_INCLUDE@0..29
- COMMAND_NAME@0..16 "\\includegraphics"
- CURLY_GROUP_WORD_LIST@16..29
- L_CURLY@16..17 "{"
- KEY@17..28
- WORD@17..28 "foo/bar.pdf"
- R_CURLY@28..29 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_incomplete.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_incomplete.txt.snap
deleted file mode 100644
index 645133e65c..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_incomplete.txt.snap
+++ /dev/null
@@ -1,14 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/import_incomplete.txt
----
-ROOT@0..11
- PREAMBLE@0..11
- IMPORT@0..11
- COMMAND_NAME@0..7 "\\import"
- CURLY_GROUP_WORD@7..11
- L_CURLY@7..8 "{"
- KEY@8..11
- WORD@8..11 "foo"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_simple.txt.snap
deleted file mode 100644
index b383dc435e..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_simple.txt.snap
+++ /dev/null
@@ -1,20 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/import_simple.txt
----
-ROOT@0..17
- PREAMBLE@0..17
- IMPORT@0..17
- COMMAND_NAME@0..7 "\\import"
- CURLY_GROUP_WORD@7..12
- L_CURLY@7..8 "{"
- KEY@8..11
- WORD@8..11 "foo"
- R_CURLY@11..12 "}"
- CURLY_GROUP_WORD@12..17
- L_CURLY@12..13 "{"
- KEY@13..16
- WORD@13..16 "bar"
- R_CURLY@16..17 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_options.txt.snap
deleted file mode 100644
index 2c2c176fdb..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_options.txt.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/inkscape_include_options.txt
----
-ROOT@0..30
- PREAMBLE@0..30
- SVG_INCLUDE@0..30
- COMMAND_NAME@0..11 "\\includesvg"
- BRACK_GROUP_KEY_VALUE@11..21
- L_BRACK@11..12 "["
- KEY_VALUE_BODY@12..20
- KEY_VALUE_PAIR@12..20
- KEY@12..17
- WORD@12..17 "scale"
- EQUALITY_SIGN@17..18 "="
- VALUE@18..20
- TEXT@18..20
- WORD@18..20 ".5"
- R_BRACK@20..21 "]"
- CURLY_GROUP_WORD_LIST@21..30
- L_CURLY@21..22 "{"
- KEY@22..29
- WORD@22..29 "foo/bar"
- R_CURLY@29..30 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_simple.txt.snap
deleted file mode 100644
index 62cb7486db..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/inkscape_include_simple.txt
----
-ROOT@0..20
- PREAMBLE@0..20
- SVG_INCLUDE@0..20
- COMMAND_NAME@0..11 "\\includesvg"
- CURLY_GROUP_WORD_LIST@11..20
- L_CURLY@11..12 "{"
- KEY@12..19
- WORD@12..19 "foo/bar"
- R_CURLY@19..20 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap
deleted file mode 100644
index 2fff7b1e8f..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap
+++ /dev/null
@@ -1,17 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/latex_include_equality_sign.txt
----
-ROOT@0..17
- PREAMBLE@0..17
- LATEX_INCLUDE@0..17
- COMMAND_NAME@0..8 "\\include"
- CURLY_GROUP_WORD_LIST@8..17
- L_CURLY@8..9 "{"
- KEY@9..16
- WORD@9..12 "foo"
- EQUALITY_SIGN@12..13 "="
- WORD@13..16 "bar"
- R_CURLY@16..17 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_simple.txt.snap
deleted file mode 100644
index 4841296f02..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/latex_include_simple.txt
----
-ROOT@0..17
- PREAMBLE@0..17
- LATEX_INCLUDE@0..17
- COMMAND_NAME@0..8 "\\include"
- CURLY_GROUP_WORD_LIST@8..17
- L_CURLY@8..9 "{"
- KEY@9..16
- WORD@9..16 "foo/bar"
- R_CURLY@16..17 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap
deleted file mode 100644
index 7f13f6b247..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/latex_input_path_brackets.txt
----
-ROOT@0..20
- PREAMBLE@0..20
- LATEX_INCLUDE@0..20
- COMMAND_NAME@0..6 "\\input"
- CURLY_GROUP_WORD_LIST@6..20
- L_CURLY@6..7 "{"
- KEY@7..19
- WORD@7..10 "foo"
- L_BRACK@10..11 "["
- WORD@11..14 "bar"
- R_BRACK@14..15 "]"
- WORD@15..19 ".tex"
- R_CURLY@19..20 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_empty.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_empty.txt.snap
deleted file mode 100644
index 086f2b0c75..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_empty.txt.snap
+++ /dev/null
@@ -1,13 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/package_include_empty.txt
----
-ROOT@0..13
- PREAMBLE@0..13
- PACKAGE_INCLUDE@0..13
- COMMAND_NAME@0..11 "\\usepackage"
- CURLY_GROUP_WORD_LIST@11..13
- L_CURLY@11..12 "{"
- R_CURLY@12..13 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_multiple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_multiple.txt.snap
deleted file mode 100644
index d42a4a76fe..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_multiple.txt.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/package_include_multiple.txt
----
-ROOT@0..28
- PREAMBLE@0..28
- PACKAGE_INCLUDE@0..28
- COMMAND_NAME@0..11 "\\usepackage"
- CURLY_GROUP_WORD_LIST@11..28
- L_CURLY@11..12 "{"
- KEY@12..19
- WORD@12..19 "amsmath"
- COMMA@19..20 ","
- WHITESPACE@20..21 " "
- KEY@21..27
- WORD@21..27 "lipsum"
- R_CURLY@27..28 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_options.txt.snap
deleted file mode 100644
index 8ecffa39d5..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_options.txt.snap
+++ /dev/null
@@ -1,38 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/package_include_options.txt
----
-ROOT@0..41
- PREAMBLE@0..41
- PACKAGE_INCLUDE@0..41
- COMMAND_NAME@0..11 "\\usepackage"
- BRACK_GROUP_KEY_VALUE@11..32
- L_BRACK@11..12 "["
- KEY_VALUE_BODY@12..31
- KEY_VALUE_PAIR@12..21
- KEY@12..16
- WORD@12..15 "foo"
- WHITESPACE@15..16 " "
- EQUALITY_SIGN@16..17 "="
- WHITESPACE@17..18 " "
- VALUE@18..21
- TEXT@18..21
- WORD@18..21 "bar"
- COMMA@21..22 ","
- WHITESPACE@22..23 " "
- KEY_VALUE_PAIR@23..26
- KEY@23..26
- WORD@23..26 "baz"
- COMMA@26..27 ","
- WHITESPACE@27..28 " "
- KEY_VALUE_PAIR@28..31
- KEY@28..31
- WORD@28..31 "qux"
- R_BRACK@31..32 "]"
- CURLY_GROUP_WORD_LIST@32..41
- L_CURLY@32..33 "{"
- KEY@33..40
- WORD@33..40 "amsmath"
- R_CURLY@40..41 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_simple.txt.snap
deleted file mode 100644
index 99304a8108..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/package_include_simple.txt
----
-ROOT@0..20
- PREAMBLE@0..20
- PACKAGE_INCLUDE@0..20
- COMMAND_NAME@0..11 "\\usepackage"
- CURLY_GROUP_WORD_LIST@11..20
- L_CURLY@11..12 "{"
- KEY@12..19
- WORD@12..19 "amsmath"
- R_CURLY@19..20 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap
deleted file mode 100644
index c55ce16744..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/pgf_library_import_simple.txt
----
-ROOT@0..19
- PREAMBLE@0..19
- TIKZ_LIBRARY_IMPORT@0..19
- COMMAND_NAME@0..14 "\\usepgflibrary"
- CURLY_GROUP_WORD_LIST@14..19
- L_CURLY@14..15 "{"
- KEY@15..18
- WORD@15..18 "foo"
- R_CURLY@18..19 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_options.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_options.txt.snap
deleted file mode 100644
index 7e67683606..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_options.txt.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/svg_include_options.txt
----
-ROOT@0..34
- PREAMBLE@0..34
- SVG_INCLUDE@0..34
- COMMAND_NAME@0..11 "\\includesvg"
- BRACK_GROUP_KEY_VALUE@11..21
- L_BRACK@11..12 "["
- KEY_VALUE_BODY@12..20
- KEY_VALUE_PAIR@12..20
- KEY@12..17
- WORD@12..17 "scale"
- EQUALITY_SIGN@17..18 "="
- VALUE@18..20
- TEXT@18..20
- WORD@18..20 ".5"
- R_BRACK@20..21 "]"
- CURLY_GROUP_WORD_LIST@21..34
- L_CURLY@21..22 "{"
- KEY@22..33
- WORD@22..33 "foo/bar.svg"
- R_CURLY@33..34 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_simple.txt.snap
deleted file mode 100644
index f776f9c2bc..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/svg_include_simple.txt
----
-ROOT@0..24
- PREAMBLE@0..24
- SVG_INCLUDE@0..24
- COMMAND_NAME@0..11 "\\includesvg"
- CURLY_GROUP_WORD_LIST@11..24
- L_CURLY@11..12 "{"
- KEY@12..23
- WORD@12..23 "foo/bar.svg"
- R_CURLY@23..24 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap
deleted file mode 100644
index fff99d5ad1..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/tikz_library_import_simple.txt
----
-ROOT@0..20
- PREAMBLE@0..20
- TIKZ_LIBRARY_IMPORT@0..20
- COMMAND_NAME@0..15 "\\usetikzlibrary"
- CURLY_GROUP_WORD_LIST@15..20
- L_CURLY@15..16 "{"
- KEY@16..19
- WORD@16..19 "foo"
- R_CURLY@19..20 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__verbatim_include_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__verbatim_include_simple.txt.snap
deleted file mode 100644
index 28eda149c4..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__verbatim_include_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/include/verbatim_include_simple.txt
----
-ROOT@0..27
- PREAMBLE@0..27
- VERBATIM_INCLUDE@0..27
- COMMAND_NAME@0..14 "\\verbatiminput"
- CURLY_GROUP_WORD_LIST@14..27
- L_CURLY@14..15 "{"
- KEY@15..26
- WORD@15..26 "foo/bar.txt"
- R_CURLY@26..27 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline.txt.snap
deleted file mode 100644
index b5696044a5..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline.txt.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/inline.txt
----
-ROOT@0..19
- PREAMBLE@0..19
- FORMULA@0..19
- DOLLAR@0..1 "$"
- TEXT@1..3
- WORD@1..2 "x"
- WHITESPACE@2..3 " "
- GENERIC_COMMAND@3..18
- COMMAND_NAME@3..6 "\\in"
- WHITESPACE@6..7 " "
- MIXED_GROUP@7..18
- L_BRACK@7..8 "["
- TEXT@8..11
- WORD@8..9 "0"
- COMMA@9..10 ","
- WHITESPACE@10..11 " "
- GENERIC_COMMAND@11..17
- COMMAND_NAME@11..17 "\\infty"
- R_PAREN@17..18 ")"
- DOLLAR@18..19 "$"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline_double_dollar.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline_double_dollar.txt.snap
deleted file mode 100644
index 6d614db919..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline_double_dollar.txt.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/inline_double_dollar.txt
----
-ROOT@0..21
- PREAMBLE@0..21
- FORMULA@0..21
- DOLLAR@0..2 "$$"
- TEXT@2..4
- WORD@2..3 "x"
- WHITESPACE@3..4 " "
- GENERIC_COMMAND@4..19
- COMMAND_NAME@4..7 "\\in"
- WHITESPACE@7..8 " "
- MIXED_GROUP@8..19
- L_BRACK@8..9 "["
- TEXT@9..12
- WORD@9..10 "0"
- COMMA@10..11 ","
- WHITESPACE@11..12 " "
- GENERIC_COMMAND@12..18
- COMMAND_NAME@12..18 "\\infty"
- R_PAREN@18..19 ")"
- DOLLAR@19..21 "$$"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_568.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_568.txt.snap
deleted file mode 100644
index f71507c2ac..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_568.txt.snap
+++ /dev/null
@@ -1,28 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/issue_568.txt
----
-ROOT@0..51
- PREAMBLE@0..51
- LATEX_INCLUDE@0..36
- COMMAND_NAME@0..6 "\\input"
- CURLY_GROUP_WORD_LIST@6..36
- L_CURLY@6..7 "{"
- WORD@7..8 "|"
- KEY@8..34
- WORD@8..15 "ipython"
- WHITESPACE@15..16 " "
- WORD@16..34 "scripts/test.ipynb"
- R_CURLY@34..35 "}"
- LINE_BREAK@35..36 "\n"
- LABEL_DEFINITION@36..51
- COMMAND_NAME@36..42 "\\label"
- CURLY_GROUP_WORD@42..51
- L_CURLY@42..43 "{"
- KEY@43..50
- WORD@43..48 "fig:x"
- EQUALITY_SIGN@48..49 "="
- WORD@49..50 "2"
- R_CURLY@50..51 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_745.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_745.txt.snap
deleted file mode 100644
index 4165481528..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_745.txt.snap
+++ /dev/null
@@ -1,131 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/issue_745.txt
----
-ROOT@0..271
- PREAMBLE@0..271
- CLASS_INCLUDE@0..24
- COMMAND_NAME@0..14 "\\documentclass"
- CURLY_GROUP_WORD_LIST@14..24
- L_CURLY@14..15 "{"
- KEY@15..22
- WORD@15..22 "article"
- R_CURLY@22..23 "}"
- LINE_BREAK@23..24 "\n"
- PACKAGE_INCLUDE@24..50
- COMMAND_NAME@24..35 "\\usepackage"
- CURLY_GROUP_WORD_LIST@35..50
- L_CURLY@35..36 "{"
- KEY@36..46
- WORD@36..46 "tabularray"
- R_CURLY@46..47 "}"
- WHITESPACE@47..48 " "
- LINE_BREAK@48..50 "\n\n"
- GENERIC_COMMAND@50..64
- COMMAND_NAME@50..63 "\\ExplSyntaxOn"
- LINE_BREAK@63..64 "\n"
- GENERIC_COMMAND@64..223
- COMMAND_NAME@64..87 "\\NewDocumentEnvironment"
- CURLY_GROUP@87..96
- L_CURLY@87..88 "{"
- TEXT@88..95
- WORD@88..95 "exptblr"
- R_CURLY@95..96 "}"
- CURLY_GROUP@96..107
- L_CURLY@96..97 "{"
- TEXT@97..98
- WORD@97..98 "O"
- CURLY_GROUP@98..100
- L_CURLY@98..99 "{"
- R_CURLY@99..100 "}"
- TEXT@100..101
- WORD@100..101 "m"
- R_CURLY@101..102 "}"
- LINE_BREAK@102..103 "\n"
- WHITESPACE@103..107 " "
- CURLY_GROUP@107..200
- L_CURLY@107..108 "{"
- LINE_BREAK@108..109 "\n"
- WHITESPACE@109..113 " "
- GENERIC_COMMAND@113..194
- COMMAND_NAME@113..119 "\\use:x"
- LINE_BREAK@119..120 "\n"
- WHITESPACE@120..124 " "
- CURLY_GROUP@124..194
- L_CURLY@124..125 "{"
- LINE_BREAK@125..126 "\n"
- WHITESPACE@126..130 " "
- GENERIC_COMMAND@130..141
- COMMAND_NAME@130..140 "\\exp_not:N"
- WHITESPACE@140..141 " "
- ENVIRONMENT@141..188
- BEGIN@141..179
- COMMAND_NAME@141..147 "\\begin"
- CURLY_GROUP_WORD@147..158
- L_CURLY@147..148 "{"
- KEY@148..152
- WORD@148..152 "tblr"
- R_CURLY@152..153 "}"
- LINE_BREAK@153..154 "\n"
- WHITESPACE@154..158 " "
- BRACK_GROUP@158..179
- L_BRACK@158..159 "["
- GENERIC_COMMAND@159..173
- COMMAND_NAME@159..169 "\\exp_not:n"
- CURLY_GROUP@169..173
- L_CURLY@169..170 "{"
- TEXT@170..172
- WORD@170..172 "#1"
- R_CURLY@172..173 "}"
- R_BRACK@173..174 "]"
- LINE_BREAK@174..175 "\n"
- WHITESPACE@175..179 " "
- CURLY_GROUP@179..188
- L_CURLY@179..180 "{"
- TEXT@180..182
- WORD@180..182 "#2"
- R_CURLY@182..183 "}"
- LINE_BREAK@183..184 "\n"
- WHITESPACE@184..188 " "
- R_CURLY@188..189 "}"
- LINE_BREAK@189..190 "\n"
- WHITESPACE@190..194 " "
- 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"
- GENERIC_COMMAND@223..239
- COMMAND_NAME@223..237 "\\ExplSyntaxOff"
- LINE_BREAK@237..239 "\n\n"
- ENVIRONMENT@239..271
- BEGIN@239..257
- COMMAND_NAME@239..245 "\\begin"
- CURLY_GROUP_WORD@245..257
- L_CURLY@245..246 "{"
- KEY@246..254
- WORD@246..254 "document"
- R_CURLY@254..255 "}"
- LINE_BREAK@255..257 "\n\n"
- END@257..271
- COMMAND_NAME@257..261 "\\end"
- CURLY_GROUP_WORD@261..271
- L_CURLY@261..262 "{"
- KEY@262..270
- WORD@262..270 "document"
- R_CURLY@270..271 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_789.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_789.txt.snap
deleted file mode 100644
index 9899e3c9ab..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_789.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/issue_789.txt
----
-ROOT@0..19
- PREAMBLE@0..19
- GRAPHICS_PATH@0..19
- COMMAND_NAME@0..13 "\\graphicspath"
- CURLY_GROUP_WORD@13..19
- L_CURLY@13..14 "{"
- KEY@14..18
- WORD@14..18 "test"
- R_CURLY@18..19 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_828.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_828.txt.snap
deleted file mode 100644
index 059b957241..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_828.txt.snap
+++ /dev/null
@@ -1,22 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/issue_828.txt
----
-ROOT@0..51
- PREAMBLE@0..51
- GENERIC_COMMAND@0..5
- COMMAND_NAME@0..5 "\\verb"
- VERBATIM@5..6 "|"
- VERBATIM@6..17 "<STATEMENT>"
- VERBATIM@17..22 " "
- VERBATIM@22..24 "if"
- VERBATIM@24..25 "("
- VERBATIM@25..31 "<expr>"
- VERBATIM@31..32 ")"
- VERBATIM@32..33 "{"
- VERBATIM@33..43 "<body>else"
- VERBATIM@43..44 "{"
- VERBATIM@44..50 "<body>"
- VERBATIM@50..51 "|"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_853.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_853.txt.snap
deleted file mode 100644
index dc8c3a3d2b..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_853.txt.snap
+++ /dev/null
@@ -1,62 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/issue_853.txt
----
-ROOT@0..135
- PREAMBLE@0..135
- CLASS_INCLUDE@0..24
- COMMAND_NAME@0..14 "\\documentclass"
- CURLY_GROUP_WORD_LIST@14..24
- L_CURLY@14..15 "{"
- KEY@15..22
- WORD@15..22 "minimal"
- R_CURLY@22..23 "}"
- LINE_BREAK@23..24 "\n"
- ENVIRONMENT@24..135
- BEGIN@24..41
- COMMAND_NAME@24..30 "\\begin"
- CURLY_GROUP_WORD@30..41
- L_CURLY@30..31 "{"
- KEY@31..39
- WORD@31..39 "document"
- R_CURLY@39..40 "}"
- LINE_BREAK@40..41 "\n"
- TEXT@41..75
- WORD@41..45 "This"
- WHITESPACE@45..46 " "
- WORD@46..48 "is"
- WHITESPACE@48..49 " "
- WORD@49..51 "an"
- WHITESPACE@51..52 " "
- WORD@52..56 "asdf"
- WHITESPACE@56..57 " "
- WORD@57..66 "undefined"
- WHITESPACE@66..67 " "
- WORD@67..74 "command"
- LINE_BREAK@74..75 "\n"
- BLOCK_COMMENT@75..120
- COMMAND_NAME@75..83 "\\iffalse"
- LINE_BREAK@83..84 "\n"
- WHITESPACE@84..86 " "
- BLOCK_COMMENT@86..97
- COMMAND_NAME@86..94 "\\iffalse"
- COMMAND_NAME@94..97 "\\fi"
- LINE_BREAK@97..98 "\n"
- WHITESPACE@98..100 " "
- COMMAND_NAME@100..104 "\\end"
- L_CURLY@104..105 "{"
- WORD@105..114 "enumerate"
- R_CURLY@114..115 "}"
- WHITESPACE@115..116 " "
- LINE_BREAK@116..117 "\n"
- COMMAND_NAME@117..120 "\\fi"
- LINE_BREAK@120..121 "\n"
- END@121..135
- COMMAND_NAME@121..125 "\\end"
- CURLY_GROUP_WORD@125..135
- L_CURLY@125..126 "{"
- KEY@126..134
- WORD@126..134 "document"
- R_CURLY@134..135 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_857.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_857.txt.snap
deleted file mode 100644
index b0edef17a8..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_857.txt.snap
+++ /dev/null
@@ -1,33 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/issue_857.txt
----
-ROOT@0..55
- PREAMBLE@0..55
- COMMAND_DEFINITION@0..11
- COMMAND_NAME@0..11 "\\newcommand"
- GENERIC_COMMAND@11..17
- COMMAND_NAME@11..14 "\\ö"
- CURLY_GROUP@14..17
- L_CURLY@14..15 "{"
- R_CURLY@15..16 "}"
- LINE_BREAK@16..17 "\n"
- COMMAND_DEFINITION@17..38
- COMMAND_NAME@17..28 "\\newcommand"
- CURLY_GROUP_COMMAND@28..35
- L_CURLY@28..29 "{"
- COMMAND_NAME@29..34 "\\öö"
- R_CURLY@34..35 "}"
- CURLY_GROUP@35..38
- L_CURLY@35..36 "{"
- R_CURLY@36..37 "}"
- LINE_BREAK@37..38 "\n"
- COMMAND_DEFINITION@38..49
- COMMAND_NAME@38..49 "\\newcommand"
- GENERIC_COMMAND@49..55
- COMMAND_NAME@49..53 "\\123"
- CURLY_GROUP@53..55
- L_CURLY@53..54 "{"
- R_CURLY@54..55 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_874.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_874.txt.snap
deleted file mode 100644
index 8555f2bc48..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_874.txt.snap
+++ /dev/null
@@ -1,28 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/issue_874.txt
----
-ROOT@0..37
- PREAMBLE@0..37
- GRAPHICS_INCLUDE@0..37
- COMMAND_NAME@0..16 "\\includegraphics"
- BRACK_GROUP_KEY_VALUE@16..27
- L_BRACK@16..17 "["
- KEY_VALUE_BODY@17..26
- KEY_VALUE_PAIR@17..26
- KEY@17..22
- WORD@17..22 "scale"
- EQUALITY_SIGN@22..23 "="
- VALUE@23..26
- TEXT@23..26
- WORD@23..26 "0.2"
- R_BRACK@26..27 "]"
- CURLY_GROUP_WORD_LIST@27..37
- L_CURLY@27..28 "{"
- KEY@28..36
- WORD@28..31 "7.4"
- R_PAREN@31..32 ")"
- WORD@32..36 ".jpg"
- R_CURLY@36..37 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_919.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_919.txt.snap
deleted file mode 100644
index bf5d207fca..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_919.txt.snap
+++ /dev/null
@@ -1,61 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/issue_919.txt
----
-ROOT@0..217
- PREAMBLE@0..217
- CLASS_INCLUDE@0..25
- COMMAND_NAME@0..14 "\\documentclass"
- CURLY_GROUP_WORD_LIST@14..25
- L_CURLY@14..15 "{"
- KEY@15..22
- WORD@15..22 "article"
- R_CURLY@22..23 "}"
- LINE_BREAK@23..25 "\n\n"
- PACKAGE_INCLUDE@25..173
- COMMAND_NAME@25..36 "\\usepackage"
- CURLY_GROUP_WORD_LIST@36..173
- L_CURLY@36..37 "{"
- LINE_BREAK@37..38 "\n"
- WHITESPACE@38..42 " "
- KEY@42..48
- WORD@42..48 "lipsum"
- COMMA@48..49 ","
- WHITESPACE@49..50 " "
- COMMENT@50..70 "% provides blindtext"
- LINE_BREAK@70..71 "\n"
- WHITESPACE@71..75 " "
- KEY@75..83
- WORD@75..83 "booktabs"
- COMMA@83..84 ","
- WHITESPACE@84..85 " "
- COMMENT@85..110 "% better rules for ta ..."
- LINE_BREAK@110..111 "\n"
- WHITESPACE@111..115 " "
- COMMENT@115..169 "%xcolor % easily defi ..."
- LINE_BREAK@169..170 "\n"
- R_CURLY@170..171 "}"
- LINE_BREAK@171..173 "\n\n"
- ENVIRONMENT@173..217
- BEGIN@173..194
- COMMAND_NAME@173..179 "\\begin"
- CURLY_GROUP_WORD@179..194
- L_CURLY@179..180 "{"
- KEY@180..188
- WORD@180..188 "document"
- R_CURLY@188..189 "}"
- LINE_BREAK@189..190 "\n"
- WHITESPACE@190..194 " "
- GENERIC_COMMAND@194..202
- COMMAND_NAME@194..201 "\\lipsum"
- LINE_BREAK@201..202 "\n"
- END@202..217
- COMMAND_NAME@202..206 "\\end"
- CURLY_GROUP_WORD@206..217
- L_CURLY@206..207 "{"
- KEY@207..215
- WORD@207..215 "document"
- R_CURLY@215..216 "}"
- LINE_BREAK@216..217 "\n"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_931.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_931.txt.snap
deleted file mode 100644
index 2fef140d95..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_931.txt.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/issue_931.txt
----
-ROOT@0..31
- PREAMBLE@0..31
- BIBTEX_INCLUDE@0..31
- COMMAND_NAME@0..13 "\\bibliography"
- CURLY_GROUP_WORD_LIST@13..31
- L_CURLY@13..14 "{"
- KEY@14..30
- DOLLAR@14..15 "$"
- WORD@15..30 "HOME/Literature"
- R_CURLY@30..31 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_line_break.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_line_break.txt.snap
deleted file mode 100644
index 5eaed87fee..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_line_break.txt.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_definition_line_break.txt
----
-ROOT@0..19
- PREAMBLE@0..19
- LABEL_DEFINITION@0..13
- COMMAND_NAME@0..6 "\\label"
- CURLY_GROUP_WORD@6..13
- L_CURLY@6..7 "{"
- KEY@7..13
- WORD@7..12 "hello"
- LINE_BREAK@12..13 "\n"
- TEXT@13..18
- WORD@13..18 "world"
- ERROR@18..19
- R_CURLY@18..19 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_simple.txt.snap
deleted file mode 100644
index cb693002b5..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_definition_simple.txt
----
-ROOT@0..11
- PREAMBLE@0..11
- LABEL_DEFINITION@0..11
- COMMAND_NAME@0..6 "\\label"
- CURLY_GROUP_WORD@6..11
- L_CURLY@6..7 "{"
- KEY@7..10
- WORD@7..10 "foo"
- R_CURLY@10..11 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_number.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_number.txt.snap
deleted file mode 100644
index 6e9613313a..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_number.txt.snap
+++ /dev/null
@@ -1,23 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_number.txt
----
-ROOT@0..21
- PREAMBLE@0..21
- LABEL_NUMBER@0..21
- COMMAND_NAME@0..9 "\\newlabel"
- CURLY_GROUP_WORD@9..14
- L_CURLY@9..10 "{"
- KEY@10..13
- WORD@10..13 "foo"
- R_CURLY@13..14 "}"
- CURLY_GROUP@14..21
- L_CURLY@14..15 "{"
- CURLY_GROUP@15..20
- L_CURLY@15..16 "{"
- TEXT@16..19
- WORD@16..19 "1.1"
- R_CURLY@19..20 "}"
- R_CURLY@20..21 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_equation.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_equation.txt.snap
deleted file mode 100644
index b631f40b60..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_equation.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_reference_equation.txt
----
-ROOT@0..11
- PREAMBLE@0..11
- LABEL_REFERENCE@0..11
- COMMAND_NAME@0..6 "\\eqref"
- CURLY_GROUP_WORD_LIST@6..11
- L_CURLY@6..7 "{"
- KEY@7..10
- WORD@7..10 "foo"
- R_CURLY@10..11 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_incomplete.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_incomplete.txt.snap
deleted file mode 100644
index 054da6d258..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_incomplete.txt.snap
+++ /dev/null
@@ -1,32 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_reference_incomplete.txt
----
-ROOT@0..47
- PREAMBLE@0..47
- TEXT@0..9
- WORD@0..8 "Equation"
- WHITESPACE@8..9 " "
- LABEL_REFERENCE@9..24
- COMMAND_NAME@9..15 "\\eqref"
- CURLY_GROUP_WORD_LIST@15..24
- L_CURLY@15..16 "{"
- KEY@16..24
- WORD@16..18 "eq"
- WHITESPACE@18..19 " "
- WORD@19..21 "is"
- WHITESPACE@21..22 " "
- WORD@22..23 "a"
- WHITESPACE@23..24 " "
- GENERIC_COMMAND@24..38
- COMMAND_NAME@24..29 "\\emph"
- CURLY_GROUP@29..38
- L_CURLY@29..30 "{"
- TEXT@30..36
- WORD@30..36 "useful"
- R_CURLY@36..37 "}"
- WHITESPACE@37..38 " "
- TEXT@38..47
- WORD@38..47 "identity."
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_multiple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_multiple.txt.snap
deleted file mode 100644
index 5a228e8972..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_multiple.txt.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_reference_multiple.txt
----
-ROOT@0..14
- PREAMBLE@0..14
- LABEL_REFERENCE@0..14
- COMMAND_NAME@0..4 "\\ref"
- CURLY_GROUP_WORD_LIST@4..14
- L_CURLY@4..5 "{"
- KEY@5..8
- WORD@5..8 "foo"
- COMMA@8..9 ","
- WHITESPACE@9..10 " "
- KEY@10..13
- WORD@10..13 "bar"
- R_CURLY@13..14 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_error.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_error.txt.snap
deleted file mode 100644
index a4b25eeb09..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_error.txt.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_reference_range_error.txt
----
-ROOT@0..19
- PREAMBLE@0..19
- LABEL_REFERENCE_RANGE@0..19
- COMMAND_NAME@0..10 "\\crefrange"
- CURLY_GROUP_WORD@10..14
- L_CURLY@10..11 "{"
- KEY@11..14
- WORD@11..14 "foo"
- CURLY_GROUP_WORD@14..19
- L_CURLY@14..15 "{"
- KEY@15..18
- WORD@15..18 "bar"
- R_CURLY@18..19 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap
deleted file mode 100644
index e18cd6ed97..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_reference_range_incomplete.txt
----
-ROOT@0..15
- PREAMBLE@0..15
- LABEL_REFERENCE_RANGE@0..15
- COMMAND_NAME@0..10 "\\crefrange"
- CURLY_GROUP_WORD@10..15
- L_CURLY@10..11 "{"
- KEY@11..14
- WORD@11..14 "foo"
- R_CURLY@14..15 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_simple.txt.snap
deleted file mode 100644
index 335309607c..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_simple.txt.snap
+++ /dev/null
@@ -1,20 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_reference_range_simple.txt
----
-ROOT@0..20
- PREAMBLE@0..20
- LABEL_REFERENCE_RANGE@0..20
- COMMAND_NAME@0..10 "\\crefrange"
- CURLY_GROUP_WORD@10..15
- L_CURLY@10..11 "{"
- KEY@11..14
- WORD@11..14 "foo"
- R_CURLY@14..15 "}"
- CURLY_GROUP_WORD@15..20
- L_CURLY@15..16 "{"
- KEY@16..19
- WORD@16..19 "bar"
- R_CURLY@19..20 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_simple.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_simple.txt.snap
deleted file mode 100644
index ba3d08b472..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_simple.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/label/label_reference_simple.txt
----
-ROOT@0..9
- PREAMBLE@0..9
- LABEL_REFERENCE@0..9
- COMMAND_NAME@0..4 "\\ref"
- CURLY_GROUP_WORD_LIST@4..9
- L_CURLY@4..5 "{"
- KEY@5..8
- WORD@5..8 "foo"
- R_CURLY@8..9 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter.txt.snap
deleted file mode 100644
index aa038efb86..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter.txt.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/parameter.txt
----
-ROOT@0..2
- PREAMBLE@0..2
- TEXT@0..2
- WORD@0..2 "#1"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter_error.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter_error.txt.snap
deleted file mode 100644
index 7f9a744622..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter_error.txt.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/parameter_error.txt
----
-ROOT@0..1
- PREAMBLE@0..1
- TEXT@0..1
- WORD@0..1 "#"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__paragraphs.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__paragraphs.txt.snap
deleted file mode 100644
index 7c3e7fae57..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__paragraphs.txt.snap
+++ /dev/null
@@ -1,67 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/structure/paragraphs.txt
----
-ROOT@0..134
- PREAMBLE@0..134
- SECTION@0..105
- COMMAND_NAME@0..8 "\\section"
- CURLY_GROUP@8..20
- L_CURLY@8..9 "{"
- TEXT@9..18
- WORD@9..16 "Section"
- WHITESPACE@16..17 " "
- WORD@17..18 "1"
- R_CURLY@18..19 "}"
- LINE_BREAK@19..20 "\n"
- TEXT@20..31
- WORD@20..27 "Section"
- WHITESPACE@27..28 " "
- WORD@28..29 "1"
- LINE_BREAK@29..31 "\n\n"
- PARAGRAPH@31..68
- COMMAND_NAME@31..41 "\\paragraph"
- CURLY_GROUP@41..55
- L_CURLY@41..42 "{"
- TEXT@42..53
- WORD@42..51 "Paragraph"
- WHITESPACE@51..52 " "
- WORD@52..53 "1"
- R_CURLY@53..54 "}"
- LINE_BREAK@54..55 "\n"
- TEXT@55..68
- WORD@55..64 "Paragraph"
- WHITESPACE@64..65 " "
- WORD@65..66 "1"
- LINE_BREAK@66..68 "\n\n"
- PARAGRAPH@68..105
- COMMAND_NAME@68..78 "\\paragraph"
- CURLY_GROUP@78..92
- L_CURLY@78..79 "{"
- TEXT@79..90
- WORD@79..88 "Paragraph"
- WHITESPACE@88..89 " "
- WORD@89..90 "2"
- R_CURLY@90..91 "}"
- LINE_BREAK@91..92 "\n"
- TEXT@92..105
- WORD@92..101 "Paragraph"
- WHITESPACE@101..102 " "
- WORD@102..103 "2"
- LINE_BREAK@103..105 "\n\n"
- SECTION@105..134
- COMMAND_NAME@105..113 "\\section"
- CURLY_GROUP@113..125
- L_CURLY@113..114 "{"
- TEXT@114..123
- WORD@114..121 "Section"
- WHITESPACE@121..122 " "
- WORD@122..123 "2"
- R_CURLY@123..124 "}"
- LINE_BREAK@124..125 "\n"
- TEXT@125..134
- WORD@125..132 "Section"
- WHITESPACE@132..133 " "
- WORD@133..134 "2"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_enum_item.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_enum_item.txt.snap
deleted file mode 100644
index 6045bdce2b..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_enum_item.txt.snap
+++ /dev/null
@@ -1,47 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/structure/structure_enum_item.txt
----
-ROOT@0..60
- PREAMBLE@0..60
- ENVIRONMENT@0..60
- BEGIN@0..18
- COMMAND_NAME@0..6 "\\begin"
- CURLY_GROUP_WORD@6..18
- L_CURLY@6..7 "{"
- KEY@7..16
- WORD@7..16 "enumerate"
- R_CURLY@16..17 "}"
- WHITESPACE@17..18 " "
- ENUM_ITEM@18..26
- COMMAND_NAME@18..23 "\\item"
- WHITESPACE@23..24 " "
- TEXT@24..26
- WORD@24..25 "1"
- WHITESPACE@25..26 " "
- ENUM_ITEM@26..37
- COMMAND_NAME@26..31 "\\item"
- BRACK_GROUP@31..35
- L_BRACK@31..32 "["
- TEXT@32..33
- WORD@32..33 "2"
- R_BRACK@33..34 "]"
- WHITESPACE@34..35 " "
- TEXT@35..37
- WORD@35..36 "2"
- WHITESPACE@36..37 " "
- ENUM_ITEM@37..45
- COMMAND_NAME@37..42 "\\item"
- WHITESPACE@42..43 " "
- TEXT@43..45
- WORD@43..44 "3"
- WHITESPACE@44..45 " "
- END@45..60
- COMMAND_NAME@45..49 "\\end"
- CURLY_GROUP_WORD@49..60
- L_CURLY@49..50 "{"
- KEY@50..59
- WORD@50..59 "enumerate"
- R_CURLY@59..60 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap
deleted file mode 100644
index df715917df..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap
+++ /dev/null
@@ -1,23 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/structure/structure_invalid_nesting.txt
----
-ROOT@0..27
- PREAMBLE@0..27
- SECTION@0..14
- COMMAND_NAME@0..8 "\\section"
- CURLY_GROUP@8..14
- L_CURLY@8..9 "{"
- TEXT@9..12
- WORD@9..12 "Foo"
- R_CURLY@12..13 "}"
- WHITESPACE@13..14 " "
- CHAPTER@14..27
- COMMAND_NAME@14..22 "\\chapter"
- CURLY_GROUP@22..27
- L_CURLY@22..23 "{"
- TEXT@23..26
- WORD@23..26 "Bar"
- R_CURLY@26..27 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_nested.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_nested.txt.snap
deleted file mode 100644
index d9dab436e7..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_nested.txt.snap
+++ /dev/null
@@ -1,57 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/structure/structure_nested.txt
----
-ROOT@0..90
- PREAMBLE@0..90
- PART@0..90
- COMMAND_NAME@0..5 "\\part"
- CURLY_GROUP@5..8
- L_CURLY@5..6 "{"
- TEXT@6..7
- WORD@6..7 "1"
- R_CURLY@7..8 "}"
- CHAPTER@8..90
- COMMAND_NAME@8..16 "\\chapter"
- CURLY_GROUP@16..19
- L_CURLY@16..17 "{"
- TEXT@17..18
- WORD@17..18 "2"
- R_CURLY@18..19 "}"
- SECTION@19..90
- COMMAND_NAME@19..27 "\\section"
- CURLY_GROUP@27..30
- L_CURLY@27..28 "{"
- TEXT@28..29
- WORD@28..29 "3"
- R_CURLY@29..30 "}"
- SUBSECTION@30..90
- COMMAND_NAME@30..41 "\\subsection"
- CURLY_GROUP@41..44
- L_CURLY@41..42 "{"
- TEXT@42..43
- WORD@42..43 "4"
- R_CURLY@43..44 "}"
- SUBSUBSECTION@44..90
- COMMAND_NAME@44..58 "\\subsubsection"
- CURLY_GROUP@58..61
- L_CURLY@58..59 "{"
- TEXT@59..60
- WORD@59..60 "5"
- R_CURLY@60..61 "}"
- PARAGRAPH@61..90
- COMMAND_NAME@61..71 "\\paragraph"
- CURLY_GROUP@71..74
- L_CURLY@71..72 "{"
- TEXT@72..73
- WORD@72..73 "6"
- R_CURLY@73..74 "}"
- SUBPARAGRAPH@74..90
- COMMAND_NAME@74..87 "\\subparagraph"
- CURLY_GROUP@87..90
- L_CURLY@87..88 "{"
- TEXT@88..89
- WORD@88..89 "7"
- R_CURLY@89..90 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_siblings.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_siblings.txt.snap
deleted file mode 100644
index 66040952f0..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_siblings.txt.snap
+++ /dev/null
@@ -1,29 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/structure/structure_siblings.txt
----
-ROOT@0..35
- PREAMBLE@0..35
- SECTION@0..18
- COMMAND_NAME@0..8 "\\section"
- CURLY_GROUP@8..14
- L_CURLY@8..9 "{"
- TEXT@9..12
- WORD@9..12 "Foo"
- R_CURLY@12..13 "}"
- WHITESPACE@13..14 " "
- TEXT@14..18
- WORD@14..17 "Foo"
- WHITESPACE@17..18 " "
- SECTION@18..35
- COMMAND_NAME@18..26 "\\section"
- CURLY_GROUP@26..32
- L_CURLY@26..27 "{"
- TEXT@27..30
- WORD@27..30 "Bar"
- R_CURLY@30..31 "}"
- WHITESPACE@31..32 " "
- TEXT@32..35
- WORD@32..35 "Bar"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap
deleted file mode 100644
index ce42bde1d3..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap
+++ /dev/null
@@ -1,30 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/theorem_definition/theorem_definition_full.txt
----
-ROOT@0..31
- PREAMBLE@0..31
- THEOREM_DEFINITION_AMSTHM@0..31
- COMMAND_NAME@0..11 "\\newtheorem"
- CURLY_GROUP_WORD@11..16
- L_CURLY@11..12 "{"
- KEY@12..15
- WORD@12..15 "foo"
- R_CURLY@15..16 "}"
- BRACK_GROUP_WORD@16..21
- L_BRACK@16..17 "["
- KEY@17..20
- WORD@17..20 "bar"
- R_BRACK@20..21 "]"
- CURLY_GROUP@21..26
- L_CURLY@21..22 "{"
- TEXT@22..25
- WORD@22..25 "Foo"
- R_CURLY@25..26 "}"
- BRACK_GROUP_WORD@26..31
- L_BRACK@26..27 "["
- KEY@27..30
- WORD@27..30 "baz"
- R_BRACK@30..31 "]"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap
deleted file mode 100644
index c1e7ad5387..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap
+++ /dev/null
@@ -1,20 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt
----
-ROOT@0..21
- PREAMBLE@0..21
- THEOREM_DEFINITION_AMSTHM@0..21
- COMMAND_NAME@0..11 "\\newtheorem"
- CURLY_GROUP_WORD@11..16
- L_CURLY@11..12 "{"
- KEY@12..15
- WORD@12..15 "foo"
- R_CURLY@15..16 "}"
- BRACK_GROUP_WORD@16..21
- L_BRACK@16..17 "["
- KEY@17..20
- WORD@17..20 "bar"
- R_BRACK@20..21 "]"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap
deleted file mode 100644
index 13c043c94f..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap
+++ /dev/null
@@ -1,20 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt
----
-ROOT@0..21
- PREAMBLE@0..21
- THEOREM_DEFINITION_AMSTHM@0..21
- COMMAND_NAME@0..11 "\\newtheorem"
- CURLY_GROUP_WORD@11..16
- L_CURLY@11..12 "{"
- KEY@12..15
- WORD@12..15 "foo"
- R_CURLY@15..16 "}"
- CURLY_GROUP@16..21
- L_CURLY@16..17 "{"
- TEXT@17..20
- WORD@17..20 "Foo"
- R_CURLY@20..21 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap
deleted file mode 100644
index 57f4f7ce1b..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap
+++ /dev/null
@@ -1,25 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt
----
-ROOT@0..26
- PREAMBLE@0..26
- THEOREM_DEFINITION_AMSTHM@0..26
- COMMAND_NAME@0..11 "\\newtheorem"
- CURLY_GROUP_WORD@11..16
- L_CURLY@11..12 "{"
- KEY@12..15
- WORD@12..15 "foo"
- R_CURLY@15..16 "}"
- BRACK_GROUP_WORD@16..21
- L_BRACK@16..17 "["
- KEY@17..20
- WORD@17..20 "bar"
- R_BRACK@20..21 "]"
- CURLY_GROUP@21..26
- L_CURLY@21..22 "{"
- TEXT@22..25
- WORD@22..25 "Foo"
- R_CURLY@25..26 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap
deleted file mode 100644
index 22674fbbba..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/theorem_definition/theorem_definition_only_name.txt
----
-ROOT@0..16
- PREAMBLE@0..16
- THEOREM_DEFINITION_AMSTHM@0..16
- COMMAND_NAME@0..11 "\\newtheorem"
- CURLY_GROUP_WORD@11..16
- L_CURLY@11..12 "{"
- KEY@12..15
- WORD@12..15 "foo"
- R_CURLY@15..16 "}"
-
diff --git a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_thmtools.txt.snap b/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_thmtools.txt.snap
deleted file mode 100644
index 8b00bb4b59..0000000000
--- a/support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_thmtools.txt.snap
+++ /dev/null
@@ -1,35 +0,0 @@
----
-source: crates/parser/src/latex.rs
-expression: root
-input_file: crates/parser/src/test_data/latex/theorem_definition/theorem_definition_thmtools.txt
----
-ROOT@0..41
- PREAMBLE@0..41
- THEOREM_DEFINITION_THMTOOLS@0..41
- COMMAND_NAME@0..15 "\\declaretheorem"
- BRACK_GROUP_KEY_VALUE@15..36
- L_BRACK@15..16 "["
- KEY_VALUE_BODY@16..35
- KEY_VALUE_PAIR@16..25
- KEY@16..21
- WORD@16..21 "style"
- EQUALITY_SIGN@21..22 "="
- VALUE@22..25
- TEXT@22..25
- WORD@22..25 "foo"
- COMMA@25..26 ","
- WHITESPACE@26..27 " "
- KEY_VALUE_PAIR@27..35
- KEY@27..31
- WORD@27..31 "name"
- EQUALITY_SIGN@31..32 "="
- VALUE@32..35
- TEXT@32..35
- WORD@32..35 "bar"
- R_BRACK@35..36 "]"
- CURLY_GROUP_WORD@36..41
- L_CURLY@36..37 "{"
- KEY@37..40
- WORD@37..40 "baz"
- R_CURLY@40..41 "}"
-
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/comment.txt b/support/texlab/crates/parser/src/test_data/bibtex/comment.txt
deleted file mode 100644
index f2ff586ab7..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/comment.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Some junk here
-
-@comment{foo,
- author = {Foo Bar},
- title = {Some Title},
-}
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/issue_809.txt b/support/texlab/crates/parser/src/test_data/bibtex/issue_809.txt
deleted file mode 100644
index c94b808fd5..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/issue_809.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-@article{issue_809,
- title = {foo (" bar) baz},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/issue_945.txt b/support/texlab/crates/parser/src/test_data/bibtex/issue_945.txt
deleted file mode 100644
index e50835d51f..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/issue_945.txt
+++ /dev/null
@@ -1 +0,0 @@
-@article{test, author = {\"{\i}}} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/preamble.txt b/support/texlab/crates/parser/src/test_data/bibtex/preamble.txt
deleted file mode 100644
index 266b5ce228..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/preamble.txt
+++ /dev/null
@@ -1 +0,0 @@
-@preamble{"Hello World!"} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/aho_2006.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/aho_2006.txt
deleted file mode 100644
index ff829b40d1..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/aho_2006.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-@book{10.5555/1177220,
- author = {Aho, Alfred V. and Lam, Monica S. and Sethi, Ravi and Ullman, Jeffrey D.},
- title = {Compilers: Principles, Techniques, and Tools (2nd Edition)},
- year = {2006},
- isbn = {0321486811},
- publisher = {Addison-Wesley Longman Publishing Co., Inc.},
- address = {USA}
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/aksin_2006.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/aksin_2006.txt
deleted file mode 100644
index 88ea701c22..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/aksin_2006.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-@string{jomch = {J.~Organomet. Chem.}}
-
-@article{aksin,
- author = {Aks{\i}n, {\"O}zge and T{\"u}rkmen, Hayati and Artok, Levent
- and {\c{C}}etinkaya, Bekir and Ni, Chaoying and
- B{\"u}y{\"u}kg{\"u}ng{\"o}r, Orhan and {\"O}zkal, Erhan},
- title = {Effect of immobilization on catalytic characteristics of
- saturated {Pd-N}-heterocyclic carbenes in {Mizoroki-Heck}
- reactions},
- journaltitle = jomch,
- date = 2006,
- volume = 691,
- number = 13,
- pages = {3027-3036},
- indextitle = {Effect of immobilization on catalytic characteristics},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/almendro_1998.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/almendro_1998.txt
deleted file mode 100644
index ed16d33c67..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/almendro_1998.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-@patent{almendro,
- author = {Almendro, Jos{\'e} L. and Mart{\'i}n, Jacinto and S{\'a}nchez,
- Alberto and Nozal, Fernando},
- title = {Elektromagnetisches Signalhorn},
- number = {EU-29702195U},
- date = 1998,
- location = {countryfr and countryuk and countryde},
- langid = {german},
- annotation = {This is a \texttt{patent} entry with a \texttt{location}
- field. The number is given in the \texttt{number} field. Note
- the format of the \texttt{location} field in the database
- file. Compare \texttt{laufenberg}, \texttt{sorace}, and
- \texttt{kowalik}},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/averroes_1998.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/averroes_1998.txt
deleted file mode 100644
index 9f224353cc..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/averroes_1998.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-@book{averroes/bland,
- author = {Averroes},
- title = {The Epistle on the Possibility of Conjunction with the Active
- Intellect by {Ibn Rushd} with the Commentary of {Moses Narboni}},
- date = 1982,
- editor = {Bland, Kalman P.},
- translator = {Bland, Kalman P.},
- series = {Moreshet: Studies in {Jewish} History, Literature and Thought},
- number = 7,
- publisher = {Jewish Theological Seminary of America},
- location = {New York},
- keywords = {primary},
- langid = {english},
- langidopts = {variant=american},
- indextitle = {Epistle on the Possibility of Conjunction, The},
- shorttitle = {Possibility of Conjunction},
- annotation = {A \texttt{book} entry with a \texttt{series} and a
- \texttt{number}. Note the concatenation of the \texttt{editor}
- and \texttt{translator} fields as well as the
- \texttt{indextitle} field},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/betram_1996.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/betram_1996.txt
deleted file mode 100644
index b2d77e216f..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/betram_1996.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-@string{jams = {J.~Amer. Math. Soc.}}
-
-@article{bertram,
- author = {Bertram, Aaron and Wentworth, Richard},
- title = {Gromov invariants for holomorphic maps on {Riemann} surfaces},
- journaltitle = jams,
- date = 1996,
- volume = 9,
- number = 2,
- pages = {529-571},
- langid = {english},
- langidopts = {variant=american},
- shorttitle = {Gromov invariants},
- annotation = {An \texttt{article} entry with a \texttt{volume} and a
- \texttt{number} field},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/blom_2021.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/blom_2021.txt
deleted file mode 100644
index a502e53e03..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/blom_2021.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-@article{DBLP:journals/corr/abs-2107-11903,
- author = {Michelle L. Blom and
- Jurlind Budurushi and
- Ronald L. Rivest and
- Philip B. Stark and
- Peter J. Stuckey and
- Vanessa Teague and
- Damjan Vukcevic},
- title = {Assertion-based Approaches to Auditing Complex Elections, with application
- to party-list proportional elections},
- journal = {CoRR},
- volume = {abs/2107.11903},
- year = {2021},
- url = {https://arxiv.org/abs/2107.11903},
- eprinttype = {arXiv},
- eprint = {2107.11903},
- timestamp = {Thu, 29 Jul 2021 16:14:15 +0200},
- biburl = {https://dblp.org/rec/journals/corr/abs-2107-11903.bib},
- bibsource = {dblp computer science bibliography, https://dblp.org}
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/combi_2004.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/combi_2004.txt
deleted file mode 100644
index 7d8545577d..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/combi_2004.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-@inproceedings{10.1145/967900.968040,
- author = {Combi, Carlo and Pozzi, Giuseppe},
- title = {Architectures for a Temporal Workflow Management System},
- year = {2004},
- isbn = {1581138121},
- publisher = {Association for Computing Machinery},
- address = {New York, NY, USA},
- url = {https://doi.org/10.1145/967900.968040},
- doi = {10.1145/967900.968040},
- booktitle = {Proceedings of the 2004 ACM Symposium on Applied Computing},
- pages = {659-666},
- numpages = {8},
- keywords = {active DBMS, temporal DBMS, workflow management system - WfMS, temporal workflow management system},
- location = {Nicosia, Cyprus},
- series = {SAC '04}
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/erwin_2007.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/erwin_2007.txt
deleted file mode 100644
index 116f5e7098..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/erwin_2007.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-@inproceedings{10.5555/1386993.1386994,
- author = {Erwin, Alva and Gopalan, Raj P. and Achuthan, N. R.},
- title = {A Bottom-up Projection Based Algorithm for Mining High Utility Itemsets},
- year = {2007},
- isbn = {9781920682651},
- publisher = {Australian Computer Society, Inc.},
- address = {AUS},
- booktitle = {Proceedings of the 2nd International Workshop on Integrating Artificial Intelligence and Data Mining - Volume 84},
- pages = {3-11},
- numpages = {9},
- keywords = {pattern growth, high utility itemset mining},
- location = {Gold Coast, Australia},
- series = {AIDM '07}
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/jain_1999.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/jain_1999.txt
deleted file mode 100644
index c367ef12ee..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/jain_1999.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-@article{10.1145/331499.331504,
- author = {Jain, A. K. and Murty, M. N. and Flynn, P. J.},
- title = {Data Clustering: A Review},
- year = {1999},
- issue_date = {Sept. 1999},
- publisher = {Association for Computing Machinery},
- address = {New York, NY, USA},
- volume = {31},
- number = {3},
- issn = {0360-0300},
- url = {https://doi.org/10.1145/331499.331504},
- doi = {10.1145/331499.331504},
- journal = {ACM Comput. Surv.},
- month = {sep},
- pages = {264-323},
- numpages = {60},
- keywords = {incremental clustering, clustering applications, exploratory data analysis, cluster analysis, similarity indices, unsupervised learning}
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/kastenholz_2006.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/kastenholz_2006.txt
deleted file mode 100644
index 457f871491..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/kastenholz_2006.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-@string{jchph = {J.~Chem. Phys.}}
-
-@article{kastenholz,
- author = {Kastenholz, M. A. and H{\"u}nenberger, Philippe H.},
- title = {Computation of methodology\hyphen independent ionic solvation
- free energies from molecular simulations},
- journaltitle = jchph,
- date = 2006,
- subtitle = {{I}. {The} electrostatic potential in molecular liquids},
- volume = 124,
- eid = 124106,
- doi = {10.1063/1.2172593},
- langid = {english},
- langidopts = {variant=american},
- indextitle = {Computation of ionic solvation free energies},
- annotation = {An \texttt{article} entry with an \texttt{eid} and a
- \texttt{doi} field. Note that the \textsc{doi} is transformed
- into a clickable link if \texttt{hyperref} support has been
- enabled},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/knuth_1984.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/knuth_1984.txt
deleted file mode 100644
index 98c595e35c..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/knuth_1984.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-@book{knuth:ct:a,
- author = {Knuth, Donald E.},
- title = {The {\TeX book}},
- date = 1984,
- maintitle = {Computers \& Typesetting},
- volume = {A},
- publisher = {Addison-Wesley},
- location = {Reading, Mass.},
- langid = {english},
- langidopts = {variant=american},
- sorttitle = {Computers & Typesetting A},
- indexsorttitle= {The TeXbook},
- indextitle = {\protect\TeX book, The},
- shorttitle = {\TeX book},
- annotation = {The first volume of a five-volume book. Note the
- \texttt{sorttitle} field. We want this
- volume to be listed after the entry referring to the entire
- five-volume set. Also note the \texttt{indextitle} and
- \texttt{indexsorttitle} fields. Indexing packages that don't
- generate robust index entries require some control sequences
- to be protected from expansion},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/matuz_1990.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/matuz_1990.txt
deleted file mode 100644
index cb803aab51..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/matuz_1990.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-@collection{matuz:doody,
- editor = {Matuz, Roger},
- title = {Contemporary Literary Criticism},
- year = 1990,
- volume = 61,
- publisher = {Gale},
- location = {Detroit},
- pages = {204-208},
- langid = {english},
- langidopts = {variant=american},
- annotation = {A \texttt{collection} entry providing the excerpt information
- for the \texttt{doody} entry. Note the format of the
- \texttt{pages} field},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/nietzsche_1998.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/nietzsche_1998.txt
deleted file mode 100644
index e245be39bb..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/nietzsche_1998.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-@string{dtv = {Deutscher Taschenbuch-Verlag}}
-
-@mvbook{nietzsche:ksa,
- author = {Nietzsche, Friedrich},
- title = {S{\"a}mtliche Werke},
- date = 1988,
- editor = {Colli, Giorgio and Montinari, Mazzino},
- edition = 2,
- volumes = 15,
- publisher = dtv # { and Walter de Gruyter},
- location = {M{\"u}nchen and Berlin and New York},
- langid = {german},
- sorttitle = {Werke-00-000},
- indexsorttitle= {Samtliche Werke},
- subtitle = {Kritische Studienausgabe},
- annotation = {The critical edition of Nietzsche's works. This is a
- \texttt{mvbook} entry referring to a 15-volume work as a
- whole. Note the \texttt{volumes} field and the format of the
- \texttt{publisher} and \texttt{location} fields in the
- database file. Also note the \texttt{sorttitle} and
- field which is used to fine-tune the
- sorting order of the bibliography. We want this item listed
- first in the bibliography},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/bibtex/samples/rivest_1978.txt b/support/texlab/crates/parser/src/test_data/bibtex/samples/rivest_1978.txt
deleted file mode 100644
index e1076145ea..0000000000
--- a/support/texlab/crates/parser/src/test_data/bibtex/samples/rivest_1978.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-@article{10.1145/359340.359342,
- author = {Rivest, R. L. and Shamir, A. and Adleman, L.},
- title = {A Method for Obtaining Digital Signatures and Public-Key Cryptosystems},
- year = {1978},
- issue_date = {Feb. 1978},
- publisher = {Association for Computing Machinery},
- address = {New York, NY, USA},
- volume = {21},
- number = {2},
- issn = {0001-0782},
- url = {https://doi.org/10.1145/359340.359342},
- doi = {10.1145/359340.359342},
- journal = {Commun. ACM},
- month = {feb},
- pages = {120-126},
- numpages = {7},
-} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/build_log/001.txt b/support/texlab/crates/parser/src/test_data/build_log/001.txt
deleted file mode 100644
index fc9968af0f..0000000000
--- a/support/texlab/crates/parser/src/test_data/build_log/001.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:50
-entering extended mode
-restricted \write18 enabled.
-%&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-)
-(/TexLive/texmf-dist/tex/latex/multirow/bigstrut.sty
-Package: bigstrut 2016/11/25 v2.2 Provide larger struts in tabulars
-\bigstrutjot=\dimen103
-)
-(/TexLive/texmf-dist/tex/latex/multirow/multirow.sty
-Package: multirow 2016/11/25 v2.2 Span multiple rows of a table
-\multirow@colwidth=\skip43
-\multirow@cntb=\count87
-\multirow@dima=\skip44
-) (./parent.aux)
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-
-Overfull \hbox (200.00162pt too wide) in paragraph at lines 8--9
-[]\OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-[]
-
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <7> on input line 11.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <5> on input line 11.
-
-Overfull \vbox (3.19998pt too high) detected at line 23
-[]
-
-[1
-
-{/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux) )
-Here is how much of TeX's memory you used:
-265 strings out of 492995
-3121 string characters out of 6138727
-55074 words of memory out of 5000000
-3896 multiletter control sequences out of 15000+600000
-3640 words of font info for 14 fonts, out of 8000000 for 9000
-1141 hyphenation exceptions out of 8191
-23i,20n,20p,124b,282s stack positions out of 5000i,500n,10000p,200000b,80000s
-</
-TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></TexLive/texmf-d
-ist/fonts/type1/public/amsfonts/cm/cmr7.pfb>
-Output written on parent.pdf (1 page, 17505 bytes).
-PDF statistics:
-16 PDF objects out of 1000 (max. 8388607)
-10 compressed objects within 1 object stream
-0 named destinations out of 1000 (max. 500000)
-1 words of extra memory for PDF output out of 10000 (max. 10000000) \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/build_log/002.txt b/support/texlab/crates/parser/src/test_data/build_log/002.txt
deleted file mode 100644
index 8d438d1f12..0000000000
--- a/support/texlab/crates/parser/src/test_data/build_log/002.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:52
-entering extended mode
-restricted \write18 enabled.
-%&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-) (./parent.aux (./child.aux))
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-(./child.tex
-! Undefined control sequence.
-l.1 \foo
-
-The control sequence at the end of the top line
-of your error message was never \def'ed. If you have
-misspelled it (e.g., `\hobx'), type `I' and the correct
-spelling (e.g., `I\hbox'). Otherwise just continue,
-and I'll forget about whatever was undefined.
-
-) (./parent.aux) )
-Here is how much of TeX's memory you used:
-205 strings out of 492995
-2149 string characters out of 6138727
-54074 words of memory out of 5000000
-3841 multiletter control sequences out of 15000+600000
-3640 words of font info for 14 fonts, out of 8000000 for 9000
-1141 hyphenation exceptions out of 8191
-23i,1n,17p,116b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
-
-No pages of output.
-PDF statistics:
-0 PDF objects out of 1000 (max. 8388607)
-0 named destinations out of 1000 (max. 500000)
-1 words of extra memory for PDF output out of 10000 (max. 10000000) \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/build_log/003.txt b/support/texlab/crates/parser/src/test_data/build_log/003.txt
deleted file mode 100644
index 220614b91c..0000000000
--- a/support/texlab/crates/parser/src/test_data/build_log/003.txt
+++ /dev/null
@@ -1,65 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:51
-entering extended mode
-restricted \write18 enabled.
-%&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-) (./parent.aux)
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-
-LaTeX Warning: Citation `foo' on page 1 undefined on input line 6.
-
-[1
-
-{/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux)
-
-LaTeX Warning: There were undefined references.
-
-)
-Here is how much of TeX's memory you used:
-204 strings out of 492995
-2142 string characters out of 6138727
-54074 words of memory out of 5000000
-3842 multiletter control sequences out of 15000+600000
-3948 words of font info for 15 fonts, out of 8000000 for 9000
-1141 hyphenation exceptions out of 8191
-23i,4n,21p,116b,107s stack positions out of 5000i,500n,10000p,200000b,80000s
-</TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></TexLive/
-texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
-Output written on parent.pdf (1 page, 17339 bytes).
-PDF statistics:
-16 PDF objects out of 1000 (max. 8388607)
-10 compressed objects within 1 object stream
-0 named destinations out of 1000 (max. 500000)
-1 words of extra memory for PDF output out of 10000 (max. 10000000) \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/build_log/004.txt b/support/texlab/crates/parser/src/test_data/build_log/004.txt
deleted file mode 100644
index 4ab379cd53..0000000000
--- a/support/texlab/crates/parser/src/test_data/build_log/004.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:40
-entering extended mode
-restricted \write18 enabled.
-%&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-)
-(/TexLive/texmf-dist/tex/generic/babel/babel.sty
-Package: babel 2017/05/19 3.10 The Babel package
-
-! Package babel Error: Unknown option `foo'. Either you misspelled it
-(babel) or the language definition file foo.ldf was not found.
-
-See the babel package documentation for explanation.
-Type H <return> for immediate help.
-...
-
-l.393 \ProcessOptions*
-
-Valid options are: shorthands=, KeepShorthandsActive,
-activeacute, activegrave, noconfigs, safe=, main=, math=
-headfoot=, strings=, config=, hyphenmap=, or a language name.
-
-! Package babel Error: You haven't specified a language option.
-
-See the babel package documentation for explanation.
-Type H <return> for immediate help.
-...
-
-l.426 ...ry to proceed from here, type x to quit.}
-
-You need to specify a language, either as a global option
-or as an optional argument to the \usepackage command;
-You shouldn't try to proceed from here, type x to quit.
-
-) (./parent.aux)
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-(./parent.aux) )
-Here is how much of TeX's memory you used:
-304 strings out of 492995
-3421 string characters out of 6138727
-56035 words of memory out of 5000000
-3938 multiletter control sequences out of 15000+600000
-3640 words of font info for 14 fonts, out of 8000000 for 9000
-1141 hyphenation exceptions out of 8191
-23i,1n,17p,116b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
-
-No pages of output.
-PDF statistics:
-0 PDF objects out of 1000 (max. 8388607)
-0 named destinations out of 1000 (max. 500000)
-1 words of extra memory for PDF output out of 10000 (max. 10000000) \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/build_log/005.txt b/support/texlab/crates/parser/src/test_data/build_log/005.txt
deleted file mode 100644
index 07c95bfc6b..0000000000
--- a/support/texlab/crates/parser/src/test_data/build_log/005.txt
+++ /dev/null
@@ -1,385 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:45
-entering extended mode
-restricted \write18 enabled.
-%&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-)
-(/TexLive/texmf-dist/tex/generic/babel/babel.sty
-Package: babel 2017/05/19 3.10 The Babel package
-
-(/TexLive/texmf-dist/tex/generic/babel-spanish/spanish.ldf
-Language: spanish.ldf 2016/03/03 v5.0p Spanish support from the babel system
-
-(/TexLive/texmf-dist/tex/generic/babel/babel.def
-File: babel.def 2017/05/19 3.10 Babel common definitions
-\babel@savecnt=\count87
-\U@D=\dimen103
-)
-\es@quottoks=\toks14
-\es@quotdepth=\count88
-Package babel Info: Making " an active character on input line 561.
-Package babel Info: Making . an active character on input line 662.
-Package babel Info: Making < an active character on input line 707.
-Package babel Info: Making > an active character on input line 707.
-))
-(/TexLive/texmf-dist/tex/latex/biblatex/biblatex.sty
-Package: biblatex 2016/12/05 v3.7 programmable bibliographies (PK/JW/AB)
-
-(/TexLive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
-Package: pdftexcmds 2017/03/19 v0.25 Utility functions of pdfTeX for LuaTeX (HO
-)
-
-(/TexLive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
-Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO)
-)
-(/TexLive/texmf-dist/tex/generic/oberdiek/ifluatex.sty
-Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO)
-Package ifluatex Info: LuaTeX not detected.
-)
-(/TexLive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
-Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
-)
-(/TexLive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
-Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch
-)
-Package pdftexcmds Info: LuaTeX not detected.
-Package pdftexcmds Info: \pdf@primitive is available.
-Package pdftexcmds Info: \pdf@ifprimitive is available.
-Package pdftexcmds Info: \pdfdraftmode found.
-)
-(/TexLive/texmf-dist/tex/latex/etoolbox/etoolbox.sty
-Package: etoolbox 2017/01/02 v2.4 e-TeX tools for LaTeX (JAW)
-\etb@tempcnta=\count89
-)
-(/TexLive/texmf-dist/tex/latex/graphics/keyval.sty
-Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
-\KV@toks@=\toks15
-)
-(/TexLive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
-Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO)
-
-(/TexLive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
-Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO)
-
-(/TexLive/texmf-dist/tex/generic/oberdiek/etexcmds.sty
-Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
-Package etexcmds Info: Could not find \expanded.
-(etexcmds) That can mean that you are not using pdfTeX 1.50 or
-(etexcmds) that some package has redefined \expanded.
-(etexcmds) In the latter case, load this package earlier.
-)))
-(/TexLive/texmf-dist/tex/latex/logreq/logreq.sty
-Package: logreq 2010/08/04 v1.0 xml request logger
-\lrq@indent=\count90
-
-(/TexLive/texmf-dist/tex/latex/logreq/logreq.def
-File: logreq.def 2010/08/04 v1.0 logreq spec v1.0
-))
-(/TexLive/texmf-dist/tex/latex/base/ifthen.sty
-Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
-)
-(/TexLive/texmf-dist/tex/latex/url/url.sty
-\Urlmuskip=\muskip10
-Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
-)
-(/TexLive/texmf-dist/tex/generic/xstring/xstring.sty
-(/TexLive/texmf-dist/tex/generic/xstring/xstring.tex
-\@xs@message=\write3
-\integerpart=\count91
-\decimalpart=\count92
-)
-Package: xstring 2013/10/13 v1.7c String manipulations (C Tellechea)
-)
-\c@tabx@nest=\count93
-\c@listtotal=\count94
-\c@listcount=\count95
-\c@liststart=\count96
-\c@liststop=\count97
-\c@citecount=\count98
-\c@citetotal=\count99
-\c@multicitecount=\count100
-\c@multicitetotal=\count101
-\c@instcount=\count102
-\c@maxnames=\count103
-\c@minnames=\count104
-\c@maxitems=\count105
-\c@minitems=\count106
-\c@citecounter=\count107
-\c@savedcitecounter=\count108
-\c@uniquelist=\count109
-\c@uniquename=\count110
-\c@refsection=\count111
-\c@refsegment=\count112
-\c@maxextratitle=\count113
-\c@maxextratitleyear=\count114
-\c@maxextrayear=\count115
-\c@maxextraalpha=\count116
-\c@abbrvpenalty=\count117
-\c@highnamepenalty=\count118
-\c@lownamepenalty=\count119
-\c@maxparens=\count120
-\c@parenlevel=\count121
-\blx@tempcnta=\count122
-\blx@tempcntb=\count123
-\blx@tempcntc=\count124
-\blx@maxsection=\count125
-\blx@maxsegment@0=\count126
-\blx@notetype=\count127
-\blx@parenlevel@text=\count128
-\blx@parenlevel@foot=\count129
-\blx@sectionciteorder@0=\count130
-\labelnumberwidth=\skip43
-\labelalphawidth=\skip44
-\biblabelsep=\skip45
-\bibitemsep=\skip46
-\bibnamesep=\skip47
-\bibinitsep=\skip48
-\bibparsep=\skip49
-\bibhang=\skip50
-\blx@bcfin=\read1
-\blx@bcfout=\write4
-\c@mincomprange=\count131
-\c@maxcomprange=\count132
-\c@mincompwidth=\count133
-Package biblatex Info: Trying to load biblatex default data model...
-Package biblatex Info: ... file 'blx-dm.def' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/blx-dm.def)
-Package biblatex Info: Trying to load biblatex style data model...
-Package biblatex Info: ... file 'ieee.dbx' not found.
-Package biblatex Info: Trying to load biblatex custom data model...
-Package biblatex Info: ... file 'biblatex-dm.cfg' not found.
-\c@afterword=\count134
-\c@savedafterword=\count135
-\c@annotator=\count136
-\c@savedannotator=\count137
-\c@author=\count138
-\c@savedauthor=\count139
-\c@bookauthor=\count140
-\c@savedbookauthor=\count141
-\c@commentator=\count142
-\c@savedcommentator=\count143
-\c@editor=\count144
-\c@savededitor=\count145
-\c@editora=\count146
-\c@savededitora=\count147
-\c@editorb=\count148
-\c@savededitorb=\count149
-\c@editorc=\count150
-\c@savededitorc=\count151
-\c@foreword=\count152
-\c@savedforeword=\count153
-\c@holder=\count154
-\c@savedholder=\count155
-\c@introduction=\count156
-\c@savedintroduction=\count157
-\c@namea=\count158
-\c@savednamea=\count159
-\c@nameb=\count160
-\c@savednameb=\count161
-\c@namec=\count162
-\c@savednamec=\count163
-\c@translator=\count164
-\c@savedtranslator=\count165
-\c@shortauthor=\count166
-\c@savedshortauthor=\count167
-\c@shorteditor=\count168
-\c@savedshorteditor=\count169
-\c@labelname=\count170
-\c@savedlabelname=\count171
-\c@institution=\count172
-\c@savedinstitution=\count173
-\c@lista=\count174
-\c@savedlista=\count175
-\c@listb=\count176
-\c@savedlistb=\count177
-\c@listc=\count178
-\c@savedlistc=\count179
-\c@listd=\count180
-\c@savedlistd=\count181
-\c@liste=\count182
-\c@savedliste=\count183
-\c@listf=\count184
-\c@savedlistf=\count185
-\c@location=\count186
-\c@savedlocation=\count187
-\c@organization=\count188
-\c@savedorganization=\count189
-\c@origlocation=\count190
-\c@savedoriglocation=\count191
-\c@origpublisher=\count192
-\c@savedorigpublisher=\count193
-\c@publisher=\count194
-\c@savedpublisher=\count195
-\c@language=\count196
-\c@savedlanguage=\count197
-\c@pageref=\count198
-\c@savedpageref=\count199
-\shorthandwidth=\skip51
-\shortjournalwidth=\skip52
-\shortserieswidth=\skip53
-\shorttitlewidth=\skip54
-\shortauthorwidth=\skip55
-\shorteditorwidth=\skip56
-Package biblatex Info: Trying to load compatibility code...
-Package biblatex Info: ... file 'blx-compat.def' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/blx-compat.def
-File: blx-compat.def 2016/12/05 v3.7 biblatex compatibility (PK/JW/AB)
-)
-Package biblatex Info: Trying to load generic definitions...
-Package biblatex Info: ... file 'biblatex.def' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/biblatex.def
-File: biblatex.def 2016/12/05 v3.7 biblatex compatibility (PK/JW/AB)
-\c@textcitecount=\count266
-\c@textcitetotal=\count267
-\c@textcitemaxnames=\count268
-\c@biburlnumpenalty=\count269
-\c@biburlucpenalty=\count270
-\c@biburllcpenalty=\count271
-\c@smartand=\count272
-)
-Package biblatex Info: Trying to load bibliography style 'ieee'...
-Package biblatex Info: ... file 'ieee.bbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex-ieee/ieee.bbx
-File: ieee.bbx 2017/03/27 v1.2d biblatex bibliography style
-Package biblatex Info: Trying to load bibliography style 'numeric-comp'...
-Package biblatex Info: ... file 'numeric-comp.bbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/bbx/numeric-comp.bbx
-File: numeric-comp.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
-Package biblatex Info: Trying to load bibliography style 'numeric'...
-Package biblatex Info: ... file 'numeric.bbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx
-File: numeric.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
-Package biblatex Info: Trying to load bibliography style 'standard'...
-Package biblatex Info: ... file 'standard.bbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/bbx/standard.bbx
-File: standard.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
-\c@bbx:relatedcount=\count273
-\c@bbx:relatedtotal=\count274
-))))
-Package biblatex Info: Trying to load citation style 'ieee'...
-Package biblatex Info: ... file 'ieee.cbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex-ieee/ieee.cbx
-File: ieee.cbx 2017/03/27 v1.2d biblatex citation style
-Package biblatex Info: Trying to load citation style 'numeric-comp'...
-Package biblatex Info: ... file 'numeric-comp.cbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/cbx/numeric-comp.cbx
-File: numeric-comp.cbx 2016/12/05 v3.7 biblatex citation style (PK/JW/AB)
-\c@cbx@tempcnta=\count275
-\c@cbx@tempcntb=\count276
-Package biblatex Info: Redefining '\cite'.
-Package biblatex Info: Redefining '\parencite'.
-Package biblatex Info: Redefining '\footcite'.
-Package biblatex Info: Redefining '\footcitetext'.
-Package biblatex Info: Redefining '\smartcite'.
-Package biblatex Info: Redefining '\supercite'.
-Package biblatex Info: Redefining '\textcite'.
-Package biblatex Info: Redefining '\textcites'.
-Package biblatex Info: Redefining '\cites'.
-Package biblatex Info: Redefining '\parencites'.
-Package biblatex Info: Redefining '\smartcites'.
-)
-Package biblatex Info: Redefining '\cite'.
-Package biblatex Info: Redefining '\cites'.
-)
-Package biblatex Info: Trying to load configuration file...
-Package biblatex Info: ... file 'biblatex.cfg' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/biblatex.cfg
-File: biblatex.cfg
-))
-Package biblatex Info: Trying to load language 'spanish'...
-Package biblatex Info: ... file 'spanish.lbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/lbx/spanish.lbx
-File: spanish.lbx 2016/12/05 v3.7 biblatex localization (PK/JW/AB)
-)
-
-Package biblatex Warning: 'babel/polyglossia' detected but 'csquotes' missing.
-(biblatex) Loading 'csquotes' recommended.
-
-\@quotelevel=\count277
-\@quotereset=\count278
-(./parent.aux)
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Info: Redefining \sptext on input line 6.
-LaTeX Info: Redefining \. on input line 6.
-LaTeX Info: Redefining \% on input line 6.
-Package biblatex Info: No input encoding detected.
-(biblatex) Assuming 'ascii'.
-Package biblatex Info: Automatic encoding selection.
-(biblatex) Assuming data encoding 'ascii'.
-\openout4 = `parent.bcf'.
-
-Package biblatex Info: Trying to load bibliographic data...
-Package biblatex Info: ... file 'parent.bbl' not found.
-
-No file parent.bbl.
-Package biblatex Info: Reference section=0 on input line 6.
-Package biblatex Info: Reference segment=0 on input line 6.
-(./parent.aux)
-
-LaTeX Warning: There were undefined references.
-
-Package biblatex Warning: Please (re)run Biber on the file:
-(biblatex) parent
-(biblatex) and rerun LaTeX afterwards.
-
-Package logreq Info: Writing requests to 'parent.run.xml'.
-\openout1 = `parent.run.xml'.
-
-)
-Here is how much of TeX's memory you used:
-7717 strings out of 492995
-133301 string characters out of 6138727
-557258 words of memory out of 5000000
-11248 multiletter control sequences out of 15000+600000
-3640 words of font info for 14 fonts, out of 8000000 for 9000
-1141 hyphenation exceptions out of 8191
-35i,1n,30p,856b,700s stack positions out of 5000i,500n,10000p,200000b,80000s
-
-No pages of output.
-PDF statistics:
-0 PDF objects out of 1000 (max. 8388607)
-0 named destinations out of 1000 (max. 500000)
-1 words of extra memory for PDF output out of 10000 (max. 10000000) \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/build_log/006.txt b/support/texlab/crates/parser/src/test_data/build_log/006.txt
deleted file mode 100644
index 3edb18b8c7..0000000000
--- a/support/texlab/crates/parser/src/test_data/build_log/006.txt
+++ /dev/null
@@ -1,122 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:33
-entering extended mode
-restricted \write18 enabled.
-%&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-) (./parent.aux
-(./child.tex.aux))
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-\openout2 = `child.aux'.
-
-(./child.tex)
-! Undefined control sequence.
-l.7 \foo
-
-The control sequence at the end of the top line
-of your error message was never \def'ed. If you have
-misspelled it (e.g., `\hobx'), type `I' and the correct
-spelling (e.g., `I\hbox'). Otherwise just continue,
-and I'll forget about whatever was undefined.
-
-! Missing $ inserted.
-<inserted text>
- $
-l.8 \bar
-
-I've inserted a begin-math/end-math symbol since I think
-you left one out. Proceed, with fingers crossed.
-
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <7> on input line 8.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <5> on input line 8.
-! Undefined control sequence.
-l.9 \baz
-
-The control sequence at the end of the top line
-of your error message was never \def'ed. If you have
-misspelled it (e.g., `\hobx'), type `I' and the correct
-spelling (e.g., `I\hbox'). Otherwise just continue,
-and I'll forget about whatever was undefined.
-
-! Missing { inserted.
-<to be read again>
- \par
-l.10
-
-A left brace was mandatory here, so I've put one in.
-You might want to delete and/or insert some corrections
-so that I will find a matching right brace soon.
-(If you're confused by all this, try typing `I}' now.)
-
-! Missing $ inserted.
-<inserted text>
- $
-l.10
-
-I've inserted a begin-math/end-math symbol since I think
-you left one out. Proceed, with fingers crossed.
-
-! Missing } inserted.
-<inserted text>
- }
-l.10
-
-I've inserted something that you may have forgotten.
-(See the <inserted text> above.)
-With luck, this will get me unwedged. But if you
-really didn't forget anything, try typing `2' now; then
-my insertion and my current dilemma will both disappear.
-
-[1
-
-{/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux
-(./child.aux)) )
-Here is how much of TeX's memory you used:
-212 strings out of 492995
-2238 string characters out of 6138727
-54074 words of memory out of 5000000
-3843 multiletter control sequences out of 15000+600000
-3640 words of font info for 14 fonts, out of 8000000 for 9000
-1141 hyphenation exceptions out of 8191
-23i,4n,17p,116b,107s stack positions out of 5000i,500n,10000p,200000b,80000s
-</TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb
->
-Output written on parent.pdf (1 page, 8329 bytes).
-PDF statistics:
-12 PDF objects out of 1000 (max. 8388607)
-7 compressed objects within 1 object stream
-0 named destinations out of 1000 (max. 500000)
-1 words of extra memory for PDF output out of 10000 (max. 10000000) \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/build_log/007.txt b/support/texlab/crates/parser/src/test_data/build_log/007.txt
deleted file mode 100644
index 4c86405c0d..0000000000
--- a/support/texlab/crates/parser/src/test_data/build_log/007.txt
+++ /dev/null
@@ -1,176 +0,0 @@
-This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021/W32TeX) (preloaded format=pdflatex 2021.6.19) 5 NOV 2021 19:10
-entering extended mode
-restricted \write18 enabled.
-%&-line parsing enabled.
-**/some/folder/a.tex
-(/some/folder/a.tex
-LaTeX2e <2021-06-01> patch level 1
-L3 programming layer <2021-06-18>
-(/texlive/2021/texmf-dist/tex/latex/koma-script/scrartcl.cls
-Document Class: scrartcl 2021/03/17 v3.33 KOMA-Script document class (article)
-(/texlive/2021/texmf-dist/tex/latex/koma-script/scrkbase.sty
-Package: scrkbase 2021/03/17 v3.33 KOMA-Script package (KOMA-Script-dependent b
-asics and keyval usage)
-
-(/texlive/2021/texmf-dist/tex/latex/koma-script/scrbase.sty
-Package: scrbase 2021/03/17 v3.33 KOMA-Script package (KOMA-Script-independent
-basics and keyval usage)
-
-(/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile.sty
-Package: scrlfile 2021/03/17 v3.33 KOMA-Script package (file load hooks)
-
-(/texlive/2021/texmf-dist/tex/latex/koma-script/scrlfile-hook.sty
-Package: scrlfile-hook 2021/03/17 v3.33 KOMA-Script package (using LaTeX hooks)
-
-
-(/texlive/2021/texmf-dist/tex/latex/koma-script/scrlogo.sty
-Package: scrlogo 2021/03/17 v3.33 KOMA-Script package (logo)
-)))
-(/texlive/2021/texmf-dist/tex/latex/graphics/keyval.sty
-Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
-\KV@toks@=\toks16
-)
-Applying: [2021/05/01] Usage of raw option list on input line 252.
-Already applied: [0000/00/00] compatibility for LaTeX before 2021/05/01 on inpu
-t line 337.
-))
-==> First Aid for scrkbase.sty no longer applied!
-(/texlive/2021/texmf-dist/tex/latex/koma-script/tocbasic.sty
-Package: tocbasic 2021/03/17 v3.33 KOMA-Script package (handling toc-files)
-\scr@dte@tocline@numberwidth=\skip47
-\scr@dte@tocline@numbox=\box50
-)
-Package tocbasic Info: babel extension for `toc' omitted
-(tocbasic) because of missing \bbl@set@language on input line 135.
-Class scrartcl Info: File `scrsize11pt.clo' used instead of
-(scrartcl) file `scrsize11.clo' to setup font sizes on input line 223
-9.
-
-(/texlive/2021/texmf-dist/tex/latex/koma-script/scrsize11pt.clo
-File: scrsize11pt.clo 2021/03/17 v3.33 KOMA-Script font size class option (11pt
-)
-)
-(/texlive/2021/texmf-dist/tex/latex/koma-script/typearea.sty
-Package: typearea 2021/03/17 v3.33 KOMA-Script package (type area)
-\ta@bcor=\skip48
-\ta@div=\count182
-\ta@hblk=\skip49
-\ta@vblk=\skip50
-\ta@temp=\skip51
-\footheight=\skip52
-Package typearea Info: These are the values describing the layout:
-(typearea) DIV = 10
-(typearea) BCOR = 0.0pt
-(typearea) \paperwidth = 597.50793pt
-(typearea) \textwidth = 418.25555pt
-(typearea) DIV departure = -6%
-(typearea) \evensidemargin = 17.3562pt
-(typearea) \oddsidemargin = 17.3562pt
-(typearea) \paperheight = 845.04694pt
-(typearea) \textheight = 595.80026pt
-(typearea) \topmargin = -25.16531pt
-(typearea) \headheight = 17.0pt
-(typearea) \headsep = 20.40001pt
-(typearea) \topskip = 11.0pt
-(typearea) \footskip = 47.6pt
-(typearea) \baselineskip = 13.6pt
-(typearea) on input line 1741.
-)
-\c@part=\count183
-\c@section=\count184
-\c@subsection=\count185
-\c@subsubsection=\count186
-\c@paragraph=\count187
-\c@subparagraph=\count188
-\scr@dte@section@maxnumwidth=\skip53
-Class scrartcl Info: using compatibility default `runin=bysign'
-(scrartcl) for `\section on input line 4846.
-Class scrartcl Info: using compatibility default `afterindent=bysign'
-(scrartcl) for `\section on input line 4846.
-\scr@dte@part@maxnumwidth=\skip54
-Class scrartcl Info: using compatibility default `afterindent=false'
-(scrartcl) for `\part on input line 4854.
-\scr@dte@subsection@maxnumwidth=\skip55
-Class scrartcl Info: using compatibility default `runin=bysign'
-(scrartcl) for `\subsection on input line 4864.
-Class scrartcl Info: using compatibility default `afterindent=bysign'
-(scrartcl) for `\subsection on input line 4864.
-\scr@dte@subsubsection@maxnumwidth=\skip56
-Class scrartcl Info: using compatibility default `runin=bysign'
-(scrartcl) for `\subsubsection on input line 4874.
-Class scrartcl Info: using compatibility default `afterindent=bysign'
-(scrartcl) for `\subsubsection on input line 4874.
-\scr@dte@paragraph@maxnumwidth=\skip57
-Class scrartcl Info: using compatibility default `runin=bysign'
-(scrartcl) for `\paragraph on input line 4885.
-Class scrartcl Info: using compatibility default `afterindent=bysign'
-(scrartcl) for `\paragraph on input line 4885.
-\scr@dte@subparagraph@maxnumwidth=\skip58
-Class scrartcl Info: using compatibility default `runin=bysign'
-(scrartcl) for `\subparagraph on input line 4895.
-Class scrartcl Info: using compatibility default `afterindent=bysign'
-(scrartcl) for `\subparagraph on input line 4895.
-\abovecaptionskip=\skip59
-\belowcaptionskip=\skip60
-\c@pti@nb@sid@b@x=\box51
-Package tocbasic Info: babel extension for `lof' omitted
-(tocbasic) because of missing \bbl@set@language on input line 6127.
-
-\scr@dte@figure@maxnumwidth=\skip61
-\c@figure=\count189
-Package tocbasic Info: babel extension for `lot' omitted
-(tocbasic) because of missing \bbl@set@language on input line 6139.
-
-\scr@dte@table@maxnumwidth=\skip62
-\c@table=\count190
-Class scrartcl Info: Redefining `\numberline' on input line 6303.
-\bibindent=\dimen138
-)
-(/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
-File: l3backend-pdftex.def 2021-05-07 L3 backend support: PDF output (pdfTeX)
-\l__color_backend_stack_int=\count191
-\l__pdf_internal_box=\box52
-) (./a.aux)
-\openout1 = `a.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-Package scrbase Info: activating english \contentsname on input line 3.
-Package scrbase Info: activating english \listfigurename on input line 3.
-Package scrbase Info: activating english \listtablename on input line 3.
-! Undefined control sequence.
-l.4 \lsdkfjlskdfj
-
-The control sequence at the end of the top line
-of your error message was never \def'ed. If you have
-misspelled it (e.g., `\hobx'), type `I' and the correct
-spelling (e.g., `I\hbox'). Otherwise just continue,
-and I'll forget about whatever was undefined.
-
-(./a.aux) )
-Here is how much of TeX's memory you used:
-3199 strings out of 478510
-74549 string characters out of 5853586
-510929 words of memory out of 5000000
-21227 multiletter control sequences out of 15000+600000
-403730 words of font info for 28 fonts, out of 8000000 for 9000
-1141 hyphenation exceptions out of 8191
-108i,1n,108p,10625b,270s stack positions out of 5000i,500n,10000p,200000b,80000s
-
-No pages of output.
-PDF statistics:
-0 PDF objects out of 1000 (max. 8388607)
-0 named destinations out of 1000 (max. 500000)
-1 words of extra memory for PDF output out of 10000 (max. 10000000) \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/block_comments.txt b/support/texlab/crates/parser/src/test_data/latex/block_comments.txt
deleted file mode 100644
index d4e63ab1c8..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/block_comments.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Foo
-\iffalse
-Test1
-\fi
-Bar
-\iffalse
-\fii
-\fi
-Baz \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/caption/caption_default.txt b/support/texlab/crates/parser/src/test_data/latex/caption/caption_default.txt
deleted file mode 100644
index 9084f143bf..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/caption/caption_default.txt
+++ /dev/null
@@ -1 +0,0 @@
-\caption[qux]{Foo \Bar Baz} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/caption/caption_default_error.txt b/support/texlab/crates/parser/src/test_data/latex/caption/caption_default_error.txt
deleted file mode 100644
index 62e5962816..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/caption/caption_default_error.txt
+++ /dev/null
@@ -1 +0,0 @@
-\caption[qux]{Foo \Bar Baz \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/caption/caption_figure.txt b/support/texlab/crates/parser/src/test_data/latex/caption/caption_figure.txt
deleted file mode 100644
index 8a1d3067d8..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/caption/caption_figure.txt
+++ /dev/null
@@ -1 +0,0 @@
-\begin{figure}\caption{Foo}\end{figure} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal.txt b/support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal.txt
deleted file mode 100644
index 07af0af8ca..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal.txt
+++ /dev/null
@@ -1 +0,0 @@
-\caption{Foo \Bar Baz} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal_error.txt b/support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal_error.txt
deleted file mode 100644
index 747db731c1..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal_error.txt
+++ /dev/null
@@ -1 +0,0 @@
-\caption{Foo \Bar Baz \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/citation/citation_empty.txt b/support/texlab/crates/parser/src/test_data/latex/citation/citation_empty.txt
deleted file mode 100644
index 06704b89a4..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/citation/citation_empty.txt
+++ /dev/null
@@ -1 +0,0 @@
-\cite{} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/citation/citation_missing_brace.txt b/support/texlab/crates/parser/src/test_data/latex/citation/citation_missing_brace.txt
deleted file mode 100644
index 1f8e4c9310..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/citation/citation_missing_brace.txt
+++ /dev/null
@@ -1 +0,0 @@
-\cite{foo \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/citation/citation_multiple_keys.txt b/support/texlab/crates/parser/src/test_data/latex/citation/citation_multiple_keys.txt
deleted file mode 100644
index be5da02c62..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/citation/citation_multiple_keys.txt
+++ /dev/null
@@ -1 +0,0 @@
-\cite{foo, bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote.txt b/support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote.txt
deleted file mode 100644
index 5ae28c28ec..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote.txt
+++ /dev/null
@@ -1 +0,0 @@
-\cite[foo]{bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote_postnote.txt b/support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote_postnote.txt
deleted file mode 100644
index 23103b2476..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote_postnote.txt
+++ /dev/null
@@ -1 +0,0 @@
-\cite[foo][bar]{baz} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/citation/citation_redundant_comma.txt b/support/texlab/crates/parser/src/test_data/latex/citation/citation_redundant_comma.txt
deleted file mode 100644
index 68e3c2d36e..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/citation/citation_redundant_comma.txt
+++ /dev/null
@@ -1 +0,0 @@
-\cite{,foo,} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/citation/citation_simple.txt b/support/texlab/crates/parser/src/test_data/latex/citation/citation_simple.txt
deleted file mode 100644
index cd5809ef25..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/citation/citation_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\cite{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/citation/citation_star.txt b/support/texlab/crates/parser/src/test_data/latex/citation/citation_star.txt
deleted file mode 100644
index d1a2677021..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/citation/citation_star.txt
+++ /dev/null
@@ -1 +0,0 @@
-\nocite{*} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/color/color_definition_simple.txt b/support/texlab/crates/parser/src/test_data/latex/color/color_definition_simple.txt
deleted file mode 100644
index e8b58c8162..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/color/color_definition_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\definecolor{foo}{rgb}{255,168,0} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/color/color_reference_simple.txt b/support/texlab/crates/parser/src/test_data/latex/color/color_reference_simple.txt
deleted file mode 100644
index 4fea2b24ec..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/color/color_reference_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\color{black} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error1.txt b/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error1.txt
deleted file mode 100644
index f377ffcf2f..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error1.txt
+++ /dev/null
@@ -1 +0,0 @@
-\definecolorset[ty]{rgb,HTML}{foo}{bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error2.txt b/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error2.txt
deleted file mode 100644
index 0b5fa35868..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error2.txt
+++ /dev/null
@@ -1 +0,0 @@
-\definecolorset{rgb,HTML}{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error3.txt b/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error3.txt
deleted file mode 100644
index fb695b4530..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error3.txt
+++ /dev/null
@@ -1 +0,0 @@
-\definecolorset{rgb,HTML} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error4.txt b/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error4.txt
deleted file mode 100644
index 7c494133bf..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error4.txt
+++ /dev/null
@@ -1 +0,0 @@
-\definecolorset \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_simple.txt b/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_simple.txt
deleted file mode 100644
index c812e61041..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\definecolorset[ty]{rgb,HTML}{foo}{bar}{baz} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_argc.txt b/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_argc.txt
deleted file mode 100644
index ef63ef62cb..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_argc.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newcommand{\foo}{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl.txt b/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl.txt
deleted file mode 100644
index 5ffc7e97c2..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newcommand{\foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl_error.txt b/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl_error.txt
deleted file mode 100644
index 9323f5a313..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl_error.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newcommand{\foo \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_optional.txt b/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_optional.txt
deleted file mode 100644
index c3fb7225f3..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_optional.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newcommand{\foo}[1][def]{#1} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_simple.txt b/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_simple.txt
deleted file mode 100644
index ffce86f21c..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newcommand[1]{\id}{#1} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_with_begin.txt b/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_with_begin.txt
deleted file mode 100644
index e7ce7984cb..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_with_begin.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newcommand{\CVSubHeadingListStart}{\begin{itemize}[leftmargin=0.5cm, label={}]} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_no_impl.txt b/support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_no_impl.txt
deleted file mode 100644
index 685be22ce6..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_no_impl.txt
+++ /dev/null
@@ -1 +0,0 @@
-\DeclareMathOperator{\foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_simple.txt b/support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_simple.txt
deleted file mode 100644
index ffbf671f74..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\DeclareMathOperator{\foo}{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/environment/environment_asymptote.txt b/support/texlab/crates/parser/src/test_data/latex/environment/environment_asymptote.txt
deleted file mode 100644
index 76646075ea..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/environment/environment_asymptote.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-\begin{asy}
- printf("Hello World\n");
-\end{asy} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/environment/environment_definition.txt b/support/texlab/crates/parser/src/test_data/latex/environment/environment_definition.txt
deleted file mode 100644
index d3a5291dca..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/environment/environment_definition.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newenvironment{bar}[1]{\begin{foo}}{\end{foo}} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/environment/environment_definition_optional_arg.txt b/support/texlab/crates/parser/src/test_data/latex/environment/environment_definition_optional_arg.txt
deleted file mode 100644
index bead3228a4..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/environment/environment_definition_optional_arg.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newenvironment{foo}[1][default]{begin}{end} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/environment/environment_nested.txt b/support/texlab/crates/parser/src/test_data/latex/environment/environment_nested.txt
deleted file mode 100644
index 8d84019ac7..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/environment/environment_nested.txt
+++ /dev/null
@@ -1 +0,0 @@
-\begin{foo} \begin{qux} \end{baz} \end{bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/environment/environment_nested_missing_braces.txt b/support/texlab/crates/parser/src/test_data/latex/environment/environment_nested_missing_braces.txt
deleted file mode 100644
index 35ce901a83..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/environment/environment_nested_missing_braces.txt
+++ /dev/null
@@ -1 +0,0 @@
-\begin{foo \begin{qux Hello World \end{baz} \end{bar \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/environment/environment_simple.txt b/support/texlab/crates/parser/src/test_data/latex/environment/environment_simple.txt
deleted file mode 100644
index 309b559957..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/environment/environment_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\begin{foo} Hello World \end{bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/equation.txt b/support/texlab/crates/parser/src/test_data/latex/equation.txt
deleted file mode 100644
index 7f85196961..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/equation.txt
+++ /dev/null
@@ -1 +0,0 @@
-\[ foo bar \] \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/equation_missing_begin.txt b/support/texlab/crates/parser/src/test_data/latex/equation_missing_begin.txt
deleted file mode 100644
index 9e5707b196..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/equation_missing_begin.txt
+++ /dev/null
@@ -1 +0,0 @@
-\begin{a} foo bar \] \end{b} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/generic_command_args.txt b/support/texlab/crates/parser/src/test_data/latex/generic_command_args.txt
deleted file mode 100644
index 2d62314c5c..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/generic_command_args.txt
+++ /dev/null
@@ -1 +0,0 @@
-\foo{bar}[qux] \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/generic_command_empty.txt b/support/texlab/crates/parser/src/test_data/latex/generic_command_empty.txt
deleted file mode 100644
index eeb4a48255..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/generic_command_empty.txt
+++ /dev/null
@@ -1 +0,0 @@
-\foo \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/generic_command_escape.txt b/support/texlab/crates/parser/src/test_data/latex/generic_command_escape.txt
deleted file mode 100644
index 133d674d1e..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/generic_command_escape.txt
+++ /dev/null
@@ -1 +0,0 @@
-\# \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_declaration.txt b/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_declaration.txt
deleted file mode 100644
index abf12b6cae..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_declaration.txt
+++ /dev/null
@@ -1 +0,0 @@
-\DeclareAcronym{eg}{short = e.g,long = for example,tag = abbrev} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_options.txt b/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_options.txt
deleted file mode 100644
index 47a69067ca..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_simple.txt b/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_simple.txt
deleted file mode 100644
index 4fbf285927..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newacronym{fpsLabel}{FPS}{Frame per Second} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_package.txt b/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_package.txt
deleted file mode 100644
index 86e60c4584..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_package.txt
+++ /dev/null
@@ -1 +0,0 @@
-\acro{fps}[FPS]{Frames per Second}
diff --git a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_options.txt b/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_options.txt
deleted file mode 100644
index 43fd03f12b..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\acrshort[foo=bar,baz]{fpsLabel} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_simple.txt b/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_simple.txt
deleted file mode 100644
index d9fb5b9a25..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\acrshort{fpsLabel} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_definition_simple.txt b/support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_definition_simple.txt
deleted file mode 100644
index fb1e12899a..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_definition_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newglossaryentry{foo}{bar = baz, qux,} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_options.txt b/support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_options.txt
deleted file mode 100644
index fbae075e1d..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\gls[foo = bar, qux]{baz} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_simple.txt b/support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_simple.txt
deleted file mode 100644
index a603355f0f..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\gls{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/graphics_path.txt b/support/texlab/crates/parser/src/test_data/latex/graphics_path.txt
deleted file mode 100644
index 0e9f431c36..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/graphics_path.txt
+++ /dev/null
@@ -1 +0,0 @@
-\graphicspath{{../figures/}} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/graphics_path_command.txt b/support/texlab/crates/parser/src/test_data/latex/graphics_path_command.txt
deleted file mode 100644
index 729ee51690..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/graphics_path_command.txt
+++ /dev/null
@@ -1 +0,0 @@
-\graphicspath{{\subfix{./img/}}} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/graphics_path_options.txt b/support/texlab/crates/parser/src/test_data/latex/graphics_path_options.txt
deleted file mode 100644
index ae8aa84d86..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/graphics_path_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\graphicspath[foo]{{../figures/}} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/group/curly_group_missing_end.txt b/support/texlab/crates/parser/src/test_data/latex/group/curly_group_missing_end.txt
deleted file mode 100644
index 6c7b76c0f8..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/group/curly_group_missing_end.txt
+++ /dev/null
@@ -1 +0,0 @@
-{hello world \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/group/curly_group_simple.txt b/support/texlab/crates/parser/src/test_data/latex/group/curly_group_simple.txt
deleted file mode 100644
index 5084aae70a..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/group/curly_group_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-{hello world} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/group/equation_missing_end.txt b/support/texlab/crates/parser/src/test_data/latex/group/equation_missing_end.txt
deleted file mode 100644
index fcb715926a..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/group/equation_missing_end.txt
+++ /dev/null
@@ -1 +0,0 @@
-\begin{a} \[ foo bar \end{b} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/group/escaped_brackets.txt b/support/texlab/crates/parser/src/test_data/latex/group/escaped_brackets.txt
deleted file mode 100644
index 144a5fdd6d..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/group/escaped_brackets.txt
+++ /dev/null
@@ -1 +0,0 @@
-{[}{]} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/group/unmatched_braces.txt b/support/texlab/crates/parser/src/test_data/latex/group/unmatched_braces.txt
deleted file mode 100644
index 8f606b7dbe..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/group/unmatched_braces.txt
+++ /dev/null
@@ -1 +0,0 @@
-}{ \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets.txt b/support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets.txt
deleted file mode 100644
index 94ea4d5c96..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets.txt
+++ /dev/null
@@ -1 +0,0 @@
-][ \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets_with_group.txt b/support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets_with_group.txt
deleted file mode 100644
index ebf6229429..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets_with_group.txt
+++ /dev/null
@@ -1 +0,0 @@
-{][} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/hello_world.txt b/support/texlab/crates/parser/src/test_data/latex/hello_world.txt
deleted file mode 100644
index c57eff55eb..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/hello_world.txt
+++ /dev/null
@@ -1 +0,0 @@
-Hello World! \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_options.txt b/support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_options.txt
deleted file mode 100644
index 216e7ea165..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\addbibresource[foo=bar, baz]{foo/bar.bib} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_simple.txt
deleted file mode 100644
index fe10ce257d..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\addbibresource{foo/bar.bib} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/bibtex_include_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/bibtex_include_simple.txt
deleted file mode 100644
index 955353f690..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/bibtex_include_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\bibliography{foo/bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/class_include_empty.txt b/support/texlab/crates/parser/src/test_data/latex/include/class_include_empty.txt
deleted file mode 100644
index 144b418175..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/class_include_empty.txt
+++ /dev/null
@@ -1 +0,0 @@
-\documentclass{} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/class_include_options.txt b/support/texlab/crates/parser/src/test_data/latex/include/class_include_options.txt
deleted file mode 100644
index 32dc4279d7..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/class_include_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\documentclass[foo = bar, baz, qux]{article} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/class_include_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/class_include_simple.txt
deleted file mode 100644
index 15f3d6ea0a..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/class_include_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\documentclass{article} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_command.txt b/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_command.txt
deleted file mode 100644
index 14a4a96216..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_command.txt
+++ /dev/null
@@ -1 +0,0 @@
-\includegraphics[width=0.5\textwidth]{\foo.\bar.pdf} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_complicated_options.txt b/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_complicated_options.txt
deleted file mode 100644
index d6b6910c14..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_complicated_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\includegraphics[width=0.5\textwidth]{} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_options.txt b/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_options.txt
deleted file mode 100644
index 8d3c45f2a5..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\includegraphics[scale=.5]{foo/bar.pdf} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_simple.txt
deleted file mode 100644
index 629cf3e8a9..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/graphics_include_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\includegraphics{foo/bar.pdf} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/import_incomplete.txt b/support/texlab/crates/parser/src/test_data/latex/include/import_incomplete.txt
deleted file mode 100644
index 3d6bc5f043..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/import_incomplete.txt
+++ /dev/null
@@ -1 +0,0 @@
-\import{foo \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/import_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/import_simple.txt
deleted file mode 100644
index f38059d6c1..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/import_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\import{foo}{bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_options.txt b/support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_options.txt
deleted file mode 100644
index e6dd431c7c..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\includesvg[scale=.5]{foo/bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_simple.txt
deleted file mode 100644
index 4e3a4ea9ba..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\includesvg{foo/bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/latex_include_equality_sign.txt b/support/texlab/crates/parser/src/test_data/latex/include/latex_include_equality_sign.txt
deleted file mode 100644
index 5a763b4e29..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/latex_include_equality_sign.txt
+++ /dev/null
@@ -1 +0,0 @@
-\include{foo=bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/latex_include_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/latex_include_simple.txt
deleted file mode 100644
index c0d3d390df..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/latex_include_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\include{foo/bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/latex_input_path_brackets.txt b/support/texlab/crates/parser/src/test_data/latex/include/latex_input_path_brackets.txt
deleted file mode 100644
index 6585f50d52..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/latex_input_path_brackets.txt
+++ /dev/null
@@ -1 +0,0 @@
-\input{foo[bar].tex} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/package_include_empty.txt b/support/texlab/crates/parser/src/test_data/latex/include/package_include_empty.txt
deleted file mode 100644
index 09e02cc1cc..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/package_include_empty.txt
+++ /dev/null
@@ -1 +0,0 @@
-\usepackage{} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/package_include_multiple.txt b/support/texlab/crates/parser/src/test_data/latex/include/package_include_multiple.txt
deleted file mode 100644
index c1080aaf66..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/package_include_multiple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\usepackage{amsmath, lipsum} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/package_include_options.txt b/support/texlab/crates/parser/src/test_data/latex/include/package_include_options.txt
deleted file mode 100644
index 83a50c12cf..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/package_include_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\usepackage[foo = bar, baz, qux]{amsmath} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/package_include_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/package_include_simple.txt
deleted file mode 100644
index 3cf1b4edc0..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/package_include_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\usepackage{amsmath} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/pgf_library_import_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/pgf_library_import_simple.txt
deleted file mode 100644
index 25a2b24720..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/pgf_library_import_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\usepgflibrary{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/svg_include_options.txt b/support/texlab/crates/parser/src/test_data/latex/include/svg_include_options.txt
deleted file mode 100644
index 3eb90568ab..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/svg_include_options.txt
+++ /dev/null
@@ -1 +0,0 @@
-\includesvg[scale=.5]{foo/bar.svg} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/svg_include_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/svg_include_simple.txt
deleted file mode 100644
index 964a3adcd6..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/svg_include_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\includesvg{foo/bar.svg} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/tikz_library_import_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/tikz_library_import_simple.txt
deleted file mode 100644
index ff616ebd11..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/tikz_library_import_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\usetikzlibrary{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/include/verbatim_include_simple.txt b/support/texlab/crates/parser/src/test_data/latex/include/verbatim_include_simple.txt
deleted file mode 100644
index a0b3fec843..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/include/verbatim_include_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\verbatiminput{foo/bar.txt} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/inline.txt b/support/texlab/crates/parser/src/test_data/latex/inline.txt
deleted file mode 100644
index 81a429dc26..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/inline.txt
+++ /dev/null
@@ -1 +0,0 @@
-$x \in [0, \infty)$ \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/inline_double_dollar.txt b/support/texlab/crates/parser/src/test_data/latex/inline_double_dollar.txt
deleted file mode 100644
index c3a7fee9f6..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/inline_double_dollar.txt
+++ /dev/null
@@ -1 +0,0 @@
-$$x \in [0, \infty)$$ \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/issue_568.txt b/support/texlab/crates/parser/src/test_data/latex/issue_568.txt
deleted file mode 100644
index a01a16854d..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/issue_568.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-\input{|ipython scripts/test.ipynb}
-\label{fig:x=2} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/issue_745.txt b/support/texlab/crates/parser/src/test_data/latex/issue_745.txt
deleted file mode 100644
index 4cbebeb2d8..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/issue_745.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-\documentclass{article}
-\usepackage{tabularray}
-
-\ExplSyntaxOn
-\NewDocumentEnvironment{exptblr}{O{}m}
- {
- \use:x
- {
- \exp_not:N \begin{tblr}
- [\exp_not:n{#1}]
- {#2}
- }
- }
- {
- \end{tblr}
- }
-\ExplSyntaxOff
-
-\begin{document}
-
-\end{document} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/issue_789.txt b/support/texlab/crates/parser/src/test_data/latex/issue_789.txt
deleted file mode 100644
index 612c6de786..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/issue_789.txt
+++ /dev/null
@@ -1 +0,0 @@
-\graphicspath{test} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/issue_828.txt b/support/texlab/crates/parser/src/test_data/latex/issue_828.txt
deleted file mode 100644
index 76f973bdbd..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/issue_828.txt
+++ /dev/null
@@ -1 +0,0 @@
-\verb|<STATEMENT> if(<expr>){<body>else{<body>| \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/issue_853.txt b/support/texlab/crates/parser/src/test_data/latex/issue_853.txt
deleted file mode 100644
index 312889717c..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/issue_853.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-\documentclass{minimal}
-\begin{document}
-This is an asdf undefined command
-\iffalse
- \iffalse\fi
- \end{enumerate}
-\fi
-\end{document} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/issue_857.txt b/support/texlab/crates/parser/src/test_data/latex/issue_857.txt
deleted file mode 100644
index 0640263c84..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/issue_857.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-\newcommand\ö{}
-\newcommand{\öö}{}
-\newcommand\123{} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/issue_874.txt b/support/texlab/crates/parser/src/test_data/latex/issue_874.txt
deleted file mode 100644
index adb3e438a2..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/issue_874.txt
+++ /dev/null
@@ -1 +0,0 @@
-\includegraphics[scale=0.2]{7.4).jpg} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/issue_919.txt b/support/texlab/crates/parser/src/test_data/latex/issue_919.txt
deleted file mode 100644
index 40e1b16a03..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/issue_919.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-\documentclass{article}
-
-\usepackage{
- lipsum, % provides blindtext
- booktabs, % better rules for tables
- %xcolor % easily define colors with \definecolor{}{}{}
-}
-
-\begin{document}
- \lipsum
-\end{document}
diff --git a/support/texlab/crates/parser/src/test_data/latex/issue_931.txt b/support/texlab/crates/parser/src/test_data/latex/issue_931.txt
deleted file mode 100644
index 8d75cecfae..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/issue_931.txt
+++ /dev/null
@@ -1 +0,0 @@
-\bibliography{$HOME/Literature} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_definition_line_break.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_definition_line_break.txt
deleted file mode 100644
index d567c6d25a..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_definition_line_break.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-\label{hello
-world} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_definition_simple.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_definition_simple.txt
deleted file mode 100644
index 43ebaf1cec..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_definition_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\label{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_number.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_number.txt
deleted file mode 100644
index 6e994af500..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_number.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newlabel{foo}{{1.1}} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_equation.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_reference_equation.txt
deleted file mode 100644
index ab386645df..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_equation.txt
+++ /dev/null
@@ -1 +0,0 @@
-\eqref{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_incomplete.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_reference_incomplete.txt
deleted file mode 100644
index 1d0f79ec8e..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_incomplete.txt
+++ /dev/null
@@ -1 +0,0 @@
-Equation \eqref{eq is a \emph{useful} identity. \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_multiple.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_reference_multiple.txt
deleted file mode 100644
index e8bb38ee9e..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_multiple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\ref{foo, bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_error.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_error.txt
deleted file mode 100644
index 9213da0460..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_error.txt
+++ /dev/null
@@ -1 +0,0 @@
-\crefrange{foo{bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_incomplete.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_incomplete.txt
deleted file mode 100644
index 841133d73a..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_incomplete.txt
+++ /dev/null
@@ -1 +0,0 @@
-\crefrange{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_simple.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_simple.txt
deleted file mode 100644
index a0e985ea88..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\crefrange{foo}{bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_simple.txt b/support/texlab/crates/parser/src/test_data/latex/label/label_reference_simple.txt
deleted file mode 100644
index dde4f444f4..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/label/label_reference_simple.txt
+++ /dev/null
@@ -1 +0,0 @@
-\ref{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/parameter.txt b/support/texlab/crates/parser/src/test_data/latex/parameter.txt
deleted file mode 100644
index d44ac7b947..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/parameter.txt
+++ /dev/null
@@ -1 +0,0 @@
-#1 \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/parameter_error.txt b/support/texlab/crates/parser/src/test_data/latex/parameter_error.txt
deleted file mode 100644
index 4287ca8617..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/parameter_error.txt
+++ /dev/null
@@ -1 +0,0 @@
-# \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/structure/paragraphs.txt b/support/texlab/crates/parser/src/test_data/latex/structure/paragraphs.txt
deleted file mode 100644
index a7e32353bb..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/structure/paragraphs.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-\section{Section 1}
-Section 1
-
-\paragraph{Paragraph 1}
-Paragraph 1
-
-\paragraph{Paragraph 2}
-Paragraph 2
-
-\section{Section 2}
-Section 2 \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/structure/structure_enum_item.txt b/support/texlab/crates/parser/src/test_data/latex/structure/structure_enum_item.txt
deleted file mode 100644
index 3288ec259b..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/structure/structure_enum_item.txt
+++ /dev/null
@@ -1 +0,0 @@
-\begin{enumerate} \item 1 \item[2] 2 \item 3 \end{enumerate} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/structure/structure_invalid_nesting.txt b/support/texlab/crates/parser/src/test_data/latex/structure/structure_invalid_nesting.txt
deleted file mode 100644
index 7203dd2d24..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/structure/structure_invalid_nesting.txt
+++ /dev/null
@@ -1 +0,0 @@
-\section{Foo} \chapter{Bar} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/structure/structure_nested.txt b/support/texlab/crates/parser/src/test_data/latex/structure/structure_nested.txt
deleted file mode 100644
index 082f10765b..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/structure/structure_nested.txt
+++ /dev/null
@@ -1 +0,0 @@
-\part{1}\chapter{2}\section{3}\subsection{4}\subsubsection{5}\paragraph{6}\subparagraph{7} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/structure/structure_siblings.txt b/support/texlab/crates/parser/src/test_data/latex/structure/structure_siblings.txt
deleted file mode 100644
index d8e347c429..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/structure/structure_siblings.txt
+++ /dev/null
@@ -1 +0,0 @@
-\section{Foo} Foo \section{Bar} Bar \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_full.txt b/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_full.txt
deleted file mode 100644
index 286d111ad1..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_full.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newtheorem{foo}[bar]{Foo}[baz] \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt b/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt
deleted file mode 100644
index af1b6903a5..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newtheorem{foo}[bar] \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt b/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt
deleted file mode 100644
index e5d6551666..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newtheorem{foo}{Foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt b/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt
deleted file mode 100644
index 89c37d9497..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newtheorem{foo}[bar]{Foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_only_name.txt b/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_only_name.txt
deleted file mode 100644
index 62adb2c4b9..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_only_name.txt
+++ /dev/null
@@ -1 +0,0 @@
-\newtheorem{foo} \ No newline at end of file
diff --git a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_thmtools.txt b/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_thmtools.txt
deleted file mode 100644
index 2662a5ca8c..0000000000
--- a/support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_thmtools.txt
+++ /dev/null
@@ -1 +0,0 @@
-\declaretheorem[style=foo, name=bar]{baz} \ No newline at end of file
diff --git a/support/texlab/crates/references/Cargo.toml b/support/texlab/crates/references/Cargo.toml
index 7aa810487d..49827f8d12 100644
--- a/support/texlab/crates/references/Cargo.toml
+++ b/support/texlab/crates/references/Cargo.toml
@@ -8,7 +8,7 @@ rust-version.workspace = true
[dependencies]
base-db = { path = "../base-db" }
-rowan = "0.15.11"
+rowan = "0.15.13"
syntax = { path = "../syntax" }
[dev-dependencies]
diff --git a/support/texlab/crates/references/src/entry.rs b/support/texlab/crates/references/src/entry.rs
index 617ff86304..c3926058e6 100644
--- a/support/texlab/crates/references/src/entry.rs
+++ b/support/texlab/crates/references/src/entry.rs
@@ -1,7 +1,7 @@
use base_db::{
semantics::{bib, tex},
util::queries::{self, Object},
- DocumentData,
+ DocumentData, DocumentLocation,
};
use crate::{Reference, ReferenceContext, ReferenceKind};
@@ -9,7 +9,7 @@ use crate::{Reference, ReferenceContext, ReferenceKind};
pub(super) fn find_all(context: &mut ReferenceContext) -> Option<()> {
let offset = context.params.offset;
- let name = match &context.params.document.data {
+ let name = match &context.params.feature.document.data {
DocumentData::Tex(data) => {
let result = queries::object_at_cursor(
&data.semantics.citations,
@@ -29,18 +29,17 @@ pub(super) fn find_all(context: &mut ReferenceContext) -> Option<()> {
_ => return None,
};
- for (document, obj) in queries::objects_with_name::<tex::Citation>(&context.project, name) {
+ let project = &context.params.feature.project;
+ for (document, obj) in queries::objects_with_name::<tex::Citation>(&project, name) {
context.results.push(Reference {
- document,
- range: obj.name.range,
+ location: DocumentLocation::new(document, obj.name.range),
kind: ReferenceKind::Reference,
});
}
- for (document, obj) in queries::objects_with_name::<bib::Entry>(&context.project, name) {
+ for (document, obj) in queries::objects_with_name::<bib::Entry>(&project, name) {
context.results.push(Reference {
- document,
- range: obj.name.range,
+ location: DocumentLocation::new(document, obj.name.range),
kind: ReferenceKind::Definition,
});
}
diff --git a/support/texlab/crates/references/src/label.rs b/support/texlab/crates/references/src/label.rs
index 5ed8096c5c..872ef2dd14 100644
--- a/support/texlab/crates/references/src/label.rs
+++ b/support/texlab/crates/references/src/label.rs
@@ -1,26 +1,27 @@
use base_db::{
semantics::tex,
util::queries::{self, Object},
+ DocumentLocation,
};
use crate::{Reference, ReferenceContext, ReferenceKind};
pub(super) fn find_all(context: &mut ReferenceContext) -> Option<()> {
- let data = context.params.document.data.as_tex()?;
+ let data = context.params.feature.document.data.as_tex()?;
let mode = queries::SearchMode::Full;
let name = queries::object_at_cursor(&data.semantics.labels, context.params.offset, mode)?
.object
.name_text();
- for (document, label) in queries::objects_with_name::<tex::Label>(&context.project, name) {
+ let project = &context.params.feature.project;
+ for (document, label) in queries::objects_with_name::<tex::Label>(&project, name) {
let kind = match label.kind {
tex::LabelKind::Definition => ReferenceKind::Definition,
tex::LabelKind::Reference | tex::LabelKind::ReferenceRange => ReferenceKind::Reference,
};
context.results.push(Reference {
- document,
- range: label.name.range,
+ location: DocumentLocation::new(document, label.name.range),
kind,
});
}
diff --git a/support/texlab/crates/references/src/lib.rs b/support/texlab/crates/references/src/lib.rs
index 76cd8ce53c..c223ad8eba 100644
--- a/support/texlab/crates/references/src/lib.rs
+++ b/support/texlab/crates/references/src/lib.rs
@@ -2,13 +2,12 @@ mod entry;
mod label;
mod string_def;
-use base_db::{Document, Project, Workspace};
-use rowan::{TextRange, TextSize};
+use base_db::{DocumentLocation, FeatureParams};
+use rowan::TextSize;
#[derive(Debug)]
-pub struct Reference<'db> {
- pub document: &'db Document,
- pub range: TextRange,
+pub struct Reference<'a> {
+ pub location: DocumentLocation<'a>,
pub kind: ReferenceKind,
}
@@ -19,24 +18,20 @@ pub enum ReferenceKind {
}
#[derive(Debug)]
-pub struct ReferenceParams<'db> {
- pub workspace: &'db Workspace,
- pub document: &'db Document,
+pub struct ReferenceParams<'a> {
+ pub feature: FeatureParams<'a>,
pub offset: TextSize,
}
#[derive(Debug)]
-struct ReferenceContext<'db> {
- params: ReferenceParams<'db>,
- project: Project<'db>,
- results: Vec<Reference<'db>>,
+struct ReferenceContext<'a> {
+ params: ReferenceParams<'a>,
+ results: Vec<Reference<'a>>,
}
pub fn find_all(params: ReferenceParams) -> Vec<Reference<'_>> {
- let project = params.workspace.project(params.document);
let mut context = ReferenceContext {
params,
- project,
results: Vec::new(),
};
diff --git a/support/texlab/crates/references/src/string_def.rs b/support/texlab/crates/references/src/string_def.rs
index 9657686079..18b28d49e2 100644
--- a/support/texlab/crates/references/src/string_def.rs
+++ b/support/texlab/crates/references/src/string_def.rs
@@ -1,10 +1,11 @@
+use base_db::DocumentLocation;
use rowan::ast::AstNode;
use syntax::bibtex;
use crate::{Reference, ReferenceContext, ReferenceKind};
pub(super) fn find_all(context: &mut ReferenceContext) -> Option<()> {
- let document = context.params.document;
+ let document = context.params.feature.document;
let data = document.data.as_bib()?;
let root = data.root_node();
let name = root
@@ -18,8 +19,7 @@ pub(super) fn find_all(context: &mut ReferenceContext) -> Option<()> {
for string in &data.semantics.strings {
if string.name.text == name.text() {
context.results.push(Reference {
- document,
- range: string.name.range,
+ location: DocumentLocation::new(document, string.name.range),
kind: ReferenceKind::Definition,
});
}
@@ -32,8 +32,7 @@ pub(super) fn find_all(context: &mut ReferenceContext) -> Option<()> {
.filter(|token| token.text() == name.text())
{
context.results.push(Reference {
- document,
- range: token.text_range(),
+ location: DocumentLocation::new(document, token.text_range()),
kind: ReferenceKind::Reference,
});
}
diff --git a/support/texlab/crates/references/src/tests.rs b/support/texlab/crates/references/src/tests.rs
index 03a83c5f14..3a3e7008a0 100644
--- a/support/texlab/crates/references/src/tests.rs
+++ b/support/texlab/crates/references/src/tests.rs
@@ -4,30 +4,13 @@ use crate::{ReferenceKind, ReferenceParams};
fn check(fixture: &str, include_def: bool) {
let fixture = test_utils::fixture::Fixture::parse(fixture);
- let workspace = &fixture.workspace;
+ let (feature, offset) = fixture.make_params().unwrap();
- let expected = fixture
- .documents
- .iter()
- .flat_map(|document| document.ranges.iter().map(|&range| (&document.uri, range)))
- .collect::<HashSet<_>>();
-
- let (document, offset) = fixture
- .documents
- .iter()
- .find_map(|document| Some((workspace.lookup(&document.uri)?, document.cursor?)))
- .unwrap();
-
- let params = ReferenceParams {
- workspace,
- document,
- offset,
- };
-
- let actual = crate::find_all(params)
+ let expected = fixture.locations().collect::<HashSet<_>>();
+ let actual = crate::find_all(ReferenceParams { feature, offset })
.into_iter()
.filter(|reference| reference.kind == ReferenceKind::Reference || include_def)
- .map(|reference| (&reference.document.uri, reference.range))
+ .map(|reference| reference.location)
.collect::<HashSet<_>>();
assert_eq!(actual, expected);
diff --git a/support/texlab/crates/rename/Cargo.toml b/support/texlab/crates/rename/Cargo.toml
index 90cf4f4197..127b3316d7 100644
--- a/support/texlab/crates/rename/Cargo.toml
+++ b/support/texlab/crates/rename/Cargo.toml
@@ -8,7 +8,7 @@ rust-version.workspace = true
[dependencies]
base-db = { path = "../base-db" }
-rowan = "0.15.11"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
syntax = { path = "../syntax" }
diff --git a/support/texlab/crates/rename/src/command.rs b/support/texlab/crates/rename/src/command.rs
index eacf411710..edcf7db61e 100644
--- a/support/texlab/crates/rename/src/command.rs
+++ b/support/texlab/crates/rename/src/command.rs
@@ -5,7 +5,7 @@ use syntax::latex;
use crate::{RenameBuilder, RenameParams};
pub(super) fn prepare_rename(params: &RenameParams) -> Option<Span> {
- let data = params.inner.document.data.as_tex()?;
+ let data = params.feature.document.data.as_tex()?;
let token = data
.root_node()
.token_at_offset(params.offset)
@@ -22,7 +22,7 @@ pub(super) fn prepare_rename(params: &RenameParams) -> Option<Span> {
pub(super) fn rename<'a>(builder: &mut RenameBuilder) -> Option<()> {
let name = prepare_rename(&builder.params)?;
- for document in &builder.params.inner.project.documents {
+ for document in &builder.params.feature.project.documents {
let DocumentData::Tex(data) = &document.data else {
continue;
};
diff --git a/support/texlab/crates/rename/src/entry.rs b/support/texlab/crates/rename/src/entry.rs
index 11800f1371..c0b508a506 100644
--- a/support/texlab/crates/rename/src/entry.rs
+++ b/support/texlab/crates/rename/src/entry.rs
@@ -7,7 +7,7 @@ use base_db::{
use crate::{RenameBuilder, RenameParams};
pub(super) fn prepare_rename(params: &RenameParams) -> Option<Span> {
- match &params.inner.document.data {
+ match &params.feature.document.data {
DocumentData::Tex(data) => {
let result = queries::object_at_cursor(
&data.semantics.citations,
@@ -33,7 +33,7 @@ pub(super) fn prepare_rename(params: &RenameParams) -> Option<Span> {
pub(super) fn rename<'a>(builder: &mut RenameBuilder) -> Option<()> {
let name = prepare_rename(&builder.params)?;
- let project = &builder.params.inner.project;
+ let project = &builder.params.feature.project;
let citations = queries::objects_with_name::<tex::Citation>(project, &name.text)
.map(|(doc, obj)| (doc, obj.name.range));
diff --git a/support/texlab/crates/rename/src/label.rs b/support/texlab/crates/rename/src/label.rs
index 983cc4f912..b21e1b795e 100644
--- a/support/texlab/crates/rename/src/label.rs
+++ b/support/texlab/crates/rename/src/label.rs
@@ -6,7 +6,7 @@ use base_db::{
use crate::{RenameBuilder, RenameParams};
pub(super) fn prepare_rename(params: &RenameParams) -> Option<Span> {
- let data = params.inner.document.data.as_tex()?;
+ let data = params.feature.document.data.as_tex()?;
let labels = &data.semantics.labels;
let label = queries::object_at_cursor(labels, params.offset, queries::SearchMode::Name)?;
Some(Span::new(label.object.name.text.clone(), label.range))
@@ -15,7 +15,7 @@ pub(super) fn prepare_rename(params: &RenameParams) -> Option<Span> {
pub(super) fn rename(builder: &mut RenameBuilder) -> Option<()> {
let name = prepare_rename(&builder.params)?;
- let project = &builder.params.inner.project;
+ let project = &builder.params.feature.project;
for (document, label) in queries::objects_with_name::<tex::Label>(project, &name.text) {
let entry = builder.result.changes.entry(document);
entry.or_default().push(label.name_range());
diff --git a/support/texlab/crates/rename/src/lib.rs b/support/texlab/crates/rename/src/lib.rs
index d9b28c3586..b7dd197ce0 100644
--- a/support/texlab/crates/rename/src/lib.rs
+++ b/support/texlab/crates/rename/src/lib.rs
@@ -7,19 +7,19 @@ use rowan::{TextRange, TextSize};
use rustc_hash::FxHashMap;
#[derive(Debug)]
-pub struct RenameParams<'db> {
- pub inner: FeatureParams<'db>,
+pub struct RenameParams<'a> {
+ pub feature: FeatureParams<'a>,
pub offset: TextSize,
}
#[derive(Debug, Default)]
-pub struct RenameResult<'db> {
- pub changes: FxHashMap<&'db Document, Vec<TextRange>>,
+pub struct RenameResult<'a> {
+ pub changes: FxHashMap<&'a Document, Vec<TextRange>>,
}
-struct RenameBuilder<'db> {
- params: &'db RenameParams<'db>,
- result: RenameResult<'db>,
+struct RenameBuilder<'a> {
+ params: RenameParams<'a>,
+ result: RenameResult<'a>,
}
pub fn prepare_rename(params: &RenameParams) -> Option<TextRange> {
@@ -29,7 +29,7 @@ pub fn prepare_rename(params: &RenameParams) -> Option<TextRange> {
.map(|span| span.range)
}
-pub fn rename<'db>(params: &'db RenameParams<'db>) -> RenameResult<'db> {
+pub fn rename<'a>(params: RenameParams<'a>) -> RenameResult<'a> {
let result = RenameResult::default();
let mut builder = RenameBuilder { params, result };
diff --git a/support/texlab/crates/rename/src/tests.rs b/support/texlab/crates/rename/src/tests.rs
index d931e92798..0f4263033e 100644
--- a/support/texlab/crates/rename/src/tests.rs
+++ b/support/texlab/crates/rename/src/tests.rs
@@ -1,4 +1,3 @@
-use base_db::FeatureParams;
use rustc_hash::FxHashMap;
use crate::RenameParams;
@@ -14,20 +13,13 @@ fn check(input: &str) {
}
}
- let (document, offset) = fixture
- .documents
- .iter()
- .find_map(|spec| Some((fixture.workspace.lookup(&spec.uri)?, spec.cursor?)))
- .unwrap();
-
- let inner = FeatureParams::new(&fixture.workspace, document);
- let params = RenameParams { inner, offset };
- let actual = crate::rename(&params);
+ let (feature, offset) = fixture.make_params().unwrap();
+ let actual = crate::rename(RenameParams { feature, offset });
assert_eq!(actual.changes, expected);
}
#[test]
-fn command() {
+fn test_command() {
check(
r#"
%! foo.tex
@@ -44,7 +36,7 @@ fn command() {
}
#[test]
-fn entry() {
+fn test_entry() {
check(
r#"
%! main.bib
@@ -61,7 +53,7 @@ fn entry() {
}
#[test]
-fn citation() {
+fn test_citation() {
check(
r#"
%! main.bib
@@ -78,7 +70,7 @@ fn citation() {
}
#[test]
-fn label() {
+fn test_label() {
check(
r#"
%! foo.tex
diff --git a/support/texlab/crates/symbols/Cargo.toml b/support/texlab/crates/symbols/Cargo.toml
index 19a9c44964..5386efdcf9 100644
--- a/support/texlab/crates/symbols/Cargo.toml
+++ b/support/texlab/crates/symbols/Cargo.toml
@@ -12,13 +12,14 @@ doctest = false
[dependencies]
base-db = { path = "../base-db" }
distro = { path = "../distro" }
-itertools = "0.11.0"
-rowan = "0.15.11"
+itertools = "0.12.0"
+line-index = { path = "../line-index" }
+rowan = "0.15.13"
syntax = { path = "../syntax" }
titlecase = "2.2.1"
-url = "=2.3.1"
+url = "2.5.0"
[dev-dependencies]
-regex = "1.9.1"
+regex = "1.10.2"
test-utils = { path = "../test-utils" }
expect-test = "1.4.1"
diff --git a/support/texlab/crates/symbols/src/document.rs b/support/texlab/crates/symbols/src/document.rs
index b34974e019..e8f1087051 100644
--- a/support/texlab/crates/symbols/src/document.rs
+++ b/support/texlab/crates/symbols/src/document.rs
@@ -22,6 +22,7 @@ pub fn document_symbols(workspace: &Workspace, document: &Document) -> Vec<Symbo
DocumentData::Aux(_)
| DocumentData::Log(_)
| DocumentData::Root
+ | DocumentData::Latexmkrc(_)
| DocumentData::Tectonic => Vec::new(),
};
diff --git a/support/texlab/crates/symbols/src/workspace/sort.rs b/support/texlab/crates/symbols/src/workspace/sort.rs
index 0e24c25ac9..75d80a02eb 100644
--- a/support/texlab/crates/symbols/src/workspace/sort.rs
+++ b/support/texlab/crates/symbols/src/workspace/sort.rs
@@ -38,8 +38,9 @@ impl<'a> From<&'a Workspace> for ProjectOrdering<'a> {
#[cfg(test)]
mod tests {
- use base_db::{util::LineCol, Owner};
+ use base_db::Owner;
use distro::Language;
+ use line_index::LineCol;
use super::{ProjectOrdering, Url, Workspace};
diff --git a/support/texlab/crates/symbols/src/workspace/tests.rs b/support/texlab/crates/symbols/src/workspace/tests.rs
index 26bdefa6b6..3fecd58a57 100644
--- a/support/texlab/crates/symbols/src/workspace/tests.rs
+++ b/support/texlab/crates/symbols/src/workspace/tests.rs
@@ -75,7 +75,7 @@ fn check(query: &str, expect: Expect) {
}
#[test]
-fn filter_type_section() {
+fn test_filter_type_section() {
check(
"section",
expect![[r#"
@@ -158,7 +158,7 @@ fn filter_type_section() {
}
#[test]
-fn filter_type_figure() {
+fn test_filter_type_figure() {
check(
"figure",
expect![[r#"
@@ -187,7 +187,7 @@ fn filter_type_figure() {
}
#[test]
-fn filter_type_item() {
+fn test_filter_type_item() {
check(
"item",
expect![[r#"
@@ -252,7 +252,7 @@ fn filter_type_item() {
}
#[test]
-fn filter_type_math() {
+fn test_filter_type_math() {
check(
"math",
expect![[r#"
@@ -299,7 +299,7 @@ fn filter_type_math() {
}
#[test]
-fn filter_bibtex() {
+fn test_filter_bibtex() {
check(
"bibtex",
expect![[r#"
diff --git a/support/texlab/crates/syntax/Cargo.toml b/support/texlab/crates/syntax/Cargo.toml
index 8477e01e0d..5e6c69409a 100644
--- a/support/texlab/crates/syntax/Cargo.toml
+++ b/support/texlab/crates/syntax/Cargo.toml
@@ -7,8 +7,8 @@ edition.workspace = true
rust-version.workspace = true
[dependencies]
-itertools = "0.11.0"
-rowan = "0.15.11"
+itertools = "0.12.0"
+rowan = "0.15.13"
[lib]
doctest = false
diff --git a/support/texlab/crates/syntax/src/latexmkrc.rs b/support/texlab/crates/syntax/src/latexmkrc.rs
new file mode 100644
index 0000000000..41cc5b9bbf
--- /dev/null
+++ b/support/texlab/crates/syntax/src/latexmkrc.rs
@@ -0,0 +1,5 @@
+#[derive(Debug, Clone, Default)]
+pub struct LatexmkrcData {
+ pub aux_dir: Option<String>,
+ pub out_dir: Option<String>,
+}
diff --git a/support/texlab/crates/syntax/src/lib.rs b/support/texlab/crates/syntax/src/lib.rs
index dc8761b73d..35f1bb8c52 100644
--- a/support/texlab/crates/syntax/src/lib.rs
+++ b/support/texlab/crates/syntax/src/lib.rs
@@ -1,5 +1,6 @@
pub mod bibtex;
pub mod latex;
+pub mod latexmkrc;
#[derive(Debug, PartialEq, Eq, Clone, Copy, PartialOrd, Ord, Hash)]
pub enum BuildErrorLevel {
diff --git a/support/texlab/crates/test-utils/Cargo.toml b/support/texlab/crates/test-utils/Cargo.toml
index 6426dad920..16a0099b04 100644
--- a/support/texlab/crates/test-utils/Cargo.toml
+++ b/support/texlab/crates/test-utils/Cargo.toml
@@ -9,8 +9,9 @@ rust-version.workspace = true
[dependencies]
base-db = { path = "../base-db" }
distro = { path = "../distro" }
-rowan = "0.15.11"
-url = "=2.3.1"
+line-index = { path = "../line-index" }
+rowan = "0.15.13"
+url = "2.5.0"
[lib]
doctest = false
diff --git a/support/texlab/crates/test-utils/src/fixture.rs b/support/texlab/crates/test-utils/src/fixture.rs
index 55ab162d28..9a768035c8 100644
--- a/support/texlab/crates/test-utils/src/fixture.rs
+++ b/support/texlab/crates/test-utils/src/fixture.rs
@@ -1,9 +1,7 @@
use std::path::PathBuf;
-use base_db::{
- util::{LineCol, LineIndex},
- Owner, Workspace,
-};
+use base_db::{DocumentLocation, FeatureParams, Owner, Workspace};
+use line_index::{LineCol, LineIndex};
use rowan::{TextRange, TextSize};
use url::Url;
@@ -47,6 +45,28 @@ impl Fixture {
documents,
}
}
+
+ pub fn make_params(&self) -> Option<(FeatureParams, TextSize)> {
+ let spec = self
+ .documents
+ .iter()
+ .find(|spec| spec.cursor.is_some())
+ .or_else(|| self.documents.first())?;
+
+ let document = self.workspace.lookup(&spec.uri)?;
+ let params = FeatureParams::new(&self.workspace, document);
+ let cursor = spec.cursor.unwrap_or_default();
+ Some((params, cursor))
+ }
+
+ pub fn locations(&self) -> impl Iterator<Item = DocumentLocation> {
+ self.documents.iter().flat_map(|spec| {
+ let document = self.workspace.lookup(&spec.uri).unwrap();
+ spec.ranges
+ .iter()
+ .map(|range| DocumentLocation::new(document, *range))
+ })
+ }
}
#[derive(Debug)]
@@ -99,10 +119,10 @@ impl DocumentSpec {
let line_index = LineIndex::new(&text);
- let cursor = cursor.map(|cursor| cursor.to_offset(&text, &line_index));
+ let cursor = cursor.and_then(|cursor| cursor.to_offset(&text, &line_index));
let ranges = ranges
.into_iter()
- .map(|range| range.to_offset(&text, &line_index))
+ .filter_map(|range| range.to_offset(&text, &line_index))
.collect();
Self {
@@ -125,11 +145,11 @@ impl CharacterPosition {
Self { line, col }
}
- fn to_offset(self, text: &str, line_index: &LineIndex) -> TextSize {
+ fn to_offset(self, text: &str, line_index: &LineIndex) -> Option<TextSize> {
let start = line_index.offset(LineCol {
line: (self.line - 1) as u32,
col: 0,
- });
+ })?;
let slice = &text[start.into()..];
let len = slice
@@ -137,7 +157,7 @@ impl CharacterPosition {
.nth(self.col)
.map_or_else(|| slice.len(), |(i, _)| i);
- start + TextSize::try_from(len).unwrap()
+ Some(start + TextSize::try_from(len).ok()?)
}
}
@@ -152,9 +172,9 @@ impl CharacterRange {
Self { start, end }
}
- fn to_offset(self, text: &str, line_index: &LineIndex) -> TextRange {
- let start = self.start.to_offset(text, line_index);
- let end = self.end.to_offset(text, line_index);
- TextRange::new(start, end)
+ fn to_offset(self, text: &str, line_index: &LineIndex) -> Option<TextRange> {
+ let start = self.start.to_offset(text, line_index)?;
+ let end = self.end.to_offset(text, line_index)?;
+ Some(TextRange::new(start, end))
}
}
diff --git a/support/texlab/crates/texlab/Cargo.toml b/support/texlab/crates/texlab/Cargo.toml
index 9b120d7884..099e0cc8c7 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.11.0"
+version = "5.12.0"
license.workspace = true
readme = "README.md"
authors.workspace = true
@@ -12,7 +12,7 @@ repository = "https://github.com/latex-lsp/texlab"
documentation = "https://github.com/latex-lsp/texlab"
keywords = ["lsp", "server", "latex", "bibtex"]
categories = ["development-tools"]
-exclude = ["tests/it/**", "*.snap"]
+exclude = ["*.snap"]
[[bin]]
name = "texlab"
@@ -24,8 +24,9 @@ doctest = false
[dependencies]
anyhow = "1.0.75"
base-db = { path = "../base-db" }
+bibfmt = { path = "../bibfmt" }
citeproc = { path = "../citeproc" }
-clap = { version = "4.4.4", features = ["derive"] }
+clap = { version = "4.4.10", features = ["derive"] }
commands = { path = "../commands" }
completion = { path = "../completion" }
completion-data = { path = "../completion-data" }
@@ -37,10 +38,11 @@ encoding_rs = "0.8.33"
encoding_rs_io = "0.1.7"
fern = "0.6.2"
folding = { path = "../folding" }
-fuzzy-matcher = { version = "0.3.7", features = ["compact"] }
+highlights = { path = "../highlights" }
hover = { path = "../hover" }
inlay-hints = { path = "../inlay-hints" }
-itertools = "0.11.0"
+line-index = { path = "../line-index" }
+links = { path = "../links" }
log = "0.4.19"
lsp-server = "0.7.4"
lsp-types = "0.94.1"
@@ -49,25 +51,22 @@ notify-debouncer-full = "0.3.1"
once_cell = "1.18.0"
parking_lot = "0.12.1"
parser = { path = "../parser" }
-rayon = "1.8.0"
references = { path = "../references" }
-regex = "1.9.5"
+regex = "1.10.2"
rename = { path = "../rename" }
-rowan = "0.15.11"
+rowan = "0.15.13"
rustc-hash = "1.1.0"
-serde = "1.0.188"
-serde_json = "1.0.107"
+serde = "1.0.193"
+serde_json = "1.0.108"
serde_regex = "1.1.0"
-serde_repr = "0.1.16"
+serde_repr = "0.1.17"
symbols = { path = "../symbols" }
syntax = { path = "../syntax" }
tempfile = "3.8.0"
threadpool = "1.8.1"
[dev-dependencies]
-assert_unordered = "0.3.5"
criterion = { version = "0.5.1" }
-insta = { version = "1.32.0", features = ["glob", "redactions", "json"] }
[[bench]]
name = "bench_main"
diff --git a/support/texlab/crates/texlab/benches/bench_main.rs b/support/texlab/crates/texlab/benches/bench_main.rs
index da98e63bfb..0f54a2c2d1 100644
--- a/support/texlab/crates/texlab/benches/bench_main.rs
+++ b/support/texlab/crates/texlab/benches/bench_main.rs
@@ -1,6 +1,7 @@
-use base_db::{util::LineCol, Owner, Workspace};
+use base_db::{Owner, Workspace};
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use distro::Language;
+use line_index::LineCol;
use lsp_types::{ClientCapabilities, CompletionParams, Position, TextDocumentPositionParams, Url};
use parser::{parse_latex, SyntaxConfig};
@@ -12,7 +13,7 @@ fn criterion_benchmark(c: &mut Criterion) {
b.iter(|| parse_latex(black_box(CODE), &config));
});
- c.bench_function("LaTeX/Completion/Command_v2", |b| {
+ c.bench_function("LaTeX/Completion/Command", |b| {
let uri = Url::parse("http://example.com/texlab.tex").unwrap();
let text = CODE.to_string();
let mut workspace = Workspace::default();
diff --git a/support/texlab/crates/texlab/src/features/completion.rs b/support/texlab/crates/texlab/src/features/completion.rs
index e02b39c2c6..8e5fa2adbb 100644
--- a/support/texlab/crates/texlab/src/features/completion.rs
+++ b/support/texlab/crates/texlab/src/features/completion.rs
@@ -1,11 +1,9 @@
-use base_db::{
- util::{LineIndex, RenderedObject},
- Document, FeatureParams, Workspace,
-};
+use base_db::{util::RenderedObject, Document, FeatureParams, Workspace};
use completion::{
ArgumentData, CompletionItem, CompletionItemData, CompletionParams, EntryTypeData,
FieldTypeData,
};
+use line_index::LineIndex;
use lsp_types::{ClientCapabilities, ClientInfo, CompletionList};
use serde::{Deserialize, Serialize};
@@ -23,7 +21,7 @@ pub fn complete(
let feature = FeatureParams::new(workspace, document);
let offset = document
.line_index
- .offset_lsp(params.text_document_position.position);
+ .offset_lsp(params.text_document_position.position)?;
let params = CompletionParams { feature, offset };
let result = completion::complete(&params);
@@ -36,7 +34,7 @@ pub fn complete(
.items
.into_iter()
.enumerate()
- .map(|(i, item)| item_builder.convert(item, i))
+ .filter_map(|(i, item)| item_builder.convert(item, i))
.collect();
Some(list)
@@ -70,9 +68,9 @@ impl<'a> ItemBuilder<'a> {
}
}
- pub fn convert(&self, item: CompletionItem, index: usize) -> lsp_types::CompletionItem {
+ pub fn convert(&self, item: CompletionItem, index: usize) -> Option<lsp_types::CompletionItem> {
let mut result = lsp_types::CompletionItem::default();
- let range = self.line_index.line_col_lsp_range(item.range);
+ let range = self.line_index.line_col_lsp_range(item.range)?;
match item.data {
CompletionItemData::Command(data) => {
@@ -134,7 +132,7 @@ impl<'a> ItemBuilder<'a> {
result.sort_text = Some(format!("{:0>2}", index));
result.preselect = Some(item.preselect);
- result
+ Some(result)
}
fn convert_command(
@@ -171,7 +169,7 @@ impl<'a> ItemBuilder<'a> {
if self.supports_snippets {
result.kind = Some(Structure::Snippet.completion_kind());
result.text_edit =
- Some(lsp_types::TextEdit::new(range, "begin{$1}\n\t\n\\end{$1}".into()).into());
+ Some(lsp_types::TextEdit::new(range, "begin{$1}\n\t$0\n\\end{$1}".into()).into());
result.insert_text_format = Some(lsp_types::InsertTextFormat::SNIPPET);
} else {
diff --git a/support/texlab/crates/texlab/src/features/definition.rs b/support/texlab/crates/texlab/src/features/definition.rs
index d450831e1f..ec7f08c296 100644
--- a/support/texlab/crates/texlab/src/features/definition.rs
+++ b/support/texlab/crates/texlab/src/features/definition.rs
@@ -1,4 +1,4 @@
-use base_db::Workspace;
+use base_db::{FeatureParams, Workspace};
use definition::DefinitionParams;
use lsp_types::{GotoDefinitionResponse, LocationLink, Position, Url};
@@ -10,35 +10,40 @@ pub fn goto_definition(
position: Position,
) -> Option<GotoDefinitionResponse> {
let document = workspace.lookup(uri)?;
- let offset = document.line_index.offset_lsp(position);
- let params = DefinitionParams {
- workspace,
- document,
- offset,
- };
+ let offset = document.line_index.offset_lsp(position)?;
+ let feature = FeatureParams::new(workspace, document);
+ let params = DefinitionParams { feature, offset };
let mut links = Vec::new();
for result in definition::goto_definition(params) {
- let origin_selection_range = Some(
- document
- .line_index
- .line_col_lsp_range(result.origin_selection_range),
- );
-
- let target_line_index = &result.target.line_index;
- let target_uri = result.target.uri.clone();
- let target_range = target_line_index.line_col_lsp_range(result.target_range);
-
- let target_selection_range =
- target_line_index.line_col_lsp_range(result.target_selection_range);
-
- links.push(LocationLink {
- origin_selection_range,
- target_uri,
- target_range,
- target_selection_range,
- });
+ if let Some(link) = convert_link(document, result) {
+ links.push(link);
+ }
}
Some(GotoDefinitionResponse::Link(links))
}
+
+fn convert_link(
+ document: &base_db::Document,
+ result: definition::DefinitionResult<'_>,
+) -> Option<LocationLink> {
+ let origin_selection_range = Some(
+ document
+ .line_index
+ .line_col_lsp_range(result.origin_selection_range)?,
+ );
+
+ let target_line_index = &result.target.line_index;
+ let target_uri = result.target.uri.clone();
+ let target_range = target_line_index.line_col_lsp_range(result.target_range)?;
+ let target_selection_range =
+ target_line_index.line_col_lsp_range(result.target_selection_range)?;
+ let value = LocationLink {
+ origin_selection_range,
+ target_uri,
+ target_range,
+ target_selection_range,
+ };
+ Some(value)
+}
diff --git a/support/texlab/crates/texlab/src/features/folding.rs b/support/texlab/crates/texlab/src/features/folding.rs
index 6de4ef0d22..6bdfc3a309 100644
--- a/support/texlab/crates/texlab/src/features/folding.rs
+++ b/support/texlab/crates/texlab/src/features/folding.rs
@@ -18,27 +18,29 @@ pub fn find_all(
.is_some();
let document = workspace.lookup(uri)?;
- let foldings = folding::find_all(document).into_iter().map(|folding| {
- let range = document.line_index.line_col_lsp_range(folding.range);
+ let foldings = folding::find_all(document)
+ .into_iter()
+ .filter_map(|folding| {
+ let range = document.line_index.line_col_lsp_range(folding.range)?;
- let kind = if custom_kinds {
- Some(match folding.kind {
- FoldingRangeKind::Section => "section",
- FoldingRangeKind::Environment => "environment",
- FoldingRangeKind::Entry => "entry",
- })
- } else {
- None
- };
+ let kind = if custom_kinds {
+ Some(match folding.kind {
+ FoldingRangeKind::Section => "section",
+ FoldingRangeKind::Environment => "environment",
+ FoldingRangeKind::Entry => "entry",
+ })
+ } else {
+ None
+ };
- serde_json::json!({
- "startLine": range.start.line,
- "startCharacter": range.start.character,
- "endLine": range.end.line,
- "endCharacter": range.end.character,
- "kind": kind,
- })
- });
+ Some(serde_json::json!({
+ "startLine": range.start.line,
+ "startCharacter": range.start.character,
+ "endLine": range.end.line,
+ "endCharacter": range.end.character,
+ "kind": kind,
+ }))
+ });
Some(foldings.collect())
}
diff --git a/support/texlab/crates/texlab/src/features/formatting.rs b/support/texlab/crates/texlab/src/features/formatting.rs
index f16ee8e243..9073b04aa3 100644
--- a/support/texlab/crates/texlab/src/features/formatting.rs
+++ b/support/texlab/crates/texlab/src/features/formatting.rs
@@ -24,6 +24,10 @@ pub fn format_source_code(
Formatter::Server => format_bibtex_internal(workspace, document, options),
Formatter::LatexIndent => format_with_latexindent(workspace, document),
},
- Language::Aux | Language::Log | Language::Root | Language::Tectonic => None,
+ Language::Aux
+ | Language::Log
+ | Language::Root
+ | Language::Latexmkrc
+ | Language::Tectonic => None,
}
}
diff --git a/support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs b/support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs
index 2b16939f43..0070765b4b 100644
--- a/support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs
+++ b/support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs
@@ -1,7 +1,6 @@
-use base_db::{util::LineIndex, Document, Workspace};
+use base_db::{Document, Workspace};
use lsp_types::{FormattingOptions, TextEdit};
-use rowan::{ast::AstNode, NodeOrToken};
-use syntax::bibtex::{self, HasName, HasType, HasValue};
+use rowan::{TextLen, TextRange};
use crate::util::line_index_ext::LineIndexExt;
@@ -10,189 +9,15 @@ pub fn format_bibtex_internal(
document: &Document,
options: &FormattingOptions,
) -> Option<Vec<TextEdit>> {
- let mut indent = String::new();
-
- if options.insert_spaces {
- for _ in 0..options.tab_size {
- indent.push(' ');
- }
- } else {
- indent.push('\t');
- }
-
- let line_length = workspace.config().formatting.line_length;
-
- let line_index = &document.line_index;
-
let data = document.data.as_bib()?;
- let mut edits = Vec::new();
-
- for node in data.root_node().children().filter(|node| {
- matches!(
- node.kind(),
- bibtex::PREAMBLE | bibtex::STRING | bibtex::ENTRY
- )
- }) {
- let range = node.text_range();
-
- let mut formatter =
- Formatter::new(indent.clone(), options.tab_size, line_length, line_index);
-
- formatter.visit_node(node);
- edits.push(TextEdit {
- range: line_index.line_col_lsp_range(range),
- new_text: formatter.output,
- });
- }
-
- Some(edits)
-}
-
-struct Formatter<'a> {
- indent: String,
- tab_size: u32,
- line_length: usize,
- output: String,
- align: Vec<usize>,
- line_index: &'a LineIndex,
-}
-
-impl<'a> Formatter<'a> {
- fn new(indent: String, tab_size: u32, line_length: usize, line_index: &'a LineIndex) -> Self {
- Self {
- indent,
- tab_size,
- line_length,
- output: String::new(),
- align: Vec::new(),
- line_index,
- }
- }
-
- fn visit_token_lowercase(&mut self, token: &bibtex::SyntaxToken) {
- self.output.push_str(&token.text().to_lowercase());
- }
-
- fn should_insert_space(
- &self,
- previous: &bibtex::SyntaxToken,
- current: &bibtex::SyntaxToken,
- ) -> bool {
- let previous_range = self.line_index.line_col_lsp_range(previous.text_range());
- let current_range = self.line_index.line_col_lsp_range(current.text_range());
- previous_range.start.line != current_range.start.line
- || previous_range.end.character < current_range.start.character
- }
-
- fn base_align(&self) -> usize {
- self.output[self.output.rfind('\n').unwrap_or(0)..]
- .chars()
- .count()
- }
-
- fn visit_node(&mut self, parent: bibtex::SyntaxNode) {
- match parent.kind() {
- bibtex::PREAMBLE => {
- let preamble = bibtex::Preamble::cast(parent).unwrap();
- self.visit_token_lowercase(&preamble.type_token().unwrap());
- self.output.push('{');
- if preamble.syntax().children().next().is_some() {
- self.align.push(self.base_align());
- for node in preamble.syntax().children() {
- self.visit_node(node);
- }
- self.output.push('}');
- }
- }
- bibtex::STRING => {
- let string = bibtex::StringDef::cast(parent).unwrap();
- self.visit_token_lowercase(&string.type_token().unwrap());
- self.output.push('{');
- if let Some(name) = string.name_token() {
- self.output.push_str(name.text());
- self.output.push_str(" = ");
- if let Some(value) = string.value() {
- self.align.push(self.base_align());
- self.visit_node(value.syntax().clone());
- self.output.push('}');
- }
- }
- }
- bibtex::ENTRY => {
- let entry = bibtex::Entry::cast(parent).unwrap();
- self.visit_token_lowercase(&entry.type_token().unwrap());
- self.output.push('{');
- if let Some(key) = entry.name_token() {
- self.output.push_str(&key.to_string());
- self.output.push(',');
- self.output.push('\n');
- for field in entry.fields() {
- self.visit_node(field.syntax().clone());
- }
- self.output.push('}');
- }
- }
- bibtex::FIELD => {
- let field = bibtex::Field::cast(parent).unwrap();
- self.output.push_str(&self.indent);
- let name = field.name_token().unwrap();
- self.output.push_str(name.text());
- self.output.push_str(" = ");
- if let Some(value) = field.value() {
- let count = name.text().chars().count();
- self.align.push(self.tab_size as usize + count + 3);
- self.visit_node(value.syntax().clone());
- self.output.push(',');
- self.output.push('\n');
- }
- }
- kind if bibtex::Value::can_cast(kind) => {
- let tokens: Vec<_> = parent
- .descendants_with_tokens()
- .filter_map(|element| element.into_token())
- .filter(|token| token.kind() != bibtex::WHITESPACE)
- .collect();
-
- self.output.push_str(tokens[0].text());
-
- let align = self.align.pop().unwrap_or_default();
- let mut length = align + tokens[0].text().chars().count();
- for i in 1..tokens.len() {
- let previous = &tokens[i - 1];
- let current = &tokens[i];
- let current_length = current.text().chars().count();
-
- let insert_space = self.should_insert_space(previous, current);
- let space_length = if insert_space { 1 } else { 0 };
-
- if length + current_length + space_length > self.line_length {
- self.output.push('\n');
- self.output.push_str(self.indent.as_ref());
- for _ in 0..=align - self.tab_size as usize {
- self.output.push(' ');
- }
- length = align;
- } else if insert_space {
- self.output.push(' ');
- length += 1;
- }
- self.output.push_str(current.text());
- length += current_length;
- }
- }
- bibtex::ROOT | bibtex::JUNK => {
- for element in parent.children_with_tokens() {
- match element {
- NodeOrToken::Token(token) => {
- self.output.push_str(token.text());
- }
- NodeOrToken::Node(node) => {
- self.visit_node(node);
- }
- }
- }
- }
- _ => unreachable!(),
- }
- }
+ let options = bibfmt::Options {
+ insert_spaces: options.insert_spaces,
+ line_length: workspace.config().formatting.line_length,
+ tab_size: options.tab_size as usize,
+ };
+
+ let output = bibfmt::format(&data.root_node(), &document.line_index, &options);
+ let range = TextRange::new(0.into(), document.text.text_len());
+ let range = document.line_index.line_col_lsp_range(range)?;
+ Some(vec![lsp_types::TextEdit::new(range, output)])
}
diff --git a/support/texlab/crates/texlab/src/features/formatting/latexindent.rs b/support/texlab/crates/texlab/src/features/formatting/latexindent.rs
index bf5385401b..510bd80207 100644
--- a/support/texlab/crates/texlab/src/features/formatting/latexindent.rs
+++ b/support/texlab/crates/texlab/src/features/formatting/latexindent.rs
@@ -52,7 +52,7 @@ pub fn format_with_latexindent(
} else {
let line_index = &document.line_index;
let start = Position::new(0, 0);
- let end = line_index.line_col_lsp(old_text.text_len());
+ let end = line_index.line_col_lsp(old_text.text_len())?;
Some(vec![TextEdit {
range: lsp_types::Range::new(start, end),
new_text,
diff --git a/support/texlab/crates/texlab/src/features/highlight.rs b/support/texlab/crates/texlab/src/features/highlight.rs
index 63fc8ef9e2..10c5d95fb1 100644
--- a/support/texlab/crates/texlab/src/features/highlight.rs
+++ b/support/texlab/crates/texlab/src/features/highlight.rs
@@ -1,17 +1,28 @@
-mod label;
-
-use base_db::Workspace;
-use lsp_types::DocumentHighlight;
+use base_db::{FeatureParams, Workspace};
+use highlights::{HighlightKind, HighlightParams};
use crate::util::line_index_ext::LineIndexExt;
pub fn find_all(
workspace: &Workspace,
params: &lsp_types::DocumentHighlightParams,
-) -> Option<Vec<DocumentHighlight>> {
+) -> Option<Vec<lsp_types::DocumentHighlight>> {
let uri = &params.text_document_position_params.text_document.uri;
let document = workspace.lookup(uri)?;
let position = params.text_document_position_params.position;
- let offset = document.line_index.offset_lsp(position);
- label::find_highlights(document, offset)
+ let offset = document.line_index.offset_lsp(position)?;
+ let feature = FeatureParams::new(workspace, document);
+ let params = HighlightParams { feature, offset };
+ let results = highlights::find_all(params);
+ let results = results.into_iter().filter_map(|result| {
+ let range = document.line_index.line_col_lsp_range(result.range)?;
+ let kind = Some(match result.kind {
+ HighlightKind::Write => lsp_types::DocumentHighlightKind::WRITE,
+ HighlightKind::Read => lsp_types::DocumentHighlightKind::READ,
+ });
+
+ Some(lsp_types::DocumentHighlight { range, kind })
+ });
+
+ Some(results.collect())
}
diff --git a/support/texlab/crates/texlab/src/features/highlight/label.rs b/support/texlab/crates/texlab/src/features/highlight/label.rs
deleted file mode 100644
index dc0a60ab65..0000000000
--- a/support/texlab/crates/texlab/src/features/highlight/label.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-use base_db::{semantics::tex::LabelKind, Document};
-use lsp_types::DocumentHighlight;
-use rowan::TextSize;
-
-use crate::util::line_index_ext::LineIndexExt;
-
-pub fn find_highlights(
- document: &Document,
- offset: TextSize,
-) -> Option<Vec<lsp_types::DocumentHighlight>> {
- let data = document.data.as_tex()?;
- let cursor = data
- .semantics
- .labels
- .iter()
- .find(|label| label.name.range.contains(offset))?;
-
- let mut highlights = Vec::new();
- let line_index = &document.line_index;
- for label in data
- .semantics
- .labels
- .iter()
- .filter(|label| label.name.text == cursor.name.text)
- {
- let range = line_index.line_col_lsp_range(label.name.range);
- let kind = Some(match label.kind {
- LabelKind::Definition => lsp_types::DocumentHighlightKind::WRITE,
- LabelKind::Reference => lsp_types::DocumentHighlightKind::READ,
- LabelKind::ReferenceRange => lsp_types::DocumentHighlightKind::READ,
- });
-
- highlights.push(DocumentHighlight { range, kind });
- }
-
- Some(highlights)
-}
diff --git a/support/texlab/crates/texlab/src/features/hover.rs b/support/texlab/crates/texlab/src/features/hover.rs
index bde71261c3..1aac645488 100644
--- a/support/texlab/crates/texlab/src/features/hover.rs
+++ b/support/texlab/crates/texlab/src/features/hover.rs
@@ -1,17 +1,14 @@
-use base_db::Workspace;
+use base_db::{FeatureParams, Workspace};
use hover::{HoverData, HoverParams};
use crate::util::line_index_ext::LineIndexExt;
-pub fn find(
- workspace: &Workspace,
- uri: &lsp_types::Url,
- position: lsp_types::Position,
-) -> Option<lsp_types::Hover> {
- let document = workspace.lookup(uri)?;
- let offset = document.line_index.offset_lsp(position);
- let params = HoverParams::new(workspace, document, offset);
- let hover = ::hover::find(&params)?;
+pub fn find(workspace: &Workspace, params: lsp_types::HoverParams) -> Option<lsp_types::Hover> {
+ let uri_and_pos = &params.text_document_position_params;
+ let document = workspace.lookup(&uri_and_pos.text_document.uri)?;
+ let feature = FeatureParams::new(workspace, document);
+ let offset = document.line_index.offset_lsp(uri_and_pos.position)?;
+ let hover = ::hover::find(HoverParams { feature, offset })?;
let contents = match hover.data {
HoverData::Citation(text) => lsp_types::MarkupContent {
@@ -42,6 +39,6 @@ pub fn find(
Some(lsp_types::Hover {
contents: lsp_types::HoverContents::Markup(contents),
- range: Some(document.line_index.line_col_lsp_range(hover.range)),
+ range: document.line_index.line_col_lsp_range(hover.range),
})
}
diff --git a/support/texlab/crates/texlab/src/features/inlay_hint.rs b/support/texlab/crates/texlab/src/features/inlay_hint.rs
index cb4056f922..44ed0757a5 100644
--- a/support/texlab/crates/texlab/src/features/inlay_hint.rs
+++ b/support/texlab/crates/texlab/src/features/inlay_hint.rs
@@ -10,13 +10,13 @@ pub fn find_all(
) -> Option<Vec<lsp_types::InlayHint>> {
let document = workspace.lookup(uri)?;
let line_index = &document.line_index;
- let range = line_index.offset_lsp_range(range);
+ let range = line_index.offset_lsp_range(range)?;
let feature = FeatureParams::new(workspace, document);
let params = InlayHintParams { range, feature };
let hints = inlay_hints::find_all(params)?;
let hints = hints.into_iter().filter_map(|hint| {
- let position = line_index.line_col_lsp(hint.offset);
+ let position = line_index.line_col_lsp(hint.offset)?;
Some(match hint.data {
InlayHintData::LabelDefinition(label) => {
let number = label.number?;
diff --git a/support/texlab/crates/texlab/src/features/inlay_hint/label.rs b/support/texlab/crates/texlab/src/features/inlay_hint/label.rs
deleted file mode 100644
index f73d3fd9ae..0000000000
--- a/support/texlab/crates/texlab/src/features/inlay_hint/label.rs
+++ /dev/null
@@ -1,41 +0,0 @@
-use base_db::{
- semantics::tex::LabelKind,
- util::{render_label, RenderedObject},
- DocumentData,
-};
-
-use super::InlayHintBuilder;
-
-pub(super) fn find_hints(builder: &mut InlayHintBuilder) -> Option<()> {
- let DocumentData::Tex(data) = &builder.document.data else { return None };
-
- let range = builder.range;
- for label in data
- .semantics
- .labels
- .iter()
- .filter(|label| label.kind == LabelKind::Definition)
- .filter(|label| label.name.range.intersect(range).is_some())
- {
- let Some(rendered) = render_label(builder.workspace, &builder.project, label) else { continue };
- let Some(number) = &rendered.number else { continue };
-
- let text = match &rendered.object {
- RenderedObject::Section { prefix, .. } => {
- format!("{} {}", prefix, number)
- }
- RenderedObject::Float { kind, .. } => {
- format!("{} {}", kind.as_str(), number)
- }
- RenderedObject::Theorem { kind, .. } => {
- format!("{} {}", kind, number)
- }
- RenderedObject::Equation => format!("Equation ({})", number),
- RenderedObject::EnumItem => format!("Item {}", number),
- };
-
- builder.push(label.full_range.end(), text);
- }
-
- Some(())
-}
diff --git a/support/texlab/crates/texlab/src/features/link.rs b/support/texlab/crates/texlab/src/features/link.rs
index 9fb70d8b65..b821dcf6e1 100644
--- a/support/texlab/crates/texlab/src/features/link.rs
+++ b/support/texlab/crates/texlab/src/features/link.rs
@@ -1,38 +1,20 @@
-mod include;
-
-use base_db::{Document, Workspace};
+use base_db::{FeatureParams, Workspace};
use lsp_types::{DocumentLink, Url};
-use rowan::TextRange;
use crate::util::line_index_ext::LineIndexExt;
pub fn find_all(workspace: &Workspace, uri: &Url) -> Option<Vec<DocumentLink>> {
let document = workspace.lookup(uri)?;
- let mut builder = LinkBuilder {
- workspace,
- document,
- links: Vec::new(),
- };
-
- include::find_links(&mut builder);
- Some(builder.links)
-}
-
-struct LinkBuilder<'a> {
- workspace: &'a Workspace,
- document: &'a Document,
- links: Vec<DocumentLink>,
-}
-impl<'a> LinkBuilder<'a> {
- pub fn push(&mut self, range: TextRange, target: &Document) {
- let range = self.document.line_index.line_col_lsp_range(range);
- let target = Some(target.uri.clone());
- self.links.push(DocumentLink {
- range,
- target,
- tooltip: None,
+ let links = links::find_links(FeatureParams::new(workspace, document)).into_iter();
+ let links = links.filter_map(|link| {
+ Some(lsp_types::DocumentLink {
data: None,
- });
- }
+ tooltip: None,
+ target: Some(link.document.uri.clone()),
+ range: document.line_index.line_col_lsp_range(link.range)?,
+ })
+ });
+
+ Some(links.collect())
}
diff --git a/support/texlab/crates/texlab/src/features/link/include.rs b/support/texlab/crates/texlab/src/features/link/include.rs
deleted file mode 100644
index eef47514af..0000000000
--- a/support/texlab/crates/texlab/src/features/link/include.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-use super::LinkBuilder;
-
-pub(super) fn find_links(builder: &mut LinkBuilder) -> Option<()> {
- let parent = *builder
- .workspace
- .parents(builder.document)
- .iter()
- .next()
- .unwrap_or(&builder.document);
-
- let graph = base_db::graph::Graph::new(builder.workspace, parent);
-
- for edge in &graph.edges {
- if edge.source == builder.document {
- if let Some(weight) = &edge.weight {
- builder.push(weight.link.path.range, edge.target);
- }
- }
- }
-
- Some(())
-}
diff --git a/support/texlab/crates/texlab/src/features/reference.rs b/support/texlab/crates/texlab/src/features/reference.rs
index eb0807c7fc..380471e6cf 100644
--- a/support/texlab/crates/texlab/src/features/reference.rs
+++ b/support/texlab/crates/texlab/src/features/reference.rs
@@ -1,32 +1,33 @@
-use base_db::Workspace;
+use base_db::{FeatureParams, Workspace};
use references::{ReferenceKind, ReferenceParams};
use crate::util::line_index_ext::LineIndexExt;
pub fn find_all(
workspace: &Workspace,
- uri: &lsp_types::Url,
- position: lsp_types::Position,
- context: &lsp_types::ReferenceContext,
+ params: lsp_types::ReferenceParams,
) -> Option<Vec<lsp_types::Location>> {
- let document = workspace.lookup(uri)?;
- let offset = document.line_index.offset_lsp(position);
- let params = ReferenceParams {
- workspace,
- document,
- offset,
- };
+ let uri_and_pos = params.text_document_position;
+ let include_declaration = params.context.include_declaration;
+ let document = workspace.lookup(&uri_and_pos.text_document.uri)?;
+ let offset = document.line_index.offset_lsp(uri_and_pos.position)?;
+
+ let feature = FeatureParams::new(workspace, document);
let mut results = Vec::new();
- for result in references::find_all(params)
+ for result in references::find_all(ReferenceParams { feature, offset })
.into_iter()
- .filter(|result| result.kind == ReferenceKind::Reference || context.include_declaration)
+ .filter(|result| result.kind == ReferenceKind::Reference || include_declaration)
{
- let document = result.document;
+ let document = result.location.document;
let uri = document.uri.clone();
- let range = document.line_index.line_col_lsp_range(result.range);
- let location = lsp_types::Location::new(uri, range);
- results.push(location);
+ if let Some(range) = document
+ .line_index
+ .line_col_lsp_range(result.location.range)
+ {
+ let location = lsp_types::Location::new(uri, range);
+ results.push(location);
+ }
}
Some(results)
diff --git a/support/texlab/crates/texlab/src/features/rename.rs b/support/texlab/crates/texlab/src/features/rename.rs
index 1f48a449c0..297547e7e5 100644
--- a/support/texlab/crates/texlab/src/features/rename.rs
+++ b/support/texlab/crates/texlab/src/features/rename.rs
@@ -11,7 +11,7 @@ pub fn prepare_rename_all(
) -> Option<lsp_types::Range> {
let params = create_params(workspace, params)?;
let range = rename::prepare_rename(&params)?;
- Some(params.inner.document.line_index.line_col_lsp_range(range))
+ params.feature.document.line_index.line_col_lsp_range(range)
}
pub fn rename_all(
@@ -20,15 +20,15 @@ pub fn rename_all(
) -> Option<lsp_types::WorkspaceEdit> {
let new_name = &params.new_name;
let params = create_params(workspace, &params.text_document_position)?;
- let result = rename::rename(&params);
+ let result = rename::rename(params);
let mut changes = HashMap::default();
for (document, ranges) in result.changes {
let mut edits = Vec::new();
- for range in ranges {
- let range = document.line_index.line_col_lsp_range(range);
- edits.push(lsp_types::TextEdit::new(range, new_name.clone()));
- }
+ ranges
+ .into_iter()
+ .filter_map(|range| document.line_index.line_col_lsp_range(range))
+ .for_each(|range| edits.push(lsp_types::TextEdit::new(range, new_name.clone())));
changes.insert(document.uri.clone(), edits);
}
@@ -42,6 +42,9 @@ fn create_params<'db>(
) -> Option<RenameParams<'db>> {
let document = workspace.lookup(&params.text_document.uri)?;
let inner = FeatureParams::new(workspace, document);
- let offset = document.line_index.offset_lsp(params.position);
- Some(RenameParams { inner, offset })
+ let offset = document.line_index.offset_lsp(params.position)?;
+ Some(RenameParams {
+ feature: inner,
+ offset,
+ })
}
diff --git a/support/texlab/crates/texlab/src/features/symbols.rs b/support/texlab/crates/texlab/src/features/symbols.rs
index 170705e05c..65e92a5b17 100644
--- a/support/texlab/crates/texlab/src/features/symbols.rs
+++ b/support/texlab/crates/texlab/src/features/symbols.rs
@@ -14,7 +14,7 @@ pub fn document_symbols(
if capabilities.has_hierarchical_document_symbol_support() {
let results = symbols
.into_iter()
- .map(|symbol| convert_to_nested_symbol(symbol, document))
+ .filter_map(|symbol| convert_to_nested_symbol(symbol, document))
.collect();
DocumentSymbolResponse::Nested(results)
@@ -38,26 +38,29 @@ pub fn workspace_symbols(workspace: &Workspace, query: &str) -> WorkspaceSymbolR
WorkspaceSymbolResponse::Flat(results)
}
-fn convert_to_nested_symbol(symbol: symbols::Symbol, document: &Document) -> DocumentSymbol {
+fn convert_to_nested_symbol(
+ symbol: symbols::Symbol,
+ document: &Document,
+) -> Option<DocumentSymbol> {
let children = symbol
.children
.into_iter()
- .map(|child| convert_to_nested_symbol(child, document))
+ .filter_map(|child| convert_to_nested_symbol(child, document))
.collect();
#[allow(deprecated)]
- DocumentSymbol {
+ Some(DocumentSymbol {
name: symbol.name,
detail: symbol.label.map(|label| label.text),
kind: convert_symbol_kind(symbol.kind),
deprecated: Some(false),
- range: document.line_index.line_col_lsp_range(symbol.full_range),
+ range: document.line_index.line_col_lsp_range(symbol.full_range)?,
selection_range: document
.line_index
- .line_col_lsp_range(symbol.selection_range),
+ .line_col_lsp_range(symbol.selection_range)?,
children: Some(children),
tags: None,
- }
+ })
}
fn convert_to_flat_symbols(
@@ -65,7 +68,9 @@ fn convert_to_flat_symbols(
document: &Document,
results: &mut Vec<lsp_types::SymbolInformation>,
) {
- let range = document.line_index.line_col_lsp_range(symbol.full_range);
+ let Some(range) = document.line_index.line_col_lsp_range(symbol.full_range) else {
+ return;
+ };
#[allow(deprecated)]
results.push(lsp_types::SymbolInformation {
diff --git a/support/texlab/crates/texlab/src/server.rs b/support/texlab/crates/texlab/src/server.rs
index 7757bbb460..f06984d596 100644
--- a/support/texlab/crates/texlab/src/server.rs
+++ b/support/texlab/crates/texlab/src/server.rs
@@ -11,11 +11,12 @@ use std::{
};
use anyhow::Result;
-use base_db::{util::LineCol, Config, Owner, Workspace};
+use base_db::{Config, Owner, Workspace};
use commands::{BuildCommand, CleanCommand, CleanTarget, ForwardSearch};
use crossbeam_channel::{Receiver, Sender};
use diagnostics::{DiagnosticManager, DiagnosticSource};
use distro::{Distro, Language};
+use line_index::LineCol;
use lsp_server::{Connection, ErrorCode, Message, RequestId};
use lsp_types::{notification::*, request::*, *};
use notify::event::ModifyKind;
@@ -413,7 +414,7 @@ impl Server {
};
match change.range {
Some(range) => {
- let range = document.line_index.offset_lsp_range(range);
+ let range = document.line_index.offset_lsp_range(range).unwrap();
workspace.edit(&uri, range, &change.text);
}
None => {
@@ -605,25 +606,20 @@ impl Server {
Ok(())
}
- fn references(&self, id: RequestId, params: ReferenceParams) -> Result<()> {
- let mut uri = params.text_document_position.text_document.uri;
- normalize_uri(&mut uri);
- let position = params.text_document_position.position;
+ fn references(&self, id: RequestId, mut params: ReferenceParams) -> Result<()> {
+ normalize_uri(&mut params.text_document_position.text_document.uri);
self.run_query(id, move |db| {
- reference::find_all(db, &uri, position, &params.context).unwrap_or_default()
+ reference::find_all(db, params).unwrap_or_default()
});
Ok(())
}
- fn hover(&mut self, id: RequestId, params: HoverParams) -> Result<()> {
- let mut uri = params.text_document_position_params.text_document.uri;
- normalize_uri(&mut uri);
-
- let position = params.text_document_position_params.position;
- self.update_cursor(&uri, position);
-
- self.run_query(id, move |db| hover::find(db, &uri, position));
+ fn hover(&mut self, id: RequestId, mut params: HoverParams) -> Result<()> {
+ normalize_uri(&mut params.text_document_position_params.text_document.uri);
+ let uri_and_pos = &params.text_document_position_params;
+ self.update_cursor(&uri_and_pos.text_document.uri, uri_and_pos.position);
+ self.run_query(id, move |db| hover::find(db, params));
Ok(())
}
@@ -941,15 +937,17 @@ impl Server {
};
let line_index = &document.line_index;
- let position = line_index.offset_lsp(params.text_document_position.position);
+ let Some(position) = line_index.offset_lsp(params.text_document_position.position) else {
+ anyhow::bail!("Invalid position for document {uri}!")
+ };
let Some(result) = commands::change_environment(document, position, &params.new_name)
else {
anyhow::bail!("No environment found at the current position");
};
- let range1 = line_index.line_col_lsp_range(result.begin);
- let range2 = line_index.line_col_lsp_range(result.end);
+ let range1 = line_index.line_col_lsp_range(result.begin).unwrap();
+ let range2 = line_index.line_col_lsp_range(result.end).unwrap();
let mut changes = HashMap::new();
changes.insert(
@@ -985,15 +983,18 @@ impl Server {
};
let line_index = &document.line_index;
- let offset = line_index.offset_lsp(params.position);
+ let Some(offset) = line_index.offset_lsp(params.position) else {
+ anyhow::bail!("Invalid position for document {uri}!")
+ };
+
let results = commands::find_environments(document, offset)
.into_iter()
.map(|result| EnvironmentLocation {
name: TextWithRange {
- range: line_index.line_col_lsp_range(result.name.range),
+ range: line_index.line_col_lsp_range(result.name.range).unwrap(),
text: result.name.text,
},
- full_range: line_index.line_col_lsp_range(result.full_range),
+ full_range: line_index.line_col_lsp_range(result.full_range).unwrap(),
})
.collect();
diff --git a/support/texlab/crates/texlab/src/util/diagnostics.rs b/support/texlab/crates/texlab/src/util/diagnostics.rs
index 89d33060a1..0ef24d065b 100644
--- a/support/texlab/crates/texlab/src/util/diagnostics.rs
+++ b/support/texlab/crates/texlab/src/util/diagnostics.rs
@@ -21,7 +21,7 @@ pub fn collect<'db>(
.map(|(document, diags)| {
let diags = diags
.into_iter()
- .map(|diag| create_diagnostic(workspace, document, diag))
+ .filter_map(|diag| create_diagnostic(workspace, document, diag))
.collect::<Vec<_>>();
(document, diags)
@@ -33,8 +33,8 @@ fn create_diagnostic(
workspace: &Workspace,
document: &Document,
diagnostic: &Diagnostic,
-) -> lsp_types::Diagnostic {
- let range = document.line_index.line_col_lsp_range(diagnostic.range);
+) -> Option<lsp_types::Diagnostic> {
+ let range = document.line_index.line_col_lsp_range(diagnostic.range)?;
let severity = match &diagnostic.data {
DiagnosticData::Tex(error) => match error {
@@ -154,14 +154,14 @@ fn create_diagnostic(
DiagnosticData::Build(_) => None,
};
- lsp_types::Diagnostic {
+ Some(lsp_types::Diagnostic {
severity: Some(severity),
code: code.map(lsp_types::NumberOrString::Number),
source: Some(String::from(source)),
tags,
related_information,
..lsp_types::Diagnostic::new_simple(range, message)
- }
+ })
}
fn make_conflict_info(
@@ -172,10 +172,9 @@ fn make_conflict_info(
let mut items = Vec::new();
for (uri, range) in locations {
let range = workspace
- .lookup(uri)
- .unwrap()
+ .lookup(uri)?
.line_index
- .line_col_lsp_range(*range);
+ .line_col_lsp_range(*range)?;
let message = format!("conflicting {object} defined here");
let location = lsp_types::Location::new(uri.clone(), range);
diff --git a/support/texlab/crates/texlab/src/util/line_index_ext.rs b/support/texlab/crates/texlab/src/util/line_index_ext.rs
index a7b0fa8953..8e6bb6da03 100644
--- a/support/texlab/crates/texlab/src/util/line_index_ext.rs
+++ b/support/texlab/crates/texlab/src/util/line_index_ext.rs
@@ -1,51 +1,53 @@
-use base_db::util::{LineCol, LineColUtf16, LineIndex};
+use line_index::{LineCol, LineColUtf16, LineIndex};
use lsp_types::{Position, Range};
use rowan::{TextRange, TextSize};
pub trait LineIndexExt {
- fn offset_lsp(&self, line_col: Position) -> TextSize;
+ fn offset_lsp(&self, line_col: Position) -> Option<TextSize>;
- fn offset_lsp_range(&self, line_col: Range) -> TextRange;
+ fn offset_lsp_range(&self, line_col: Range) -> Option<TextRange>;
- fn line_col_lsp(&self, offset: TextSize) -> Position;
+ fn line_col_lsp(&self, offset: TextSize) -> Option<Position>;
- fn line_col_lsp_range(&self, offset: TextRange) -> Range;
+ fn line_col_lsp_range(&self, offset: TextRange) -> Option<Range>;
}
impl LineIndexExt for LineIndex {
- fn offset_lsp(&self, line_col: Position) -> TextSize {
+ fn offset_lsp(&self, line_col: Position) -> Option<TextSize> {
let line_col = LineColUtf16 {
line: line_col.line,
col: line_col.character,
};
- self.offset(self.to_utf8(line_col))
+
+ let line_col = self.to_utf8(line_col)?;
+ self.offset(line_col)
}
- fn offset_lsp_range(&self, line_col: Range) -> TextRange {
- let start = self.offset_lsp(line_col.start);
- let end = self.offset_lsp(line_col.end);
- TextRange::new(start, end)
+ fn offset_lsp_range(&self, line_col: Range) -> Option<TextRange> {
+ let start = self.offset_lsp(line_col.start)?;
+ let end = self.offset_lsp(line_col.end)?;
+ Some(TextRange::new(start, end))
}
- fn line_col_lsp(&self, offset: TextSize) -> Position {
- let position = self.line_col(offset);
- let LineColUtf16 { line, col } = self.to_utf16(position);
- Position::new(line, col)
+ fn line_col_lsp(&self, offset: TextSize) -> Option<Position> {
+ let line_col = self.line_col(offset);
+ let line_col = self.to_utf16(line_col)?;
+ Some(Position::new(line_col.line, line_col.col))
}
- fn line_col_lsp_range(&self, offset: TextRange) -> Range {
- let start = self.line_col_lsp(offset.start());
- let mut end = self.line_col_lsp(offset.end());
+ fn line_col_lsp_range(&self, offset: TextRange) -> Option<Range> {
+ let start = self.line_col_lsp(offset.start())?;
+ let mut end = self.line_col_lsp(offset.end())?;
if end.line != start.line && end.character == 0 {
// Prefer keeping multi-line ranges on the same line
let line_end = self.offset(LineCol {
line: end.line,
col: 0,
- });
+ })?;
- end = self.line_col_lsp(line_end - TextSize::from(1));
+ end = self.line_col_lsp(line_end - TextSize::from(1))?;
}
- Range::new(start, end)
+ Some(Range::new(start, end))
}
}
diff --git a/support/texlab/crates/texlab/tests/lsp/fixture.rs b/support/texlab/crates/texlab/tests/lsp/fixture.rs
deleted file mode 100644
index a10105eb7f..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/fixture.rs
+++ /dev/null
@@ -1,271 +0,0 @@
-use std::{
- path::{Path, PathBuf},
- sync::Once,
- thread::JoinHandle,
-};
-
-use anyhow::Result;
-use distro::Language;
-use lsp_server::Connection;
-use lsp_types::{
- notification::{DidOpenTextDocument, Exit, Initialized},
- request::{Initialize, Shutdown},
- ClientCapabilities, DidOpenTextDocumentParams, InitializeParams, InitializedParams, Location,
- Position, Range, TextDocumentIdentifier, TextDocumentItem, TextDocumentPositionParams, Url,
-};
-use tempfile::{tempdir, TempDir};
-use texlab::{LspClient, Server};
-
-#[derive(Debug)]
-pub struct Fixture {
- pub documents: Vec<Document>,
-}
-
-impl Fixture {
- pub fn parse(input: &str) -> Fixture {
- let mut documents = Vec::new();
-
- let mut start = 0;
- if !input.is_empty() {
- for end in input
- .match_indices("%!")
- .skip(1)
- .map(|(i, _)| i)
- .chain(std::iter::once(input.len()))
- {
- documents.push(Document::parse(&input[start..end]));
- start = end;
- }
- }
-
- Self { documents }
- }
-
- pub fn setup(&self, client: &LspClient, dir: &Path) -> Result<()> {
- for document in &self.documents {
- let text = String::from(&document.text);
- let path = dir.join(&document.path);
- std::fs::create_dir_all(path.parent().unwrap())?;
- std::fs::write(&path, &text)?;
-
- let uri = Url::from_file_path(&path).unwrap();
- let language = Language::from_path(&path).unwrap_or(Language::Tex);
- let language_id = String::from(match language {
- Language::Tex => "latex",
- Language::Bib => "bibtex",
- Language::Aux | Language::Log | Language::Root | Language::Tectonic => continue,
- });
-
- client.send_notification::<DidOpenTextDocument>(DidOpenTextDocumentParams {
- text_document: TextDocumentItem::new(uri, language_id, 0, text),
- })?;
- }
-
- Ok(())
- }
-}
-
-#[derive(Debug)]
-pub struct Document {
- pub path: PathBuf,
- pub text: String,
- pub cursor: Option<Position>,
- pub ranges: Vec<Range>,
-}
-
-impl Document {
- pub fn parse(input: &str) -> Self {
- let mut lines = Vec::new();
-
- let (path, input) = input
- .trim()
- .strip_prefix("%! ")
- .map(|input| input.split_once('\n').unwrap_or((input, "")))
- .unwrap();
-
- let mut ranges = Vec::new();
- let mut cursor = None;
-
- for line in input.lines().map(|line| line.trim_end()) {
- if line.chars().all(|c| matches!(c, ' ' | '^' | '|' | '!')) && !line.is_empty() {
- let index = (lines.len() - 1) as u32;
-
- cursor = cursor.or_else(|| {
- let character = line.find('|')?;
- Some(Position::new(index, character as u32))
- });
-
- if let Some(start) = line.find('!') {
- let position = Position::new(index, start as u32);
- ranges.push(Range::new(position, position));
- }
-
- if let Some(start) = line.find('^') {
- let end = line.rfind('^').unwrap() + 1;
- ranges.push(Range::new(
- Position::new(index, start as u32),
- Position::new(index, end as u32),
- ));
- }
- } else {
- lines.push(line);
- }
- }
-
- Self {
- path: PathBuf::from(path),
- text: lines.join("\n"),
- cursor,
- ranges,
- }
- }
-}
-
-static LOGGER: Once = Once::new();
-
-#[derive(Debug)]
-pub struct TestBed {
- fixture: Fixture,
- locations: Vec<Location>,
- _temp_dir: TempDir,
- temp_dir_path: PathBuf,
- client: LspClient,
- client_thread: Option<JoinHandle<()>>,
- server_thread: Option<JoinHandle<()>>,
-}
-
-impl Drop for TestBed {
- fn drop(&mut self) {
- let _ = self.client.send_request::<Shutdown>(());
- let _ = self.client.send_notification::<Exit>(());
- self.client_thread.take().unwrap().join().unwrap();
- self.server_thread.take().unwrap().join().unwrap();
- }
-}
-
-impl TestBed {
- pub fn new(fixture: &str) -> Result<Self> {
- LOGGER.call_once(|| {
- if option_env!("TEST_LOG") == Some("1") {
- fern::Dispatch::new()
- .filter(|metadata| {
- metadata.target().contains("texlab")
- || metadata.target().contains("lsp_server")
- })
- .level(log::LevelFilter::Trace)
- .chain(std::io::stderr())
- .apply()
- .unwrap()
- }
- });
-
- let fixture = Fixture::parse(fixture);
- let (server_conn, client_conn) = Connection::memory();
-
- let client = LspClient::new(client_conn.sender);
-
- let server_thread = std::thread::spawn(move || Server::new(server_conn).run().unwrap());
- let client_thread = {
- let client = client.clone();
- std::thread::spawn(move || {
- for message in &client_conn.receiver {
- match message {
- lsp_server::Message::Request(request) => {
- client
- .send_error(
- request.id,
- lsp_server::ErrorCode::MethodNotFound.into(),
- "Method not found".into(),
- )
- .unwrap();
- }
- lsp_server::Message::Response(response) => {
- client.recv_response(response).unwrap();
- }
- lsp_server::Message::Notification(_) => {}
- }
- }
- })
- };
-
- let temp_dir = tempdir()?;
- let temp_dir_path = temp_dir.path().canonicalize()?;
-
- let locations = fixture
- .documents
- .iter()
- .flat_map(|document| {
- let uri = Url::from_file_path(temp_dir_path.join(&document.path)).unwrap();
- document
- .ranges
- .iter()
- .map(move |range| Location::new(uri.clone(), *range))
- })
- .collect();
-
- Ok(TestBed {
- fixture,
- locations,
- _temp_dir: temp_dir,
- temp_dir_path,
- client,
- client_thread: Some(client_thread),
- server_thread: Some(server_thread),
- })
- }
-
- pub fn initialize(&self, capabilities: ClientCapabilities) -> Result<()> {
- self.client.send_request::<Initialize>(InitializeParams {
- capabilities,
- initialization_options: Some(serde_json::json!({ "skipDistro": true })),
- ..Default::default()
- })?;
-
- self.client
- .send_notification::<Initialized>(InitializedParams {})?;
-
- self.fixture.setup(&self.client, self.directory())?;
- Ok(())
- }
-
- pub fn client(&self) -> &LspClient {
- &self.client
- }
-
- pub fn cursor(&self) -> Option<TextDocumentPositionParams> {
- let (document, cursor) = self
- .fixture
- .documents
- .iter()
- .find_map(|document| document.cursor.map(|cursor| (document, cursor)))?;
-
- let uri = Url::from_file_path(self.temp_dir_path.join(&document.path)).unwrap();
- let id = TextDocumentIdentifier::new(uri);
- Some(TextDocumentPositionParams::new(id, cursor))
- }
-
- pub fn locations(&self) -> &[Location] {
- &self.locations
- }
-
- pub fn directory(&self) -> &Path {
- &self.temp_dir_path
- }
-
- pub fn documents(&self) -> &[Document] {
- &self.fixture.documents
- }
-
- pub fn redact(&self, uri: &Url) -> Url {
- if uri.scheme() != "file" {
- return uri.clone();
- }
-
- let path = uri.to_file_path().unwrap().canonicalize().unwrap();
- let path = path.strip_prefix(self.directory()).unwrap();
- let path = path.to_str().unwrap();
-
- let text = format!("redacted://{}", path.replace('\\', "/"));
- Url::parse(&text).unwrap()
- }
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/main.rs b/support/texlab/crates/texlab/tests/lsp/main.rs
deleted file mode 100644
index aeb4f8993c..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/main.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-mod fixture;
-mod text_document;
-mod workspace;
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document.rs b/support/texlab/crates/texlab/tests/lsp/text_document.rs
deleted file mode 100644
index 8276c43815..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-mod document_highlight;
-mod document_link;
-mod document_symbol;
-mod formatting;
-mod inlay_hint;
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/document_highlight.rs b/support/texlab/crates/texlab/tests/lsp/text_document/document_highlight.rs
deleted file mode 100644
index 5cfb8fbee8..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/document_highlight.rs
+++ /dev/null
@@ -1,51 +0,0 @@
-use assert_unordered::assert_eq_unordered;
-use lsp_types::{
- request::DocumentHighlightRequest, ClientCapabilities, DocumentHighlight,
- DocumentHighlightKind, DocumentHighlightParams,
-};
-
-use crate::fixture::TestBed;
-
-fn check(fixture: &str, highlight_kinds: &[DocumentHighlightKind]) {
- let test_bed = TestBed::new(fixture).unwrap();
- test_bed.initialize(ClientCapabilities::default()).unwrap();
-
- let expected: Vec<_> = test_bed
- .locations()
- .iter()
- .zip(highlight_kinds)
- .map(|(location, kind)| DocumentHighlight {
- range: location.range,
- kind: Some(*kind),
- })
- .collect();
-
- let text_document_position_params = test_bed.cursor().unwrap();
- let actual = test_bed
- .client()
- .send_request::<DocumentHighlightRequest>(DocumentHighlightParams {
- text_document_position_params,
- partial_result_params: Default::default(),
- work_done_progress_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default();
-
- assert_eq_unordered!(actual, expected);
-}
-
-#[test]
-fn test_label() {
- check(
- r#"
-%! main.tex
-\label{foo}
- |
- ^^^
-\ref{foo}
- ^^^
-\label{bar}
-"#,
- &[DocumentHighlightKind::WRITE, DocumentHighlightKind::READ],
- )
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/document_link.rs b/support/texlab/crates/texlab/tests/lsp/text_document/document_link.rs
deleted file mode 100644
index 6aab6105de..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/document_link.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-use insta::assert_json_snapshot;
-use lsp_types::{
- request::DocumentLinkRequest, ClientCapabilities, DocumentLink, DocumentLinkParams,
-};
-
-use crate::fixture::TestBed;
-
-fn find_links(fixture: &str) -> Vec<DocumentLink> {
- let test_bed = TestBed::new(fixture).unwrap();
- test_bed.initialize(ClientCapabilities::default()).unwrap();
-
- let text_document_position = test_bed.cursor().unwrap();
- let mut links = test_bed
- .client()
- .send_request::<DocumentLinkRequest>(DocumentLinkParams {
- text_document: text_document_position.text_document,
- work_done_progress_params: Default::default(),
- partial_result_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default();
-
- for link in &mut links {
- link.target = Some(test_bed.redact(link.target.as_ref().unwrap()));
- }
-
- links
-}
-
-#[test]
-fn document_include() {
- assert_json_snapshot!(find_links(
- r#"
-%! foo.tex
-\input{bar.tex}
-|
-
-%! bar.tex"#,
- ))
-}
-
-#[test]
-fn document_import() {
- assert_json_snapshot!(find_links(
- r#"
-%! foo.tex
-\import{.}{bar/baz}
-|
-
-%! bar/baz.tex"#,
- ))
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs b/support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs
deleted file mode 100644
index e22c9374ad..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs
+++ /dev/null
@@ -1,45 +0,0 @@
-use insta::assert_debug_snapshot;
-use lsp_types::{notification::DidOpenTextDocument, request::DocumentSymbolRequest, *};
-
-use crate::fixture::TestBed;
-
-#[test]
-fn test_smoke() {
- let test_bed = TestBed::new("").unwrap();
- test_bed
- .initialize(ClientCapabilities {
- text_document: Some(TextDocumentClientCapabilities {
- document_symbol: Some(DocumentSymbolClientCapabilities {
- hierarchical_document_symbol_support: Some(true),
- ..Default::default()
- }),
- ..Default::default()
- }),
- ..Default::default()
- })
- .unwrap();
-
- let uri = Url::parse("file:///texlab/main.tex").unwrap();
- test_bed
- .client()
- .send_notification::<DidOpenTextDocument>(DidOpenTextDocumentParams {
- text_document: TextDocumentItem::new(
- uri.clone(),
- "latex".into(),
- 0,
- r#"\section{Foo} \subsection{Bar} \section{Baz}"#.into(),
- ),
- })
- .unwrap();
-
- let Some(DocumentSymbolResponse::Nested(symbols)) = test_bed
- .client()
- .send_request::<DocumentSymbolRequest>(DocumentSymbolParams {
- text_document: TextDocumentIdentifier { uri },
- partial_result_params: Default::default(),
- work_done_progress_params: Default::default(),
- })
- .unwrap() else { unreachable!() };
-
- assert_debug_snapshot!(symbols);
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/formatting.rs b/support/texlab/crates/texlab/tests/lsp/text_document/formatting.rs
deleted file mode 100644
index 05f8f768de..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/formatting.rs
+++ /dev/null
@@ -1,135 +0,0 @@
-use base_db::util::LineIndex;
-use insta::assert_snapshot;
-use lsp_types::{
- request::Formatting, ClientCapabilities, DocumentFormattingParams, FormattingOptions,
-};
-use texlab::util::line_index_ext::LineIndexExt;
-
-use crate::fixture::TestBed;
-
-fn format(fixture: &str) -> String {
- let test_bed = TestBed::new(fixture).unwrap();
- test_bed.initialize(ClientCapabilities::default()).unwrap();
-
- let text_document = test_bed.cursor().unwrap().text_document;
- let edits = test_bed
- .client()
- .send_request::<Formatting>(DocumentFormattingParams {
- text_document,
- work_done_progress_params: Default::default(),
- options: FormattingOptions {
- insert_spaces: true,
- tab_size: 4,
- ..Default::default()
- },
- })
- .unwrap()
- .unwrap_or_default();
-
- let old_text = &test_bed.documents()[0].text;
- let line_index = LineIndex::new(old_text);
- let mut new_text = String::from(old_text);
- for edit in edits.into_iter().rev() {
- let range = line_index.offset_lsp_range(edit.range);
- new_text.replace_range::<std::ops::Range<usize>>(range.into(), &edit.new_text);
- }
-
- new_text
-}
-
-#[test]
-fn bibtex_internal_wrap_long_lines() {
- assert_snapshot!(format(
- r#"
-%! main.bib
-@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.
-Lorem ipsum dolor sit amet,
-consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}
-|"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_multiple_entries() {
- assert_snapshot!(format(
- r#"
-%! main.bib
-@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet,
-consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}
-
-@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet,
-consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}"
-|"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_trailing_comma() {
- assert_snapshot!(format(
- r#"
-%! main.bib
-@article{foo, bar = baz}
-|"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_insert_braces() {
- assert_snapshot!(format(
- r#"
-%! main.bib
-@article{foo, bar = baz,
-|"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_command() {
- assert_snapshot!(format(
- r#"
-%! main.bib
-@article{foo, bar = "\baz",}
-|"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_join_strings() {
- assert_snapshot!(format(
- r#"
-%! main.bib
-@article{foo, bar = "baz" # "qux"}
-|"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_parens() {
- assert_snapshot!(format(
- r#"
-%! main.bib
-@article(foo,)
-|"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_string() {
- assert_snapshot!(format(
- r#"
-%! main.bib
-@string{foo="bar"}
-|"#,
- ));
-}
-
-#[test]
-fn bibtex_internal_preamble() {
- assert_snapshot!(format(
- r#"
-%! main.bib
-@preamble{
- "foo bar baz" }
-|"#,
- ));
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/inlay_hint.rs b/support/texlab/crates/texlab/tests/lsp/text_document/inlay_hint.rs
deleted file mode 100644
index d8ae8e304a..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/inlay_hint.rs
+++ /dev/null
@@ -1,57 +0,0 @@
-use insta::assert_json_snapshot;
-use lsp_types::{
- request::InlayHintRequest, ClientCapabilities, InlayHint, InlayHintParams, Position, Range,
-};
-
-use crate::fixture::TestBed;
-
-fn find_hints(fixture: &str) -> Vec<InlayHint> {
- let test_bed = TestBed::new(fixture).unwrap();
- test_bed.initialize(ClientCapabilities::default()).unwrap();
-
- let cursor = test_bed.cursor().unwrap();
-
- test_bed
- .client()
- .send_request::<InlayHintRequest>(InlayHintParams {
- text_document: cursor.text_document,
- range: Range::new(Position::new(0, 0), cursor.position),
- work_done_progress_params: Default::default(),
- })
- .unwrap()
- .unwrap_or_default()
-}
-
-#[test]
-fn label_definition() {
- assert_json_snapshot!(find_hints(
- r#"
-%! main.tex
-\documentclass{article}
-\usepackage{caption}
-\begin{document}
-\section{Foo}\label{sec:foo}
-\section{Bar}\label{sec:bar}
-\subsection{Baz}\label{sec:baz}
-\begin{figure}
- Test
- \label{fig:qux}
- \caption{Qux}
-\end{figure}
-\end{document}
- |
-
-%! main.aux
-\relax
-\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
-\newlabel{fig:qux}{{\caption@xref {fig:qux}{ on input line 15}}{1}}
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Qux\relax }}{1}{}\protected@file@percent }
-\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}{}\protected@file@percent }
-\newlabel{sec:foo}{{1}{1}}
-\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}{}\protected@file@percent }
-\newlabel{sec:bar}{{2}{1}}
-\@writefile{toc}{\contentsline {subsection}{\numberline {2.1}Baz}{1}{}\protected@file@percent }
-\newlabel{sec:baz}{{2.1}{1}}
-\gdef \@abspage@last{1}"#,
- ));
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap
deleted file mode 100644
index 19c84e95fc..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\acrodef{fpsLabel}[FPS]{Frames per Second}\n\\ac{f\n |\n ^\"#)"
----
-[
- {
- "label": "fpsLabel",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap
deleted file mode 100644
index 23e5b695ef..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\acrshort{}\n |\"#)"
----
-[
- {
- "label": "fpsLabel",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap
deleted file mode 100644
index 25171b679c..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\acrshort{f\n |\n ^\"#)"
----
-[
- {
- "label": "fpsLabel",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap
deleted file mode 100644
index 1d3f3329c1..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\acrshort{f}\n |\n ^\"#)"
----
-[
- {
- "label": "fpsLabel",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap
deleted file mode 100644
index ecc48b5a7f..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\usepackage{amsfonts}\n\\mathbb{}\n |\"#)"
----
-[
- {
- "label": "A",
- "preselect": false
- },
- {
- "label": "B",
- "preselect": false
- },
- {
- "label": "C",
- "preselect": false
- },
- {
- "label": "D",
- "preselect": false
- },
- {
- "label": "E",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap
deleted file mode 100644
index 530527a384..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\usepackage{amsfonts}\n\\mathbb{\n |\nTest\"#)"
----
-[
- {
- "label": "A",
- "preselect": false
- },
- {
- "label": "B",
- "preselect": false
- },
- {
- "label": "C",
- "preselect": false
- },
- {
- "label": "D",
- "preselect": false
- },
- {
- "label": "E",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap
deleted file mode 100644
index c98249c781..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\usepackage{amsfonts}\n\\mathbb{A}\n |\n ^\"#)"
----
-[
- {
- "label": "A",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap
deleted file mode 100644
index bb9e30ae55..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\beg\n |\n ^^^\"#)"
----
-[
- {
- "label": "AtBeginDocument",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "AtBeginDvi",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "begin",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "begingroup",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "bigwedge",
- "detail": "⋀, built-in",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap
deleted file mode 100644
index db26e6125d..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\documentclass{article}\n\\bibliography{main}\n\\begin{document}\n\\cite{\n |\n\\end{document}\n\n%! main.bib\n@article{foo:2019,\n author = {Foo Bar},\n title = {Baz Qux},\n year = {2019},\n}\n\n@article{bar:2005,}\"#)"
----
-[
- {
- "label": "bar:2005",
- "preselect": false,
- "filterText": "bar:2005 @article"
- },
- {
- "label": "foo:2019",
- "preselect": false,
- "filterText": "foo:2019 @article Foo Bar Baz Qux 2019"
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap
deleted file mode 100644
index 242d5d2a0b..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\addbibresource{main.bib}\n\\DeclareAcronym{foo}{cite={}}\n |\n\n%! main.bib\n@article{foo,}\"#)"
----
-[
- {
- "label": "foo",
- "preselect": false,
- "filterText": "foo @article"
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap
deleted file mode 100644
index b205903a04..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\addbibresource{main.bib}\n\\cite{\n |\n\n%! main.bib\n@article{foo,}\"#)"
----
-[
- {
- "label": "foo",
- "preselect": false,
- "filterText": "foo @article"
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap
deleted file mode 100644
index 519fa60fa6..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\addbibresource{main.bib}\n\\cite{foo,a\n |\n ^\n\n%! main.bib\n@article{foo,}\"#)"
----
-[
- {
- "label": "foo",
- "preselect": false,
- "filterText": "foo @article"
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap
deleted file mode 100644
index 421335a4a5..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\definecolor{foo}{\n |\"#)"
----
-[
- {
- "label": "HTML",
- "preselect": false
- },
- {
- "label": "RGB",
- "preselect": false
- },
- {
- "label": "cmyk",
- "preselect": false
- },
- {
- "label": "gray",
- "preselect": false
- },
- {
- "label": "rgb",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap
deleted file mode 100644
index 5d7338e48e..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\definecolorset{\n |\"#)"
----
-[
- {
- "label": "HTML",
- "preselect": false
- },
- {
- "label": "RGB",
- "preselect": false
- },
- {
- "label": "cmyk",
- "preselect": false
- },
- {
- "label": "gray",
- "preselect": false
- },
- {
- "label": "rgb",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap
deleted file mode 100644
index 811b47c9ee..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\definecolorset{}\n |\"#)"
----
-[
- {
- "label": "HTML",
- "preselect": false
- },
- {
- "label": "RGB",
- "preselect": false
- },
- {
- "label": "cmyk",
- "preselect": false
- },
- {
- "label": "gray",
- "preselect": false
- },
- {
- "label": "rgb",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap
deleted file mode 100644
index dbb34f08d9..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\definecolor{foo}{}\n |\"#)"
----
-[
- {
- "label": "HTML",
- "preselect": false
- },
- {
- "label": "RGB",
- "preselect": false
- },
- {
- "label": "cmyk",
- "preselect": false
- },
- {
- "label": "gray",
- "preselect": false
- },
- {
- "label": "rgb",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap
deleted file mode 100644
index e30fc4c1b0..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\color{\n |\"#)"
----
-[
- {
- "label": "Apricot",
- "preselect": false
- },
- {
- "label": "Aquamarine",
- "preselect": false
- },
- {
- "label": "Bittersweet",
- "preselect": false
- },
- {
- "label": "Black",
- "preselect": false
- },
- {
- "label": "Blue",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap
deleted file mode 100644
index 5aab0d8e3b..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\color{}\n |\"#)"
----
-[
- {
- "label": "Apricot",
- "preselect": false
- },
- {
- "label": "Aquamarine",
- "preselect": false
- },
- {
- "label": "Bittersweet",
- "preselect": false
- },
- {
- "label": "Black",
- "preselect": false
- },
- {
- "label": "Blue",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap
deleted file mode 100644
index fe803dc6cc..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\color{re}\n |\n ^^\"#)"
----
-[
- {
- "label": "BrickRed",
- "preselect": false
- },
- {
- "label": "Red",
- "preselect": false
- },
- {
- "label": "RedOrange",
- "preselect": false
- },
- {
- "label": "RedViolet",
- "preselect": false
- },
- {
- "label": "red",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap
deleted file mode 100644
index 616fb22a6b..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@article{b,\n c = {\\LaT }\n |\n ^^^\n}\"#)"
----
-[
- {
- "label": "LaTeX",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "LaTeXe",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "LastDeclaredEncoding",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "last",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "latexreleaseversion",
- "detail": "built-in",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap
deleted file mode 100644
index 0e40056a6e..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\\n |\"#)"
----
-[
- {
- "label": "!",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "\"",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "#",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "$",
- "detail": "$, built-in",
- "preselect": false
- },
- {
- "label": "%",
- "detail": "built-in",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap
deleted file mode 100644
index 360229fa7a..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\usepackage{lipsum}\n\\lips\n |\n ^^^^\"#)"
----
-[
- {
- "label": "LipsumPar",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "LipsumProtect",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "LipsumRestoreAll",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "lipsum",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "lipsumexp",
- "detail": "lipsum.sty",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap
deleted file mode 100644
index a2e5e17ac4..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\documentclass{article}\n\\begin{thein}\n |\n ^^^^^\"#)"
----
-[
- {
- "label": "theindex",
- "detail": "article.cls",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap
deleted file mode 100644
index 28d9c6e82c..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\newcommand{\\foo}{\\begin{doc}\n |\n ^^^\"#)"
----
-[
- {
- "label": "document",
- "detail": "built-in",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap
deleted file mode 100644
index f892dba5a7..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\begin{doc\n |\n ^^^\"#)"
----
-[
- {
- "label": "document",
- "detail": "built-in",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap
deleted file mode 100644
index 95a2e1db04..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\begin{document}\n\\end{\n |\"#)"
----
-[
- {
- "label": "abstract",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "array",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "center",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "csname",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "document",
- "detail": "built-in",
- "preselect": true
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap
deleted file mode 100644
index 0fd8b00254..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@preamble{\n |\n ^^^^^^^^\"#)"
----
-[
- {
- "label": "preamble",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap
deleted file mode 100644
index 6844fc1862..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@string{\n |\n ^^^^^^\"#)"
----
-[
- {
- "label": "string",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap
deleted file mode 100644
index e74f5fed37..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@\n |\"#)"
----
-[
- {
- "label": "article",
- "preselect": false
- },
- {
- "label": "artwork",
- "preselect": false
- },
- {
- "label": "audio",
- "preselect": false
- },
- {
- "label": "bibnote",
- "preselect": false
- },
- {
- "label": "book",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap
deleted file mode 100644
index f9defdee01..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@article\n |\n ^^^^^^^\"#)"
----
-[
- {
- "label": "article",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap
deleted file mode 100644
index aad03a392b..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@preamble\n |\n ^^^^^^^^\"#)"
----
-[
- {
- "label": "preamble",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap
deleted file mode 100644
index e30c60a45c..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@string\n |\n ^^^^^^\"#)"
----
-[
- {
- "label": "string",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap
deleted file mode 100644
index 2724026a26..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@article{foo, author = {foo}}\n |\n ^^^^^^^\"#)"
----
-[
- {
- "label": "article",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap
deleted file mode 100644
index a5a1d7838e..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@article{foo,}\n |\"#)"
----
-[
- {
- "label": "abstract",
- "preselect": false
- },
- {
- "label": "addendum",
- "preselect": false
- },
- {
- "label": "address",
- "preselect": false
- },
- {
- "label": "afterword",
- "preselect": false
- },
- {
- "label": "annotation",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap
deleted file mode 100644
index 693d4ed141..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@article{foo,\n |\"#)"
----
-[
- {
- "label": "abstract",
- "preselect": false
- },
- {
- "label": "addendum",
- "preselect": false
- },
- {
- "label": "address",
- "preselect": false
- },
- {
- "label": "afterword",
- "preselect": false
- },
- {
- "label": "annotation",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap
deleted file mode 100644
index cb0d41ed5d..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@article{foo, a\n |\n ^\"#)"
----
-[
- {
- "label": "abstract",
- "preselect": false
- },
- {
- "label": "addendum",
- "preselect": false
- },
- {
- "label": "address",
- "preselect": false
- },
- {
- "label": "afterword",
- "preselect": false
- },
- {
- "label": "annotation",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap
deleted file mode 100644
index 66dbf62785..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@article{foo, author = bar, edit}\n |\n ^^^^\"#)"
----
-[
- {
- "label": "edition",
- "preselect": false
- },
- {
- "label": "editor",
- "preselect": false
- },
- {
- "label": "editora",
- "preselect": false
- },
- {
- "label": "editoratype",
- "preselect": false
- },
- {
- "label": "editorb",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap
deleted file mode 100644
index 221f78f335..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.bib\n@article{foo, author = bar, edit\n |\n ^^^^\"#)"
----
-[
- {
- "label": "edition",
- "preselect": false
- },
- {
- "label": "editor",
- "preselect": false
- },
- {
- "label": "editora",
- "preselect": false
- },
- {
- "label": "editoratype",
- "preselect": false
- },
- {
- "label": "editorb",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap
deleted file mode 100644
index 1be95d5d99..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\gls{f\n |\n ^\"#)"
----
-[
- {
- "label": "fpsLabel",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap
deleted file mode 100644
index 81e9299d69..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap
+++ /dev/null
@@ -1,10 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}\n\\gls{f}\n |\n ^\"#)"
----
-[
- {
- "label": "fpsLabel",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap
deleted file mode 100644
index 9ed7978612..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\documentclass{art}\n |\n ^^^\"#)"
----
-[
- {
- "label": "article",
- "preselect": false
- },
- {
- "label": "articleingud",
- "preselect": false
- },
- {
- "label": "articoletteracdp",
- "preselect": false
- },
- {
- "label": "artikel1",
- "preselect": false
- },
- {
- "label": "artikel2",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap
deleted file mode 100644
index b650b621c6..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\documentclass{art \\foo\n |\n ^^^\"#)"
----
-[
- {
- "label": "article",
- "preselect": false
- },
- {
- "label": "articleingud",
- "preselect": false
- },
- {
- "label": "articoletteracdp",
- "preselect": false
- },
- {
- "label": "artikel1",
- "preselect": false
- },
- {
- "label": "artikel2",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap
deleted file mode 100644
index f8cad5526c..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\usepackage{lips}\n |\n ^^^^\"#)"
----
-[
- {
- "label": "lips",
- "preselect": false
- },
- {
- "label": "lipsum",
- "preselect": false
- },
- {
- "label": "lisp-simple-alloc",
- "preselect": false
- },
- {
- "label": "lisp-string",
- "preselect": false
- },
- {
- "label": "lwarp-lips",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap
deleted file mode 100644
index d234241e24..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\usepackage{lips\n |\n ^^^^\"#)"
----
-[
- {
- "label": "lips",
- "preselect": false
- },
- {
- "label": "lipsum",
- "preselect": false
- },
- {
- "label": "lisp-simple-alloc",
- "preselect": false
- },
- {
- "label": "lisp-string",
- "preselect": false
- },
- {
- "label": "lwarp-lips",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap
deleted file mode 100644
index 2b8f89b48d..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap
+++ /dev/null
@@ -1,21 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! bug.tex\n\\documentclass{article}\n\\newcommand{\\ö}{foo}\n\\newcommand{\\öö}{bar}\n\\newcommand{\\ööabc}{baz}\n\\begin{document}\n\\ö\n |\n ^\n\\end{document}\n\"#)"
----
-[
- {
- "label": "ö",
- "detail": "user-defined",
- "preselect": false
- },
- {
- "label": "öö",
- "detail": "user-defined",
- "preselect": false
- },
- {
- "label": "ööabc",
- "detail": "user-defined",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap
deleted file mode 100644
index c49510429d..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! bug.tex\n\\documentclass{article}\n\\def\\あいうえお{}\n\\begin{document}\n\\あ\n |\n ^\n\\end{document}\"#)"
----
-[
- {
- "label": "あいうえお",
- "detail": "user-defined",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_883.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_883.snap
deleted file mode 100644
index 2f17e08bdb..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_883.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! bug.tex\n\\begin{doc\n |\n ^^^\n% Comment\"#)"
----
-[
- {
- "label": "document",
- "detail": "built-in",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_885.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_885.snap
deleted file mode 100644
index 2f286288b9..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_885.snap
+++ /dev/null
@@ -1,18 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\documentclass{book}\n\\usepackage{import}\n\\begin{document}\n\\subincludefrom{part 1}{main}\n\\include{part 2/main}\n\n\\ref{sec}\n |\n ^^^\n\\end{document}\n\n%! part 1/main.tex\n\\part{1}\n\\label{part 1}\n\\subimport{chapter 1}{main}\n\n%! part 1/chapter 1/main.tex\n\\chapter{1}\n\\label{chapter 1}\n\\subimport{./}{section 1}\n%\\subimport{}{section 1}\n\n%! part 1/chapter 1/section 1.tex\n\\section{1}\n\\label{section 1}\n\n%! part 2/main.tex\n\\part{2}\n\\label{part 2}\n\\input{part 2/chapter 2/main}\n\n%! part 2/chapter 2/main.tex\n\\chapter{2}\n\\label{chapter 2}\n\\input{part 2/chapter 2/section 2}\n\n%! part 2/chapter 2/section 2.tex\n\\section{2}\n\\label{section 2}\n\"#)"
----
-[
- {
- "label": "section 1",
- "detail": "Section (1)",
- "preselect": false,
- "filterText": "section 1 Section (1)"
- },
- {
- "label": "section 2",
- "detail": "Section (2)",
- "preselect": false,
- "filterText": "section 2 Section (2)"
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap
deleted file mode 100644
index a186c56920..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap
+++ /dev/null
@@ -1,36 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! foo.tex\n\\documentclass{article}\n\n\\usepackage{amsmath}\n\\usepackage{caption}\n\\usepackage{amsthm}\n\\newtheorem{lemma}{Lemma}\n\n\\begin{document}\n\n\\section{Foo}%\n\\label{sec:foo}\n\n\\begin{equation}%\n\\label{eq:foo}\n 1 + 1 = 2\n\\end{equation}\n\n\\begin{equation}%\n\\label{eq:bar}\n 1 + 1 = 2\n\\end{equation}\n\n\\begin{figure}%\n\\LaTeX{}\n\\caption{Baz}%\n\\label{fig:baz}\n\\end{figure}\n\n\\begin{lemma}%\n\\label{thm:foo}\n 1 + 1 = 2\n\\end{lemma}\n\n\\include{bar}\n\n\\end{document}\n\n%! bar.tex\n\\section{Bar}%\n\\label{sec:bar}\n\nLorem ipsum dolor sit amet.\n\\ref{}\n |\n\n%! foo.aux\n\\relax\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {1}{\\ignorespaces Baz\\relax }}{1}\\protected@file@percent }\n\\providecommand*\\caption@xref[2]{\\@setref\\relax\\@undefined{#1}}\n\\newlabel{fig:baz}{{1}{1}}\n\\@writefile{toc}{\\contentsline {section}{\\numberline {1}Foo}{1}\\protected@file@percent }\n\\newlabel{sec:foo}{{1}{1}}\n\\newlabel{eq:foo}{{1}{1}}\n\\newlabel{eq:bar}{{2}{1}}\n\\newlabel{thm:foo}{{1}{1}}\n\\@input{bar.aux}\"#)"
----
-[
- {
- "label": "eq:bar",
- "detail": "Equation (2)",
- "preselect": false,
- "filterText": "eq:bar Equation (2)"
- },
- {
- "label": "eq:foo",
- "detail": "Equation (1)",
- "preselect": false,
- "filterText": "eq:foo Equation (1)"
- },
- {
- "label": "fig:baz",
- "detail": "Figure 1",
- "preselect": false,
- "filterText": "fig:baz Figure 1: Baz"
- },
- {
- "label": "sec:bar",
- "detail": "Section (Bar)",
- "preselect": false,
- "filterText": "sec:bar Section (Bar)"
- },
- {
- "label": "sec:foo",
- "detail": "Section 1 (Foo)",
- "preselect": false,
- "filterText": "sec:foo Section 1 (Foo)"
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap
deleted file mode 100644
index 351dc96deb..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\documentclass{article}\n\\import{sub}{sub/sub.tex}\n\\lipsu\n |\n ^^^^^\n\n%! sub/sub.tex\n\\input{child.tex}\n\n%! sub/child.tex\n\\usepackage{lipsum}\"#)"
----
-[
- {
- "label": "LipsumPar",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "LipsumProtect",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "LipsumRestoreAll",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "lipsum",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "lipsumexp",
- "detail": "lipsum.sty",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap
deleted file mode 100644
index 8ddefbc6ad..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap
+++ /dev/null
@@ -1,31 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! src/main.tex\n\\documentclass{article}\n\\include{src/foo}\n\\lipsu\n |\n ^^^^^\n\n%! src/foo.tex\n\\include{src/bar}\n\n%! src/bar.tex\n\\usepackage{lipsum}\n\n%! .texlabroot\"#)"
----
-[
- {
- "label": "LipsumPar",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "LipsumProtect",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "LipsumRestoreAll",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "lipsum",
- "detail": "lipsum.sty",
- "preselect": false
- },
- {
- "label": "lipsumexp",
- "detail": "lipsum.sty",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap
deleted file mode 100644
index f60725667f..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\newtheorem{lemma}{Lemma}\n\\begin{lem\n |\n ^^^\"#)"
----
-[
- {
- "label": "lemma",
- "detail": "user-defined",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap
deleted file mode 100644
index 0ec951db1d..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\newtheorem{lemma}{Lemma}\n\\begin{}\n\\end{lem\n |\n ^^^\"#)"
----
-[
- {
- "label": "lemma",
- "detail": "user-defined",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap
deleted file mode 100644
index e727fbbc1d..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\usepgflibrary{}\n |\"#)"
----
-[
- {
- "label": "arrows",
- "preselect": false
- },
- {
- "label": "arrows.meta",
- "preselect": false
- },
- {
- "label": "arrows.spaced",
- "preselect": false
- },
- {
- "label": "curvilinear",
- "preselect": false
- },
- {
- "label": "datavisualization.barcharts",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap
deleted file mode 100644
index 668b445c91..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap
+++ /dev/null
@@ -1,26 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\usepgflibrary{\n |\"#)"
----
-[
- {
- "label": "arrows",
- "preselect": false
- },
- {
- "label": "arrows.meta",
- "preselect": false
- },
- {
- "label": "arrows.spaced",
- "preselect": false
- },
- {
- "label": "curvilinear",
- "preselect": false
- },
- {
- "label": "datavisualization.barcharts",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap
deleted file mode 100644
index ce8c10d8e9..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap
+++ /dev/null
@@ -1,11 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\foobar\n\\fooba\n |\n ^^^^^\n\\begin{foo}\n\\end{foo}\n\\begin{fo}\"#)"
----
-[
- {
- "label": "foobar",
- "detail": "user-defined",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap
deleted file mode 100644
index c46a9beb26..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap
+++ /dev/null
@@ -1,16 +0,0 @@
----
-source: tests/lsp/text_document/completion.rs
-expression: "complete(r#\"\n%! main.tex\n\\foobar\n\\fooba\n\\begin{foo}\n\\end{foo}\n\\begin{fo}\n |\n ^^\"#)"
----
-[
- {
- "label": "filecontents",
- "detail": "built-in",
- "preselect": false
- },
- {
- "label": "foo",
- "detail": "user-defined",
- "preselect": false
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap
deleted file mode 100644
index 24e4efd8aa..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/document_link.rs
-expression: "find_links(r#\"\n%! foo.tex\n\\import{.}{bar/baz}\n|\n\n%! bar/baz.tex\"#)"
----
-[
- {
- "range": {
- "start": {
- "line": 0,
- "character": 11
- },
- "end": {
- "line": 0,
- "character": 18
- }
- },
- "target": "redacted://bar/baz.tex"
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap
deleted file mode 100644
index c19654b797..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap
+++ /dev/null
@@ -1,19 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/document_link.rs
-expression: "find_links(r#\"\n%! foo.tex\n\\input{bar.tex}\n|\n\n%! bar.tex\"#)"
----
-[
- {
- "range": {
- "start": {
- "line": 0,
- "character": 7
- },
- "end": {
- "line": 0,
- "character": 14
- }
- },
- "target": "redacted://bar.tex"
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__smoke.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__smoke.snap
deleted file mode 100644
index 061fc93c95..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__smoke.snap
+++ /dev/null
@@ -1,103 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/document_symbol.rs
-expression: symbols
----
-[
- DocumentSymbol {
- name: "Foo",
- detail: None,
- kind: Module,
- tags: None,
- deprecated: Some(
- false,
- ),
- range: Range {
- start: Position {
- line: 0,
- character: 0,
- },
- end: Position {
- line: 0,
- character: 30,
- },
- },
- selection_range: Range {
- start: Position {
- line: 0,
- character: 0,
- },
- end: Position {
- line: 0,
- character: 30,
- },
- },
- children: Some(
- [
- DocumentSymbol {
- name: "Bar",
- detail: None,
- kind: Module,
- tags: None,
- deprecated: Some(
- false,
- ),
- range: Range {
- start: Position {
- line: 0,
- character: 14,
- },
- end: Position {
- line: 0,
- character: 30,
- },
- },
- selection_range: Range {
- start: Position {
- line: 0,
- character: 14,
- },
- end: Position {
- line: 0,
- character: 30,
- },
- },
- children: Some(
- [],
- ),
- },
- ],
- ),
- },
- DocumentSymbol {
- name: "Baz",
- detail: None,
- kind: Module,
- tags: None,
- deprecated: Some(
- false,
- ),
- range: Range {
- start: Position {
- line: 0,
- character: 31,
- },
- end: Position {
- line: 0,
- character: 44,
- },
- },
- selection_range: Range {
- start: Position {
- line: 0,
- character: 31,
- },
- end: Position {
- line: 0,
- character: 44,
- },
- },
- children: Some(
- [],
- ),
- },
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap
deleted file mode 100644
index b98dd68758..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap
+++ /dev/null
@@ -1,7 +0,0 @@
----
-source: tests/lsp/text_document/formatting.rs
-expression: "format(r#\"\n%! main.bib\n@article{foo, bar = \"\\baz\",}\n|\"#)"
----
-@article{foo,
- bar = "\baz",
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap
deleted file mode 100644
index a95f5d3006..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap
+++ /dev/null
@@ -1,7 +0,0 @@
----
-source: tests/lsp/text_document/formatting.rs
-expression: "format(r#\"\n%! main.bib\n@article{foo, bar = baz,\n|\"#)"
----
-@article{foo,
- bar = baz,
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap
deleted file mode 100644
index 3ea6bf18ad..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap
+++ /dev/null
@@ -1,7 +0,0 @@
----
-source: tests/lsp/text_document/formatting.rs
-expression: "format(r#\"\n%! main.bib\n@article{foo, bar = \"baz\" # \"qux\"}\n|\"#)"
----
-@article{foo,
- bar = "baz" # "qux",
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap
deleted file mode 100644
index 966f133a76..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap
+++ /dev/null
@@ -1,15 +0,0 @@
----
-source: tests/lsp/text_document/formatting.rs
-expression: "format(r#\"\n%! main.bib\n@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, \nconsectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}\n\n@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, \nconsectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}\"\n|\"#)"
----
-@article{foo,
- bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
- dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
- amet, consectetur adipiscing elit.},
-}
-
-@article{foo,
- bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
- dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
- amet, consectetur adipiscing elit.},
-}"
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap
deleted file mode 100644
index ca317db108..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap
+++ /dev/null
@@ -1,6 +0,0 @@
----
-source: tests/lsp/text_document/formatting.rs
-expression: "format(r#\"\n%! main.bib\n@article(foo,)\n|\"#)"
----
-@article{foo,
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap
deleted file mode 100644
index 6448e3a791..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap
+++ /dev/null
@@ -1,5 +0,0 @@
----
-source: tests/lsp/text_document/formatting.rs
-expression: "format(r#\"\n%! main.bib\n@preamble{\n \"foo bar baz\" }\n|\"#)"
----
-@preamble{"foo bar baz"}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap
deleted file mode 100644
index a1739290fd..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap
+++ /dev/null
@@ -1,5 +0,0 @@
----
-source: tests/lsp/text_document/formatting.rs
-expression: "format(r#\"\n%! main.bib\n@string{foo=\"bar\"}\n|\"#)"
----
-@string{foo = "bar"}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap
deleted file mode 100644
index dd5c7b49f0..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap
+++ /dev/null
@@ -1,7 +0,0 @@
----
-source: tests/lsp/text_document/formatting.rs
-expression: "format(r#\"\n%! main.bib\n@article{foo, bar = baz}\n|\"#)"
----
-@article{foo,
- bar = baz,
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap
deleted file mode 100644
index c52b8a9317..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap
+++ /dev/null
@@ -1,9 +0,0 @@
----
-source: tests/lsp/text_document/formatting.rs
-expression: "format(r#\"\n%! main.bib\n@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.\nLorem ipsum dolor sit amet,\nconsectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}\n|\"#)"
----
-@article{foo,
- bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum
- dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit
- amet, consectetur adipiscing elit.},
-}
diff --git a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap b/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap
deleted file mode 100644
index 050ae5afd3..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap
+++ /dev/null
@@ -1,38 +0,0 @@
----
-source: crates/texlab/tests/lsp/text_document/inlay_hint.rs
-expression: "find_hints(r#\"\n%! main.tex\n\\documentclass{article}\n\\usepackage{caption}\n\\begin{document}\n\\section{Foo}\\label{sec:foo}\n\\section{Bar}\\label{sec:bar}\n\\subsection{Baz}\\label{sec:baz}\n\\begin{figure}\n Test\n \\label{fig:qux}\n \\caption{Qux}\n\\end{figure}\n\\end{document}\n |\n\n%! main.aux\n\\relax \n\\providecommand*\\caption@xref[2]{\\@setref\\relax\\@undefined{#1}}\n\\newlabel{fig:qux}{{\\caption@xref {fig:qux}{ on input line 15}}{1}}\n\\@writefile{lof}{\\contentsline {figure}{\\numberline {1}{\\ignorespaces Qux\\relax }}{1}{}\\protected@file@percent }\n\\@writefile{toc}{\\contentsline {section}{\\numberline {1}Foo}{1}{}\\protected@file@percent }\n\\newlabel{sec:foo}{{1}{1}}\n\\@writefile{toc}{\\contentsline {section}{\\numberline {2}Bar}{1}{}\\protected@file@percent }\n\\newlabel{sec:bar}{{2}{1}}\n\\@writefile{toc}{\\contentsline {subsection}{\\numberline {2.1}Baz}{1}{}\\protected@file@percent }\n\\newlabel{sec:baz}{{2.1}{1}}\n\\gdef \\@abspage@last{1}\"#)"
----
-[
- {
- "position": {
- "line": 3,
- "character": 28
- },
- "label": " Section 1 ",
- "paddingLeft": true
- },
- {
- "position": {
- "line": 4,
- "character": 28
- },
- "label": " Section 2 ",
- "paddingLeft": true
- },
- {
- "position": {
- "line": 5,
- "character": 31
- },
- "label": " Subsection 2.1 ",
- "paddingLeft": true
- },
- {
- "position": {
- "line": 8,
- "character": 19
- },
- "label": " Figure fig:qux ",
- "paddingLeft": true
- }
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/workspace.rs b/support/texlab/crates/texlab/tests/lsp/workspace.rs
deleted file mode 100644
index 15e0679dea..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/workspace.rs
+++ /dev/null
@@ -1 +0,0 @@
-mod symbol;
diff --git a/support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__smoke.snap b/support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__smoke.snap
deleted file mode 100644
index 20c012bec9..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__smoke.snap
+++ /dev/null
@@ -1,78 +0,0 @@
----
-source: crates/texlab/tests/lsp/workspace/symbol.rs
-expression: symbols
----
-[
- SymbolInformation {
- name: "Foo",
- kind: Module,
- tags: None,
- deprecated: Some(
- false,
- ),
- location: Location {
- uri: Url {
- scheme: "redacted",
- cannot_be_a_base: false,
- username: "",
- password: None,
- host: Some(
- Domain(
- "main.tex",
- ),
- ),
- port: None,
- path: "",
- query: None,
- fragment: None,
- },
- range: Range {
- start: Position {
- line: 7,
- character: 0,
- },
- end: Position {
- line: 8,
- character: 3,
- },
- },
- },
- container_name: None,
- },
- SymbolInformation {
- name: "Bar",
- kind: Module,
- tags: None,
- deprecated: Some(
- false,
- ),
- location: Location {
- uri: Url {
- scheme: "redacted",
- cannot_be_a_base: false,
- username: "",
- password: None,
- host: Some(
- Domain(
- "main.tex",
- ),
- ),
- port: None,
- path: "",
- query: None,
- fragment: None,
- },
- range: Range {
- start: Position {
- line: 10,
- character: 0,
- },
- end: Position {
- line: 11,
- character: 3,
- },
- },
- },
- container_name: None,
- },
-]
diff --git a/support/texlab/crates/texlab/tests/lsp/workspace/symbol.rs b/support/texlab/crates/texlab/tests/lsp/workspace/symbol.rs
deleted file mode 100644
index 8deae20a44..0000000000
--- a/support/texlab/crates/texlab/tests/lsp/workspace/symbol.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-use insta::assert_debug_snapshot;
-use lsp_types::{
- request::WorkspaceSymbolRequest, ClientCapabilities, WorkspaceSymbolParams,
- WorkspaceSymbolResponse,
-};
-
-use crate::fixture::TestBed;
-
-#[test]
-fn test_smoke() {
- let test_bed = TestBed::new(
- r#"
-%! main.tex
-\documentclass{article}
-\usepackage{caption}
-\usepackage{amsmath}
-\usepackage{amsthm}
-
-\begin{document}
-
-\section{Foo}\label{sec:foo}
-Foo
-
-\section{Bar}
-Bar
-
-\end{document}
-"#,
- )
- .unwrap();
-
- test_bed.initialize(ClientCapabilities::default()).unwrap();
-
- let Some(WorkspaceSymbolResponse::Flat(mut symbols)) = test_bed
- .client()
- .send_request::<WorkspaceSymbolRequest>(WorkspaceSymbolParams {
- query: String::new(),
- work_done_progress_params: Default::default(),
- partial_result_params: Default::default(),
- })
- .unwrap() else { unreachable!() };
-
- for symbol in &mut symbols {
- symbol.location.uri = test_bed.redact(&symbol.location.uri);
- }
-
- assert_debug_snapshot!(symbols);
-}
diff --git a/support/texlab/texlab.1 b/support/texlab/texlab.1
index 23418dce4c..18919ec9a3 100644
--- a/support/texlab/texlab.1
+++ b/support/texlab/texlab.1
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.13.
-.TH TEXLAB "1" "November 2023" "texlab 5.11.0" "User Commands"
+.TH TEXLAB "1" "December 2023" "texlab 5.12.0" "User Commands"
.SH NAME
-texlab \- manual page for texlab 5.11.0
+texlab \- manual page for texlab 5.12.0
.SH SYNOPSIS
.B texlab
[\fI\,OPTIONS\/\fR]
diff --git a/support/texlab/texlab.pdf b/support/texlab/texlab.pdf
index d989a13e2e..ac225c8f02 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 149cbaf24b..b82add1c39 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -150,7 +150,6 @@ $mirrors = {
'Russia' => {
'https://ctan.altspu.ru/' => 1,
'https://mirror.macomnet.net/pub/CTAN/' => 1,
- 'https://mirror.truenetwork.ru/CTAN/' => 1,
'https://mirrors.mi-ras.ru/CTAN/' => 1,
},
'Spain' => {
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index ff8787f0f1..2a055aa630 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,7 +26,7 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2023
-depend revision/69014
+depend revision/69019
name 00texlive.image
category TLCore
@@ -4818,7 +4818,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 68995
+revision 69016
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
@@ -84425,22 +84425,22 @@ catalogue-version 1.01
name covington
category Package
-revision 67472
+revision 69019
shortdesc LaTeX macros for Linguistics
relocated 1
longdesc Numerous minor LaTeX enhancements for linguistics, including
longdesc multiple accents on the same letter, interline glosses
longdesc (word-by-word translations), Discourse Representation
longdesc Structures, and example numbering.
-containersize 12220
-containerchecksum 3a47edc24578448ef751fdaf6703459b378849121e429d69fb9a8988c8a92bb3b564197e38baf1730c56c62e8f66540686618247778b3cff901941af78b3bcd8
-doccontainersize 572316
-doccontainerchecksum a632d0b667e3cb9e8d29460c502a66a126e5bdbca11b2e34db71f186f29dbb95577ad237f86d7906589ba0584e666aab861d6596393f8c9091570f8668df71da
-docfiles size=161
+containersize 12344
+containerchecksum 10f730c7f766e93f3994db75ce427bc741bd630d420332846d006f7b857fccca4898cd6fbc9efd5bc787b4502fccfdd8ff73bda6deb063c69b0d6f07e7495760
+doccontainersize 577676
+doccontainerchecksum fffd94752634197a0bfeb20a977784d7a293a833d36283628c4ad04419b43f8136bad03e821a07df0010fd20f7e8291c151ec16c40b9d1f2619a209e1c3714f8
+docfiles size=162
RELOC/doc/latex/covington/README details="Readme"
RELOC/doc/latex/covington/covington.pdf details="Package documentation"
RELOC/doc/latex/covington/covington.tex
-runfiles size=15
+runfiles size=16
RELOC/tex/latex/covington/covington.sty
catalogue-also gb4e
catalogue-contact-bugs https://github.com/jspitz/covington/issues
@@ -84448,7 +84448,7 @@ catalogue-contact-repository https://github.com/jspitz/covington
catalogue-ctan /macros/latex/contrib/covington
catalogue-license lppl1.3
catalogue-topics linguistic
-catalogue-version 2.12
+catalogue-version 2.13
name cprotect
category Package
@@ -317497,7 +317497,7 @@ docfiles size=376
name texlive-scripts
category TLCore
-revision 69012
+revision 69016
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.
@@ -317506,9 +317506,9 @@ depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
containersize 114260
-containerchecksum 2180d5de2f336fd30c42c7c49372c04e26177eba95a5a6285933b19c3bf69f63ab46870be2d4d574db0eeb983ffde824eef3eb041ebbe245ca7f7b588999b022
+containerchecksum d6de52de8b349b07936d316aa50e433ed1df0590a07d27990b50e146abd716a187fada0d27665510a0e241e267c28ea16de65f821b4fcd2dfc15d6f094021597
doccontainersize 430588
-doccontainerchecksum 763a1d1f61b1b747d499180b8e204e2984f71eb9ef523a384f0ed485b35b4ce561f328a4c55a2c29f76d05fd83dbf346f697eca14d104815c3e59fbac8dc66f8
+doccontainerchecksum 2219cfaf7d2dd04a6afa6ea6bcc38fb8486e7547be28788bb94fa162391bee75391040624c2245f6d3eee1d04036ab6b90c7659996d7ce068c29cd4ae8031b85
docfiles size=560
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 3f919569bc..84ebcc4c4a 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-4c895db90ac7e0b5c88aeed81419f217 texlive.tlpdb
+677d6e79cc40196afc7ec37fceb51fc9 texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index 8343d49854..f2d691450d 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-8b260577cec00cc79d73e505ac40d74c37038d60fbcb22515d2d004cfd979fca5efb3d41c2964783144904e01bd5b557e20f32430199348b59486c60425bcb56 texlive.tlpdb
+89b14203cf4a2e3a4454ec587ae6eab1d953eacf60124fba151987b6a3b6cddbe3b6b42f39c45034b1fa6e163bfe381ae9472ec7651bd24d4901e33d6f6f332a texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 4a0efc870a..1c61ec17cf 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+QqiBBqTOGHfhlDjHAFAmVqfmYACgkQTOGHfhlD
-jHAd8Qf+OTv9wkYFj1BYBPiKfu4GsDplX1utmZ9PL9Wv3l2jb2AV2csDJdzLHoWu
-Y6TKmnm2jtAACBFqkJmPToJtbCM36tMbLmWRSg8UKUn43Y6u3p5UFsrOdbpnF8WL
-FG4a5QhfAmAZDef8gJPMUTZWVTxzQ/uqV6aXwtjNBLNZmjgW3zhuqhxDztsaVo/m
-SOf7KidRwNmN8Eaq0wTRMky5vL/XgYf48Q44YzaZqXxMsaZ/Hgbs/PqdSijAG4dR
-Ln5H9nCDOSFCMoNNGqYGmTmnSfqauEUKxStTUdRUHWFv7kc8+gVXU/2RwyuQERZE
-uq9BaGxCsKfSMokQ8yIloAq1opRXBQ==
-=/9iC
+iQEzBAEBCgAdFiEE2PL4YFeoV+QqiBBqTOGHfhlDjHAFAmVr0XkACgkQTOGHfhlD
+jHA9jwf+Pr+rlSPEfWwNrOQT78p8gYDkCK6lNxoM2JMB9SciDFi8/r0+AgdgQXUF
+bFiL/6r4bL/01cStlbcoaA1EBGCG6za2YfEC0y2aZ5I1tt/XitnbVtoesZQECXdk
+b/WaiyGfeM8eaVJ3onTHegYS3tI3+MNdGJfueTlJEnVVP/QOJmkphKc9NOjMGHSE
+FTiLHesBGhcatt7nbMCTv4/3ovb3rZe0EBaVp4C364kRJueloxaQvm4REvGLMOdu
+Eir3wpyJCTfmFQNikS/EhYhOPRsoIGnNFozRmcvvnShmRW+8nZ05qzCPAu3cFrKp
+1mhu6i/qQq9Fw4nDxxyf2Sgcv1ED6A==
+=WzDB
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index bb1c9db2f9..b2fd8969ba 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 4eda6f78f4..a4fe6d7f1b 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:
-2023-12-03-02-02
+2023-12-04-02-02
diff --git a/web/c_cpp/cweb/Makefile b/web/c_cpp/cweb/Makefile
index c547ef9154..28ea97d554 100644
--- a/web/c_cpp/cweb/Makefile
+++ b/web/c_cpp/cweb/Makefile
@@ -1,6 +1,6 @@
# This file is part of CWEB.
# It is distributed WITHOUT ANY WARRANTY, express or implied.
-# Version 4.10 --- August 2023
+# Version 4.11 --- December 2023
# Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -69,6 +69,7 @@ PDFTEX = dvipdfm
#PDFTEX = pdftex
#PDFTEX = xetex
#PDFTEX = hitex
+#PDFTEX = luatex
########## You shouldn't have to change anything after this point #######
@@ -77,15 +78,17 @@ CTANGLE = ./ctangle
SOURCES = cweave.w common.w ctangle.w
ALL = common.w ctangle.w cweave.w prod.w \
Makefile README common.c common.h ctangle.c \
- cwebman.tex cwebmac.tex comm-vms.ch ctang-vms.ch \
- cweav-vms.ch comm-man.ch ctang-man.ch cweav-man.ch \
- comm-pc.ch ctang-pc.ch cweav-pc.ch comm-amiga.ch \
+ cwebman.tex cwebacromac.tex cwebmac.tex \
+ cweb.1 cweb.el c++lib.w iso_types.w \
+ comm-man.ch ctang-man.ch cweav-man.ch \
comm-bs.ch ctang-bs.ch cweav-bs.ch makefile.bs \
+ comm-pc.ch ctang-pc.ch cweav-pc.ch comm-amiga.ch \
comm-ql.ch ctang-ql.ch cweav-ql.ch readme.ql \
+ comm-vms.ch ctang-vms.ch cweav-vms.ch \
comm-w32.ch ctang-w32.ch cweav-w32.ch \
- comm-os2.ch comm-mac.ch cweb.1 cweb.el c++lib.w iso_types.w
+ comm-os2.ch comm-mac.ch
-.SUFFIXES: .dvi .tex .w .pdf
+.SUFFIXES: .dvi .tex .w .pdf .hnt
.w.tex:
$(CWEAVE) $*
@@ -110,6 +113,12 @@ ALL = common.w ctangle.w cweave.w prod.w \
dvipdfm ) tex "\let\pdf+ \input $*"; dvipdfm $* ;; \
pdftex ) pdftex $* ;; \
xetex ) xetex $* ;; \
+ luatex ) luatex $* ;; \
+ esac
+
+.w.hnt:
+ make $*.tex
+ case "$(PDFTEX)" in \
hitex ) hitex $* ;; \
esac
@@ -178,6 +187,8 @@ install: all
$(CP) cweb.1 $(MANDIR)/cweb.$(MANEXT)
chmod 644 $(MANDIR)/cweb.$(MANEXT)
- mkdir $(MACROSDIR)
+ $(CP) cwebacromac.tex $(MACROSDIR)
+ chmod 644 $(MACROSDIR)/cwebacromac.tex
$(CP) cwebmac.tex $(MACROSDIR)
chmod 644 $(MACROSDIR)/cwebmac.tex
- mkdir $(EMACSDIR)
@@ -205,6 +216,6 @@ tarball:
tar zcvhf /tmp/cweb.tgz $(ALL) examples
ctan:
- git archive -o ~/cweb-4.10.zip --prefix=cweb/ cweb-4.10
+ git archive -o ~/cweb-4.11.zip --prefix=cweb/ cweb-4.11
make PDF=pdf usermanual
- cd ..; zip -r ~/cweb-4.10.zip cweb/cwebman.pdf
+ cd ..; zip -r ~/cweb-4.11.zip cweb/cwebman.pdf
diff --git a/web/c_cpp/cweb/README b/web/c_cpp/cweb/README
index e2caca4133..086f6af308 100644
--- a/web/c_cpp/cweb/README
+++ b/web/c_cpp/cweb/README
@@ -59,6 +59,7 @@ cweave-w32.ch
cweave.w
cweb.1
cweb.el
+cwebacromac.tex
cwebmac.tex
cwebman.tex
examples/
diff --git a/web/c_cpp/cweb/comm-mac.ch b/web/c_cpp/cweb/comm-mac.ch
index 83df560cb4..79b1ec945e 100644
--- a/web/c_cpp/cweb/comm-mac.ch
+++ b/web/c_cpp/cweb/comm-mac.ch
@@ -4,9 +4,9 @@ No changes to CTANGLE or CWEAVE are needed.
(Contributed 13 Oct 2000 by AndPio@aol.com; slightly edited by Don Knuth)
@x in limbo, change the title page document to specify Mac version
- \centerline{(Version 4.10)}
+ \centerline{(Version 4.11)}
@y
- \centerline{(Version 4.10 for MacOS)}
+ \centerline{(Version 4.11 for MacOS)}
@z
@x section 23: Make input_ln accept \n, \r, \n\r, or \r\n as line endings
diff --git a/web/c_cpp/cweb/comm-ql.ch b/web/c_cpp/cweb/comm-ql.ch
index 592c7e04a1..44cc39ec45 100644
--- a/web/c_cpp/cweb/comm-ql.ch
+++ b/web/c_cpp/cweb/comm-ql.ch
@@ -10,24 +10,24 @@ ex <dev_>cc;'-v -h -c -=500000 -DCWEBINPUTS=flp2_ common_c'
@x
\def\v{\char'174} % vertical (|) in typewriter font
-\def\title{Common code for CTANGLE and CWEAVE (Version 4.10)}
+\def\title{Common code for CTANGLE and CWEAVE (Version 4.11)}
\def\topofcontents{\null\vfill
\centerline{\titlefont Common code for {\ttitlefont CTANGLE} and
{\ttitlefont CWEAVE}}
\vskip 15pt
- \centerline{(Version 4.10)}
+ \centerline{(Version 4.11)}
\vfill}
\def\botofcontents{\vfill
\noindent
@y
\def\v{\char'174} % vertical (|) in typewriter font
-\def\title{Common code for CTANGLE and CWEAVE (QL Version 4.10)}
+\def\title{Common code for CTANGLE and CWEAVE (QL Version 4.11)}
\def\topofcontents{\null\vfill
\centerline{\titlefont Common code for {\ttitlefont CTANGLE} and
{\ttitlefont CWEAVE}}
\vskip 15pt
- \centerline{(Version 4.10)}
+ \centerline{(Version 4.11)}
\vfill}
\def\botofcontents{\vfill
\noindent
@@ -152,8 +152,10 @@ the routine as if it would work.
}
sprintf(alt_web_file_name,"%s.web",*argv);
sprintf(tex_file_name,"%s.tex",name_pos); /* strip off directory name */
- sprintf(idx_file_name,"%s.idx",name_pos);
- sprintf(scn_file_name,"%s.scn",name_pos);
+ if (make_xrefs) { /* indexes will be generated */
+ sprintf(idx_file_name,"%s.idx",name_pos);
+ sprintf(scn_file_name,"%s.scn",name_pos);
+ }
sprintf(C_file_name,"%s.c",name_pos);
found_web=true;
}
@@ -170,8 +172,10 @@ the routine as if it would work.
}
sprintf(alt_web_file_name,"%s_web",*argv);
sprintf(tex_file_name,"%s_tex",name_pos); /* strip off directory name */
- sprintf(idx_file_name,"%s_idx",name_pos);
- sprintf(scn_file_name,"%s_scn",name_pos);
+ if (make_xrefs) { /* indexes will be generated */
+ sprintf(idx_file_name,"%s_idx",name_pos);
+ sprintf(scn_file_name,"%s_scn",name_pos);
+ }
sprintf(C_file_name,"%s_c",name_pos);
found_web=true;
}
diff --git a/web/c_cpp/cweb/common.c b/web/c_cpp/cweb/common.c
index ccedc5e914..4c9ad7c198 100644
--- a/web/c_cpp/cweb/common.c
+++ b/web/c_cpp/cweb/common.c
@@ -197,7 +197,7 @@ extern name_pointer name_dir_end;
extern name_pointer name_ptr;
extern name_pointer hash[];
extern hash_pointer hash_end;
-extern hash_pointer h;
+extern hash_pointer hash_ptr;
/*:10*//*12:*/
#line 193 "common.h"
@@ -302,17 +302,17 @@ name_pointer name_ptr;
/*:44*//*46:*/
#line 621 "common.w"
-name_pointer hash[hash_size];
+name_pointer hash[hash_size]= {NULL};
hash_pointer hash_end= hash+hash_size-1;
-hash_pointer h;
+hash_pointer hash_ptr;
/*:46*//*65:*/
-#line 1002 "common.w"
+#line 999 "common.w"
int history= spotless;
/*:65*//*73:*/
-#line 1125 "common.w"
+#line 1124 "common.w"
int argc;
char**argv;
@@ -323,7 +323,7 @@ char scn_file_name[max_file_name_length];
boolean flags[128];
/*:73*//*83:*/
-#line 1266 "common.w"
+#line 1267 "common.w"
FILE*C_file;
FILE*tex_file;
@@ -383,18 +383,18 @@ static void prime_the_change_buffer(void);
static void check_change(void);
/*:33*//*55:*/
-#line 763 "common.w"
+#line 760 "common.w"
static int web_strcmp(char*,size_t,char*,size_t);
static name_pointer add_section_name(name_pointer,int,char*,char*,boolean);
static void extend_section_name(name_pointer,char*,char*,boolean);
/*:55*//*64:*/
-#line 990 "common.w"
+#line 987 "common.w"
static int section_name_cmp(char**,size_t,name_pointer);
/*:64*//*76:*/
-#line 1185 "common.w"
+#line 1184 "common.w"
static void scan_args(void);
/*:76*/
@@ -415,16 +415,11 @@ name_ptr= name_dir+1;
name_ptr->byte_start= byte_mem;
root= NULL;
-/*:45*//*47:*/
-#line 628 "common.w"
-
-for(h= hash;h<=hash_end;*h++= NULL);
-
-/*:47*/
+/*:45*/
#line 99 "common.w"
/*74:*/
-#line 1138 "common.w"
+#line 1137 "common.w"
show_banner= show_happiness= show_progress= make_xrefs= true;
@@ -432,7 +427,7 @@ show_banner= show_happiness= show_progress= make_xrefs= true;
#line 100 "common.w"
/*84:*/
-#line 1273 "common.w"
+#line 1274 "common.w"
scan_args();
if(program==ctangle){
@@ -776,7 +771,7 @@ limit= buffer;loc= buffer+1;buffer[0]= ' ';input_has_ended= false;
}
/*:40*//*48:*/
-#line 633 "common.w"
+#line 630 "common.w"
name_pointer
id_lookup(
@@ -791,17 +786,17 @@ name_pointer p;
if(last==NULL)for(last= first;*last!='\0';last++);
l= (size_t)(last-first);
/*49:*/
-#line 656 "common.w"
+#line 653 "common.w"
h= (int)((eight_bits)*i);
while(++i<last)h= (h+h+(int)((eight_bits)*i))%hash_size;
/*:49*/
-#line 646 "common.w"
+#line 643 "common.w"
/*50:*/
-#line 664 "common.w"
+#line 661 "common.w"
p= hash[h];
while(p&&!names_match(p,first,l,t))p= p->link;
@@ -811,10 +806,10 @@ p->link= hash[h];hash[h]= p;
}
/*:50*/
-#line 647 "common.w"
+#line 644 "common.w"
if(p==name_ptr)/*51:*/
-#line 675 "common.w"
+#line 672 "common.w"
{
if(byte_ptr+l> byte_mem_end)overflow("byte memory");
if(name_ptr>=name_dir_end)overflow("name");
@@ -824,13 +819,13 @@ if(program==cweave)p->ilk= t,init_node(p);
}
/*:51*/
-#line 648 "common.w"
+#line 645 "common.w"
return p;
}
/*:48*//*52:*/
-#line 707 "common.w"
+#line 704 "common.w"
void
print_section_name(
@@ -849,7 +844,7 @@ if(q)term_write("...",3);
}
/*:52*//*53:*/
-#line 724 "common.w"
+#line 721 "common.w"
void
sprint_section_name(
@@ -869,7 +864,7 @@ s= p->byte_start;
}
/*:53*//*54:*/
-#line 742 "common.w"
+#line 739 "common.w"
void
print_prefix_name(
@@ -882,7 +877,7 @@ if(s+l<(p+1)->byte_start)term_write("...",3);
}
/*:54*//*56:*/
-#line 768 "common.w"
+#line 765 "common.w"
static int web_strcmp(
char*j,
@@ -900,7 +895,7 @@ else return greater;
}
/*:56*//*57:*/
-#line 797 "common.w"
+#line 794 "common.w"
static name_pointer
add_section_name(
@@ -930,7 +925,7 @@ return par==NULL?(root= p):c==less?(par->llink= p):(par->rlink= p);
}
/*:57*//*58:*/
-#line 825 "common.w"
+#line 822 "common.w"
static void
extend_section_name(
@@ -954,7 +949,7 @@ if(ispref)*(byte_ptr-1)= ' ';
}
/*:58*//*59:*/
-#line 853 "common.w"
+#line 850 "common.w"
name_pointer
section_lookup(
@@ -969,7 +964,7 @@ name_pointer par= NULL;
size_t name_len= (size_t)(last-first+1);
/*60:*/
-#line 877 "common.w"
+#line 874 "common.w"
while(p){
c= web_strcmp(first,name_len,first_chunk(p),prefix_length(p));
@@ -979,10 +974,10 @@ par= p;
p= (c==less?p->llink:p->rlink);
}else{
if(r!=NULL){
-fputs("\n! Ambiguous prefix: matches <",stdout);
+printf("%s","\n! Ambiguous prefix: matches <");
print_prefix_name(p);
-fputs(">\n and <",stdout);
+printf("%s",">\n and <");
print_prefix_name(r);
err_print(">");
return name_dir;
@@ -996,25 +991,25 @@ p= q,q= NULL;
}
/*:60*/
-#line 867 "common.w"
+#line 864 "common.w"
/*61:*/
-#line 902 "common.w"
+#line 899 "common.w"
if(r==NULL)
return add_section_name(par,c,first,last+1,ispref);
/*:61*/
-#line 868 "common.w"
+#line 865 "common.w"
/*62:*/
-#line 910 "common.w"
+#line 907 "common.w"
switch(section_name_cmp(&first,name_len,r)){
case prefix:
if(!ispref){
-fputs("\n! New name is a prefix of <",stdout);
+printf("%s","\n! New name is a prefix of <");
print_section_name(r);
err_print(">");
@@ -1026,28 +1021,28 @@ case extension:if(!ispref||first<=last)
extend_section_name(r,first,last+1,ispref);
break;
case bad_extension:
-fputs("\n! New name extends <",stdout);
+printf("%s","\n! New name extends <");
print_section_name(r);
err_print(">");
break;
default:
-fputs("\n! Section name incompatible with <",stdout);
+printf("%s","\n! Section name incompatible with <");
print_prefix_name(r);
-fputs(">,\n which abbreviates <",stdout);
+printf("%s",">,\n which abbreviates <");
print_section_name(r);
err_print(">");
}
return r;
/*:62*/
-#line 869 "common.w"
+#line 866 "common.w"
}
/*:59*//*63:*/
-#line 958 "common.w"
+#line 955 "common.w"
static int section_name_cmp(
char**pfirst,
@@ -1081,21 +1076,23 @@ default:return c;
}
/*:63*//*66:*/
-#line 1012 "common.w"
+#line 1009 "common.w"
void
err_print(
const char*s)
{
-*s=='!'?printf("\n%s",s):printf("%s",s);
+printf(*s=='!'?"\n%s":"%s",s);
if(web_file_open)/*67:*/
-#line 1031 "common.w"
+#line 1028 "common.w"
{char*k,*l;
-if(changing&&include_depth==change_depth)
+if(changing&&include_depth==change_depth&&change_line> 0)
printf(". (l. %d of change file)\n",change_line);
-else if(include_depth==0)printf(". (l. %d)\n",cur_line);
+else if(cur_line> 0){
+if(include_depth==0)printf(". (l. %d)\n",cur_line);
else printf(". (l. %d of include file %s)\n",cur_line,cur_file_name);
+}
l= (loc>=limit?limit:loc);
if(l> buffer){
for(k= buffer;k<l;k++)
@@ -1110,20 +1107,20 @@ putchar(' ');
}
/*:67*/
-#line 1018 "common.w"
+#line 1015 "common.w"
update_terminal();mark_error();
}
/*:66*//*68:*/
-#line 1064 "common.w"
+#line 1063 "common.w"
int wrap_up(void){
-if(show_progress)new_line();
+if(show_progress||show_happiness||history!=spotless)new_line();
if(show_stats)
print_stats();
/*69:*/
-#line 1074 "common.w"
+#line 1073 "common.w"
switch(history){
case spotless:
@@ -1137,25 +1134,25 @@ puts("(That was a fatal error, my friend.)");
}
/*:69*/
-#line 1069 "common.w"
+#line 1068 "common.w"
if(history> harmless_message)return EXIT_FAILURE;
else return EXIT_SUCCESS;
}
/*:68*//*70:*/
-#line 1092 "common.w"
+#line 1091 "common.w"
void
fatal(
const char*s,const char*t)
{
-if(*s)err_print(s);
+if(*s)printf("%s",s);
err_print(t);
history= fatal_message;exit(wrap_up());
}
/*:70*//*71:*/
-#line 1103 "common.w"
+#line 1102 "common.w"
void
overflow(
const char*t)
@@ -1165,7 +1162,7 @@ printf("\n! Sorry, %s capacity exceeded",t);fatal("","");
/*:71*//*75:*/
-#line 1156 "common.w"
+#line 1155 "common.w"
static void
scan_args(void)
@@ -1179,13 +1176,13 @@ boolean found_web= false,found_change= false,found_out= false;
strcpy(change_file_name,"/dev/null");
while(--argc> 0){
if((**(++argv)=='-'||**argv=='+')&&*(*argv+1))/*80:*/
-#line 1244 "common.w"
+#line 1245 "common.w"
for(dot_pos= *argv+1;*dot_pos> '\0';dot_pos++)
flags[(eight_bits)*dot_pos]= flag_change;
/*:80*/
-#line 1168 "common.w"
+#line 1167 "common.w"
else{
s= name_pos= *argv;dot_pos= NULL;
@@ -1194,17 +1191,17 @@ if(*s=='.')dot_pos= s++;
else if(*s=='/')dot_pos= NULL,name_pos= ++s;
else s++;
if(!found_web)/*77:*/
-#line 1194 "common.w"
+#line 1193 "common.w"
{
if(s-*argv> max_file_name_length-5)
/*82:*/
-#line 1260 "common.w"
+#line 1261 "common.w"
fatal("! Filename too long\n",*argv);
/*:82*/
-#line 1197 "common.w"
+#line 1196 "common.w"
if(dot_pos==NULL)
sprintf(web_file_name,"%s.w",*argv);
@@ -1214,28 +1211,30 @@ strcpy(web_file_name,*argv);
}
sprintf(alt_web_file_name,"%s.web",*argv);
sprintf(tex_file_name,"%s.tex",name_pos);
+if(make_xrefs){
sprintf(idx_file_name,"%s.idx",name_pos);
sprintf(scn_file_name,"%s.scn",name_pos);
+}
sprintf(C_file_name,"%s.c",name_pos);
found_web= true;
}
/*:77*/
-#line 1176 "common.w"
+#line 1175 "common.w"
else if(!found_change)/*78:*/
-#line 1212 "common.w"
+#line 1213 "common.w"
{
if(strcmp(*argv,"-")!=0){
if(s-*argv> max_file_name_length-4)
/*82:*/
-#line 1260 "common.w"
+#line 1261 "common.w"
fatal("! Filename too long\n",*argv);
/*:82*/
-#line 1216 "common.w"
+#line 1217 "common.w"
if(dot_pos==NULL)
sprintf(change_file_name,"%s.ch",*argv);
@@ -1245,20 +1244,20 @@ found_change= true;
}
/*:78*/
-#line 1177 "common.w"
+#line 1176 "common.w"
else if(!found_out)/*79:*/
-#line 1224 "common.w"
+#line 1225 "common.w"
{
if(s-*argv> max_file_name_length-5)
/*82:*/
-#line 1260 "common.w"
+#line 1261 "common.w"
fatal("! Filename too long\n",*argv);
/*:82*/
-#line 1227 "common.w"
+#line 1228 "common.w"
if(dot_pos==NULL){
sprintf(tex_file_name,"%s.tex",*argv);
@@ -1276,10 +1275,10 @@ found_out= true;
}
/*:79*/
-#line 1178 "common.w"
+#line 1177 "common.w"
else/*81:*/
-#line 1248 "common.w"
+#line 1249 "common.w"
{
if(program==ctangle)
@@ -1293,12 +1292,12 @@ else fatal(
}
/*:81*/
-#line 1179 "common.w"
+#line 1178 "common.w"
}
}
if(!found_web)/*81:*/
-#line 1248 "common.w"
+#line 1249 "common.w"
{
if(program==ctangle)
@@ -1312,7 +1311,7 @@ else fatal(
}
/*:81*/
-#line 1182 "common.w"
+#line 1181 "common.w"
}
diff --git a/web/c_cpp/cweb/common.h b/web/c_cpp/cweb/common.h
index 4104965917..97fda82e75 100644
--- a/web/c_cpp/cweb/common.h
+++ b/web/c_cpp/cweb/common.h
@@ -2,7 +2,7 @@
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.
% It is distributed WITHOUT ANY WARRANTY, express or implied.
-% Version 4.10 --- August 2023 (works also with later versions)
+% Version 4.11 --- December 2023 (works also with later versions)
% Copyright (C) 1987,1990,1993 Silvio Levy and Donald E. Knuth
@@ -41,7 +41,7 @@ extern int phase; /* which phase are we in? */
@ The procedure that gets everything rolling:
@<Predecl...@>=
-extern void common_init(void);@/
+extern void common_init(void);
@ Interface to the standard \CEE/ library:
@@ -166,7 +166,7 @@ extern name_pointer name_dir_end; /* end of |name_dir| */
extern name_pointer name_ptr; /* first unused position in |name_dir| */
extern name_pointer hash[]; /* heads of hash lists */
extern hash_pointer hash_end; /* end of |hash| */
-extern hash_pointer h; /* index into hash-head array */
+extern hash_pointer hash_ptr; /* index into hash-head array */
@ @<Predecl...@>=
extern name_pointer id_lookup(const char *,const char *,eight_bits);
diff --git a/web/c_cpp/cweb/common.w b/web/c_cpp/cweb/common.w
index dbcd57e31f..88932f3118 100644
--- a/web/c_cpp/cweb/common.w
+++ b/web/c_cpp/cweb/common.w
@@ -2,7 +2,7 @@
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.
% It is distributed WITHOUT ANY WARRANTY, express or implied.
-% Version 4.10 --- August 2023
+% Version 4.11 --- December 2023
% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -22,12 +22,12 @@
\def\v{\char'174} % vertical (|) in typewriter font
-\def\title{Common code for CTANGLE and CWEAVE (Version 4.10)}
+\def\title{Common code for CTANGLE and CWEAVE (Version 4.11)}
\def\topofcontents{\null\vfill
\centerline{\titlefont Common code for {\ttitlefont CTANGLE} and
{\ttitlefont CWEAVE}}
\vskip 15pt
- \centerline{(Version 4.10)}
+ \centerline{(Version 4.11)}
\vfill}
\def\botofcontents{\vfill
\noindent
@@ -619,15 +619,12 @@ it is inserted into the table.
@d hash_size 353 /* should be prime */
@<Global var...@>=
-name_pointer hash[hash_size]; /* heads of hash lists */
+name_pointer hash[hash_size]={NULL}; /* heads of hash lists */
hash_pointer hash_end = hash+hash_size-1; /* end of |hash| */
-hash_pointer h; /* index into hash-head array */
+hash_pointer hash_ptr; /* index into hash-head array */
@ Initially all the hash lists are empty.
-@<Init...@>=
-for (h=hash; h<=hash_end; *h++=NULL) ;
-
@ Here is the main procedure for finding identifiers:
@c
@@ -638,7 +635,7 @@ const char *last, /* last character of string plus one */
eight_bits t) /* the |ilk|; used by \.{CWEAVE} only */
{
const char *i=first; /* position in |buffer| */
- int h; /* hash code; shadows |hash_pointer h| */
+ int h; /* hash code */
size_t l; /* length of the given identifier */
name_pointer p; /* where the identifier is being sought */
if (last==NULL) for (last=first; *last!='\0'; last++);
@@ -883,10 +880,10 @@ while (p) { /* compare shortest prefix of |p| with new name */
p=(c==less?p->llink:p->rlink);
} else { /* new name matches |p| */
if (r!=NULL) { /* and also |r|: illegal */
- fputs("\n! Ambiguous prefix: matches <",stdout);
+ printf("%s","\n! Ambiguous prefix: matches <");
@.Ambiguous prefix ... @>
print_prefix_name(p);
- fputs(">\n and <",stdout);
+ printf("%s",">\n and <");
print_prefix_name(r);
err_print(">");
return name_dir; /* the unsection */
@@ -912,7 +909,7 @@ switch(section_name_cmp(&first,name_len,r)) {
/* compare all of |r| with new name */
case prefix:
if (!ispref) {
- fputs("\n! New name is a prefix of <",stdout);
+ printf("%s","\n! New name is a prefix of <");
@.New name is a prefix...@>
print_section_name(r);
err_print(">");
@@ -924,16 +921,16 @@ switch(section_name_cmp(&first,name_len,r)) {
extend_section_name(r,first,last+1,ispref);
break;
case bad_extension:
- fputs("\n! New name extends <",stdout);
+ printf("%s","\n! New name extends <");
@.New name extends...@>
print_section_name(r);
err_print(">");
break;
default: /* no match: illegal */
- fputs("\n! Section name incompatible with <",stdout);
+ printf("%s","\n! Section name incompatible with <");
@.Section name incompatible...@>
print_prefix_name(r);
- fputs(">,\n which abbreviates <",stdout);
+ printf("%s",">,\n which abbreviates <");
print_section_name(r);
err_print(">");
}
@@ -1014,7 +1011,7 @@ void
err_print( /* prints `\..' and location of error message */
const char *s)
{
- *s=='!'? printf("\n%s",s) : printf("%s",s);
+ printf(*s=='!' ? "\n%s" : "%s",s);
if (web_file_open) @<Print error location based on input buffer@>@;
update_terminal(); mark_error();
}
@@ -1030,10 +1027,12 @@ has special line-numbering conventions.
@<Print error location based on input buffer@>=
{char *k,*l; /* pointers into |buffer| */
-if (changing && include_depth==change_depth)
+if (changing && include_depth==change_depth && change_line>0)
printf(". (l. %d of change file)\n", change_line);
-else if (include_depth==0) printf(". (l. %d)\n", cur_line);
+else if (cur_line>0) {
+ if (include_depth==0) printf(". (l. %d)\n", cur_line);
else printf(". (l. %d of include file %s)\n", cur_line, cur_file_name);
+}
l= (loc>=limit? limit: loc);
if (l>buffer) {
for (k=buffer; k<l; k++)
@@ -1063,7 +1062,7 @@ a status of |EXIT_SUCCESS| if and only if only harmless messages were printed.
@c
int wrap_up(void) {
- if (show_progress) new_line();
+ if (show_progress || show_happiness || history != spotless) new_line();
if (show_stats)
print_stats(); /* print statistics about memory usage */
@<Print the job |history|@>@;
@@ -1093,7 +1092,7 @@ concatenated to print the final error message.
fatal(
const char *s,const char *t)
{
- if (*s) err_print(s);
+ if (*s) printf("%s",s);
err_print(t);
history=fatal_message; exit(wrap_up());
}
@@ -1203,8 +1202,10 @@ after the dot. We must check that there is enough room in
}
sprintf(alt_web_file_name,"%s.web",*argv);
sprintf(tex_file_name,"%s.tex",name_pos); /* strip off directory name */
- sprintf(idx_file_name,"%s.idx",name_pos);
- sprintf(scn_file_name,"%s.scn",name_pos);
+ if (make_xrefs) { /* indexes will be generated */
+ sprintf(idx_file_name,"%s.idx",name_pos);
+ sprintf(scn_file_name,"%s.scn",name_pos);
+ }
sprintf(C_file_name,"%s.c",name_pos);
found_web=true;
}
diff --git a/web/c_cpp/cweb/ctang-bs.ch b/web/c_cpp/cweb/ctang-bs.ch
index 6c6331c0c7..c70a87fe1d 100644
--- a/web/c_cpp/cweb/ctang-bs.ch
+++ b/web/c_cpp/cweb/ctang-bs.ch
@@ -17,12 +17,12 @@ by using "huge" pointers.
The ``banner line'' defined here should be changed whenever \.{CTANGLE}
is modified.
-@d banner "This is CTANGLE (Version 4.10)"
+@d banner "This is CTANGLE (Version 4.11)"
@y
The ``banner line'' defined here should be changed whenever \.{CTANGLE}
is modified.
-@d banner "This is CTANGLE (Version 4.10pc/big)"
+@d banner "This is CTANGLE (Version 4.11pc/big)"
@z
@@ -48,9 +48,6 @@ extern char *byte_ptr; /* first unused position in |byte_mem| */
extern name_info name_dir[]; /* information about names */
extern name_pointer name_dir_end; /* end of |name_dir| */
extern name_pointer name_ptr; /* first unused position in |name_dir| */
-extern name_pointer hash[]; /* heads of hash lists */
-extern hash_pointer hash_end; /* end of |hash| */
-extern hash_pointer h; /* index into hash-head array */
@y
@d ilk dummy.Ilk /* used by \.{CWEAVE} only */
@@ -78,9 +75,6 @@ extern name_info name_dir[]; /* information about names */
extern name_pointer name_dir_end; /* end of |name_dir| */
extern name_pointer name_ptr; /* first unused position in |name_dir| */
extern char huge* byte_ptr; /* first unused position in |byte_mem| */
-extern name_pointer hash[]; /* heads of hash lists */
-extern hash_pointer hash_end; /* end of |hash| */
-extern hash_pointer h; /* index into hash-head array */
@z
diff --git a/web/c_cpp/cweb/ctang-pc.ch b/web/c_cpp/cweb/ctang-pc.ch
index 25d62cdb6b..3e6e7ac5ef 100644
--- a/web/c_cpp/cweb/ctang-pc.ch
+++ b/web/c_cpp/cweb/ctang-pc.ch
@@ -9,9 +9,9 @@ that allows >64K arrays. If you need lots of bytes and toks, try the
alternate change files with -bs suffix instead of -pc.
@x section 1
-@d banner "This is CTANGLE (Version 4.10)"
+@d banner "This is CTANGLE (Version 4.11)"
@y
-@d banner "This is CTANGLE (Version 4.10pc)"
+@d banner "This is CTANGLE (Version 4.11pc)"
@z
@x section 17
@d max_bytes 100000 /* the number of bytes in identifiers,
diff --git a/web/c_cpp/cweb/ctang-ql.ch b/web/c_cpp/cweb/ctang-ql.ch
index 91aa24fff2..8072aff51a 100644
--- a/web/c_cpp/cweb/ctang-ql.ch
+++ b/web/c_cpp/cweb/ctang-ql.ch
@@ -7,15 +7,15 @@ ex <dev_>cc;"-v -h -c -=500000 ctangle_c"
@x
-\def\title{CTANGLE (Version 4.10)}
+\def\title{CTANGLE (Version 4.11)}
@y
-\def\title{CTANGLE (QL Version 4.10)}
+\def\title{CTANGLE (QL Version 4.11)}
@z
@x section 1
-@d banner "This is CTANGLE (Version 4.10)"
+@d banner "This is CTANGLE (Version 4.11)"
@y
-@d banner "This is CTANGLE (QL Version 4.10)"
+@d banner "This is CTANGLE (QL Version 4.11)"
@z
@x
diff --git a/web/c_cpp/cweb/ctang-vms.ch b/web/c_cpp/cweb/ctang-vms.ch
index 9e311d3aa3..2c4df3bf60 100644
--- a/web/c_cpp/cweb/ctang-vms.ch
+++ b/web/c_cpp/cweb/ctang-vms.ch
@@ -10,9 +10,9 @@ created:
(these changes not necessary for initial bootstrapping)
@x section 1 (01-FEB-1992 ST)
-@d banner "This is CTANGLE (Version 4.10)"
+@d banner "This is CTANGLE (Version 4.11)"
@y
-@d banner "This is CTANGLE (VAX/VMS Version 4.10)"
+@d banner "This is CTANGLE (VAX/VMS Version 4.11)"
@z
@x section 5 (01-FEB-1992 ST)
diff --git a/web/c_cpp/cweb/ctang-w32.ch b/web/c_cpp/cweb/ctang-w32.ch
index 51d3212b13..c0384b4888 100644
--- a/web/c_cpp/cweb/ctang-w32.ch
+++ b/web/c_cpp/cweb/ctang-w32.ch
@@ -4,9 +4,9 @@ This is the change file for CWEB's CTANGLE under Win32
Changes necessary for compiling with Borland C/C++
@x section 1
-@d banner "This is CTANGLE (Version 4.10)"
+@d banner "This is CTANGLE (Version 4.11)"
@y
-@d banner "This is CTANGLE (Version 4.10win32)"
+@d banner "This is CTANGLE (Version 4.11win32)"
@z
@x section 24
diff --git a/web/c_cpp/cweb/ctangle.c b/web/c_cpp/cweb/ctangle.c
index 2c31732e22..58e37b27b4 100644
--- a/web/c_cpp/cweb/ctangle.c
+++ b/web/c_cpp/cweb/ctangle.c
@@ -15,7 +15,7 @@
/*:5*/
#line 67 "ctangle.w"
-#define banner "This is CTANGLE (Version 4.10)" \
+#define banner "This is CTANGLE (Version 4.11)" \
#define ctangle false
#define cweave true \
@@ -230,7 +230,7 @@ extern name_pointer name_dir_end;
extern name_pointer name_ptr;
extern name_pointer hash[];
extern hash_pointer hash_end;
-extern hash_pointer h;
+extern hash_pointer hash_ptr;
/*:11*//*13:*/
#line 193 "common.h"
@@ -305,53 +305,53 @@ static output_state stack[stack_size+2];
static stack_pointer stack_end= stack+stack_size;
static stack_pointer stack_ptr;
-/*:32*//*37:*/
-#line 357 "ctangle.w"
+/*:32*//*38:*/
+#line 367 "ctangle.w"
static int cur_val;
-/*:37*//*42:*/
-#line 449 "ctangle.w"
+/*:38*//*42:*/
+#line 457 "ctangle.w"
static eight_bits out_state;
static boolean protect;
/*:42*//*45:*/
-#line 480 "ctangle.w"
+#line 488 "ctangle.w"
static name_pointer output_files[max_files];
static name_pointer*cur_out_file,*end_output_files,*an_output_file;
static char cur_section_name_char;
static char output_file_name[longest_name+1];
-/*:45*//*52:*/
-#line 573 "ctangle.w"
+/*:45*//*53:*/
+#line 584 "ctangle.w"
static boolean output_defs_seen= false;
-/*:52*//*57:*/
-#line 687 "ctangle.w"
+/*:53*//*57:*/
+#line 694 "ctangle.w"
static char translit[0200][translit_length];
/*:57*//*62:*/
-#line 763 "ctangle.w"
+#line 770 "ctangle.w"
-static eight_bits ccode[256];
+static eight_bits ccode[256]= {ignore};
/*:62*//*66:*/
-#line 823 "ctangle.w"
+#line 827 "ctangle.w"
static boolean comment_continues= false;
/*:66*//*68:*/
-#line 860 "ctangle.w"
+#line 864 "ctangle.w"
static name_pointer cur_section_name;
static boolean no_where;
/*:68*//*82:*/
-#line 1177 "ctangle.w"
+#line 1182 "ctangle.w"
static text_pointer cur_text;
static eight_bits next_control;
@@ -399,54 +399,48 @@ extern void print_stats(void);
#line 242 "ctangle.w"
static void store_two_bytes(sixteen_bits);
-/*:30*//*35:*/
-#line 321 "ctangle.w"
+/*:30*//*37:*/
+#line 347 "ctangle.w"
static void push_level(name_pointer);
static void pop_level(boolean);
-
-/*:35*//*39:*/
-#line 394 "ctangle.w"
static void get_output(void);
-/*:39*//*44:*/
-#line 470 "ctangle.w"
+/*:37*//*44:*/
+#line 478 "ctangle.w"
static void flush_buffer(void);
/*:44*//*49:*/
-#line 541 "ctangle.w"
-static void phase_two(void);
-
-/*:49*//*53:*/
-#line 576 "ctangle.w"
+#line 547 "ctangle.w"
+static void phase_two(void);
static void output_defs(void);
static void out_char(eight_bits);
-/*:53*//*65:*/
-#line 803 "ctangle.w"
+/*:49*//*65:*/
+#line 807 "ctangle.w"
static eight_bits skip_ahead(void);
static boolean skip_comment(boolean);
/*:65*//*70:*/
-#line 910 "ctangle.w"
+#line 915 "ctangle.w"
static eight_bits get_next(void);
/*:70*//*84:*/
-#line 1203 "ctangle.w"
+#line 1208 "ctangle.w"
static void scan_repl(eight_bits);
/*:84*//*91:*/
-#line 1395 "ctangle.w"
+#line 1399 "ctangle.w"
static void scan_section(void);
/*:91*//*99:*/
-#line 1472 "ctangle.w"
+#line 1476 "ctangle.w"
static void phase_one(void);
/*:99*//*101:*/
-#line 1505 "ctangle.w"
+#line 1509 "ctangle.w"
static void skip_limbo(void);
/*:101*/
@@ -479,12 +473,12 @@ init_node(name_dir);
last_unnamed= text_info;text_info->text_link= macro;
/*:27*//*46:*/
-#line 490 "ctangle.w"
+#line 498 "ctangle.w"
cur_out_file= end_output_files= output_files+max_files;
/*:46*//*58:*/
-#line 690 "ctangle.w"
+#line 697 "ctangle.w"
{int i;
for(i= 0;i<0200;i++)
@@ -492,11 +486,8 @@ snprintf(translit[i],translit_length,"X%02X",(unsigned int)(0200+i));
}
/*:58*//*63:*/
-#line 766 "ctangle.w"
-{
-int c;
-for(c= 0;c<256;c++)ccode[c]= ignore;
-}
+#line 773 "ctangle.w"
+
ccode[' ']= ccode['\t']= ccode['\n']= ccode['\v']= ccode['\r']= ccode['\f']
= ccode['*']= new_section;
ccode['@']= (eight_bits)'@';ccode['=']= string;
@@ -512,7 +503,7 @@ ccode['<']= ccode['(']= section_name;
ccode['\'']= ord;
/*:63*//*78:*/
-#line 1098 "ctangle.w"
+#line 1103 "ctangle.w"
section_text[0]= ' ';
/*:78*/
@@ -559,8 +550,8 @@ if(tok_ptr+2> tok_mem_end)overflow("token");
*tok_ptr++= x&0377;
}
-/*:29*//*34:*/
-#line 307 "ctangle.w"
+/*:29*//*35:*/
+#line 315 "ctangle.w"
static void
push_level(
@@ -575,8 +566,9 @@ cur_byte= cur_repl->tok_start;cur_section= 0;
}
}
-/*:34*//*36:*/
-#line 329 "ctangle.w"
+
+/*:35*//*36:*/
+#line 334 "ctangle.w"
static void
pop_level(
@@ -590,8 +582,8 @@ stack_ptr--;
if(stack_ptr> stack)cur_state= *stack_ptr;
}
-/*:36*//*38:*/
-#line 364 "ctangle.w"
+/*:36*//*39:*/
+#line 374 "ctangle.w"
static void
get_output(void)
@@ -614,13 +606,13 @@ switch(a/024000){
case 0:cur_val= (int)a;out_char(identifier);break;
case 1:if(a==output_defs_flag)output_defs();
else/*40:*/
-#line 399 "ctangle.w"
+#line 407 "ctangle.w"
{
a-= 024000;
if((a+name_dir)->equiv!=(void*)text_info)push_level(a+name_dir);
else if(a!=0){
-fputs("\n! Not present: <",stdout);
+printf("%s","\n! Not present: <");
print_section_name(a+name_dir);err_print(">");
}
@@ -628,7 +620,7 @@ goto restart;
}
/*:40*/
-#line 385 "ctangle.w"
+#line 395 "ctangle.w"
break;
default:cur_val= (int)a-050000;
@@ -638,8 +630,8 @@ out_char(section_number);
}
}
-/*:38*//*43:*/
-#line 457 "ctangle.w"
+/*:39*//*43:*/
+#line 465 "ctangle.w"
static void
flush_buffer(void)
@@ -654,7 +646,7 @@ cur_line++;
}
/*:43*//*48:*/
-#line 509 "ctangle.w"
+#line 517 "ctangle.w"
static void
phase_two(void){
@@ -664,23 +656,24 @@ cur_line= 1;
/*33:*/
#line 296 "ctangle.w"
-stack_ptr= stack+1;cur_name= name_dir;cur_repl= text_info->text_link+text_info;
+stack_ptr= stack+1;cur_name= name_dir;
+cur_repl= text_info->text_link+text_info;
cur_byte= cur_repl->tok_start;cur_section= 0;
/*:33*/
-#line 515 "ctangle.w"
+#line 523 "ctangle.w"
-/*51:*/
-#line 569 "ctangle.w"
+/*52:*/
+#line 580 "ctangle.w"
if(!output_defs_seen)
output_defs();
-/*:51*/
-#line 516 "ctangle.w"
+/*:52*/
+#line 524 "ctangle.w"
if(text_info->text_link==macro&&cur_out_file==end_output_files){
-fputs("\n! No program text was specified.",stdout);mark_harmless();
+printf("%s","\n! No program text was specified.");mark_harmless();
}
else{
@@ -691,12 +684,20 @@ printf(cur_out_file==end_output_files?
update_terminal();
}
-if(text_info->text_link!=macro){
+if(text_info->text_link!=macro)
+/*51:*/
+#line 570 "ctangle.w"
+
+{
while(stack_ptr> stack)get_output();
flush_buffer();
}
+
+/*:51*/
+#line 538 "ctangle.w"
+
/*50:*/
-#line 547 "ctangle.w"
+#line 556 "ctangle.w"
for(an_output_file= end_output_files;an_output_file> cur_out_file;){
an_output_file--;
@@ -707,26 +708,41 @@ fatal("! Cannot open output file ",output_file_name);
if(show_progress){printf("\n(%s)",output_file_name);update_terminal();}
cur_line= 1;
-stack_ptr= stack+1;
-cur_name= *an_output_file;
+/*34:*/
+#line 303 "ctangle.w"
+
+stack_ptr= stack+1;cur_name= *an_output_file;
cur_repl= (text_pointer)cur_name->equiv;
cur_byte= cur_repl->tok_start;
+
+/*:34*/
+#line 566 "ctangle.w"
+
+/*51:*/
+#line 570 "ctangle.w"
+
+{
while(stack_ptr> stack)get_output();
flush_buffer();
}
+/*:51*/
+#line 567 "ctangle.w"
+
+}
+
/*:50*/
-#line 533 "ctangle.w"
+#line 539 "ctangle.w"
if(show_happiness){
if(show_progress)new_line();
-fputs("Done.",stdout);
+printf("%s","Done.");
}
}
}
/*:48*//*54:*/
-#line 585 "ctangle.w"
+#line 592 "ctangle.w"
static void
output_defs(void)
@@ -766,7 +782,7 @@ pop_level(false);
}
/*:54*//*55:*/
-#line 628 "ctangle.w"
+#line 635 "ctangle.w"
static void
out_char(
@@ -779,7 +795,7 @@ case'\n':if(protect&&out_state!=verbatim)C_putc(' ');
if(protect||out_state==verbatim)C_putc('\\');
flush_buffer();if(out_state!=verbatim)out_state= normal;break;
/*59:*/
-#line 696 "ctangle.w"
+#line 703 "ctangle.w"
case identifier:
if(out_state==num_or_id)C_putc(' ');
@@ -791,10 +807,10 @@ else C_printf("%s",translit[(eight_bits)(*j)-0200]);
out_state= num_or_id;break;
/*:59*/
-#line 639 "ctangle.w"
+#line 646 "ctangle.w"
/*60:*/
-#line 706 "ctangle.w"
+#line 713 "ctangle.w"
case section_number:
if(cur_val> 0)C_printf("/*%d:*/",cur_val);
@@ -821,10 +837,10 @@ C_putc('"');C_putc('\n');
break;
/*:60*/
-#line 640 "ctangle.w"
+#line 647 "ctangle.w"
/*56:*/
-#line 658 "ctangle.w"
+#line 665 "ctangle.w"
case plus_plus:C_putc('+');C_putc('+');out_state= normal;break;
case minus_minus:C_putc('-');C_putc('-');out_state= normal;break;
@@ -845,7 +861,7 @@ case minus_gt_ast:C_putc('-');C_putc('>');C_putc('*');out_state= normal;
break;
/*:56*/
-#line 641 "ctangle.w"
+#line 648 "ctangle.w"
case'=':case'>':C_putc(cur_char);C_putc(' ');
out_state= normal;break;
@@ -864,7 +880,7 @@ default:C_putc(cur_char);out_state= normal;break;
}
/*:55*//*64:*/
-#line 787 "ctangle.w"
+#line 791 "ctangle.w"
static eight_bits
skip_ahead(void)
@@ -882,7 +898,7 @@ if(c!=ignore||*(loc-1)=='>')return c;
}
/*:64*//*67:*/
-#line 826 "ctangle.w"
+#line 830 "ctangle.w"
static boolean skip_comment(
boolean is_long_comment)
@@ -916,7 +932,7 @@ else loc++;
}
/*:67*//*69:*/
-#line 867 "ctangle.w"
+#line 871 "ctangle.w"
static eight_bits
get_next(void)
@@ -928,12 +944,12 @@ if(loc> limit){
if(preprocessing&&*(limit-1)!='\\')preprocessing= false;
if(get_line()==false)return new_section;
else if(print_where&&!no_where){
+sixteen_bits a;
print_where= false;
/*85:*/
-#line 1213 "ctangle.w"
+#line 1218 "ctangle.w"
{
-eight_bits a;
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
id_first= change_file_name;
@@ -947,7 +963,7 @@ store_id(a);
}
/*:85*/
-#line 879 "ctangle.w"
+#line 884 "ctangle.w"
}
else return(eight_bits)'\n';
@@ -960,7 +976,7 @@ else continue;
}
loc++;
if(xisdigit(c)||c=='.')/*73:*/
-#line 951 "ctangle.w"
+#line 956 "ctangle.w"
{
boolean hex_flag= false;
id_first= loc-1;
@@ -994,13 +1010,13 @@ return constant;
}
/*:73*/
-#line 890 "ctangle.w"
+#line 895 "ctangle.w"
else if(c=='\''||c=='"'
||((c=='L'||c=='u'||c=='U')&&(*loc=='\''||*loc=='"'))
||((c=='u'&&*loc=='8')&&(*(loc+1)=='\''||*(loc+1)=='"')))
/*74:*/
-#line 988 "ctangle.w"
+#line 993 "ctangle.w"
{
char delim= (char)c;
id_first= section_text+1;
@@ -1034,7 +1050,7 @@ c= (eight_bits)*loc++;
if(++id_loc<=section_text_end)*id_loc= (char)c;
}
if(id_loc>=section_text_end){
-fputs("\n! String too long: ",stdout);
+printf("%s","\n! String too long: ");
term_write(section_text+1,25);
err_print("...");
@@ -1044,11 +1060,11 @@ return string;
}
/*:74*/
-#line 894 "ctangle.w"
+#line 899 "ctangle.w"
else if(isalpha((int)c)||isxalpha(c)||ishigh(c))
/*72:*/
-#line 942 "ctangle.w"
+#line 947 "ctangle.w"
{
id_first= --loc;
do
@@ -1059,10 +1075,10 @@ id_loc= loc;return identifier;
}
/*:72*/
-#line 896 "ctangle.w"
+#line 901 "ctangle.w"
else if(c=='@')/*75:*/
-#line 1033 "ctangle.w"
+#line 1038 "ctangle.w"
switch(c= ccode[(eight_bits)*loc++]){
case ignore:continue;
@@ -1077,11 +1093,11 @@ continue;
case section_name:
cur_section_name_char= *(loc-1);
/*77:*/
-#line 1078 "ctangle.w"
+#line 1083 "ctangle.w"
{
char*k= section_text;
/*79:*/
-#line 1100 "ctangle.w"
+#line 1105 "ctangle.w"
while(true){
if(loc> limit&&get_line()==false){
@@ -1091,7 +1107,7 @@ loc= buffer+1;break;
}
c= (eight_bits)*loc;
/*80:*/
-#line 1123 "ctangle.w"
+#line 1128 "ctangle.w"
if(c=='@'){
c= (eight_bits)*(loc+1);
@@ -1110,7 +1126,7 @@ err_print("! Nesting of section names not allowed");break;
}
/*:80*/
-#line 1108 "ctangle.w"
+#line 1113 "ctangle.w"
loc++;if(k<section_text_end)k++;
if(xisspace(c)){
@@ -1119,7 +1135,7 @@ c= (eight_bits)' ';if(*(k-1)==' ')k--;
*k= (char)c;
}
if(k>=section_text_end){
-fputs("\n! Section name too long: ",stdout);
+printf("%s","\n! Section name too long: ");
term_write(section_text+1,25);
printf("...");mark_harmless();
@@ -1127,7 +1143,7 @@ printf("...");mark_harmless();
if(*k==' '&&k> section_text)k--;
/*:79*/
-#line 1080 "ctangle.w"
+#line 1085 "ctangle.w"
if(k-section_text> 3&&strncmp(k-2,"...",3)==0)
cur_section_name= section_lookup(section_text+1,k-3,true);
@@ -1136,7 +1152,7 @@ else cur_section_name= section_lookup(section_text+1,k,false);
if(cur_section_name_char=='(')
/*47:*/
-#line 494 "ctangle.w"
+#line 502 "ctangle.w"
{
for(an_output_file= cur_out_file;
@@ -1150,16 +1166,16 @@ else overflow("output files");
}
/*:47*/
-#line 1088 "ctangle.w"
+#line 1093 "ctangle.w"
return section_name;
}
/*:77*/
-#line 1046 "ctangle.w"
+#line 1051 "ctangle.w"
case string:/*81:*/
-#line 1145 "ctangle.w"
+#line 1150 "ctangle.w"
id_first= loc++;*(limit+1)= '@';*(limit+2)= '>';
while(*loc!='@'||*(loc+1)!='>')loc++;
@@ -1169,10 +1185,10 @@ id_loc= loc;loc+= 2;
return string;
/*:81*/
-#line 1047 "ctangle.w"
+#line 1052 "ctangle.w"
case ord:/*76:*/
-#line 1058 "ctangle.w"
+#line 1063 "ctangle.w"
id_first= loc;
if(*loc=='\\')
@@ -1194,13 +1210,13 @@ loc++;
return ord;
/*:76*/
-#line 1048 "ctangle.w"
+#line 1053 "ctangle.w"
default:return c;
}
/*:75*/
-#line 897 "ctangle.w"
+#line 902 "ctangle.w"
else if(xisspace(c)){
if(!preprocessing||loc> limit)continue;
@@ -1210,7 +1226,7 @@ else return(eight_bits)' ';
}
else if(c=='#'&&loc==buffer+1)preprocessing= true;
mistake:/*71:*/
-#line 919 "ctangle.w"
+#line 924 "ctangle.w"
switch(c){
case'+':if(*loc=='+')compress(plus_plus);break;
@@ -1235,14 +1251,14 @@ case'!':if(*loc=='=')compress(non_eq);break;
}
/*:71*/
-#line 905 "ctangle.w"
+#line 910 "ctangle.w"
return c;
}
}
/*:69*//*83:*/
-#line 1181 "ctangle.w"
+#line 1186 "ctangle.w"
static void
scan_repl(
@@ -1250,10 +1266,9 @@ eight_bits t)
{
sixteen_bits a;
if(t==section_name)/*85:*/
-#line 1213 "ctangle.w"
+#line 1218 "ctangle.w"
{
-eight_bits a;
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
id_first= change_file_name;
@@ -1267,11 +1282,11 @@ store_id(a);
}
/*:85*/
-#line 1187 "ctangle.w"
+#line 1192 "ctangle.w"
while(true)switch(a= get_next()){
/*86:*/
-#line 1228 "ctangle.w"
+#line 1232 "ctangle.w"
case identifier:store_id(a);
if(*buffer=='#'&&(
@@ -1284,7 +1299,7 @@ break;
case section_name:if(t!=section_name)goto done;
else{
/*87:*/
-#line 1269 "ctangle.w"
+#line 1273 "ctangle.w"
{
char*try_loc= loc;
while(*try_loc==' '&&try_loc<limit)try_loc++;
@@ -1297,16 +1312,15 @@ if(*try_loc=='=')err_print("! Missing `@ ' before a named section");
}
/*:87*/
-#line 1239 "ctangle.w"
+#line 1243 "ctangle.w"
a= cur_section_name-name_dir;
app_repl((a/0400)+0250);
app_repl(a%0400);
/*85:*/
-#line 1213 "ctangle.w"
+#line 1218 "ctangle.w"
{
-eight_bits a;
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
id_first= change_file_name;
@@ -1320,7 +1334,7 @@ store_id(a);
}
/*:85*/
-#line 1243 "ctangle.w"
+#line 1247 "ctangle.w"
}
break;
@@ -1332,10 +1346,9 @@ a= output_defs_flag;
app_repl((a/0400)+0200);
app_repl(a%0400);
/*85:*/
-#line 1213 "ctangle.w"
+#line 1218 "ctangle.w"
{
-eight_bits a;
store_two_bytes(0150000);
if(changing&&include_depth==change_depth){
id_first= change_file_name;
@@ -1349,13 +1362,13 @@ store_id(a);
}
/*:85*/
-#line 1253 "ctangle.w"
+#line 1257 "ctangle.w"
}
break;
case constant:case string:
/*88:*/
-#line 1286 "ctangle.w"
+#line 1290 "ctangle.w"
app_repl(a);
while(id_first<id_loc){
@@ -1371,12 +1384,12 @@ app_repl(*id_first++);
app_repl(a);
/*:88*/
-#line 1257 "ctangle.w"
+#line 1261 "ctangle.w"
break;
case ord:
/*89:*/
-#line 1304 "ctangle.w"
+#line 1308 "ctangle.w"
{
int c= (int)((eight_bits)*id_first);
if(c=='\\'){
@@ -1426,7 +1439,7 @@ app_repl(constant);
}
/*:89*/
-#line 1260 "ctangle.w"
+#line 1264 "ctangle.w"
break;
case definition:case format_code:case begin_C:if(t!=section_name)goto done;
@@ -1437,7 +1450,7 @@ err_print("! @d, @f and @c are ignored in C text");continue;
case new_section:goto done;
/*:86*/
-#line 1192 "ctangle.w"
+#line 1197 "ctangle.w"
case')':app_repl(a);
if(t==macro)app_repl(' ');
@@ -1450,7 +1463,7 @@ cur_text= text_ptr;(++text_ptr)->tok_start= tok_ptr;
}
/*:83*//*90:*/
-#line 1362 "ctangle.w"
+#line 1366 "ctangle.w"
static void
scan_section(void)
@@ -1465,7 +1478,7 @@ printf("*%d",(int)section_count);update_terminal();
next_control= ignore;
while(true){
/*92:*/
-#line 1403 "ctangle.w"
+#line 1407 "ctangle.w"
while(next_control<definition)
@@ -1474,11 +1487,11 @@ loc-= 2;next_control= get_next();
}
/*:92*/
-#line 1376 "ctangle.w"
+#line 1380 "ctangle.w"
if(next_control==definition){
/*93:*/
-#line 1410 "ctangle.w"
+#line 1414 "ctangle.w"
while((next_control= get_next())=='\n');
if(next_control!=identifier){
@@ -1494,7 +1507,7 @@ scan_repl(macro);
cur_text->text_link= macro;
/*:93*/
-#line 1378 "ctangle.w"
+#line 1382 "ctangle.w"
continue;
}
@@ -1504,14 +1517,14 @@ p= name_dir;break;
if(next_control==section_name){
p= cur_section_name;
/*94:*/
-#line 1432 "ctangle.w"
+#line 1436 "ctangle.w"
while((next_control= get_next())=='+');
if(next_control!='='&&next_control!=eq_eq)
continue;
/*:94*/
-#line 1386 "ctangle.w"
+#line 1390 "ctangle.w"
break;
}
@@ -1519,20 +1532,20 @@ return;
}
no_where= print_where= false;
/*95:*/
-#line 1437 "ctangle.w"
+#line 1441 "ctangle.w"
/*96:*/
-#line 1442 "ctangle.w"
+#line 1446 "ctangle.w"
store_two_bytes((sixteen_bits)(0150000+section_count));
/*:96*/
-#line 1438 "ctangle.w"
+#line 1442 "ctangle.w"
scan_repl(section_name);
/*97:*/
-#line 1446 "ctangle.w"
+#line 1450 "ctangle.w"
if(p==name_dir||p==NULL){
last_unnamed->text_link= cur_text-text_info;last_unnamed= cur_text;
@@ -1549,16 +1562,16 @@ cur_text->text_link= section_flag;
/*:97*/
-#line 1440 "ctangle.w"
+#line 1444 "ctangle.w"
/*:95*/
-#line 1392 "ctangle.w"
+#line 1396 "ctangle.w"
}
/*:90*//*98:*/
-#line 1461 "ctangle.w"
+#line 1465 "ctangle.w"
static void
phase_one(void){
@@ -1571,7 +1584,7 @@ check_complete();
}
/*:98*//*100:*/
-#line 1477 "ctangle.w"
+#line 1481 "ctangle.w"
static void
skip_limbo(void)
@@ -1585,7 +1598,7 @@ char c= *loc++;
switch(ccode[(eight_bits)c]){
case new_section:return;
case translit_code:/*102:*/
-#line 1507 "ctangle.w"
+#line 1511 "ctangle.w"
while(xisspace(*loc)&&loc<limit)loc++;
loc+= 3;
@@ -1610,7 +1623,7 @@ translit[i-0200][loc-beg]= '\0';
}
/*:102*/
-#line 1489 "ctangle.w"
+#line 1493 "ctangle.w"
break;
case format_code:case'@':break;
case control_text:if(c=='q'||c=='Q'){
@@ -1628,7 +1641,7 @@ default:err_print("! Double @ should be used in limbo");
}
/*:100*//*103:*/
-#line 1533 "ctangle.w"
+#line 1537 "ctangle.w"
void
print_stats(void){
diff --git a/web/c_cpp/cweb/ctangle.w b/web/c_cpp/cweb/ctangle.w
index c8ae55df85..37b09e7fc0 100644
--- a/web/c_cpp/cweb/ctangle.w
+++ b/web/c_cpp/cweb/ctangle.w
@@ -2,7 +2,7 @@
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.
% It is distributed WITHOUT ANY WARRANTY, express or implied.
-% Version 4.10 --- August 2023
+% Version 4.11 --- December 2023
% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -27,11 +27,11 @@
\mathchardef\RA="3221 % right arrow
\mathchardef\BA="3224 % double arrow
-\def\title{CTANGLE (Version 4.10)}
+\def\title{CTANGLE (Version 4.11)}
\def\topofcontents{\null\vfill
\centerline{\titlefont The {\ttitlefont CTANGLE} processor}
\vskip 15pt
- \centerline{(Version 4.10)}
+ \centerline{(Version 4.11)}
\vfill}
\def\botofcontents{\vfill
\noindent
@@ -61,7 +61,7 @@ Joachim Schrod, Lee Wittenberg, and others who have contributed improvements.
The ``banner line'' defined here should be changed whenever \.{CTANGLE}
is modified.
-@d banner "This is CTANGLE (Version 4.10)"
+@d banner "This is CTANGLE (Version 4.11)"
@c
@<Include files@>@/
@@ -294,9 +294,17 @@ code; if there are no such sections, there is nothing to output, and an
error message will have been generated before we do any of the initialization.
@<Initialize the output stacks@>=
-stack_ptr=stack+1; cur_name=name_dir; cur_repl=text_info->text_link+text_info;
+stack_ptr=stack+1; cur_name=name_dir;
+cur_repl=text_info->text_link+text_info;
cur_byte=cur_repl->tok_start; cur_section=0;
+@ Similar settings are used for secondary output files.
+
+@<Initialize the secondary output@>=
+stack_ptr=stack+1; cur_name=*an_output_file;
+cur_repl=(text_pointer)cur_name->equiv;
+cur_byte=cur_repl->tok_start;
+
@ When the replacement text for name |p| is to be inserted into the output,
the following subroutine is called to save the old level of output and get
the new one going.
@@ -318,9 +326,6 @@ name_pointer p)
}
}
-@ @<Predecl...@>=
-static void push_level(name_pointer);@/
-static void pop_level(boolean);
@ When we come to the end of a replacement text, the |pop_level| subroutine
does the right thing: It either moves to the continuation of this replacement
@@ -339,6 +344,11 @@ boolean flag) /* |flag==false| means we are in |output_defs| */
if (stack_ptr>stack) cur_state=*stack_ptr;@^system dependencies@>
}
+@ @<Predecl...@>=
+static void push_level(name_pointer);@/
+static void pop_level(boolean);@/
+static void get_output(void);
+
@ The heart of the output procedure is the function |get_output|,
which produces the next token of output and sends it on to the lower-level
function |out_char|. The main purpose of |get_output| is to handle the
@@ -391,8 +401,6 @@ get_output(void) /* sends next token to |out_char| */
}
}
-@ @<Predecl...@>=@+static void get_output(void);
-
@ The user may have forgotten to give any \CEE/ text for a section name,
or the \CEE/ text may have been associated with a different name by mistake.
@@ -401,7 +409,7 @@ or the \CEE/ text may have been associated with a different name by mistake.
a-=024000;
if ((a+name_dir)->equiv!=(void *)text_info) push_level(a+name_dir);
else if (a!=0) {
- fputs("\n! Not present: <",stdout);
+ printf("%s","\n! Not present: <");
print_section_name(a+name_dir); err_print(">");
@.Not present: <section name>@>
}
@@ -515,7 +523,7 @@ phase_two (void) {
@<Initialize the output stacks@>@;
@<Output macro definitions if appropriate@>@;
if (text_info->text_link==macro && cur_out_file==end_output_files) {
- fputs("\n! No program text was specified.",stdout); mark_harmless();
+ printf("%s","\n! No program text was specified."); mark_harmless();
@.No program text...@>
}
else {
@@ -526,19 +534,20 @@ phase_two (void) {
@.Writing the output...@>
update_terminal();
}
- if (text_info->text_link!=macro) {
- while (stack_ptr>stack) get_output();
- flush_buffer();
- }
+ if (text_info->text_link!=macro)
+ @<Output material...@>@;
@<Write all the named output files@>@;
if (show_happiness) {
if (show_progress) new_line();
- fputs("Done.",stdout);
+ printf("%s","Done.");
}
}
}
-@ @<Predecl...@>=@+static void phase_two(void);
+@ @<Predecl...@>=
+static void phase_two(void);@/
+static void output_defs(void);@/
+static void out_char(eight_bits);
@ To write the named output files, we proceed as for the unnamed
section.
@@ -554,12 +563,14 @@ for (an_output_file=end_output_files; an_output_file>cur_out_file;) {
@.Cannot open output file@>
if (show_progress) { printf("\n(%s)",output_file_name); update_terminal(); }
cur_line=1;
- stack_ptr=stack+1;
- cur_name=*an_output_file;
- cur_repl=(text_pointer)cur_name->equiv;
- cur_byte=cur_repl->tok_start;
- while (stack_ptr > stack) get_output();
- flush_buffer();
+ @<Initialize the secondary output@>@;
+ @<Output material...@>@;
+}
+
+@ @<Output material from |stack|@>=
+{
+ while (stack_ptr>stack) get_output();
+ flush_buffer();
}
@ If a \.{@@h} was not encountered in the input,
@@ -573,10 +584,6 @@ that refer to macros, preceded by the \.{\#define} preprocessor command.
@ @<Private...@>=
static boolean output_defs_seen=false;
-@ @<Predecl...@>=
-static void output_defs(void);@/
-static void out_char(eight_bits);
-
@ @d macro_end (cur_text+1)->tok_start /* end of |macro| replacement text */
@#
@d C_printf(c,a) fprintf(C_file,c,a)
@@ -761,12 +768,9 @@ milestones.
@d new_section 0312 /* control code for `\.{@@\ }' and `\.{@@*}' */
@<Private...@>=
-static eight_bits ccode[256]; /* meaning of a char following \.{@@} */
+static eight_bits ccode[256]={ignore}; /* meaning of a char following \.{@@} */
-@ @<Set ini...@>= {
- int c; /* must be |int| so the |for| loop will end */
- for (c=0; c<256; c++) ccode[c]=ignore;
-}
+@ @<Set ini...@>=
ccode[' ']=ccode['\t']=ccode['\n']=ccode['\v']=ccode['\r']=ccode['\f']
=ccode['*']=new_section;
ccode['@@']=(eight_bits)'@@'; ccode['=']=string;
@@ -875,6 +879,7 @@ get_next(void) /* produces the next input token */
if (preprocessing && *(limit-1)!='\\') preprocessing=false;
if (get_line()==false) return new_section;
else if (print_where && !no_where) {
+ sixteen_bits a;
print_where=false;
@<Insert the line number into |tok_mem|@>@;
}
@@ -1018,7 +1023,7 @@ convention, but do not allow the string to be longer than |longest_name|.
if (++id_loc<=section_text_end) *id_loc=(char)c;
}
if (id_loc>=section_text_end) {
- fputs("\n! String too long: ",stdout);
+ printf("%s","\n! String too long: ");
@.String too long@>
term_write(section_text+1,25);
err_print("...");
@@ -1113,7 +1118,7 @@ while (true) {
*k=(char)c;
}
if (k>=section_text_end) {
- fputs("\n! Section name too long: ",stdout);
+ printf("%s","\n! Section name too long: ");
@.Section name too long@>
term_write(section_text+1,25);
printf("..."); mark_harmless();
@@ -1212,7 +1217,6 @@ file name.
@<Insert the line...@>=
{
- eight_bits a; /* shadow variable |a| */
store_two_bytes(0150000);
if (changing && include_depth==change_depth) { /* correction made Feb 2017 */
id_first=change_file_name;
diff --git a/web/c_cpp/cweb/cweav-bs.ch b/web/c_cpp/cweb/cweav-bs.ch
index 1d541d536b..c2f3214c79 100644
--- a/web/c_cpp/cweb/cweav-bs.ch
+++ b/web/c_cpp/cweb/cweav-bs.ch
@@ -20,12 +20,12 @@ This file contributed by Barry Schwartz, trashman@crud.mn.org, 28 Jun 94.
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 4.10)"
+@d banner "This is CWEAVE (Version 4.11)"
@y
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 4.10pc/big)"
+@d banner "This is CWEAVE (Version 4.11pc/big)"
@z
@@ -51,9 +51,6 @@ extern char *byte_ptr; /* first unused position in |byte_mem| */
extern name_info name_dir[]; /* information about names */
extern name_pointer name_dir_end; /* end of |name_dir| */
extern name_pointer name_ptr; /* first unused position in |name_dir| */
-extern name_pointer hash[]; /* heads of hash lists */
-extern hash_pointer hash_end; /* end of |hash| */
-extern hash_pointer h; /* index into hash-head array */
@y
@d ilk dummy.Ilk /* used by \.{CWEAVE} only */
@@ -81,9 +78,6 @@ extern name_info name_dir[]; /* information about names */
extern name_pointer name_dir_end; /* end of |name_dir| */
extern name_pointer name_ptr; /* first unused position in |name_dir| */
extern char huge* byte_ptr; /* first unused position in |byte_mem| */
-extern name_pointer hash[]; /* heads of hash lists */
-extern hash_pointer hash_end; /* end of |hash| */
-extern hash_pointer h; /* index into hash-head array */
@z
diff --git a/web/c_cpp/cweb/cweav-pc.ch b/web/c_cpp/cweb/cweav-pc.ch
index 76173410af..165b8a54ee 100644
--- a/web/c_cpp/cweb/cweav-pc.ch
+++ b/web/c_cpp/cweb/cweav-pc.ch
@@ -11,9 +11,9 @@ that allows >64K arrays. (If you need lots more bytes, try the alternate
change files that have -bs in their name instead of -pc.)
@x section 1
-@d banner "This is CWEAVE (Version 4.10)"
+@d banner "This is CWEAVE (Version 4.11)"
@y
-@d banner "This is CWEAVE (Version 4.10pc)"
+@d banner "This is CWEAVE (Version 4.11pc)"
@z
@x section 17
diff --git a/web/c_cpp/cweb/cweav-ql.ch b/web/c_cpp/cweb/cweav-ql.ch
index 8f40a9dca6..31bd6138a2 100644
--- a/web/c_cpp/cweb/cweav-ql.ch
+++ b/web/c_cpp/cweb/cweav-ql.ch
@@ -7,15 +7,15 @@ ex <dev_>cc;"-v -h -c =500000 cweave_c"
@x
-\def\title{CWEAVE (Version 4.10)}
+\def\title{CWEAVE (Version 4.11)}
@y
-\def\title{CWEAVE (QL Version 4.10)}
+\def\title{CWEAVE (QL Version 4.11)}
@z
@x section 1
-@d banner "This is CWEAVE (Version 4.10)"
+@d banner "This is CWEAVE (Version 4.11)"
@y
-@d banner "This is CWEAVE (QL Version 4.10)"
+@d banner "This is CWEAVE (QL Version 4.11)"
@z
@x
diff --git a/web/c_cpp/cweb/cweav-vms.ch b/web/c_cpp/cweb/cweav-vms.ch
index d2cef52379..b944f83815 100644
--- a/web/c_cpp/cweb/cweav-vms.ch
+++ b/web/c_cpp/cweb/cweav-vms.ch
@@ -13,9 +13,9 @@ modified:
(also modified by Don Knuth to keep version numbers uptodate)
@x section 1 (01-FEB-1992 ST)
-@d banner "This is CWEAVE (Version 4.10)"
+@d banner "This is CWEAVE (Version 4.11)"
@y
-@d banner "This is CWEAVE (VAX/VMS Version 4.10)"
+@d banner "This is CWEAVE (VAX/VMS Version 4.11)"
@z
@x section 5 (01-FEB-1992 ST)
diff --git a/web/c_cpp/cweb/cweav-w32.ch b/web/c_cpp/cweb/cweav-w32.ch
index 94f4c39aa6..1bf1471e18 100644
--- a/web/c_cpp/cweb/cweav-w32.ch
+++ b/web/c_cpp/cweb/cweav-w32.ch
@@ -2,9 +2,9 @@ This is the change file for CWEB's CWEAVE under Win32
(Contributed by Fabrice Popineau, February 2002)
@x section 1
-@d banner "This is CWEAVE (Version 4.10)"
+@d banner "This is CWEAVE (Version 4.11)"
@y
-@d banner "This is CWEAVE (Version 4.10win32)"
+@d banner "This is CWEAVE (Version 4.11win32)"
@z
@x section 32
diff --git a/web/c_cpp/cweb/cweave.w b/web/c_cpp/cweb/cweave.w
index 70654828c1..2048c6bb2f 100644
--- a/web/c_cpp/cweb/cweave.w
+++ b/web/c_cpp/cweb/cweave.w
@@ -2,7 +2,7 @@
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.
% It is distributed WITHOUT ANY WARRANTY, express or implied.
-% Version 4.10 --- August 2023
+% Version 4.11 --- December 2023
% Copyright (C) 1987,1990,1993,2000 Silvio Levy and Donald E. Knuth
@@ -32,11 +32,11 @@
\def\skipxTeX{\\{skip\_\TEX/}}
\def\copyxTeX{\\{copy\_\TEX/}}
-\def\title{CWEAVE (Version 4.10)}
+\def\title{CWEAVE (Version 4.11)}
\def\topofcontents{\null\vfill
\centerline{\titlefont The {\ttitlefont CWEAVE} processor}
\vskip 15pt
- \centerline{(Version 4.10)}
+ \centerline{(Version 4.11)}
\vfill}
\def\botofcontents{\vfill
\noindent
@@ -67,7 +67,7 @@ Crusius, and others who have contributed improvements.
The ``banner line'' defined here should be changed whenever \.{CWEAVE}
is modified.
-@d banner "This is CWEAVE (Version 4.10)"
+@d banner "This is CWEAVE (Version 4.11)"
@c
@<Include files@>@/
@@ -564,12 +564,9 @@ scanning routines.
representation by means of the table |ccode|.
@<Private...@>=
-static eight_bits ccode[256]; /* meaning of a char following \.{@@} */
+static eight_bits ccode[256]={ignore}; /* meaning of a char following \.{@@} */
-@ @<Set ini...@>= {
- int c; /* must be |int| so the |for| loop will end */
- for (c=0; c<256; c++) ccode[c]=ignore;
-}
+@ @<Set ini...@>=
ccode[' ']=ccode['\t']=ccode['\n']=ccode['\v']=ccode['\r']=ccode['\f']
=ccode['*']=new_section;
ccode['@@']='@@'; /* `quoted' at sign */
@@ -646,7 +643,7 @@ skip_TeX(void) /* skip past pure \TEX/ code */
}
}
-@*1 Inputting the next token.
+@* Inputting the next token.
As stated above, \.{CWEAVE}'s most interesting lexical scanning routine is the
|get_next| function that inputs the next token of \CEE/ input. However,
|get_next| is not especially complicated.
@@ -911,7 +908,7 @@ convention, but do not allow the string to be longer than |longest_name|.
if (++id_loc<=section_text_end) *id_loc=c;
}
if (id_loc>=section_text_end) {
- fputs("\n! String too long: ",stdout);
+ printf("%s","\n! String too long: ");
@.String too long@>
term_write(section_text+1,25);
printf("..."); mark_error();
@@ -981,7 +978,7 @@ while (true) {
*k=c;
}
if (k>=section_text_end) {
- fputs("\n! Section name too long: ",stdout);
+ printf("%s","\n! Section name too long: ");
@.Section name too long@>
term_write(section_text+1,25);
printf("..."); mark_harmless();
@@ -1302,13 +1299,13 @@ name_pointer p) /* print anomalies in subtree |p| */
cur_xref=(xref_pointer)p->xref;
if ((an_output=(cur_xref->num==file_flag))==true) cur_xref=cur_xref->xlink;
if (cur_xref->num <def_flag) {
- fputs("\n! Never defined: <",stdout);
+ printf("%s","\n! Never defined: <");
print_section_name(p); putchar('>'); mark_harmless();
@.Never defined: <section name>@>
}
while (cur_xref->num >=cite_flag) cur_xref=cur_xref->xlink;
if (cur_xref==xmem && !an_output) {
- fputs("\n! Never used: <",stdout);
+ printf("%s","\n! Never used: <");
print_section_name(p); putchar('>'); mark_harmless();
@.Never used: <section name>@>
}
@@ -3195,7 +3192,8 @@ static void reduce(scrap_pointer,short,eight_bits,short,short);@/
static void squash(scrap_pointer,short,eight_bits,short,short);
@ Now here's the |reduce| procedure used in our code for productions,
-which takes advantage of the simplification that occurs when |k==0|.
+which takes advantage of the simplifications that occur when |k==0|
+or |k==1|.
@c
static void
@@ -3204,7 +3202,7 @@ scrap_pointer j, short k,
eight_bits c,
short d, short n)
{
- scrap_pointer i, i1; /* pointers into scrap memory */
+ scrap_pointer i; /* pointer into scrap memory */
j->cat=c;
if (k>0) {
j->trans=text_ptr;
@@ -3212,10 +3210,8 @@ short d, short n)
freeze_text();
}
if (k>1) {
- for (i=j+k, i1=j+1; i<=lo_ptr; i++, i1++) {
- i1->cat=i->cat; i1->trans=i->trans;
- i1->mathness=i->mathness;
- }
+ for (i=j+k; i<=lo_ptr; i++)
+ *(i-k+1)=*i;@^system dependencies@>
lo_ptr=lo_ptr-k+1;
}
pp=(pp+d<scrap_base? scrap_base: pp+d);
@@ -3243,6 +3239,32 @@ short d, short n)
reduce(j,k,c,d,n);
}
+@ If \.{CWEAVE} is being run in debugging mode, the production numbers and
+current stack categories will be printed out when |tracing| is set to |fully|;
+a sequence of two or more irreducible scraps will be printed out when
+|tracing| is set to |partly|.
+
+@d off 0
+@d partly 1
+@d fully 2
+
+@<Private...@>=
+static int tracing=off; /* can be used to show parsing details */
+
+@ @<Print a snapsh...@>=
+if (tracing==fully) {
+ printf("\n%d:",n);
+ for (i=scrap_base; i<=lo_ptr; i++) {
+ putchar(i==pp?'*':' ');
+ if (i->mathness %4 == yes_math) putchar('+');
+ else if (i->mathness %4 == no_math) putchar('-');
+ print_cat(i->cat);
+ if (i->mathness /4 == yes_math) putchar('+');
+ else if (i->mathness /4 == no_math) putchar('-');
+ }
+ if (hi_ptr<=scrap_ptr) printf("..."); /* indicate that more is coming */
+}
+
@ And here now is the code that applies productions as long as possible.
Before applying the production mechanism, we must make sure
it has good input (at least four scraps, the length of the lhs of the
@@ -3277,38 +3299,9 @@ stored, since zero does not match anything in a production.
@<Make sure the entries...@>=
if (lo_ptr<pp+3) {
- while (hi_ptr<=scrap_ptr && lo_ptr!=pp+3) {
- (++lo_ptr)->cat=hi_ptr->cat; lo_ptr->mathness=hi_ptr->mathness;
- lo_ptr->trans=(hi_ptr++)->trans;
- }
- for (i=lo_ptr+1;i<=pp+3;i++) i->cat=0;
-}
-
-@ If \.{CWEAVE} is being run in debugging mode, the production numbers and
-current stack categories will be printed out when |tracing| is set to |fully|;
-a sequence of two or more irreducible scraps will be printed out when
-|tracing| is set to |partly|.
-
-@d off 0
-@d partly 1
-@d fully 2
-
-@<Private...@>=
-static int tracing=off; /* can be used to show parsing details */
-
-@ @<Print a snapsh...@>=
-if (tracing==fully) {
- scrap_pointer k; /* pointer into |scrap_info|; shadows |short k| */
- printf("\n%d:",n);
- for (k=scrap_base; k<=lo_ptr; k++) {
- if (k==pp) putchar('*'); else putchar(' ');
- if (k->mathness %4 == yes_math) putchar('+');
- else if (k->mathness %4 == no_math) putchar('-');
- print_cat(k->cat);
- if (k->mathness /4 == yes_math) putchar('+');
- else if (k->mathness /4 == no_math) putchar('-');
- }
- if (hi_ptr<=scrap_ptr) printf("..."); /* indicate that more is coming */
+ while (hi_ptr<=scrap_ptr && lo_ptr!=pp+3)
+ *(++lo_ptr)=*(hi_ptr++);@^system dependencies@>
+ for (j=lo_ptr+1;j<=pp+3;j++) j->cat=0;
}
@ The |translate| function assumes that scraps have been stored in
@@ -3328,7 +3321,6 @@ for overflow.
static text_pointer
translate(void) /* converts a sequence of scraps */
{
- scrap_pointer i; /* index into |cat| */
scrap_pointer j; /* runs through final scraps */
pp=scrap_base; lo_ptr=pp-1; hi_ptr=pp;
@<If tracing, print an indication of where we are@>@;
@@ -4130,7 +4122,7 @@ while (k<k_limit) {
@ @<Skip next char...@>=
if (*k++!='@@') {
- fputs("\n! Illegal control code in section name: <",stdout);
+ printf("%s","\n! Illegal control code in section name: <");
@.Illegal control code...@>
print_section_name(cur_section_name); printf("> "); mark_error();
}
@@ -4145,7 +4137,7 @@ equals the delimiter that began the string being copied.
j=limit+1; *j='|'; delim=0;
while (true) {
if (k>=k_limit) {
- fputs("\n! C text in section name didn't end: <",stdout);
+ printf("%s","\n! C text in section name didn't end: <");
@.C text...didn't end@>
print_section_name(cur_section_name); printf("> "); mark_error(); break;
}
@@ -4180,7 +4172,7 @@ actually output the \TEX/ material instead of merely looking at the
static void
phase_two(void) {
phase=2; reset_input();
-if (show_progress) fputs("\nWriting the output file...",stdout);
+if (show_progress) printf("%s","\nWriting the output file...");
@.Writing the output file...@>
section_count=0; format_visible=true; copy_limbo();
finish_line(); flush_buffer(out_buf,false,false);
@@ -4249,8 +4241,10 @@ else {
out_str("\\N");
@.\\N@>
{@+ char s[32];@+snprintf(s,32,"{%d}",sec_depth+1);@+out_str(s);@+}
- if (show_progress)
- printf("*%d",(int)section_count); update_terminal(); /* print a progress report */
+ if (show_progress) {
+ printf("*%d",(int)section_count);
+ update_terminal(); /* print a progress report */
+ }
}
out('{'); out_section(section_count); out('}');
@@ -4531,7 +4525,7 @@ if (no_xref)
out_str("\\end");
@.\\end@>
else {
- if (show_progress) fputs("\nWriting the index...",stdout);
+ if (show_progress) printf("%s","\nWriting the index...");
@.Writing the index...@>
if (change_exists) {
@<Tell about changed sections@>@;
@@ -4569,7 +4563,7 @@ finish_line();
fclose(active_file);
if (show_happiness) {
if (show_progress) new_line();
- fputs("Done.",stdout);
+ printf("%s","Done.");
}
check_complete(); /* was all of the change file used? */
}
@@ -4579,12 +4573,9 @@ check_complete(); /* was all of the change file used? */
@ Just before the index comes a list of all the changed sections, including
the index section itself.
-@<Private...@>=
-static sixteen_bits k_section; /* runs through the sections */
-
-@ @<Tell about changed sections@>=
+@<Tell about changed sections@>=
/* remember that the index is already marked as changed */
-k_section=0;
+sixteen_bits k_section=0; /* runs through the sections */
while (!changed_section[++k_section]);
out_str("\\ch ");
@.\\ch@>
@@ -4605,28 +4596,25 @@ list for character |c| begins at location |bucket[c]| and continues through
the |blink| array.
@<Private...@>=
-static name_pointer bucket[256];
+static name_pointer bucket[256]={NULL};
static name_pointer next_name; /* successor of |cur_name| when sorting */
static name_pointer blink[max_names]; /* links in the buckets */
@ To begin the sorting, we go through all the hash lists and put each entry
having a nonempty cross-reference list into the proper bucket.
-@<Do the first pass...@>= {
-int c;
-for (c=0; c<256; c++) bucket[c]=NULL;
-for (h=hash; h<=hash_end; h++) {
- next_name=*h;
+@<Do the first pass...@>=
+for (hash_ptr=hash; hash_ptr<=hash_end; hash_ptr++) {
+ next_name=*hash_ptr;
while (next_name) {
cur_name=next_name; next_name=cur_name->link;
if (cur_name->xref!=(void *)xmem) {
- c=(cur_name->byte_start)[0];
+ int c=(cur_name->byte_start)[0];
if (xisupper(c)) c=tolower(c);
blink[cur_name-name_dir]=bucket[c]; bucket[c]=cur_name;
}
}
}
-}
@ During the sorting phase we shall use the |cat| and |trans| arrays from
\.{CWEAVE}'s parsing algorithm and rename them |depth| and |head|. They now
@@ -4754,11 +4742,8 @@ while (sort_ptr>scrap_info) {
cur_name=next_name; next_name=blink[cur_name-name_dir];
cur_byte=cur_name->byte_start+cur_depth;
if (cur_byte==(cur_name+1)->byte_start) c=0; /* hit end of the name */
- else {
- c=*cur_byte;
- if (xisupper(c)) c=tolower(c);
- }
- blink[cur_name-name_dir]=bucket[c]; bucket[c]=cur_name;
+ else if (xisupper(c=*cur_byte)) c=tolower(c);
+ blink[cur_name-name_dir]=bucket[c]; bucket[c]=cur_name;
} while (next_name);
--sort_ptr; unbucket(cur_depth+1);
}
diff --git a/web/c_cpp/cweb/cweb.1 b/web/c_cpp/cweb/cweb.1
index 4c35edb754..192c7c9597 100644
--- a/web/c_cpp/cweb/cweb.1
+++ b/web/c_cpp/cweb/cweb.1
@@ -1,4 +1,4 @@
-.TH CWEB 1 2021-Apr-24
+.TH CWEB 1 2023-Aug-20
.
.SH NAME
ctangle, cweave \- translate CWEB to C and/or TeX
@@ -108,7 +108,7 @@ means treat 'typename' in templates like 'typedef'.
.SH FILES
The location of the files mentioned below varies from system to system.
.TP
-cwebmac.tex
+cwebmac.tex, cwebacromac.tex
TeX macros used by cweave output.
.TP
cwebman.tex
diff --git a/web/c_cpp/cweb/cwebacromac.tex b/web/c_cpp/cweb/cwebacromac.tex
new file mode 100644
index 0000000000..4c12e41382
--- /dev/null
+++ b/web/c_cpp/cweb/cwebacromac.tex
@@ -0,0 +1,175 @@
+% hypertext macros for CWEB listings (in addition to cwebmac.tex)
+% Version 1.1 --- September 2023
+\ifx\ifacrohint\undefined\endinput\fi % these are not standalone macros
+\ifluatex % LuaTeX is almost like pdfTeX
+\protected\def\pdfliteral {\pdfextension literal}
+\protected\def\pdfstartlink {\pdfextension startlink\space}
+\protected\def\pdfendlink {\pdfextension endlink}
+\protected\def\pdfoutline {\pdfextension outline\space}
+\protected\def\pdfdest {\pdfextension dest\space}
+\protected\def\pdfcatalog {\pdfextension catalog}
+\edef\pdfhorigin {\pdfvariable horigin}
+\edef\pdfvorigin {\pdfvariable vorigin}
+\let\pdfpagewidth=\pagewidth
+\let\pdfpageheight=\pageheight
+\let\pdfoutput=\outputmode
+\fi % end of LuaTeX->pdfTeX redirection macros
+
+\ifacro % The following are general pdf macros
+\def\thewidth{\the\wd0 \space}
+\def\theheight{\the\ht\strutbox\space}
+\def\thedepth{\the\dp\strutbox\space}
+\ifpdflua
+ \ifx\pdfannotlink\undefined\let\pdfannotlink\pdfstartlink\fi% for pdfTeX 0.14
+ \def\pdflink#1#2{\hbox{\pdfannotlink height \theheight depth \thedepth
+ attr{/Border [0 0 0]} goto num #1 \Blue #1\Black\pdfendlink}} % changed 3.69
+\else\def\pdflink#1#2{\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}%
+ \special{pdf: ec}}\special{pdf: ann width \thewidth height \theheight
+ depth \thedepth << /Type /Annot /Subtype /Link
+ /Border [0 0 0] /A << /S /GoTo /D (#2) >> >>}\box0\relax}\fi
+\def\sanitizecommand#1#2{\addtokens\usersanitizer
+ {\noexpand\dosanitizecommand\noexpand#1{#2}}}
+\def\dosanitizecommand#1#2{\ifx\nxt#1\addF{#2}\fi}
+
+\catcode`\[=1 \catcode`\]=2 \catcode`\{=12 \catcode`\}=12
+ \def\lbchar[{] \def\rbchar[}]
+\catcode`\[=12 \catcode`\]=12 \catcode`\{=1 \catcode`\}=2
+\catcode`\~=12 \def\tildechar{~} \catcode`\~=13
+\catcode`\|=0 |catcode`|\=12 |def|bschar{\} |catcode`|\=0 \catcode`\|=12
+\def\makeoutlinetoks{\Tnumfalse\afterassignment\makeolproctok\let\nxt= }
+\def\makeolnexttok{\afterassignment\makeolproctok\let\nxt= }
+\def\makeolgobbletok{\afterassignment\makeolnexttok\let\nxt= }
+\def\addF#1{\addtokens\toksF{#1}\tokprocessedtrue}
+% now comes a routine to "sanitize" section names, for pdf outlines
+\def\makeolproctok{\tokprocessedfalse
+ \let\next\makeolnexttok % default
+ \ifx\nxt\outlinedone\let\next\outlinedone
+ \else\ifx{\nxt \else\ifx}\nxt \Tnumfalse \instrfalse % skip braces
+ \else\ifx$\nxt % or a $ sign
+ \else\ifx^\nxt \addF^\else\ifx_\nxt \addF_% sanitize ^ and _
+ \else\ifx\nxt\spacechar \addF\space
+ \else\if\noexpand\nxt\relax % we have a control sequence; is it one we know?
+ \ifx\nxt~\addF\space
+ \else\ifx\nxt\onespace\addF\space
+ \else\the\usersanitizer
+ \iftokprocessed\else\makeolproctokctli
+ \iftokprocessed\else\makeolproctokctlii
+ \iftokprocessed\else\makeolproctokctliii % if not recognised, skip it
+ \fi\fi\fi
+ \fi\fi
+ \else % we don't have a control sequence, it's an ordinary char
+ \ifx/\nxt \addF{\string\/}% quote chars special to PDF with backslash
+ \else\ifx(\nxt \addF{\string\(}\else\ifx)\nxt \addF{\string\)}%
+ \else\ifx[\nxt \addF{\string\[}\else\ifx]\nxt \addF{\string\]}%
+ \else\expandafter\makeolproctokchar\meaning\nxt
+ \fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi \fi\fi\fi
+ \next
+}
+\def\makeolproctokchar#1 #2 #3{\addF{#3}}
+\def\makeolproctokctli{%
+ \ifx\nxt\CEE\addF{C}\let\next\makeolgobbletok % \CEE/
+ \else\ifx\nxt\UNIX\addF{UNIX}\let\next\makeolgobbletok % \UNIX/
+ \else\ifx\nxt\TEX\addF{TeX}\let\next\makeolgobbletok % \TEX/
+ \else\ifx\nxt\TeX\addF{TeX}\else\ifx\nxt\LaTeX\addF{LaTeX}%
+ \else\ifx\nxt\CPLUSPLUS\addF{C++}\let\next\makeolgobbletok % \CPLUSPLUS/
+ \else\ifx\nxt\Cee\addF{C}%
+ \else\ifx\nxt\PB \let\next\makeolgobbletok \tokprocessedtrue % \PB{...}
+ \else\ifx\nxt\.\tokprocessedtrue\instrtrue % \.{...}
+ % skip \|
+ \else\ifx\nxt\\\ifinstr\addF{\bschar\bschar}\else\tokprocessedtrue\fi
+ \else\ifx\nxt\&\ifinstr\addF&\else\tokprocessedtrue\fi
+ \else\ifx\nxt\~\ifTnum\addF{0}\else\addF\tildechar\fi % 077->\T{\~77}
+ \else\ifx\nxt\_\ifTnum\addF{E}\else\addF_\fi % 0.1E5->\T{0.1\_5}
+ \else\ifx\nxt\^\ifTnum\addF{0x}\else\addF^\fi % 0x77 -> \T{\^77}
+ \else\ifx\nxt\\\\\ifTnum\addF{0b}\else\addF\\\fi % 0b10111 -> \T{\\10111}
+ \else\ifx\nxt\$\ifTnum\tokprocessedtrue\else\addF$\fi %$% \T{77\$L}
+ \else\ifx\nxt\{\addF\lbchar\else\ifx\nxt\}\addF\rbchar
+ \else\ifx\nxt\ \addF\space\else\ifx\nxt\#\addF{\string\#}%
+ \else\ifx\nxt\PP\addF{++}\else\ifx\nxt\MM\addF{--}%
+ \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi
+ \fi\fi
+}
+\def\makeolproctokctlii{%
+ \ifx\nxt\MG\addF{->}\else\ifx\nxt\GG\addF{>>}%
+ \else\ifx\nxt\LL\addF{<<}\else\ifx\nxt\NULL\addF{NULL}%
+ \else\ifx\nxt\AND\addF&\else\ifx\nxt\OR\addF|%
+ \else\ifx\nxt\XOR\addF^\else\ifx\nxt\CM\addF\tildechar
+ \else\ifx\nxt\MOD\addF{\string\%}\else\ifx\nxt\DC\addF{::}%
+ \else\ifx\nxt\PA\addF{.*}\else\ifx\nxt\MGA\addF{->*}%
+ \else\ifx\nxt\this\addF{this}\else\ifx\nxt\?\addF?%
+ \else\ifx\nxt\E\addF{==}\else\ifx\nxt\G\addF{>=}%
+ \else\ifx\nxt\I\addF{!=}\else\ifx\nxt\K\addF{=}%
+ \else\ifx\nxt\l\addF{l}\else\ifx\nxt\L\addF{L}%
+ \else\ifx\nxt\o\addF{o}\else\ifx\nxt\O\addF{O}%
+ \else\ifx\nxt\R\addF!%
+ \else\ifx\nxt\T \Tnumtrue \let\next\makeolgobbletok
+ \tokprocessedtrue % \T{number}
+ \else\ifx\nxt\AM\addF&\else\ifx\nxt\%\addF{\string\%}%
+ \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi \fi
+}
+\def\makeolproctokctliii{%
+ \ifx\nxt\V\addF{||}\else\ifx\nxt\W\addF{&&}\else\ifx\nxt\Z\addF{<=}%
+ \else\ifx\nxt\*\addF*\else\ifx\nxt\Xand\addF{\space and\space}%
+ \else\ifx\nxt\Xandxeq\addF{\space and_eq\space}%
+ \else\ifx\nxt\Xbitand\addF{\space bitand\space}%
+ \else\ifx\nxt\Xbitor\addF{\space bitor\space}%
+ \else\ifx\nxt\Xcompl\addF{\space compl\space}%
+ \else\ifx\nxt\Xnot\addF{\space not\space}%
+ \else\ifx\nxt\Xnotxeq\addF{\space not_eq\space}%
+ \else\ifx\nxt\Xor\addF{\space or\space}%
+ \else\ifx\nxt\Xorxeq\addF{\space or_eq\space}%
+ \else\ifx\nxt\Xxor\addF{\space xor\space}%
+ \else\ifx\nxt\Xxorxeq\addF{\space xor_eq\space}%
+ \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi
+}
+\def\outlinedone{\edef\outlinest{\global\noexpand\toksE={\the\toksF}}%
+ \outlinest\let\outlinedone=\relax}
+\fi % End of pdf macros
+
+\ifhint
+% The following uses HINT primitives to implement:
+% \HINThome to mark the position of the home page
+% \HINTlabel to attach a label to the top of a section
+% \HINTlink to link a section number to the section label
+% \HINTcontents to produce an 'outline' item
+% These are the top level HINT macros that are used in this file
+% No HINT primitives are used directly.
+\def\HINThome{\HINTdest name {HINT.home}%
+ \HINToutline goto name {HINT.home} depth 1 {Table of Contents}}
+\def\HINTlabel{{\let\*=\empty\HINTdest num \secstar top}}
+\def\HINTlink#1#2{\HINTstartlink goto num #1 {#1}\HINTendlink}% #2 not used ???
+\def\HINTcontents#1#2#3{\HINToutline goto num #3 depth #2 {#1}}
+\let\pdflink=\HINTlink
+\fi % End of HINT macros
+
+% Common macros for \ifacro and \ifhint
+\ifacrohint
+\def\pdfnote#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}\maketoks}\the\toksA}
+\def\firstsecno#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}%
+ \def\makenote{\addtokens\toksB{\the\toksC}\def\makenote{\toksD={}
+ \toksC={}\let\space\empty}\makenote}\maketoks}}
+\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+\def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}%
+ \ifcat\noexpand\first0\countB=`#1\else\countB=0\fi\toksA={#2}}
+\def\maketoks{\expandafter\poptoks\the\toksA|ENDTOKS|%
+ \ifnum\countB>`9 \countB=0 \fi
+ \ifnum\countB<`0
+ \ifnum0=\countC\else\makenote\fi
+ \ifx\first.\let\next=\maketoksdone\else
+ \let\next=\maketoks
+ \addtokens\toksB{\the\toksD}
+ \ifx\first,\addtokens\toksB{\space}\fi
+ \fi
+ \else \addtokens\toksC{\the\toksD}\global\countC=1\let\next=\maketoks
+ \fi
+ \next
+}
+\def\makenote{\addtokens\toksB
+ {\noexpand\pdflink{\the\toksC}{\romannumeral\the\toksC}}\toksC={}\global\countC=0}
+\def\maketoksdone{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\fi % End of common macros
diff --git a/web/c_cpp/cweb/cwebmac.tex b/web/c_cpp/cweb/cwebmac.tex
index 382400a3f7..e079a80ef5 100644
--- a/web/c_cpp/cweb/cwebmac.tex
+++ b/web/c_cpp/cweb/cwebmac.tex
@@ -1,20 +1,8 @@
% standard macros for CWEB listings (in addition to plain.tex)
-% Version 4.10 --- August 2023
+% Version 4.11 --- October 2023
\ifx\renewenvironment\undefined\else\endinput\fi % LaTeX will use other macros
-\xdef\fmtversion{\fmtversion+CWEB4.10}
-\chardef\cwebversion=4 \chardef\cwebrevision=10
-\input iftex.sty % TeX engine tests
-\ifx\pdf+\pdftrue\fi % for plain TeX in combination with dvipdfm
-% Uncomment the following line if you want PDF goodies to be the default
-%\ifx\pdf-\else\pdftrue\fi
-\def\pdflinkcolor{0 0 1} % the RGB values for hyperlink color
-\ifxetex\pdftrue\fi % XeTeX produces PDF output
-\ifpdftex % pdfTeX produces PDF output if \pdfoutput>0
- \def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too
- \def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}}
-\fi
-\let\ifacro=\ifpdf
-\newif\ifacrohint \ifacro\acrohinttrue\fi \ifhint\acrohinttrue\fi
+\xdef\fmtversion{\fmtversion+CWEB4.11}
+\chardef\cwebversion=4 \chardef\cwebrevision=11
\let\:=\. % preserve a way to get the dot accent
% (all other accents will still work as usual)
@@ -134,162 +122,22 @@
\newif\iftokprocessed \newif\ifTnum \newif\ifinstr
{\def\\{\global\let\spacechar= }\\ }
-\ifacro % The following are pdf macros
-\def\thewidth{\the\wd0 \space}
-\def\theheight{\the\ht\strutbox\space}
-\def\thedepth{\the\dp\strutbox\space}
-\ifpdftex
- \ifx\pdfannotlink\undefined\let\pdfannotlink\pdfstartlink\fi% for pdfTeX 0.14
- \def\pdflink#1#2{\hbox{\pdfannotlink height \theheight depth \thedepth
- attr{/Border [0 0 0]} goto num #1 \Blue #1\Black\pdfendlink}} % changed 3.69
-\else\def\pdflink#1#2{\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}%
- \special{pdf: ec}}\special{pdf: ann width \thewidth height \theheight
- depth \thedepth << /Type /Annot /Subtype /Link
- /Border [0 0 0] /A << /S /GoTo /D (#2) >> >>}\box0\relax}\fi
-\def\sanitizecommand#1#2{\addtokens\usersanitizer
- {\noexpand\dosanitizecommand\noexpand#1{#2}}}
-\def\dosanitizecommand#1#2{\ifx\nxt#1\addF{#2}\fi}
-
-\catcode`\[=1 \catcode`\]=2 \catcode`\{=12 \catcode`\}=12
- \def\lbchar[{] \def\rbchar[}]
-\catcode`\[=12 \catcode`\]=12 \catcode`\{=1 \catcode`\}=2
-\catcode`\~=12 \def\tildechar{~} \catcode`\~=13
-\catcode`\|=0 |catcode`|\=12 |def|bschar{\} |catcode`|\=0 \catcode`\|=12
-\def\makeoutlinetoks{\Tnumfalse\afterassignment\makeolproctok\let\nxt= }
-\def\makeolnexttok{\afterassignment\makeolproctok\let\nxt= }
-\def\makeolgobbletok{\afterassignment\makeolnexttok\let\nxt= }
-\def\addF#1{\addtokens\toksF{#1}\tokprocessedtrue}
-% now comes a routine to "sanitize" section names, for pdf outlines
-\def\makeolproctok{\tokprocessedfalse
- \let\next\makeolnexttok % default
- \ifx\nxt\outlinedone\let\next\outlinedone
- \else\ifx{\nxt \else\ifx}\nxt \Tnumfalse \instrfalse % skip braces
- \else\ifx$\nxt % or a $ sign
- \else\ifx^\nxt \addF^\else\ifx_\nxt \addF_% sanitize ^ and _
- \else\ifx\nxt\spacechar \addF\space
- \else\if\noexpand\nxt\relax % we have a control sequence; is it one we know?
- \ifx\nxt~\addF\space
- \else\ifx\nxt\onespace\addF\space
- \else\the\usersanitizer
- \iftokprocessed\else\makeolproctokctli
- \iftokprocessed\else\makeolproctokctlii
- \iftokprocessed\else\makeolproctokctliii % if not recognised, skip it
- \fi\fi\fi\fi\fi
- \else % we don't have a control sequence, it's an ordinary char
- \ifx/\nxt \addF{\string\/}% quote chars special to PDF with backslash
- \else\ifx(\nxt \addF{\string\(}\else\ifx)\nxt \addF{\string\)}%
- \else\ifx[\nxt \addF{\string\[}\else\ifx]\nxt \addF{\string\]}%
- \else\expandafter\makeolproctokchar\meaning\nxt
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \next
-}
-\def\makeolproctokchar#1 #2 #3{\addF{#3}}
-\def\makeolproctokctli{%
- \ifx\nxt\CEE\addF{C}\let\next\makeolgobbletok % \CEE/
- \else\ifx\nxt\UNIX\addF{UNIX}\let\next\makeolgobbletok % \UNIX/
- \else\ifx\nxt\TEX\addF{TeX}\let\next\makeolgobbletok % \TEX/
- \else\ifx\nxt\TeX\addF{TeX}\else\ifx\nxt\LaTeX\addF{LaTeX}%
- \else\ifx\nxt\CPLUSPLUS\addF{C++}\let\next\makeolgobbletok % \CPLUSPLUS/
- \else\ifx\nxt\Cee\addF{C}%
- \else\ifx\nxt\PB \let\next\makeolgobbletok \tokprocessedtrue % \PB{...}
- \else\ifx\nxt\.\tokprocessedtrue\instrtrue % \.{...}
- % skip \|
- \else\ifx\nxt\\\ifinstr\addF{\bschar\bschar}\else\tokprocessedtrue\fi
- \else\ifx\nxt\&\ifinstr\addF&\else\tokprocessedtrue\fi
- \else\ifx\nxt\~\ifTnum\addF{0}\else\addF\tildechar\fi % 077->\T{\~77}
- \else\ifx\nxt\_\ifTnum\addF{E}\else\addF_\fi % 0.1E5->\T{0.1\_5}
- \else\ifx\nxt\^\ifTnum\addF{0x}\else\addF^\fi % 0x77 -> \T{\^77}
- \else\ifx\nxt\\\\\ifTnum\addF{0b}\else\addF\\\fi % 0b10111 -> \T{\\10111}
- \else\ifx\nxt\$\ifTnum\tokprocessedtrue\else\addF$\fi %$% \T{77\$L}
- \else\ifx\nxt\{\addF\lbchar \else\ifx\nxt\}\addF\rbchar
- \else\ifx\nxt\ \addF\space \else\ifx\nxt\#\addF{\string\#}%
- \else\ifx\nxt\PP\addF{++}\else\ifx\nxt\MM\addF{--}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-}
-\def\makeolproctokctlii{%
- \ifx\nxt\MG\addF{->}\else\ifx\nxt\GG\addF{>>}%
- \else\ifx\nxt\LL\addF{<<}\else\ifx\nxt\NULL\addF{NULL}%
- \else\ifx\nxt\AND\addF&\else\ifx\nxt\OR\addF|%
- \else\ifx\nxt\XOR\addF^\else\ifx\nxt\CM\addF\tildechar
- \else\ifx\nxt\MOD\addF{\string\%}\else\ifx\nxt\DC\addF{::}%
- \else\ifx\nxt\PA\addF{.*}\else\ifx\nxt\MGA\addF{->*}%
- \else\ifx\nxt\this\addF{this}\else\ifx\nxt\?\addF?%
- \else\ifx\nxt\E\addF{==}\else\ifx\nxt\G\addF{>=}%
- \else\ifx\nxt\I\addF{!=}\else\ifx\nxt\K\addF{=}%
- \else\ifx\nxt\l\addF{l}\else\ifx\nxt\L\addF{L}%
- \else\ifx\nxt\o\addF{o}\else\ifx\nxt\O\addF{O}%
- \else\ifx\nxt\R\addF!%
- \else\ifx\nxt\T \Tnumtrue \let\next\makeolgobbletok
- \tokprocessedtrue % \T{number}
- \else\ifx\nxt\AM\addF&\else\ifx\nxt\%\addF{\string\%}%
- \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi
- \fi\fi\fi\fi\fi \fi\fi\fi\fi\fi
- \fi\fi\fi\fi\fi\fi
-}
-\def\makeolproctokctliii{%
- \ifx\nxt\V\addF{||}\else\ifx\nxt\W\addF{&&}\else\ifx\nxt\Z\addF{<=}%
- \else\ifx\nxt\*\addF*\else\ifx\nxt\Xand\addF{\space and\space}%
- \else\ifx\nxt\Xandxeq\addF{\space and_eq\space}%
- \else\ifx\nxt\Xbitand\addF{\space bitand\space}%
- \else\ifx\nxt\Xbitor\addF{\space bitor\space}%
- \else\ifx\nxt\Xcompl\addF{\space compl\space}%
- \else\ifx\nxt\Xnot\addF{\space not\space}%
- \else\ifx\nxt\Xnotxeq\addF{\space not_eq\space}%
- \else\ifx\nxt\Xor\addF{\space or\space}%
- \else\ifx\nxt\Xorxeq\addF{\space or_eq\space}%
- \else\ifx\nxt\Xxor\addF{\space xor\space}%
- \else\ifx\nxt\Xxorxeq\addF{\space xor_eq\space}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- \fi\fi\fi\fi\fi
-}
-\def\outlinedone{\edef\outlinest{\global\noexpand\toksE={\the\toksF}}%
- \outlinest\let\outlinedone=\relax}
-\fi % End of pdf macros
-
-\ifhint
-% The following uses HINT primitives to implement:
-% \HINThome to mark the position of the home page
-% \HINTlabel to attach a label to the top of a section
-% \HINTlink to link a section number to the section label
-% \HINTcontents to produce an 'outline' item
-% These are the top level HINT macros that are used in this file
-% No HINT primitives are used directly.
-\def\HINThome{\HINTdest name {HINT.home}%
- \HINToutline goto name {HINT.home} depth 1 {Table of Contents}}
-\def\HINTlabel{{\let\*=\empty\HINTdest num \secstar top}}
-\def\HINTlink#1#2{\HINTstartlink goto num #1 {#1}\HINTendlink}% #2 not used ???
-\def\HINTcontents#1#2#3{\HINToutline goto num #3 depth #2 {#1}}
-\let\pdflink=\HINTlink
-\fi % End of HINT macros
-
-% Common macros for \ifacro and \ifhint
-\ifacrohint
-\def\pdfnote#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}\maketoks}\the\toksA}
-\def\firstsecno#1.{\setbox0=\hbox{\toksA={#1.}\toksB={}%
- \def\makenote{\addtokens\toksB{\the\toksC}\def\makenote{\toksD={}
- \toksC={}\let\space\empty}\makenote}\maketoks}}
-\def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-\def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}%
- \ifcat\noexpand\first0\countB=`#1\else\countB=0\fi\toksA={#2}}
-\def\maketoks{\expandafter\poptoks\the\toksA|ENDTOKS|%
- \ifnum\countB>`9 \countB=0 \fi
- \ifnum\countB<`0
- \ifnum0=\countC\else\makenote\fi
- \ifx\first.\let\next=\maketoksdone\else
- \let\next=\maketoks
- \addtokens\toksB{\the\toksD}
- \ifx\first,\addtokens\toksB{\space}\fi
- \fi
- \else \addtokens\toksC{\the\toksD}\global\countC=1\let\next=\maketoks
- \fi
- \next
-}
-\def\makenote{\addtokens\toksB
- {\noexpand\pdflink{\the\toksC}{\romannumeral\the\toksC}}\toksC={}\global\countC=0}
-\def\maketoksdone{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-\fi % End of common macros
-
-\def\pdfURL#1#2{\ifpdf \ifpdftex\pdfannotlink height \theheight depth \thedepth
+% Here we decide the output format, depending on the TeX engine in use:
+\input iftex.sty % TeX engine tests
+\ifx\pdf+\pdftrue\fi % for plain TeX in combination with dvipdfm
+% Uncomment the following line if you want PDF goodies to be the default
+%\ifx\pdf-\else\pdftrue\fi
+\ifxetex\pdftrue\fi % XeTeX produces PDF output
+\ifpdf \def\pdflinkcolor{0 0 1} \fi % the RGB values for hyperlink color
+\let\ifacro=\ifpdf
+\newif\ifacrohint \ifacro\acrohinttrue\fi \ifhint\acrohinttrue\fi
+\newif\ifpdflua \ifluatex\pdfluatrue\fi \ifpdftex\pdfluatrue\fi
+\ifpdflua % luaTeX and pdfTeX produce PDF output if \pdfoutput>0 (default)
+ \def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too
+ \def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}}
+\fi
+\ifacrohint \input cwebacromac \fi % load hypertext macros
+\def\pdfURL#1#2{\ifpdf \ifpdflua\pdfannotlink height \theheight depth \thedepth
attr {/Border [0 0 0]} user { /Type /Annot /Subtype /Link /A
<< /S /URI /URI (#2) >>}\Blue #1\Black \pdfendlink % changed in 3.69
\else {\setbox0=\hbox{\special{pdf: bc [ \pdflinkcolor ]}{#1}%
@@ -306,7 +154,7 @@
\ifhint\HINTlabel\fi% Start page before section
\noindent{\let\*=\lapstar\bf\secstar.\quad}%
\ifacro \smash{\raise\baselineskip\hbox to0pt{\let\*=\empty
- \ifpdftex \pdfdest num \secstar fith%
+ \ifpdflua \pdfdest num \secstar fith%
\else \special{pdf: dest (\romannumeral\secstar)
[ @thispage /FitH @ypos ]}\fi}}\fi}
\let\startsection=\stsec
@@ -347,7 +195,7 @@
\edef\gtitletoks{\expandafter\stripprefix\meaning\gtitletoks}%
\edef\next{\write\cont{\ZZ{\gtitletoks}{#1}{\secno}% write to contents file
{\noexpand\the\pageno}{\the\toksE}}}\next % \ZZ{title}{depth}{sec}{page}{ss}
- \ifpdf \ifpdftex\expandafter\xdef\csname curr#1\endcsname{\secno}
+ \ifpdf \ifpdflua\expandafter\xdef\csname curr#1\endcsname{\secno}
\ifnum#1>0\countB=#1 \advance\countB by-1
\advancenumber{chunk\the\countB.\expnumber{curr\the\countB}}\fi
\else \special{pdf: outline #1 << /Title (\the\toksE)
@@ -428,7 +276,7 @@
\def\title{\expandafter\uppercase\expandafter{\jobname}}
\def\topofcontents{\centerline{\titlefont\title}\vskip.7in
\vfill} % this material will start the table of contents page
-\def\startpdf{\ifpdf \ifpdftex\pdfcatalog{/PageMode /UseOutlines}
+\def\startpdf{\ifpdf \ifpdflua\pdfcatalog{/PageMode /UseOutlines}
\else {\special{pdf: docview << /PageMode /UseOutlines >>}}\fi\fi}
\def\botofcontents{\vfill
\centerline{\covernote}} % this material will end the table of contents page
@@ -450,7 +298,7 @@
\newwrite\cont
\output{\setbox0=\page % the first page is garbage
\openout\cont=\contentsfile
- \write\cont{\catcode `\noexpand\@=11\relax} % \makeatletter
+ \write\cont{\catcode `\noexpand\@=11\relax} % \makeatletter
\global\output{\normaloutput\page\lheader\rheader}}
\setpage
\vbox to \vsize{} % the first \topmark won't be null
@@ -462,7 +310,7 @@
\def\inx{\par\vskip6pt plus 1fil % we are beginning the index
\def\page{\box255 } \normalbottom
\write\cont{} % ensure that the contents file isn't empty
- \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother
+ \write\cont{\catcode `\noexpand\@=12\relax} % \makeatother
\closeout\cont % the contents information has been fully gathered
\output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi
\global\setbox\sbox=\page \global\pagesavedtrue \mark{\topmark}}
@@ -490,7 +338,7 @@
\def\fin{\par\vfill\eject % this is done when we are ending the index
\ifpagesaved\null\vfill\eject\fi % output a null index column
\if L\lr\else\null\vfill\eject\fi % finish the current page
- \ifpdf \ifpdftex \makebookmarks % added in Version 3.68
+ \ifpdf \ifpdflua \makebookmarks % added in Version 3.68
\countsections \fi\fi % and in Version 4.9
\parfillskip 0pt plus 1fil
\def\grouptitle{NAMES OF THE SECTIONS}
@@ -505,8 +353,8 @@
\def\Us{\note{Used in sections}} % crossref for uses of a section
\def\I{\par\hangindent 2em}\let\*=*
\ifacro \def\outsecname{Names of the sections} \let\Xpdf\X
-% \ifpdftex \makebookmarks \pdfdest name {NOS} fitb % in versions < 3.68
- \ifpdftex \pdfdest name {NOS} fith % changed in version 3.69
+% \ifpdflua \makebookmarks \pdfdest name {NOS} fitb % in versions < 3.68
+ \ifpdflua \pdfdest name {NOS} fith % changed in version 3.69
\pdfoutline goto name {NOS} count -\the\countD {\outsecname}
\def\X##1:##2\X{\Xpdf##1:##2\X \firstsecno##1.%
{\toksF={}\makeoutlinetoks##2\outlinedone\outlinedone}%
diff --git a/web/c_cpp/cweb/cwebman.pdf b/web/c_cpp/cweb/cwebman.pdf
index 8cfef0ea10..8201815b56 100644
--- a/web/c_cpp/cweb/cwebman.pdf
+++ b/web/c_cpp/cweb/cwebman.pdf
Binary files differ
diff --git a/web/c_cpp/cweb/cwebman.tex b/web/c_cpp/cweb/cwebman.tex
index 108bd32f88..7a906cc954 100644
--- a/web/c_cpp/cweb/cwebman.tex
+++ b/web/c_cpp/cweb/cwebman.tex
@@ -35,7 +35,7 @@
\def\lheader{\mainfont\the\pageno\hfill\sc\runninghead\hfill}
\def\rheader{\hfill\sc\runninghead\hfill\mainfont\the\pageno}
-\def\runninghead{{\tentt CWEB} USER MANUAL (VERSION 4.10)}
+\def\runninghead{{\tentt CWEB} USER MANUAL (VERSION 4.11)}
% This verbatim mode assumes that ! marks are !! in the text being copied.
\def\verbatim{\begingroup
@@ -49,7 +49,7 @@
\null\vfill
\centerline{\titlefont The {\ttitlefont CWEB} System of
Structured Documentation}
-\vskip 18pt\centerline{(Version 4.10 --- August 2023)}
+\vskip 18pt\centerline{(Version 4.11 --- December 2023)}
\vskip 24pt
\centerline{\authorfont Donald E. Knuth and Silvio Levy}
\vfill
@@ -57,9 +57,6 @@
\noindent
\TeX\ is a trademark of the American Mathematical Society.
-\noindent
-Acrobat Reader is a trademark of Adobe Systems Incorporated.
-
\bigskip\noindent
The printed form of this manual is copyright \copyright\ 1994
by Addison-Wesley Publishing Company, Inc. All rights reserved.
@@ -1147,29 +1144,27 @@ the `\.{@\#}' will put extra space after `$\langle\,$Other locals$\,\rangle$'.
Many people have of course noticed analogies between \.{CWEB} and the
World Wide Web. The \.{CWEB} macros are in fact set up so that the output of
-\.{CWEAVE} can be converted easily into Portable Document Format,
-with clickable hyperlinks that can be read with Adobe's Acrobat Reader,
-using a widely available open-source program called \.{dvipdfm} developed
-by Mark~A. Wicks. After using \.{CWEAVE} to convert \.{cob.w} into
-\.{cob.tex}, you can prepare and view a hypertext version of the program
-by giving the commands
+\.{CWEAVE} can be converted easily into Portable Document Format, with
+clickable hyperlinks that can be read with your favorite {\mc PDF} viewer,
+using a widely available open-source program called \.{dvipdfm} developed by
+Mark~A. Wicks. After using \.{CWEAVE} to convert \.{cob.w} into \.{cob.tex},
+you can prepare a hypertext version of the program by giving the commands
$$\vbox{\halign{\.{#}\hfil\cr
tex "\\let\\pdf+ \\input cob"\cr
-dvipdfm cob\cr
-acroread cob.pdf\cr}}$$
+dvipdfm cob\cr}}$$
instead of invoking \TeX\ in the normal way. (Thanks to Hans Hagen,
C\'esar Augusto Rorato Crusius, and Julian Gilbey
for the macros that make this work.)
Alternatively, thanks to H\`an Th\^e\kern-.3em\raise.3ex\hbox{\'{}} Th\`anh
and Andreas Scherer, you can generate \.{cob.pdf} in one step by simply
saying `\.{pdftex}~\.{cob}'.
-And a third way to create PDF output from \.{CWEB} input is to say
-`\.{xetex}~\.{cob}'.
+Alternative ways to create {\mc PDF} output from \.{CWEB} input are to say
+`\.{xetex}~\.{cob}' or `\.{luatex}~\.{cob}'.
Similar output for ``smart'' devices can be created with Martin Ruckert's
Hi\TeX\ and its dynamic \.{HINT} format; just say `\.{hitex}~\.{cob}'.
\.{HINT} files can be viewed with the \.{hintview} program, which is available
-for {\mc GNU}/Linux, {\mc MS}~Windows, and Android.
+from \.{https://hint.userweb.mwn.de/hint/hintview.html}.
A more elaborate system called \.{CTWILL}, which extends the usual cross
references of \.{CWEAVE} by preparing links from the uses of identifiers
@@ -1187,7 +1182,7 @@ contains an excerpt from the \.{CWEB} program itself. The reader who
examines the listings in this appendix carefully will get a good
feeling for the basic ideas of \.{CWEB}.
-Appendix B is the file that sets \TEX/ up to accept
+Appendix B displays the files that set \TEX/ up to accept
the output of \.{CWEAVE}, and Appendix~C discusses how to use some of those
macros to vary the output formats.
@@ -1524,20 +1519,28 @@ features needed by the output of \.{CWEAVE}.
\vskip6pt
\begingroup \def\tt{\eighttt} \baselineskip9pt
-\def\printmacs{\begingroup
+\def\printmacs#1{\begingroup
\def\do##1{\catcode`##1=12 } \dospecials
\parskip 0pt \parindent 0pt
\catcode`\ =13 \catcode`\^^M=13
- \tt \verbatimdefs \input cwebmac \endgroup}
-\printmacs
+ \tt \verbatimdefs \input cweb#1mac \endgroup}
+\printmacs{\empty}
+
+\vskip6pt \baselineskip12pt
+\noindent And here comes the file that extends \.{cwebmac.tex} in order to
+support the ``hypertext'' features needed by the enhanced \TEX/ engines when
+processing the output of \.{CWEAVE}.
+
+\vskip6pt \baselineskip9pt
+\printmacs{acro}
\endgroup
\vfill\eject
\def\runninghead{APPENDIX C --- NOTES ON FORMATTING}
\section Appendix C: How to use \.{CWEB} macros.
-The macros in \.{cwebmac} make it possible to produce a variety of formats
-without editing the output of \.{CWEAVE}, and the purpose of this appendix
-is to explain some of the possibilities.
+The macros in \.{cwebmac} and \.{cwebacromac} make it possible to produce a
+variety of formats without editing the output of \.{CWEAVE}, and the purpose
+of this appendix is to explain some of the possibilities.
\def\point#1.{\yskip\indent#1.\quad\ignorespaces}
@@ -1607,7 +1610,7 @@ $$\lpile{\.{\\def\\topofcontents\{\\null\\vfill}\cr
\.{ { }\\titlefalse \% include headline on the contents page}\cr
\.{ { }\\def\\rheader\{\\mainfont The \{\\tt CWEAVE\}{ }processor\\hfil\}}\cr
\.{ { }\\centerline\{\\titlefont The \{\\ttitlefont CWEAVE\}{ }processor\}}\cr
- \.{ { }\\vskip 15pt \\centerline\{(Version 4.10)\}{ }\\vfill\}}\cr}$$
+ \.{ { }\\vskip 15pt \\centerline\{(Version 4.11)\}{ }\\vfill\}}\cr}$$
Redefining \.{\\rheader}, which is the headline for right-hand pages,
suffices in this case to put the desired information at the top of the
contents page.
@@ -1615,8 +1618,8 @@ contents page.
\point 9. Data for the table of contents is written to a file that
is read after the indexes have been \TEX/ed; there's one line of data
for every starred section. The file \.{common.toc} might look like this:
-$$\lpile{\.{\\ZZ \{Introduction\}\{0\}\{1\}\{29\}\{\}}\cr
- \.{\\ZZ \{The character set\}\{1\}\{21\}\{35\}\{\}}\cr}$$
+$$\lpile{\.{\\ZZ \{Introduction\}\{1\}\{1\}\{30\}\{\}}\cr
+ \.{\\ZZ \{The character set\}\{1\}\{21\}\{36\}\{\}}\cr}$$
and so on. The \.{\\topofcontents} macro could
redefine \.{\\ZZ} so that the information appears in any desired format.
(See also point~19 below.)
@@ -1735,9 +1738,9 @@ You can send email to
\\pdfURL\{the author\}\{mailto:andreas\\UNDER/github@@freenet.de\}\cr
or visit \\pdfURL\{his home page\}\{https://github.com/ascherer\}\cr}}$$
In a {\mc PDF} document, the first argument will appear in blue as
-clickable text; the Acrobat reader, if correctly configured, will then
-redirect those links to the user's browser and open either the
-email client or the HTML viewer. In a hardcopy document, both arguments
+clickable text; the {\mc PDF} viewer, if correctly configured, will then
+redirect those links to the user's browser and open either the email client
+or the {\mc HTML} viewer. In a hardcopy document, both arguments
will be printed ({\tt the second in parentheses and typewriter type}).
Certain special characters in an Internet address need to be handled
in a somewhat awkward way, so that \.{CWEAVE} and/or \TeX\
@@ -1749,10 +1752,10 @@ titles in the table of contents, some of which will be subsidiary to
others if the depth feature of \.{@*} has been used.
Such bookmark entries are also known as ``outlines.''
Moreover, the final group title, `Names of the sections',
-can be opened up to list every section name; Acrobat users can therefore
+can be opened up to list every section name; users can therefore
navigate easily to any desired section.
-The macros of \.{cwebmac.tex} are careful to ``sanitize'' all the names
+The macros of \.{cwebacromac.tex} are careful to ``sanitize'' all the names
that appear as bookmarks, by removing special characters and
formatting codes that are inappropriate for the limited typographic
capabilities of {\mc PDF} outlines. For example, one section of \.{CWEAVE}
diff --git a/web/c_cpp/cweb/prod.w b/web/c_cpp/cweb/prod.w
index c7254cc4ee..711d6477e7 100644
--- a/web/c_cpp/cweb/prod.w
+++ b/web/c_cpp/cweb/prod.w
@@ -2,7 +2,7 @@
% This program by Silvio Levy and Donald E. Knuth
% is based on a program by Knuth.
% It is distributed WITHOUT ANY WARRANTY, express or implied.
-% Version 4.10 --- August 2023
+% Version 4.11 --- December 2023
%
@ Here is a table of all the productions. Each production that
combines two or more consecutive scraps implicitly inserts a {\tt \$}
diff --git a/web/pwebmac/README.md b/web/pwebmac/README.md
index cfd364de09..e85b89cbc4 100644
--- a/web/pwebmac/README.md
+++ b/web/pwebmac/README.md
@@ -1,7 +1,7 @@
# pwebmac – Consolidated WEB macros for DVI, PDF, and HINT output
The original [WEB](https://ctan.org/pkg/web) system by Donald Knuth has the
-macros `webmac.tex` that produce DVI output only; for historic reasons, it
+macros `webmac.tex` that produce DVI output only; for historic reasons, they
will never be modified (apart from catastrophic errors).
Hàn Thế Thành has extended these macros in his (outdated?) `pdfwebmac.tex` for
PDF output (only) with [pdfTeX](https://ctan.org/pkg/pdftex).
@@ -19,7 +19,7 @@ for Martin Ruckert's “[HiTeX](https://ctan.org/pkg/hitex)” engine and its
Its initial application is the production of PDF and HINT files for all major
WEB programs for “TeX and friends” as distributed in
[TeX Live](https://www.tug.org/texlive). For this purpose, the shell script
-`makeall` was whipped together; it provides various commandline options and
+`makeall` was whipped together; it provides various command-line options and
works around several “quirks” in the WEB sources. The resulting collections
of PDF and HINT documents can be browsed in the
[`knuth-pdf`](https://ctan.org/pkg/knuth-pdf) and
@@ -27,13 +27,15 @@ of PDF and HINT documents can be browsed in the
WEB programmers who want to use `pwebmac.tex` instead of the default
`webmac.tex` in their programs have to change the first line in the TeX file
-created by `weave`. From there, all depends on the “TeX engine” you use:
-“plain TeX” by default creates DVI output, “plain TeX” with the invocation
-`tex "\let\pdf+\input…"`, `pdftex`, `luatex`, and `xetex` create PDF output
-with clickable links and bookmarks (depending on your PDF viewer), and `hitex`
-creates HINT output that can be viewed with the
+created by `WEAVE` (try `weave -p`). From there, all depends on the “TeX
+engine” you use: “plain TeX” by default creates DVI output, “plain TeX” with
+the invocation `tex "\let\pdf+\input…"`, as well as `pdftex`, `luatex`, and
+`xetex` create PDF output with clickable links and bookmarks (with `pdftex`
+and `luatex` you are advised to apply the “`--shell-escape`” command-line
+option in order to avoid an internal miscalculation in the resulting PDF
+file), and `hitex` creates HINT output that can be viewed with the
[`hintview`](https://hint.userweb.mwn.de/hint/hintview.html) program.
The `pwebmac` package is free software and may be used without constraints.
-This is version **4.10** of the `pwebmac` package — 2023-10-07, Andreas Scherer.
+This is version **4.11** of the `pwebmac` package — 2023-12-02, Andreas Scherer.
diff --git a/web/pwebmac/index.md b/web/pwebmac/index.md
index a580c752a6..90ddc7d131 100644
--- a/web/pwebmac/index.md
+++ b/web/pwebmac/index.md
@@ -108,4 +108,4 @@ directly.
## Happy C/WEB Programming!
-2023-06-11 Andreas Scherer
+2023-12-02 Andreas Scherer
diff --git a/web/pwebmac/makeall b/web/pwebmac/makeall
index 602f2377c5..b5b53ff72e 100755
--- a/web/pwebmac/makeall
+++ b/web/pwebmac/makeall
@@ -86,60 +86,48 @@ do
esac
done
-CWEAVE="cweave -f +lX"
-CTWILL="ctwill -f +lpdf"
+CWEAVE="cweave -f +lX +bph"
+CTWILL="ctwill -f +lpdf +bph"
+HITEX="hitex --compress"
PAX="pax -wvzf"
-SED_I="sed -i" # non-GNU-sed requires an extra '' argument for '-i' option.
PDF=pdf # default extension for 'knuth-pdf'
-HITEX="hitex --compress"
+SED_I="sed -i" # non-GNU-sed requires an extra '' argument for '-i' option.
+WEAVE="weave"
-# HINT format
-if [ hitex = "$TEX" ]
-then
- CTWILL="$CTWILL +P"
- TEX="$HITEX"
- PDF=hnt # default extension for 'knuth-hint'
- PDFTOCFRONT=false # use 'hintview -h' to start with TOC page
- VALID=false # HiTeX has no command-line option '--shell-escape'
-fi
+case "$TEX" in
+ hitex ) # HINT format
+ CTWILL="$CTWILL +P"
+ TEX="$HITEX"
+ PDF=hnt # default extension for 'knuth-hint'
+ PDFTOCFRONT=false # use 'hintview -h' to start with TOC page
+ VALID=false ;; # HiTeX has no command-line option '--shell-escape'
+
+ pdftex | luatex ) # actually only necessary for 'pwebmac.tex'
+ VALID=true ;;
+
+ * ) VALID=false ;; # plain TeX and XeTeX use different approach
+esac
# Valid PDF output from 'pdftex' and 'luatex': In 'pwebmac.tex' set '\countD'
# to the actual number of @<named modules@>, not the number of all sections.
-if ( $VALID )
+if $VALID
then
+ NEW=true # PDF output requires 'pwebmac.tex'
TEX="$TEX --shell-escape"
fi
+# Use alternative TeX macros more suited for PDF output.
+if $NEW
+then WEAVE="$WEAVE -p"
+fi
+
# WEB and CWEB programs we want to get formatted
for f in $FILES
do
f=$(basename $f .web)
- if [ ctwill = $f ]
- then
- # apply tons of editorial changes to 'ctwill.w'
- if [ "$HITEX" = "$TEX" ]
- then ctie -m $f.w cweave.w $f-w2c.ch $f-hint.ch
- else ctie -m $f.w cweave.w $f-w2c.ch $f-mini.ch
- fi
- cp -an $KNUTHWARE/cwebdir/*.bux .
- $CTWILL $f # prime the pump
- $CTWILL $f # get decent answers
-
- elif [ twill = $f ]
- then
- tie -m $f.web weave.web weave.ch weav-$f.ch
- weave $f
-
- elif [ glue = $f ]
- then
- weave $f # no 'glue.ch' at this time
-
- elif [ hitex = $f ]
- then
- cweave $f # no 'hitex.ch' at this time
-
- elif $CHANGES
+ if $CHANGES && echo $f | grep -v -q -E 'twill|glue|hitex'
+ # These are changes in and of themselves
then
case $f in
# CWEB programs have individual changefiles
@@ -153,49 +141,48 @@ do
# main WEB programs have complex change files
tex | mf | pdftex | xetex )
WEBINPUTS=$KNUTHWARE/../../Work//:$WEBINPUTS: \
- weave $f $f-final ;;
-
- # TWILL is a change in and of itself
- twill ) ;;
+ $WEAVE $f $f-final
- # HiTeX is a stand-alone version of TeX
- hitex ) ;;
+ # FIX: XeTeX uses '\pdfTeX' from section 114,
+ # which is not changed and thus 'disappears';
+ # repeat in preamble.
+ if [ xetex = $f ]
+ then $SED_I -e "s/\(\\\\let\\\\maybe\)/\\\\def\\\\pdfTeX{pdf\\\\TeX}\n\1/" $f.tex
+ fi ;;
# all other WEB codes have singular changefiles
- * ) weave $f $f ;;
+ * ) $WEAVE $f $f ;;
esac
- # FIX: XeTeX uses '\pdfTeX' from section 114, which is not
- # changed and thus 'disappears'; repeat in preamble.
- if [ xetex = $f ]
- then
- $SED_I -e "s/\(\\\\let\\\\maybe\)/\\\\def\\\\pdfTeX{pdf\\\\TeX}\n\1/" \
- $f.tex
- fi
-
# only document changed modules/sections
$SED_I -e "s/\(\\\\let\\\\maybe=\)\\\\iftrue/\1\\\\iffalse/" \
$f.tex
else
case $f in
+ ctwill )
+ # apply tons of editorial changes to 'ctwill.w'
+ if [ "$HITEX" = "$TEX" ]
+ then ctie -m $f.w cweave.w $f-w2c.ch $f-hint.ch
+ else ctie -m $f.w cweave.w $f-w2c.ch $f-mini.ch
+ fi
+ $CTWILL $f # prime the pump
+ $CTWILL $f ;; # get decent answers
+
c* | refsort | twinx | tie | hitex ) $CWEAVE $f ;;
- * ) weave $f ;;
+
+ twill )
+ tie -m $f.web weave.web weave.ch weav-$f.ch
+ $WEAVE $f ;;
+
+ * ) $WEAVE $f ;;
esac
fi
- if $NEW
+ # 'pwebmac' is for WEB only; do nothing for CWEB programs
+ if $NEW && echo $f | grep -v -q -E '^c|refsort|twinx|tie|hitex'
then
- # use extended WEB macros for TeX Live PDF documentation
- $SED_I -e "1 s/\\\\input webmac/\\\\input pwebmac/" $f.tex
-
# timestamp on table-of-contents page or the first page
case $f in
- # do nothing for CWEB programs
- c* | refsort | twinx | tie ) ;;
-
- hitex )
- $SED_I -e "s/\(\\\\def\\\\topofcontents\)/\\\\datethis\n\\\\emergencystretch=.1\\\\hsize\n\1/" $f.tex ;;
-
bibtex | patgen | tangle | weave )
$SED_I -e "s/\(\\\\def\\\\title\)/\\\\datecontentspage\n\1/" $f.tex ;;
@@ -247,8 +234,7 @@ FI
# FIX: don't wait for Oren Patashnik.
bibtex ) $SED_I -e "s/\\\\def\\\\titlepage{F}/\\\\titletrue/" $f.tex
if ! $CHANGES
- then
- $SED_I -e "71,78d" $f.tex
+ then $SED_I -e "71,78d" $f.tex
fi ;;
# FIX: 'glue.web' obviously uses an old 'webmac.tex'.
@@ -259,29 +245,27 @@ FI
# appear correctly in the bookmarks, too.
pdftex )
if $NEW && [ tex != "$TEX" ] && [ "$HITEX" != "$TEX" ]
- then
- $SED_I -e "s/\(\\\\def\\\\pdfTeX{pdf\\\\TeX}\)/\1 \\\\sanitizecommand\\\\pdfTeX{pdfTeX}\\\\sanitizecommand\\\\eTeX{e-TeX}/" \
- $f.tex
+ then $SED_I -e "s/\(\\\\def\\\\pdfTeX{pdf\\\\TeX}\)/\1 \\\\sanitizecommand\\\\pdfTeX{pdfTeX}\\\\sanitizecommand\\\\eTeX{e-TeX}/" $f.tex
fi ;;
# FIX: weave uses '\max' in name of module 173; this should
# appear correctly in the bookmarks, too.
weave )
if $NEW && [ tex != "$TEX" ] && [ "$HITEX" != "$TEX" ]
- then
- $SED_I -e "s/\(\\\\def\\\\({}\)/\\\\sanitizecommand\\\\max{max}\n\1/" \
- $f.tex
+ then $SED_I -e "s/\(\\\\def\\\\({}\)/\\\\sanitizecommand\\\\max{max}\n\1/" $f.tex
fi ;;
# FIX: purge obsolete macros from XeTeX.
xetex ) $SED_I -e "/\\\\input xewebmac/d" $f.tex ;;
+
+ # timestamp on table-of-contents page or the first page
+ hitex ) $SED_I -e "s/\(\\\\def\\\\topofcontents\)/\\\\datethis\n\\\\emergencystretch=.1\\\\hsize\n\1/" $f.tex ;;
esac
# shift table-of-contents pages to the front in PDF
- if $PDFTOCFRONT && [ ctwill != $f ] && [ hitex != $f ]
+ if $PDFTOCFRONT && echo $f | grep -v -q -E 'ctwill|hitex'
then
- $SED_I -e "0,/\\\\N[1{]/s/\(\\\\N[1{]\)/\\\\input pdfwebtocfront\n\n\1/" \
- $f.tex
+ $SED_I -e "0,/\\\\N[1{]/s/\(\\\\N[1{]\)/\\\\input pdfwebtocfront\n\n\1/" $f.tex
# only XeTeX can process XETEX.WEB
if [ xetex = $f ]
@@ -295,24 +279,24 @@ FI
fi
fi
- if [ xetex = $f ] # only XeTeX can process XETEX.WEB
- then $f $f
- elif [ ctwill = $f ] # gives two different outcomes
- then
- # sort mini-indexes
- if [ "$HITEX" = "$TEX" ]
- then # directly in the TeX file
- proofsort $f.tex > $f-sorted.tex
- mv $f-sorted.tex $f.tex
- else # in the TeX-created .ref file
- $TEX $f
- ctwill-refsort < $f.ref > $f.sref
- fi
- $TEX $f
- elif [ refsort = $f ]
- then $TEX -interaction nonstopmode $f
- else $TEX $f
- fi
+ case $f in
+ xetex ) $f $f ;; # only XeTeX can process XETEX.WEB
+
+ ctwill ) # gives two different outcomes
+ if [ "$HITEX" = "$TEX" ] # sort mini-indexes
+ then # directly in the TeX file
+ ctwill-proofsort < $f.tex > $f-sorted.tex
+ mv $f-sorted.tex $f.tex
+ else # in the TeX-created .ref file
+ $TEX $f
+ ctwill-refsort < $f.ref > $f.sref
+ fi
+ $TEX $f ;;
+
+ refsort ) $TEX -interaction nonstopmode $f ;;
+
+ * ) $TEX $f ;;
+ esac
done
if ( $PDFTOCFRONT || [ "$HITEX" = "$TEX" ] ) && ! $FILESELECT
@@ -385,9 +369,7 @@ then
f=$(kpsewhich -engine tex cwebman)
tie -m $(basename $f) $f $(basename $f .tex)-w2c.ch
if [ "$HITEX" = "$TEX" ]
- then
- $SED_I -e "s/\(\\\\input cwebmac\)/\1\n\\\\input hiplainpage/" \
- cwebman.tex
+ then $SED_I -e "s/\(\\\\input cwebmac\)/\1\n\\\\input hiplainpage/" cwebman.tex
fi
touch pages.tex # let 'manmac' produce output at all
diff --git a/web/pwebmac/pwebmac.tex b/web/pwebmac/pwebmac.tex
index 880075cb2a..a7bdc717b9 100644
--- a/web/pwebmac/pwebmac.tex
+++ b/web/pwebmac/pwebmac.tex
@@ -5,19 +5,7 @@
% macro integration \`a la CWEB by Andreas Scherer <andreas_tex@freenet.de>.
% This file is not copyrighted and can be used freely.
\ifx\renewenvironment\undefined\else\endinput\fi % LaTeX will use other macros
-\xdef\fmtversion{\fmtversion+WEBMAC4.10}
-\input iftex.sty % TeX engine tests
-\ifx\pdf+\pdftrue\fi
-% Uncomment the following line if you want PDF goodies to be the default
-%\ifx\pdf-\else\pdftrue\fi
-\def\pdflinkcolor{0 0 1} % the RGB values for hyperlink color
-\ifxetex\pdftrue\fi % XeTeX produces PDF output
-\newif\ifacrohint \ifpdf\acrohinttrue\fi \ifhint\acrohinttrue\fi
-\newif\ifpdflua \ifluatex\pdfluatrue\fi \ifpdftex\pdfluatrue\fi
-\ifpdflua % pdfTeX and luaTeX produce PDF output if \pdfoutput>0
- \def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too
- \def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}}
-\fi
+\xdef\fmtversion{\fmtversion+PWEBMAC4.11}
\parskip 0pt % no stretch between paragraphs
\parindent 1em % for paragraphs and for the first line of Pascal text
@@ -90,6 +78,20 @@
\newif\iftokprocessed \newif\ifTnum \newif\ifinstr
{\def\\{\global\let\spacechar= }\\ }
+% Here we decide the output format, depending on the TeX engine in use:
+\input iftex.sty % TeX engine tests
+\ifx\pdf+\pdftrue\fi % for plain TeX in combination with dvipdfm
+% Uncomment the following line if you want PDF goodies to be the default
+%\ifx\pdf-\else\pdftrue\fi
+\ifxetex\pdftrue\fi % XeTeX produces PDF output
+\ifpdf \def\pdflinkcolor{0 0 1} \fi % the RGB values for hyperlink color
+\newif\ifacrohint \ifpdf\acrohinttrue\fi \ifhint\acrohinttrue\fi
+\newif\ifpdflua \ifluatex\pdfluatrue\fi \ifpdftex\pdfluatrue\fi
+\ifpdflua % pdfTeX and luaTeX produce PDF output if \pdfoutput>0 (default)
+ \def\Black{\pdfliteral{0 g 0 G}} % use rgb colors for direct PDF output too
+ \def\Blue{\pdfliteral{\pdflinkcolor\space rg \pdflinkcolor\space RG}}
+\fi
+
\ifluatex % LuaTeX is almost like pdfTeX
\protected\def\pdfliteral {\pdfextension literal}
\protected\def\pdfstartlink {\pdfextension startlink\space}
@@ -97,7 +99,7 @@
\protected\def\pdfoutline {\pdfextension outline\space}
\protected\def\pdfdest {\pdfextension dest\space}
\protected\def\pdfcatalog {\pdfextension catalog}
-\chardef\pdfshellescape
+\chardef\pdfshellescape % excerpt from 'shellesc.sty'
\directlua{tex.sprint((status.shell_escape or os.execute()) .. " ")}
\edef\pdfhorigin {\pdfvariable horigin}
\edef\pdfvorigin {\pdfvariable vorigin}
@@ -106,7 +108,7 @@
\let\pdfoutput=\outputmode
\fi % end of LuaTeX->pdfTeX redirection macros
-\ifpdf % The following are pdf macros from 'cwebmac.tex 3.70'
+\ifpdf % The following are general pdf macros from 'cwebmac.tex 3.70'
\def\thewidth{\the\wd0 \space}
\def\theheight{\the\ht\strutbox\space}
\def\thedepth{\the\dp\strutbox\space}
@@ -190,7 +192,7 @@
\def\makeolproctokchar#1 #2 #3{\addF{#3}}
\def\outlinedone{\edef\outlinest{\global\noexpand\toksE={\the\toksF}}%
\outlinest\let\outlinedone=\relax}
-\fi % End of pdf macros
+\fi % End of general pdf macros
\ifhint
% The following uses HINT primitives to implement:
@@ -232,9 +234,10 @@
\next
}
\def\makenote{\addtokens\toksB
- {\noexpand\pdflink{\the\toksC}{\romannumeral\the\toksC}}\toksC={}\global\countC=0}
+ {\noexpand\pdflink{\the\toksC}{\romannumeral\the\toksC}}%
+ \toksC={}\global\countC=0}
\def\maketoksdone{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-\fi % End of common macros
+\fi % End of common pdf/hint macros
\def\pdfURL#1#2{\ifpdf \ifpdflua\pdfannotlink height \theheight depth \thedepth
attr {/Border [0 0 0]} user { /Type /Annot /Subtype /Link /A
diff --git a/web/pwebmac/webman.ch b/web/pwebmac/webman.ch
index 1663836f42..1817ab4665 100644
--- a/web/pwebmac/webman.ch
+++ b/web/pwebmac/webman.ch
@@ -20,8 +20,8 @@
\def\bkminfo{}
\outer\def\section #1.{\penalty-50\vskip 12pt plus 3pt minus 3pt
\noindent\ifpdf\vbox to 0pt{\kern-2.5ex\relax
- \ifpdflua\pdfdest num \destcount fitbh\relax
- \else\special{pdf: dest (\the\destcount) [ @thispage /FitBH @ypos ]}\fi
+ \ifpdflua\pdfdest num \destcount fith\relax
+ \else\special{pdf: dest (\the\destcount) [ @thispage /FitH @ypos ]}\fi
\def\.##1{##1}%
\ifx\bkminfo\empty\def\sectitle{#1}\else\def\sectitle{#1 (\bkminfo)}\fi
\ifpdflua\pdfoutline goto num \destcount {\sectitle}\relax
@@ -82,6 +82,13 @@ This memo describes how to write programs in the
\itemitem{3)} A \PASCAL\ part, containing a piece of the program that
@z
+@x l.304
+`\.{\\input webmac}'; this will cause \TeX\ to read in the macros that
+@y
+`\.{\\input webmac}'---or, if you invoke `\.{weave -p}',
+`\.{\\input pwebmac}'---; this will cause \TeX\ to read in the macros that
+@z
+
@x l.358
\.{which is a \\\&\{packed\}{ }\\\&\{array\}{ }\$
@y
@@ -131,8 +138,10 @@ Finally, Appendix F is the `\.{webmac}' file that sets \TeX\ up to accept
the output of \.{WEAVE}; Appendix~G discusses how to use some of its macros
to vary the output formats; and Appendix~H discusses what needs to be done
@y
-Finally, \Appendix F is the `\.{webmac}' file that sets \TeX\ up to accept
-the output of \.{WEAVE}; \Appendix G discusses how to use some of its macros
+Finally, \Appendix F shows the `\.{webmac.tex}' file that sets \TeX\ up to
+accept the output of \.{WEAVE}; it also shows the `\.{pwebmac.tex}' file that
+provides alternative macros more suited for {\mc PDF} output with modern \TeX\
+engines; \Appendix G discusses how to use some of these macros
to vary the output formats; and \Appendix H discusses what needs to be done
@z
@@ -261,77 +270,277 @@ XREF[P]:=0;END{:62};IDLOOKUP:=P;END;
{:58}{66:}FUNCTION MODLOOKUP(L:SIXTEENBITS):NAMEPOINTER;LABEL 31;
@z
-@x l.1208
-\verbatim
+@x l.1203
+\section Appendix F: The \.{webmac.tex} file.
+This is the file that extends ``plain \TeX'' format in order to support the
@y
-\begingroup \def\tt{\ninett} \baselineskip10pt
-\verbatim
+\section Appendix F: Macros for formatting.
+The \.{webmac.tex} file extends ``plain \TeX'' format in order to support the
@z
-@x l.1210
+@x l.1208
+\verbatim
+% standard macros for WEB listings (in addition to PLAIN.TEX)
\xdef\fmtversion{\fmtversion+WEBMAC4.0} % identifies current set of macros
-@y
-\xdef\fmtversion{\fmtversion+WEBMAC4.2} % identifies current set of macros
-@z
+\parskip 0pt % no stretch between paragraphs
+\parindent 1em % for paragraphs and for the first line of Pascal text
-@x l.1218
-\font\tentex=cmtex10 % TeX extended character set (used in strings)
-@y
+\font\eightrm=cmr8 \let\sc=\eightrm % NOT a caps-and-small-caps font!
+\let\mainfont=\tenrm
+\font\titlefont=cmr7 scaled\magstep4 % title on the contents page
+\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title
\font\tentex=cmtex10 % TeX extended character set (used in strings)
-\fontdimen7\tentex=0pt % no extra space after punctuation
-@z
-@x l.1294
+\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
+\def\|#1{\hbox{$#1$}} % one-letter identifiers look a bit better this way
+\def\&#1{\hbox{\bf#1\/}} % boldface type for reserved words
+\def\.#1{\hbox{\tentex % typewriter type for strings
+ \let\\=\BS % backslash in a string
+ \let\'=\RQ % right quote in a string
+ \let\`=\LQ % left quote in a string
+ \let\{=\LB % left brace in a string
+ \let\}=\RB % right brace in a string
+ \let\~=\TL % tilde in a string
+ \let\ =\SP % space in a string
+ \let\_=\UL % underline in a string
+ \let\&=\AM % ampersand in a string
+ #1}}
+\def\#{\hbox{\tt\char`\#}} % parameter sign
+\def\${\hbox{\tt\char`\$}} % dollar sign
+\def\%{\hbox{\tt\char`\%}} % percent sign
+\def\^{\ifmmode\mathchar"222 \else\char`^ \fi} % pointer or hat
+% circumflex accents can be obtained from \^^D instead of \^
+\def\AT!{@} % at sign for control text
+
+\chardef\AM=`\& % ampersand character in a string
+\chardef\BS=`\\ % backslash in a string
+\chardef\LB=`\{ % left brace in a string
+\def\LQ{{\tt\char'22}} % left quote in a string
+\chardef\RB=`\} % right brace in a string
+\def\RQ{{\tt\char'23}} % right quote in a string
+\def\SP{{\tt\char`\ }} % (visible) space in a string
+\chardef\TL=`\~ % tilde in a string
+\chardef\UL=`\_ % underline character in a string
+
+\newbox\bak \setbox\bak=\hbox to -1em{} % backspace one em
+\newbox\bakk\setbox\bakk=\hbox to -2em{} % backspace two ems
+
+\newcount\ind % current indentation in ems
+\def\1{\global\advance\ind by1\hangindent\ind em} % indent one more notch
+\def\2{\global\advance\ind by-1} % indent one less notch
+\def\3#1{\hfil\penalty#10\hfilneg} % optional break within a statement
+\def\4{\copy\bak} % backspace one notch
+\def\5{\hfil\penalty-1\hfilneg\kern2.5em\copy\bakk\ignorespaces}% optional break
+\def\6{\ifmmode\else\par % forced break
+ \hangindent\ind em\noindent\kern\ind em\copy\bakk\ignorespaces\fi}
+\def\7{\Y\6} % forced break and a little extra space
+
+\let\yskip=\smallskip
+\def\to{\mathrel{.\,.}} % double dot, used only in math mode
+\def\note#1#2.{\Y\noindent{\hangindent2em\baselineskip10pt\eightrm#1~#2.\par}}
+\def\lapstar{\rlap{*}}
+\def\startsection{\Q\noindent{\let\*=\lapstar\bf\modstar.\quad}}
+\def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % begin `define' or `format'
+\def\A{\note{See also section}} % crossref for doubly defined section name
+\def\As{\note{See also sections}} % crossref for multiply defined section name
+\def\B{\mathopen{\.{@\{}}} % begin controlled comment
+\def\C#1{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % Pascal comments
+ \XX\hfil\penalty-1\hfilneg\quad$\{\,$#1$\,\}$\XX}
+\def\D{\defin{define}} % macro definition
+\def\E{\cdot10^} % exponent in floating point constant
+\def\ET{ and~} % conjunction between two section numbers
+\def\ETs{, and~} % conjunction between the last two of several section numbers
+\def\F{\defin{format}} % format definition
+\let\G=\ge % greater than or equal sign
+\def\H#1{\hbox{\rm\char"7D\tt#1}} % hexadecimal constant
+\let\I=\ne % unequal sign
+\def\J{\.{@\&}} % TANGLE's join operation
+\let\K=\gets % left arrow
+\let\L=\le % less than or equal sign
+\outer\def\M#1.{\MN#1.\ifon\vfil\penalty-100\vfilneg % beginning of section
+ \vskip12ptminus3pt\startsection\ignorespaces}
+\outer\def\N#1.#2.{\MN#1.\vfil\eject % beginning of starred section
+ \def\rhead{\uppercase{\ignorespaces#2}} % define running headline
+ \message{*\modno} % progress report
+ \edef\next{\write\cont{\Z{#2}{\modno}{\the\pageno}}}\next % to contents file
+ \ifon\startsection{\bf\ignorespaces#2.\quad}\ignorespaces}
+\def\MN#1.{\par % common code for \M, \N
{\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}}
\ifx\modno\modstar \onmaybe \else\ontrue \fi \mark{\modno}}
-@y
- {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}}% remove \* from section name
- \ifx\modno\modstar \onmaybe \else\ontrue \fi
- \mark{{{\tensy x}\modno}{\rhead}}}
- % each \mark is {section reference or null}{group title}
-@z
-
-@x l.1325
+\def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % octal constant
+\def\P{\rightskip=0pt plus 100pt minus 10pt % go into Pascal mode
+ \sfcode`;=3000
+ \pretolerance 10000
+ \hyphenpenalty 10000 \exhyphenpenalty 10000
+ \global\ind=2 \1\ \unskip}
+\def\Q{\rightskip=0pt % get out of Pascal mode
+ \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50 }
+\let\R=\lnot % logical not
+\let\S=\equiv % equivalence sign
+\def\T{\mathclose{\.{@\}}}} % terminate controlled comment
+\def\U{\note{This code is used in section}} % crossref for use of a section
+\def\Us{\note{This code is used in sections}} % crossref for uses of a section
+\let\V=\lor % logical or
+\let\W=\land % logical and
+\def\X#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % section name
+ \XX$\langle\,$#2{\eightrm\kern.5em#1}$\,\rangle$\XX}
+\def\Y{\par\yskip}
+\let\Z=\let % now you can \send the control sequence \Z
+\def\){\hbox{\.{@\$}}} % sign for string pool check sum
+\def\]{\hbox{\.{@\\}}} % sign for forced line break
+\def\=#1{\kern2pt\hbox{\vrule\vtop{\vbox{\hrule
+ \hbox{\strut\kern2pt\.{#1}\kern2pt}}
+ \hrule}\vrule}\kern2pt} % verbatim string
+\let\~=\ignorespaces
+\let\*=*
+
+\def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue
+\newif\ifon \newif\iftitle \newif\ifpagesaved
\def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead\hfill\title\qquad
\tensy x\mainfont\topmark} % top line on left-hand pages
\def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead
\qquad\mainfont\the\pageno} % top line on right-hand pages
-@y
-\def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead
- \hfill\title\qquad\mainfont\topsecno} % top line on left-hand pages
-\def\rheader{\mainfont\topsecno\eightrm\qquad\title\hfill
- \rhead\qquad\mainfont\the\pageno} % top line on right-hand pages
-\def\topsecno{\expandafter\takeone\topmark}
-\def\takeone#1#2{#1}
-\def\taketwo#1#2{#2}
-\def\nullsec{\eightrm\kern-2em} % the \kern-2em cancels \qquad in headers
-@z
+\def\page{\box255 }
+\def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi
+ \shipout\vbox{
+ \vbox to\fullpageheight{
+ \iftitle\global\titlefalse
+ \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi
+ \vfill#1}} % parameter #1 is the page itself
+ \global\advance\pageno by1}
-@x l.1336
\def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections
-@y
-\def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections
-\mark{\noexpand\nullsec{\rhead}}
-@z
-
-@x l.1392
+\def\title{} % an optional title can be set by the user
+\def\topofcontents{\centerline{\titlefont\title}
+ \vfill} % this material will start the table of contents page
+\def\botofcontents{\vfill} % this material will end the table of contents page
+\def\contentspagenumber{0} % default page number for table of contents
+\newdimen\pagewidth \pagewidth=6.5in % the width of each page
+\newdimen\pageheight \pageheight=8.7in % the height of each page
+\newdimen\fullpageheight \fullpageheight=9in % page height including headlines
+\newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones
+\def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein
+ \fullpageheight=9truein\setpage}
+\def\setpage{\hsize\pagewidth\vsize\pageheight} % use after changing page size
+\def\contentsfile{CONTENTS} % file that gets table of contents info
+\def\readcontents{\input CONTENTS}
+
+\newwrite\cont
+\output{\setbox0=\page % the first page is garbage
+ \openout\cont=\contentsfile
+ \global\output{\normaloutput\page\lheader\rheader}}
+\setpage
+\vbox to \vsize{} % the first \topmark won't be null
+
+\def\ch{\note{The following sections were changed by the change file:}
+ \let\*=\relax}
+\newbox\sbox % saved box preceding the index
+\newbox\lbox % lefthand column in the index
+\def\inx{\par\vskip6pt plus 1fil % we are beginning the index
+ \write\cont{} % ensure that the contents file isn't empty
+ \closeout\cont % the contents information has been fully gathered
+ \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi
+ \global\setbox\sbox=\page \global\pagesavedtrue}
+ \pagesavedfalse \eject % eject the page-so-far and predecessors
+ \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box
+ \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height
+ \hsize=.5\pagewidth \advance\hsize by -10pt
+ % column width for the index (20pt between cols)
+ \parfillskip 0pt plus .6\hsize % try to avoid almost empty lines
+ \def\lr{L} % this tells whether the left or right column is next
+ \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R}
+ \else\normaloutput{\vbox to\pageheight{\box\sbox\vss
+ \hbox to\pagewidth{\box\lbox\hfil\page}}}\lheader\rheader
+ \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi}
+ \message{Index:}
+ \parskip 0pt plus .5pt
+ \outer\def\:##1, {\par\hangindent2em\noindent##1:\kern1em} % index entry
+ \let\ttentry=\. \def\.##1{\ttentry{##1\kern.2em}} % give \tt a little room
+ \def\[##1]{$\underline{##1}$} % underlined index item
+ \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar
+ \hyphenpenalty 10000 \parindent0pt}
+\def\fin{\par\vfill\eject % this is done when we are ending the index
+ \ifpagesaved\null\vfill\eject\fi % output a null index column
+ \if L\lr\else\null\vfill\eject\fi % finish the current page
+ \parfillskip 0pt plus 1fil
\def\rhead{NAMES OF THE SECTIONS}
-@y
- \def\rhead{NAMES OF THE SECTIONS}
- \let\topsecno=\nullsec
-@z
-
-@x l.1395
+ \message{Section names:}
+ \output{\normaloutput\page\lheader\rheader}
+ \setpage
\def\note##1##2.{\hfil\penalty-1\hfilneg\quad{\eightrm##1 ##2.}}
+ \linepenalty=10 % try to conserve lines
+ \def\U{\note{Used in section}} % crossref for use of a section
+ \def\Us{\note{Used in sections}} % crossref for uses of a section
+ \def\:{\par\hangindent 2em}\let\*=*\let\.=\ttentry}
+\def\con{\par\vfill\eject % finish the section names
+ \rightskip 0pt \hyphenpenalty 50 \tolerance 200
+ \setpage
+ \output{\normaloutput\page\lheader\rheader}
+ \titletrue % prepare to output the table of contents
+ \pageno=\contentspagenumber \def\rhead{TABLE OF CONTENTS}
+ \message{Table of contents:}
+ \topofcontents
+ \line{\hfil Section\hbox to3em{\hss Page}}
+ \def\Z##1##2##3{\line{\ignorespaces##1
+ \leaders\hbox to .5em{.\hfil}\hfil\ ##2\hbox to3em{\hss##3}}}
+ \readcontents\relax % read the contents info
+ \botofcontents \end} % print the contents page(s) and terminate
+?endgroup
@y
- \def\note##1##2.{\hfil\penalty-1\hfilneg\quad{\eightrm##1~##2.}}
+\begingroup \def\tt{\eighttt} \baselineskip9pt
+\def\printmacs#1{\begingroup
+ \def\do##1{\catcode`##1=12 } \dospecials
+ \parskip 0pt \parindent 0pt
+ \catcode`\ =13 \catcode`\^^M=13
+ \tt \verbatimdefs \input #1 \endgroup}
+\printmacs{webmac}
+\vskip6pt \baselineskip12pt
+ \section Hypertext and hyperdocumentation.
+Many people have of course noticed analogies between \.{WEB} and the
+World Wide Web. The following \.{WEB} macros \.{pwebmac.tex} are in fact
+set up so that the output of \.{WEAVE} can be converted easily into
+Portable Document Format, with clickable hyperlinks that can be read
+with your favorite {\mc PDF} viewer.
+After using \.{WEAVE} with command line option `\.{-p}' to convert
+\.{cob.web} into \.{cob.tex}, you can prepare a hypertext version of
+the program by giving the commands
+$$\vbox{\halign{\.{#}\hfil\cr
+tex "\\let\\pdf+ \\input cob"\cr
+dvipdfm cob\cr}}$$
+instead of invoking \TeX\ in the normal way.
+Alternatively you can generate \.{cob.pdf} in one step by simply saying
+`\.{pdftex}~\.{cob}' or `\.{xetex}~\.{cob}' or `\.{luatex}~\.{cob}'.
+(You are advised to use the command line option `\.{--shell-escape}' with
+\.{pdftex} and \.{luatex} in order to receive ``valid'' {\mc PDF} output;
+otherwise, the internal counter for the ``Names of the sections'' part
+in the {\mc PDF} ``bookmarks'' will be incorrect.)
+
+Similar output for ``smart'' devices can be created with Martin Ruckert's
+Hi\TeX\ and its dynamic \.{HINT} format; just say `\.{hitex}~\.{cob}'.
+\.{HINT} files can be viewed with the \.{hintview} program, which is
+available from
+\pdfURL{\.{https://hint.userweb.mwn.de/hint/hintview.html}}%
+ {https://hint.userweb.mwn.de/hint/hintview.html}.%
+
+A more elaborate system called \.{TWILL}, which extends the usual cross
+references of \.{WEAVE} by preparing links from the uses of identifiers
+to their definitions, is also available---provided that you are willing
+to work a bit harder in cases where an identifier is multiply defined.
+\.{TWILL} is intended primarily for hardcopy output, but its principles
+could be used for hypertext as well. It uses its own set of macros
+`\.{twimac-web.tex}'.
+
+\vskip6pt \baselineskip9pt
+\printmacs{pwebmac}
+\endgroup
+\vfill\eject
@z
-@x l.1414
-?endgroup
+@x l.1418
+The macros in \.{webmac} make it possible to produce a variety of formats
@y
-?endgroup
-\endgroup
+The macros in \.{webmac} and \.{pwebmac} make it possible to produce
+a variety of formats
@z
@x l.1425
@@ -362,6 +571,17 @@ for every starred module. For example, when \pdfURL{Appendix~D}{weave.pdf}
was being generated,
@z
+@x l.569
+\.{\\ch}, \.{\\fin}, and \.{\\con}. \.{WEAVE} itself need not be changed.
+@y
+\.{\\ch}, \.{\\fin}, and \.{\\con}. \.{WEAVE} itself need not be changed.
+
+\point 15. In conjunction with `\.{weave -p}' and the \.{pwebmac} macros you
+can say `\.{\\input pdfwebtocfront}' as the last command in the limbo section
+and run \TeX\ \\{twice} on your woven \.{WEB} document, in order to shift the
+table-of-contents to the front of the {\mc PDF} output.
+@z
+
@x l.1583
dependencies'' in the index of Appendix~E above, and figure out what changes
@y