From 45c7bac9080d91b53c686e776fc6217d7f139b86 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 12 Apr 2023 03:01:14 +0000 Subject: CTAN sync 202304120301 --- FILES.byname | 1318 +-- FILES.byname.gz | Bin 2523084 -> 2523268 bytes FILES.last07days | 856 +- biblio/ctan-bibdata/ctan.bib | 16 +- biblio/ctan-bibdata/ctan.pdf | Bin 3663579 -> 3663764 bytes macros/latex/contrib/photobook/photobook.cls | 85 +- macros/latex/contrib/photobook/photobook.pdf | Bin 143035 -> 142873 bytes macros/luatex/latex/piton/piton-french.pdf | 1370 +-- macros/luatex/latex/piton/piton-french.tex | 3483 +++---- macros/luatex/latex/piton/piton.dtx | 10335 ++++++++++--------- macros/luatex/latex/piton/piton.pdf | 6081 +++++------ support/latexindent/LatexIndent/Document.pm | 8 - support/latexindent/LatexIndent/FileExtension.pm | 13 +- support/latexindent/LatexIndent/LogFile.pm | 9 +- support/latexindent/LatexIndent/Version.pm | 4 +- support/latexindent/README | 2 +- support/latexindent/bin/linux/latexindent | Bin 6163996 -> 6164028 bytes support/latexindent/bin/macos/latexindent | Bin 6393199 -> 6393230 bytes support/latexindent/defaultSettings.yaml | 2 +- .../documentation/latexindent-yaml-schema.json | 2 +- support/latexindent/documentation/latexindent.pdf | Bin 1243960 -> 1244704 bytes support/latexindent/latexindent.pl | 2 +- support/texlab/CHANGELOG.md | 7 + support/texlab/Cargo.lock | 755 +- support/texlab/Cargo.toml | 87 +- support/texlab/benches/bench_main.rs | 25 - support/texlab/crates/base-db/Cargo.toml | 25 + support/texlab/crates/base-db/src/config.rs | 233 + support/texlab/crates/base-db/src/diagnostics.rs | 25 + .../texlab/crates/base-db/src/diagnostics/bib.rs | 69 + .../texlab/crates/base-db/src/diagnostics/log.rs | 68 + .../texlab/crates/base-db/src/diagnostics/tex.rs | 116 + support/texlab/crates/base-db/src/document.rs | 196 + support/texlab/crates/base-db/src/graph.rs | 161 + support/texlab/crates/base-db/src/lib.rs | 9 + support/texlab/crates/base-db/src/line_index.rs | 217 + support/texlab/crates/base-db/src/semantics.rs | 17 + .../crates/base-db/src/semantics/auxiliary.rs | 39 + support/texlab/crates/base-db/src/semantics/tex.rs | 292 + support/texlab/crates/base-db/src/workspace.rs | 302 + support/texlab/crates/citeproc/Cargo.toml | 26 + support/texlab/crates/citeproc/src/driver.rs | 728 ++ support/texlab/crates/citeproc/src/entry.rs | 162 + support/texlab/crates/citeproc/src/field.rs | 4 + support/texlab/crates/citeproc/src/field/author.rs | 80 + support/texlab/crates/citeproc/src/field/date.rs | 85 + support/texlab/crates/citeproc/src/field/number.rs | 60 + support/texlab/crates/citeproc/src/field/text.rs | 306 + support/texlab/crates/citeproc/src/lib.rs | 36 + support/texlab/crates/citeproc/src/output.rs | 68 + .../citeproc__tests__article_aksin_2006.snap | 5 + .../citeproc__tests__article_betram_1996.snap | 5 + .../citeproc__tests__article_blom_2021.snap | 5 + .../citeproc__tests__article_jain_1999.snap | 5 + .../citeproc__tests__article_kastenholz_2006.snap | 5 + .../citeproc__tests__article_rivest_1978.snap | 5 + .../snapshots/citeproc__tests__book_aho_2006.snap | 5 + .../citeproc__tests__book_averroes_1998.snap | 5 + .../citeproc__tests__book_knuth_1984.snap | 5 + .../citeproc__tests__collection_matuz_1990.snap | 5 + .../citeproc__tests__inproceedings_combi_2004.snap | 5 + .../citeproc__tests__inproceedings_erwin_2007.snap | 5 + .../citeproc__tests__mvbook_nietzsche_1988.snap | 5 + .../citeproc__tests__patent_almendro_1998.snap | 5 + support/texlab/crates/citeproc/src/tests.rs | 351 + support/texlab/crates/distro/Cargo.toml | 14 + support/texlab/crates/distro/src/file_name_db.rs | 80 + support/texlab/crates/distro/src/kpsewhich.rs | 25 + support/texlab/crates/distro/src/language.rs | 42 + support/texlab/crates/distro/src/lib.rs | 75 + support/texlab/crates/distro/src/miktex.rs | 78 + support/texlab/crates/distro/src/texlive.rs | 36 + support/texlab/crates/parser/Cargo.toml | 20 + support/texlab/crates/parser/src/bibtex.rs | 450 + support/texlab/crates/parser/src/build_log.rs | 187 + support/texlab/crates/parser/src/latex.rs | 1137 ++ support/texlab/crates/parser/src/latex/lexer.rs | 64 + .../crates/parser/src/latex/lexer/commands.rs | 93 + .../texlab/crates/parser/src/latex/lexer/types.rs | 131 + support/texlab/crates/parser/src/lib.rs | 5 + .../parser__bibtex__tests__parse@comment.txt.snap | 10 + ...parser__bibtex__tests__parse@issue_809.txt.snap | 32 + .../parser__bibtex__tests__parse@preamble.txt.snap | 17 + ...bibtex__tests__parse@samples__aho_2006.txt.snap | 132 + ...btex__tests__parse@samples__aksin_2006.txt.snap | 258 + ...x__tests__parse@samples__almendro_1998.txt.snap | 246 + ...x__tests__parse@samples__averroes_1998.txt.snap | 351 + ...tex__tests__parse@samples__betram_1996.txt.snap | 208 + ...ibtex__tests__parse@samples__blom_2021.txt.snap | 223 + ...btex__tests__parse@samples__combi_2004.txt.snap | 251 + ...btex__tests__parse@samples__erwin_2007.txt.snap | 239 + ...ibtex__tests__parse@samples__jain_1999.txt.snap | 267 + ..._tests__parse@samples__kastenholz_2006.txt.snap | 302 + ...btex__tests__parse@samples__knuth_1984.txt.snap | 320 + ...btex__tests__parse@samples__matuz_1990.txt.snap | 176 + ...__tests__parse@samples__nietzsche_1998.txt.snap | 368 + ...tex__tests__parse@samples__rivest_1978.txt.snap | 232 + .../parser__build_log__tests__parse@001.txt.snap | 27 + .../parser__build_log__tests__parse@002.txt.snap | 20 + .../parser__build_log__tests__parse@003.txt.snap | 25 + .../parser__build_log__tests__parse@004.txt.snap | 31 + .../parser__build_log__tests__parse@005.txt.snap | 30 + .../parser__build_log__tests__parse@006.txt.snap | 69 + .../parser__build_log__tests__parse@007.txt.snap | 20 + ...er__latex__tests__parse@block_comments.txt.snap | 30 + ..._tests__parse@caption__caption_default.txt.snap | 26 + ...__parse@caption__caption_default_error.txt.snap | 25 + ...__tests__parse@caption__caption_figure.txt.snap | 30 + ..._tests__parse@caption__caption_minimal.txt.snap | 21 + ...__parse@caption__caption_minimal_error.txt.snap | 20 + ..._tests__parse@citation__citation_empty.txt.snap | 13 + ...parse@citation__citation_missing_brace.txt.snap | 14 + ...parse@citation__citation_multiple_keys.txt.snap | 19 + ...ests__parse@citation__citation_prenote.txt.snap | 20 + ...se@citation__citation_prenote_postnote.txt.snap | 25 + ...rse@citation__citation_redundant_comma.txt.snap | 17 + ...tests__parse@citation__citation_simple.txt.snap | 15 + ...__tests__parse@citation__citation_star.txt.snap | 15 + ...__parse@color__color_definition_simple.txt.snap | 29 + ...s__parse@color__color_reference_simple.txt.snap | 15 + ...rse@color__color_set_definition_error1.txt.snap | 33 + ...rse@color__color_set_definition_error2.txt.snap | 23 + ...rse@color__color_set_definition_error3.txt.snap | 18 + ...rse@color__color_set_definition_error4.txt.snap | 10 + ...rse@color__color_set_definition_simple.txt.snap | 38 + ...definition__command_definition_no_argc.txt.snap | 19 + ...definition__command_definition_no_impl.txt.snap | 14 + ...tion__command_definition_no_impl_error.txt.snap | 13 + ...efinition__command_definition_optional.txt.snap | 29 + ..._definition__command_definition_simple.txt.snap | 25 + ...inition__command_definition_with_begin.txt.snap | 39 + ...mand_definition__math_operator_no_impl.txt.snap | 14 + ...mmand_definition__math_operator_simple.txt.snap | 19 + ...rse@environment__environment_asymptote.txt.snap | 41 + ...se@environment__environment_definition.txt.snap | 40 + ...t__environment_definition_optional_arg.txt.snap | 35 + ..._parse@environment__environment_nested.txt.snap | 41 + ...ent__environment_nested_missing_braces.txt.snap | 42 + ..._parse@environment__environment_simple.txt.snap | 29 + .../parser__latex__tests__parse@equation.txt.snap | 17 + ...x__tests__parse@equation_missing_begin.txt.snap | 32 + ...tex__tests__parse@generic_command_args.txt.snap | 20 + ...ex__tests__parse@generic_command_empty.txt.snap | 10 + ...x__tests__parse@generic_command_escape.txt.snap | 10 + ...s__parse@glossary__acronym_declaration.txt.snap | 50 + ...e@glossary__acronym_definition_options.txt.snap | 47 + ...se@glossary__acronym_definition_simple.txt.snap | 29 + ...tests__parse@glossary__acronym_package.txt.snap | 30 + ...se@glossary__acronym_reference_options.txt.snap | 30 + ...rse@glossary__acronym_reference_simple.txt.snap | 15 + ...sary__glossary_entry_definition_simple.txt.snap | 34 + ...sary__glossary_entry_reference_options.txt.snap | 33 + ...ssary__glossary_entry_reference_simple.txt.snap | 15 + ...ser__latex__tests__parse@graphics_path.txt.snap | 18 + ...ex__tests__parse@graphics_path_command.txt.snap | 23 + ...ex__tests__parse@graphics_path_options.txt.snap | 23 + ...__parse@group__curly_group_missing_end.txt.snap | 14 + ...tests__parse@group__curly_group_simple.txt.snap | 15 + ...sts__parse@group__equation_missing_end.txt.snap | 32 + ...__tests__parse@group__escaped_brackets.txt.snap | 18 + ...__tests__parse@group__unmatched_braces.txt.snap | 12 + ...tests__parse@group__unmatched_brackets.txt.snap | 12 + ...e@group__unmatched_brackets_with_group.txt.snap | 15 + ...arser__latex__tests__parse@hello_world.txt.snap | 12 + ...arse@include__biblatex_include_options.txt.snap | 31 + ...parse@include__biblatex_include_simple.txt.snap | 15 + ...__parse@include__bibtex_include_simple.txt.snap | 15 + ...ts__parse@include__class_include_empty.txt.snap | 13 + ...__parse@include__class_include_options.txt.snap | 38 + ...s__parse@include__class_include_simple.txt.snap | 15 + ...arse@include__graphics_include_command.txt.snap | 31 + ...__graphics_include_complicated_options.txt.snap | 26 + ...arse@include__graphics_include_options.txt.snap | 26 + ...parse@include__graphics_include_simple.txt.snap | 15 + ...ests__parse@include__import_incomplete.txt.snap | 14 + ...x__tests__parse@include__import_simple.txt.snap | 20 + ...arse@include__inkscape_include_options.txt.snap | 26 + ...parse@include__inkscape_include_simple.txt.snap | 15 + ...e@include__latex_include_equality_sign.txt.snap | 17 + ...s__parse@include__latex_include_simple.txt.snap | 15 + ...rse@include__latex_input_path_brackets.txt.snap | 19 + ...__parse@include__package_include_empty.txt.snap | 13 + ...arse@include__package_include_multiple.txt.snap | 19 + ...parse@include__package_include_options.txt.snap | 38 + ..._parse@include__package_include_simple.txt.snap | 15 + ...rse@include__pgf_library_import_simple.txt.snap | 15 + ...ts__parse@include__svg_include_options.txt.snap | 26 + ...sts__parse@include__svg_include_simple.txt.snap | 15 + ...se@include__tikz_library_import_simple.txt.snap | 15 + ...parse@include__verbatim_include_simple.txt.snap | 15 + .../parser__latex__tests__parse@inline.txt.snap | 26 + ...tex__tests__parse@inline_double_dollar.txt.snap | 26 + .../parser__latex__tests__parse@issue_745.txt.snap | 131 + .../parser__latex__tests__parse@issue_789.txt.snap | 15 + .../parser__latex__tests__parse@issue_853.txt.snap | 62 + .../parser__latex__tests__parse@issue_857.txt.snap | 33 + .../parser__latex__tests__parse@issue_874.txt.snap | 28 + ...rse@label__label_definition_line_break.txt.snap | 19 + ...__parse@label__label_definition_simple.txt.snap | 15 + ...atex__tests__parse@label__label_number.txt.snap | 23 + ..._parse@label__label_reference_equation.txt.snap | 15 + ...arse@label__label_reference_incomplete.txt.snap | 32 + ..._parse@label__label_reference_multiple.txt.snap | 19 + ...rse@label__label_reference_range_error.txt.snap | 19 + ...abel__label_reference_range_incomplete.txt.snap | 15 + ...se@label__label_reference_range_simple.txt.snap | 20 + ...s__parse@label__label_reference_simple.txt.snap | 15 + .../parser__latex__tests__parse@parameter.txt.snap | 10 + ...r__latex__tests__parse@parameter_error.txt.snap | 10 + ...__parse@structure__structure_enum_item.txt.snap | 47 + ...e@structure__structure_invalid_nesting.txt.snap | 23 + ...sts__parse@structure__structure_nested.txt.snap | 57 + ...s__parse@structure__structure_siblings.txt.snap | 29 + ...em_definition__theorem_definition_full.txt.snap | 30 + ...__theorem_definition_name_with_counter.txt.snap | 20 + ...eorem_definition_name_with_description.txt.snap | 20 + ...tion_name_with_description_and_counter.txt.snap | 25 + ...finition__theorem_definition_only_name.txt.snap | 15 + .../crates/parser/src/test_data/bibtex/comment.txt | 6 + .../parser/src/test_data/bibtex/issue_809.txt | 3 + .../parser/src/test_data/bibtex/preamble.txt | 1 + .../src/test_data/bibtex/samples/aho_2006.txt | 8 + .../src/test_data/bibtex/samples/aksin_2006.txt | 16 + .../src/test_data/bibtex/samples/almendro_1998.txt | 14 + .../src/test_data/bibtex/samples/averroes_1998.txt | 21 + .../src/test_data/bibtex/samples/betram_1996.txt | 16 + .../src/test_data/bibtex/samples/blom_2021.txt | 20 + .../src/test_data/bibtex/samples/combi_2004.txt | 16 + .../src/test_data/bibtex/samples/erwin_2007.txt | 14 + .../src/test_data/bibtex/samples/jain_1999.txt | 18 + .../test_data/bibtex/samples/kastenholz_2006.txt | 20 + .../src/test_data/bibtex/samples/knuth_1984.txt | 22 + .../src/test_data/bibtex/samples/matuz_1990.txt | 14 + .../test_data/bibtex/samples/nietzsche_1998.txt | 24 + .../src/test_data/bibtex/samples/rivest_1978.txt | 17 + .../crates/parser/src/test_data/build_log/001.txt | 83 + .../crates/parser/src/test_data/build_log/002.txt | 64 + .../crates/parser/src/test_data/build_log/003.txt | 65 + .../crates/parser/src/test_data/build_log/004.txt | 83 + .../crates/parser/src/test_data/build_log/005.txt | 385 + .../crates/parser/src/test_data/build_log/006.txt | 122 + .../crates/parser/src/test_data/build_log/007.txt | 176 + .../parser/src/test_data/latex/block_comments.txt | 9 + .../test_data/latex/caption/caption_default.txt | 1 + .../latex/caption/caption_default_error.txt | 1 + .../src/test_data/latex/caption/caption_figure.txt | 1 + .../test_data/latex/caption/caption_minimal.txt | 1 + .../latex/caption/caption_minimal_error.txt | 1 + .../test_data/latex/citation/citation_empty.txt | 1 + .../latex/citation/citation_missing_brace.txt | 1 + .../latex/citation/citation_multiple_keys.txt | 1 + .../test_data/latex/citation/citation_prenote.txt | 1 + .../latex/citation/citation_prenote_postnote.txt | 1 + .../latex/citation/citation_redundant_comma.txt | 1 + .../test_data/latex/citation/citation_simple.txt | 1 + .../src/test_data/latex/citation/citation_star.txt | 1 + .../latex/color/color_definition_simple.txt | 1 + .../latex/color/color_reference_simple.txt | 1 + .../latex/color/color_set_definition_error1.txt | 1 + .../latex/color/color_set_definition_error2.txt | 1 + .../latex/color/color_set_definition_error3.txt | 1 + .../latex/color/color_set_definition_error4.txt | 1 + .../latex/color/color_set_definition_simple.txt | 1 + .../command_definition_no_argc.txt | 1 + .../command_definition_no_impl.txt | 1 + .../command_definition_no_impl_error.txt | 1 + .../command_definition_optional.txt | 1 + .../command_definition_simple.txt | 1 + .../command_definition_with_begin.txt | 1 + .../command_definition/math_operator_no_impl.txt | 1 + .../command_definition/math_operator_simple.txt | 1 + .../latex/environment/environment_asymptote.txt | 3 + .../latex/environment/environment_definition.txt | 1 + .../environment_definition_optional_arg.txt | 1 + .../latex/environment/environment_nested.txt | 1 + .../environment_nested_missing_braces.txt | 1 + .../latex/environment/environment_simple.txt | 1 + .../crates/parser/src/test_data/latex/equation.txt | 1 + .../src/test_data/latex/equation_missing_begin.txt | 1 + .../src/test_data/latex/generic_command_args.txt | 1 + .../src/test_data/latex/generic_command_empty.txt | 1 + .../src/test_data/latex/generic_command_escape.txt | 1 + .../latex/glossary/acronym_declaration.txt | 1 + .../latex/glossary/acronym_definition_options.txt | 1 + .../latex/glossary/acronym_definition_simple.txt | 1 + .../test_data/latex/glossary/acronym_package.txt | 1 + .../latex/glossary/acronym_reference_options.txt | 1 + .../latex/glossary/acronym_reference_simple.txt | 1 + .../glossary/glossary_entry_definition_simple.txt | 1 + .../glossary/glossary_entry_reference_options.txt | 1 + .../glossary/glossary_entry_reference_simple.txt | 1 + .../parser/src/test_data/latex/graphics_path.txt | 1 + .../src/test_data/latex/graphics_path_command.txt | 1 + .../src/test_data/latex/graphics_path_options.txt | 1 + .../latex/group/curly_group_missing_end.txt | 1 + .../test_data/latex/group/curly_group_simple.txt | 1 + .../test_data/latex/group/equation_missing_end.txt | 1 + .../src/test_data/latex/group/escaped_brackets.txt | 1 + .../src/test_data/latex/group/unmatched_braces.txt | 1 + .../test_data/latex/group/unmatched_brackets.txt | 1 + .../latex/group/unmatched_brackets_with_group.txt | 1 + .../parser/src/test_data/latex/hello_world.txt | 1 + .../latex/include/biblatex_include_options.txt | 1 + .../latex/include/biblatex_include_simple.txt | 1 + .../latex/include/bibtex_include_simple.txt | 1 + .../latex/include/class_include_empty.txt | 1 + .../latex/include/class_include_options.txt | 1 + .../latex/include/class_include_simple.txt | 1 + .../latex/include/graphics_include_command.txt | 1 + .../graphics_include_complicated_options.txt | 1 + .../latex/include/graphics_include_options.txt | 1 + .../latex/include/graphics_include_simple.txt | 1 + .../test_data/latex/include/import_incomplete.txt | 1 + .../src/test_data/latex/include/import_simple.txt | 1 + .../latex/include/inkscape_include_options.txt | 1 + .../latex/include/inkscape_include_simple.txt | 1 + .../latex/include/latex_include_equality_sign.txt | 1 + .../latex/include/latex_include_simple.txt | 1 + .../latex/include/latex_input_path_brackets.txt | 1 + .../latex/include/package_include_empty.txt | 1 + .../latex/include/package_include_multiple.txt | 1 + .../latex/include/package_include_options.txt | 1 + .../latex/include/package_include_simple.txt | 1 + .../latex/include/pgf_library_import_simple.txt | 1 + .../latex/include/svg_include_options.txt | 1 + .../test_data/latex/include/svg_include_simple.txt | 1 + .../latex/include/tikz_library_import_simple.txt | 1 + .../latex/include/verbatim_include_simple.txt | 1 + .../crates/parser/src/test_data/latex/inline.txt | 1 + .../src/test_data/latex/inline_double_dollar.txt | 1 + .../parser/src/test_data/latex/issue_745.txt | 21 + .../parser/src/test_data/latex/issue_789.txt | 1 + .../parser/src/test_data/latex/issue_853.txt | 8 + .../parser/src/test_data/latex/issue_857.txt | 3 + .../parser/src/test_data/latex/issue_874.txt | 1 + .../latex/label/label_definition_line_break.txt | 2 + .../latex/label/label_definition_simple.txt | 1 + .../src/test_data/latex/label/label_number.txt | 1 + .../latex/label/label_reference_equation.txt | 1 + .../latex/label/label_reference_incomplete.txt | 1 + .../latex/label/label_reference_multiple.txt | 1 + .../latex/label/label_reference_range_error.txt | 1 + .../label/label_reference_range_incomplete.txt | 1 + .../latex/label/label_reference_range_simple.txt | 1 + .../latex/label/label_reference_simple.txt | 1 + .../parser/src/test_data/latex/parameter.txt | 1 + .../parser/src/test_data/latex/parameter_error.txt | 1 + .../latex/structure/structure_enum_item.txt | 1 + .../latex/structure/structure_invalid_nesting.txt | 1 + .../test_data/latex/structure/structure_nested.txt | 1 + .../latex/structure/structure_siblings.txt | 1 + .../theorem_definition/theorem_definition_full.txt | 1 + .../theorem_definition_name_with_counter.txt | 1 + .../theorem_definition_name_with_description.txt | 1 + ...efinition_name_with_description_and_counter.txt | 1 + .../theorem_definition_only_name.txt | 1 + support/texlab/crates/syntax/Cargo.toml | 14 + support/texlab/crates/syntax/src/bibtex.rs | 304 + support/texlab/crates/syntax/src/latex.rs | 29 + support/texlab/crates/syntax/src/latex/cst.rs | 688 ++ support/texlab/crates/syntax/src/latex/kind.rs | 91 + support/texlab/crates/syntax/src/lib.rs | 35 + support/texlab/crates/texlab/Cargo.toml | 78 + support/texlab/crates/texlab/benches/bench_main.rs | 43 + .../texlab/crates/texlab/data/components.json.gz | Bin 0 -> 6970534 bytes support/texlab/crates/texlab/data/lang_data.json | 1058 ++ support/texlab/crates/texlab/src/client.rs | 109 + support/texlab/crates/texlab/src/features.rs | 14 + support/texlab/crates/texlab/src/features/build.rs | 171 + .../crates/texlab/src/features/build/progress.rs | 54 + .../crates/texlab/src/features/completion.rs | 57 + .../texlab/src/features/completion/acronym_ref.rs | 31 + .../texlab/src/features/completion/argument.rs | 57 + .../src/features/completion/begin_snippet.rs | 9 + .../texlab/src/features/completion/builder.rs | 770 ++ .../texlab/src/features/completion/citation.rs | 58 + .../crates/texlab/src/features/completion/color.rs | 20 + .../texlab/src/features/completion/color_model.rs | 40 + .../src/features/completion/component_command.rs | 24 + .../features/completion/component_environment.rs | 18 + .../texlab/src/features/completion/entry_type.rs | 25 + .../crates/texlab/src/features/completion/field.rs | 34 + .../texlab/src/features/completion/glossary_ref.rs | 37 + .../texlab/src/features/completion/import.rs | 53 + .../texlab/src/features/completion/include.rs | 140 + .../crates/texlab/src/features/completion/label.rs | 72 + .../texlab/src/features/completion/theorem.rs | 21 + .../texlab/src/features/completion/tikz_library.rs | 27 + .../texlab/src/features/completion/user_command.rs | 21 + .../src/features/completion/user_environment.rs | 26 + .../crates/texlab/src/features/definition.rs | 60 + .../texlab/src/features/definition/command.rs | 45 + .../texlab/src/features/definition/document.rs | 31 + .../crates/texlab/src/features/definition/entry.rs | 42 + .../crates/texlab/src/features/definition/label.rs | 37 + .../texlab/src/features/definition/string.rs | 35 + .../texlab/crates/texlab/src/features/folding.rs | 62 + .../crates/texlab/src/features/formatting.rs | 29 + .../src/features/formatting/bibtex_internal.rs | 198 + .../texlab/src/features/formatting/latexindent.rs | 75 + .../crates/texlab/src/features/forward_search.rs | 195 + .../texlab/crates/texlab/src/features/highlight.rs | 15 + .../crates/texlab/src/features/highlight/label.rs | 30 + support/texlab/crates/texlab/src/features/hover.rs | 39 + .../crates/texlab/src/features/hover/citation.rs | 27 + .../crates/texlab/src/features/hover/component.rs | 23 + .../crates/texlab/src/features/hover/entry_type.rs | 20 + .../crates/texlab/src/features/hover/field.rs | 23 + .../crates/texlab/src/features/hover/label.rs | 26 + .../crates/texlab/src/features/hover/string_ref.rs | 42 + .../crates/texlab/src/features/inlay_hint.rs | 48 + .../crates/texlab/src/features/inlay_hint/label.rs | 39 + support/texlab/crates/texlab/src/features/link.rs | 38 + .../crates/texlab/src/features/link/include.rs | 22 + .../texlab/crates/texlab/src/features/reference.rs | 39 + .../crates/texlab/src/features/reference/entry.rs | 56 + .../crates/texlab/src/features/reference/label.rs | 36 + .../crates/texlab/src/features/reference/string.rs | 44 + .../texlab/crates/texlab/src/features/rename.rs | 64 + .../crates/texlab/src/features/rename/command.rs | 39 + .../crates/texlab/src/features/rename/entry.rs | 70 + .../crates/texlab/src/features/rename/label.rs | 37 + .../texlab/crates/texlab/src/features/symbol.rs | 129 + .../crates/texlab/src/features/symbol/bibtex.rs | 82 + .../crates/texlab/src/features/symbol/latex.rs | 431 + .../texlab/src/features/symbol/project_order.rs | 203 + .../crates/texlab/src/features/symbol/types.rs | 133 + .../texlab/src/features/workspace_command.rs | 3 + .../workspace_command/change_environment.rs | 108 + .../texlab/src/features/workspace_command/clean.rs | 93 + .../src/features/workspace_command/dep_graph.rs | 57 + support/texlab/crates/texlab/src/lib.rs | 33 + support/texlab/crates/texlab/src/main.rs | 70 + support/texlab/crates/texlab/src/server.rs | 1018 ++ .../texlab/crates/texlab/src/server/dispatch.rs | 86 + support/texlab/crates/texlab/src/server/options.rs | 213 + support/texlab/crates/texlab/src/util.rs | 16 + .../texlab/crates/texlab/src/util/capabilities.rs | 179 + support/texlab/crates/texlab/src/util/chktex.rs | 113 + .../texlab/crates/texlab/src/util/components.rs | 116 + support/texlab/crates/texlab/src/util/cursor.rs | 303 + .../texlab/crates/texlab/src/util/diagnostics.rs | 120 + support/texlab/crates/texlab/src/util/label.rs | 202 + support/texlab/crates/texlab/src/util/lang_data.rs | 68 + .../crates/texlab/src/util/line_index_ext.rs | 51 + support/texlab/crates/texlab/src/util/lsp_enums.rs | 94 + .../texlab/crates/texlab/src/util/regex_filter.rs | 20 + support/texlab/crates/texlab/tests/lsp/fixture.rs | 269 + support/texlab/crates/texlab/tests/lsp/main.rs | 3 + .../crates/texlab/tests/lsp/text_document.rs | 11 + .../texlab/tests/lsp/text_document/completion.rs | 854 ++ .../texlab/tests/lsp/text_document/definition.rs | 156 + .../tests/lsp/text_document/document_highlight.rs | 51 + .../tests/lsp/text_document/document_link.rs | 52 + .../tests/lsp/text_document/document_symbol.rs | 441 + .../tests/lsp/text_document/folding_range.rs | 66 + .../texlab/tests/lsp/text_document/formatting.rs | 135 + .../crates/texlab/tests/lsp/text_document/hover.rs | 246 + .../texlab/tests/lsp/text_document/inlay_hint.rs | 57 + .../texlab/tests/lsp/text_document/references.rs | 270 + .../texlab/tests/lsp/text_document/rename.rs | 106 + ..._document__completion__acronym_package_ref.snap | 10 + ...xt_document__completion__acronym_ref_empty.snap | 10 + ...cument__completion__acronym_ref_open_brace.snap | 10 + ...t_document__completion__acronym_ref_simple.snap | 10 + ..._text_document__completion__argument_empty.snap | 26 + ..._document__completion__argument_open_brace.snap | 26 + ...__text_document__completion__argument_word.snap | 10 + ..._begin_environment_without_snippet_support.snap | 31 + .../lsp__text_document__completion__citation.snap | 16 + ...ext_document__completion__citation_acronym.snap | 11 + ..._document__completion__citation_open_brace.snap | 11 + ...__completion__citation_open_brace_multiple.snap | 11 + ...pletion__color_model_definition_open_brace.snap | 26 + ...ion__color_model_definition_set_open_brace.snap | 26 + ...pletion__color_model_definition_set_simple.snap | 26 + ..._completion__color_model_definition_simple.snap | 26 + ...ext_document__completion__color_open_brace.snap | 26 + ...p__text_document__completion__color_simple.snap | 26 + ...lsp__text_document__completion__color_word.snap | 26 + ...ment__completion__component_command_bibtex.snap | 31 + ...ment__completion__component_command_simple.snap | 31 + ...mpletion__component_command_simple_package.snap | 31 + ...t__completion__component_environment_class.snap | 11 + ...__component_environment_command_definition.snap | 11 + ...__completion__component_environment_simple.snap | 11 + ...mpletion__component_environment_simple_end.snap | 31 + ...ent__completion__entry_type_after_preamble.snap | 10 + ...ument__completion__entry_type_after_string.snap | 10 + ..._document__completion__entry_type_at_empty.snap | 26 + ...ent__completion__entry_type_before_article.snap | 10 + ...nt__completion__entry_type_before_preamble.snap | 10 + ...ment__completion__entry_type_before_string.snap | 10 + ...ent__completion__entry_type_complete_entry.snap | 10 + ...ment__completion__field_empty_entry_closed.snap | 26 + ...cument__completion__field_empty_entry_open.snap | 26 + ...cument__completion__field_entry_field_name.snap | 26 + ...letion__field_entry_two_fields_name_closed.snap | 26 + ...mpletion__field_entry_two_fields_name_open.snap | 26 + ...ument__completion__glossary_ref_open_brace.snap | 10 + ..._document__completion__glossary_ref_simple.snap | 10 + ...ent__completion__import_class_closed_brace.snap | 26 + ...ument__completion__import_class_open_brace.snap | 26 + ...t__completion__import_package_closed_brace.snap | 26 + ...ent__completion__import_package_open_brace.snap | 26 + ...sp__text_document__completion__issue_857_1.snap | 21 + .../lsp__text_document__completion__issue_864.snap | 11 + .../lsp__text_document__completion__label.snap | 36 + ...ent__completion__project_resolution_import.snap | 31 + ..._completion__project_resolution_texlabroot.snap | 31 + ...__text_document__completion__theorem_begin.snap | 11 + ...sp__text_document__completion__theorem_end.snap | 11 + ...ent__completion__tikz_library_closed_brace.snap | 26 + ...ument__completion__tikz_library_open_brace.snap | 26 + ...p__text_document__completion__user_command.snap | 11 + ...ext_document__completion__user_environment.snap | 16 + ...t_document__document_link__document_import.snap | 19 + ..._document__document_link__document_include.snap | 19 + ..._document__document_symbol__enumerate_flat.snap | 96 + ...ocument__document_symbol__enumerate_nested.snap | 140 + ...t_document__document_symbol__equation_flat.snap | 60 + ...document__document_symbol__equation_nested.snap | 86 + ...text_document__document_symbol__float_flat.snap | 60 + ...xt_document__document_symbol__float_nested.snap | 86 + ...ocument__document_symbol__ignored_patterns.snap | 24 + ...xt_document__document_symbol__section_flat.snap | 60 + ..._document__document_symbol__section_nested.snap | 87 + ...xt_document__document_symbol__theorem_flat.snap | 78 + ..._document__document_symbol__theorem_nested.snap | 113 + .../lsp__text_document__folding_range__bibtex.snap | 27 + .../lsp__text_document__folding_range__latex.snap | 41 + ...ument__formatting__bibtex_internal_command.snap | 7 + ..._formatting__bibtex_internal_insert_braces.snap | 7 + ...__formatting__bibtex_internal_join_strings.snap | 7 + ...rmatting__bibtex_internal_multiple_entries.snap | 15 + ...cument__formatting__bibtex_internal_parens.snap | 6 + ...ment__formatting__bibtex_internal_preamble.snap | 5 + ...cument__formatting__bibtex_internal_string.snap | 5 + ...formatting__bibtex_internal_trailing_comma.snap | 7 + ...ormatting__bibtex_internal_wrap_long_lines.snap | 9 + ...text_document__hover__citation_inside_cite.snap | 8 + ...ext_document__hover__citation_inside_entry.snap | 8 + ...t_document__hover__component_known_package.snap | 8 + ...ext_document__hover__entry_type_known_type.snap | 8 + .../lsp__text_document__hover__field_known.snap | 8 + ..._document__hover__label_theorem_child_file.snap | 8 + ...nt__hover__label_theorem_child_file_mumber.snap | 8 + .../lsp__text_document__hover__section.snap | 8 + ...t_document__hover__string_inside_reference.snap | 8 + ...ext_document__inlay_hint__label_definition.snap | 38 + .../texlab/crates/texlab/tests/lsp/workspace.rs | 1 + .../lsp__workspace__symbol__filter_bibtex.snap | 42 + ...lsp__workspace__symbol__filter_type_figure.snap | 24 + .../lsp__workspace__symbol__filter_type_item.snap | 60 + .../lsp__workspace__symbol__filter_type_math.snap | 42 + ...sp__workspace__symbol__filter_type_section.snap | 78 + .../crates/texlab/tests/lsp/workspace/symbol.rs | 124 + support/texlab/data/components.json.gz | Bin 6970534 -> 0 bytes support/texlab/data/lang_data.json | 1058 -- support/texlab/src/citation.rs | 37 - support/texlab/src/citation/driver.rs | 729 -- support/texlab/src/citation/entry.rs | 126 - support/texlab/src/citation/field.rs | 4 - support/texlab/src/citation/field/author.rs | 70 - support/texlab/src/citation/field/date.rs | 81 - support/texlab/src/citation/field/number.rs | 54 - support/texlab/src/citation/field/text.rs | 261 - support/texlab/src/citation/output.rs | 68 - ...exlab__citation__tests__article_aksin_2006.snap | 6 - ...xlab__citation__tests__article_betram_1996.snap | 6 - ...texlab__citation__tests__article_blom_2021.snap | 6 - ...texlab__citation__tests__article_jain_1999.snap | 6 - ...__citation__tests__article_kastenholz_2006.snap | 6 - ...xlab__citation__tests__article_rivest_1978.snap | 6 - .../texlab__citation__tests__book_aho_2006.snap | 6 - ...exlab__citation__tests__book_averroes_1998.snap | 6 - .../texlab__citation__tests__book_knuth_1984.snap | 6 - ...ab__citation__tests__collection_matuz_1990.snap | 6 - ..._citation__tests__inproceedings_combi_2004.snap | 6 - ..._citation__tests__inproceedings_erwin_2007.snap | 6 - ...ab__citation__tests__mvbook_nietzsche_1988.snap | 6 - ...lab__citation__tests__patent_almendro_1998.snap | 6 - support/texlab/src/citation/tests.rs | 351 - support/texlab/src/client.rs | 109 - support/texlab/src/config.rs | 230 - support/texlab/src/db.rs | 15 - support/texlab/src/db/analysis.rs | 221 - support/texlab/src/db/analysis/label.rs | 122 - support/texlab/src/db/context.rs | 18 - support/texlab/src/db/diagnostics.rs | 177 - support/texlab/src/db/diagnostics/bib.rs | 112 - support/texlab/src/db/diagnostics/log.rs | 100 - support/texlab/src/db/diagnostics/tex.rs | 147 - support/texlab/src/db/discovery.rs | 258 - support/texlab/src/db/document.rs | 199 - support/texlab/src/db/parse.rs | 79 - support/texlab/src/db/workspace.rs | 211 - support/texlab/src/distro.rs | 74 - support/texlab/src/distro/file_name_db.rs | 80 - support/texlab/src/distro/kpsewhich.rs | 25 - support/texlab/src/distro/miktex.rs | 78 - support/texlab/src/distro/texlive.rs | 36 - support/texlab/src/features.rs | 14 - support/texlab/src/features/build.rs | 190 - support/texlab/src/features/build/progress.rs | 54 - support/texlab/src/features/completion.rs | 50 - .../texlab/src/features/completion/acronym_ref.rs | 29 - support/texlab/src/features/completion/argument.rs | 62 - .../src/features/completion/begin_snippet.rs | 9 - support/texlab/src/features/completion/builder.rs | 767 -- support/texlab/src/features/completion/citation.rs | 63 - support/texlab/src/features/completion/color.rs | 22 - .../texlab/src/features/completion/color_model.rs | 39 - .../src/features/completion/component_command.rs | 24 - .../features/completion/component_environment.rs | 18 - .../texlab/src/features/completion/entry_type.rs | 27 - support/texlab/src/features/completion/field.rs | 36 - .../texlab/src/features/completion/glossary_ref.rs | 35 - support/texlab/src/features/completion/import.rs | 55 - support/texlab/src/features/completion/include.rs | 149 - support/texlab/src/features/completion/label.rs | 79 - support/texlab/src/features/completion/theorem.rs | 21 - .../texlab/src/features/completion/tikz_library.rs | 29 - .../texlab/src/features/completion/user_command.rs | 30 - .../src/features/completion/user_environment.rs | 25 - support/texlab/src/features/definition.rs | 63 - support/texlab/src/features/definition/command.rs | 41 - support/texlab/src/features/definition/document.rs | 30 - support/texlab/src/features/definition/entry.rs | 43 - support/texlab/src/features/definition/label.rs | 38 - support/texlab/src/features/definition/string.rs | 34 - support/texlab/src/features/folding.rs | 63 - support/texlab/src/features/formatting.rs | 33 - .../src/features/formatting/bibtex_internal.rs | 200 - .../texlab/src/features/formatting/latexindent.rs | 78 - support/texlab/src/features/forward_search.rs | 195 - support/texlab/src/features/highlight.rs | 10 - support/texlab/src/features/highlight/label.rs | 32 - support/texlab/src/features/hover.rs | 42 - support/texlab/src/features/hover/citation.rs | 27 - support/texlab/src/features/hover/component.rs | 28 - support/texlab/src/features/hover/entry_type.rs | 22 - support/texlab/src/features/hover/field.rs | 25 - support/texlab/src/features/hover/label.rs | 23 - support/texlab/src/features/hover/string_ref.rs | 43 - support/texlab/src/features/inlay_hint.rs | 45 - support/texlab/src/features/inlay_hint/label.rs | 48 - support/texlab/src/features/link.rs | 41 - support/texlab/src/features/link/include.rs | 25 - support/texlab/src/features/reference.rs | 45 - support/texlab/src/features/reference/entry.rs | 58 - support/texlab/src/features/reference/label.rs | 36 - support/texlab/src/features/reference/string.rs | 45 - support/texlab/src/features/rename.rs | 69 - support/texlab/src/features/rename/command.rs | 37 - support/texlab/src/features/rename/entry.rs | 66 - support/texlab/src/features/rename/label.rs | 76 - support/texlab/src/features/symbol.rs | 124 - support/texlab/src/features/symbol/bibtex.rs | 87 - support/texlab/src/features/symbol/latex.rs | 446 - .../texlab/src/features/symbol/project_order.rs | 202 - support/texlab/src/features/symbol/types.rs | 136 - support/texlab/src/features/workspace_command.rs | 3 - .../workspace_command/change_environment.rs | 108 - .../texlab/src/features/workspace_command/clean.rs | 95 - .../src/features/workspace_command/dep_graph.rs | 57 - support/texlab/src/lib.rs | 125 - support/texlab/src/main.rs | 70 - support/texlab/src/parser.rs | 5 - support/texlab/src/parser/bibtex.rs | 454 - support/texlab/src/parser/build_log.rs | 188 - support/texlab/src/parser/latex.rs | 1134 -- support/texlab/src/parser/latex/lexer.rs | 65 - support/texlab/src/parser/latex/lexer/commands.rs | 93 - support/texlab/src/parser/latex/lexer/types.rs | 132 - ...__parser__bibtex__tests__parse@comment.txt.snap | 10 - ...parser__bibtex__tests__parse@issue_809.txt.snap | 31 - ..._parser__bibtex__tests__parse@preamble.txt.snap | 17 - ...bibtex__tests__parse@samples__aho_2006.txt.snap | 132 - ...btex__tests__parse@samples__aksin_2006.txt.snap | 258 - ...x__tests__parse@samples__almendro_1998.txt.snap | 246 - ...x__tests__parse@samples__averroes_1998.txt.snap | 351 - ...tex__tests__parse@samples__betram_1996.txt.snap | 208 - ...ibtex__tests__parse@samples__blom_2021.txt.snap | 223 - ...btex__tests__parse@samples__combi_2004.txt.snap | 251 - ...btex__tests__parse@samples__erwin_2007.txt.snap | 239 - ...ibtex__tests__parse@samples__jain_1999.txt.snap | 267 - ..._tests__parse@samples__kastenholz_2006.txt.snap | 302 - ...btex__tests__parse@samples__knuth_1984.txt.snap | 320 - ...btex__tests__parse@samples__matuz_1990.txt.snap | 176 - ...__tests__parse@samples__nietzsche_1998.txt.snap | 368 - ...tex__tests__parse@samples__rivest_1978.txt.snap | 232 - ...b__parser__build_log__tests__parse@001.txt.snap | 27 - ...b__parser__build_log__tests__parse@002.txt.snap | 20 - ...b__parser__build_log__tests__parse@003.txt.snap | 25 - ...b__parser__build_log__tests__parse@004.txt.snap | 31 - ...b__parser__build_log__tests__parse@005.txt.snap | 30 - ...b__parser__build_log__tests__parse@006.txt.snap | 69 - ...b__parser__build_log__tests__parse@007.txt.snap | 19 - ...er__latex__tests__parse@block_comments.txt.snap | 30 - ..._tests__parse@caption__caption_default.txt.snap | 26 - ...__parse@caption__caption_default_error.txt.snap | 25 - ...__tests__parse@caption__caption_figure.txt.snap | 30 - ..._tests__parse@caption__caption_minimal.txt.snap | 21 - ...__parse@caption__caption_minimal_error.txt.snap | 20 - ..._tests__parse@citation__citation_empty.txt.snap | 13 - ...parse@citation__citation_missing_brace.txt.snap | 14 - ...parse@citation__citation_multiple_keys.txt.snap | 19 - ...ests__parse@citation__citation_prenote.txt.snap | 20 - ...se@citation__citation_prenote_postnote.txt.snap | 25 - ...rse@citation__citation_redundant_comma.txt.snap | 17 - ...tests__parse@citation__citation_simple.txt.snap | 15 - ...__tests__parse@citation__citation_star.txt.snap | 15 - ...__parse@color__color_definition_simple.txt.snap | 29 - ...s__parse@color__color_reference_simple.txt.snap | 15 - ...rse@color__color_set_definition_error1.txt.snap | 33 - ...rse@color__color_set_definition_error2.txt.snap | 23 - ...rse@color__color_set_definition_error3.txt.snap | 18 - ...rse@color__color_set_definition_error4.txt.snap | 10 - ...rse@color__color_set_definition_simple.txt.snap | 38 - ...definition__command_definition_no_argc.txt.snap | 19 - ...definition__command_definition_no_impl.txt.snap | 14 - ...tion__command_definition_no_impl_error.txt.snap | 13 - ...efinition__command_definition_optional.txt.snap | 29 - ..._definition__command_definition_simple.txt.snap | 25 - ...inition__command_definition_with_begin.txt.snap | 39 - ...mand_definition__math_operator_no_impl.txt.snap | 14 - ...mmand_definition__math_operator_simple.txt.snap | 19 - ...rse@environment__environment_asymptote.txt.snap | 41 - ...se@environment__environment_definition.txt.snap | 40 - ...t__environment_definition_optional_arg.txt.snap | 35 - ..._parse@environment__environment_nested.txt.snap | 41 - ...ent__environment_nested_missing_braces.txt.snap | 42 - ..._parse@environment__environment_simple.txt.snap | 29 - ...__parser__latex__tests__parse@equation.txt.snap | 17 - ...x__tests__parse@equation_missing_begin.txt.snap | 32 - ...tex__tests__parse@generic_command_args.txt.snap | 20 - ...ex__tests__parse@generic_command_empty.txt.snap | 10 - ...x__tests__parse@generic_command_escape.txt.snap | 10 - ...s__parse@glossary__acronym_declaration.txt.snap | 50 - ...e@glossary__acronym_definition_options.txt.snap | 47 - ...se@glossary__acronym_definition_simple.txt.snap | 29 - ...tests__parse@glossary__acronym_package.txt.snap | 30 - ...se@glossary__acronym_reference_options.txt.snap | 30 - ...rse@glossary__acronym_reference_simple.txt.snap | 15 - ...sary__glossary_entry_definition_simple.txt.snap | 34 - ...sary__glossary_entry_reference_options.txt.snap | 33 - ...ssary__glossary_entry_reference_simple.txt.snap | 15 - ...ser__latex__tests__parse@graphics_path.txt.snap | 18 - ...ex__tests__parse@graphics_path_command.txt.snap | 23 - ...ex__tests__parse@graphics_path_options.txt.snap | 23 - ...__parse@group__curly_group_missing_end.txt.snap | 14 - ...tests__parse@group__curly_group_simple.txt.snap | 15 - ...sts__parse@group__equation_missing_end.txt.snap | 32 - ...__tests__parse@group__escaped_brackets.txt.snap | 18 - ...__tests__parse@group__unmatched_braces.txt.snap | 12 - ...tests__parse@group__unmatched_brackets.txt.snap | 12 - ...e@group__unmatched_brackets_with_group.txt.snap | 15 - ...arser__latex__tests__parse@hello_world.txt.snap | 12 - ...arse@include__biblatex_include_options.txt.snap | 31 - ...parse@include__biblatex_include_simple.txt.snap | 15 - ...__parse@include__bibtex_include_simple.txt.snap | 15 - ...ts__parse@include__class_include_empty.txt.snap | 13 - ...__parse@include__class_include_options.txt.snap | 38 - ...s__parse@include__class_include_simple.txt.snap | 15 - ...arse@include__graphics_include_command.txt.snap | 31 - ...__graphics_include_complicated_options.txt.snap | 26 - ...arse@include__graphics_include_options.txt.snap | 26 - ...parse@include__graphics_include_simple.txt.snap | 15 - ...ests__parse@include__import_incomplete.txt.snap | 14 - ...x__tests__parse@include__import_simple.txt.snap | 20 - ...arse@include__inkscape_include_options.txt.snap | 26 - ...parse@include__inkscape_include_simple.txt.snap | 15 - ...e@include__latex_include_equality_sign.txt.snap | 17 - ...s__parse@include__latex_include_simple.txt.snap | 15 - ...rse@include__latex_input_path_brackets.txt.snap | 19 - ...__parse@include__package_include_empty.txt.snap | 13 - ...arse@include__package_include_multiple.txt.snap | 19 - ...parse@include__package_include_options.txt.snap | 38 - ..._parse@include__package_include_simple.txt.snap | 15 - ...rse@include__pgf_library_import_simple.txt.snap | 15 - ...ts__parse@include__svg_include_options.txt.snap | 26 - ...sts__parse@include__svg_include_simple.txt.snap | 15 - ...se@include__tikz_library_import_simple.txt.snap | 15 - ...parse@include__verbatim_include_simple.txt.snap | 15 - ...ab__parser__latex__tests__parse@inline.txt.snap | 26 - ...tex__tests__parse@inline_double_dollar.txt.snap | 26 - ..._parser__latex__tests__parse@issue_745.txt.snap | 131 - ..._parser__latex__tests__parse@issue_789.txt.snap | 15 - ..._parser__latex__tests__parse@issue_853.txt.snap | 62 - ..._parser__latex__tests__parse@issue_857.txt.snap | 33 - ...rse@label__label_definition_line_break.txt.snap | 19 - ...__parse@label__label_definition_simple.txt.snap | 15 - ...atex__tests__parse@label__label_number.txt.snap | 23 - ..._parse@label__label_reference_equation.txt.snap | 15 - ...arse@label__label_reference_incomplete.txt.snap | 32 - ..._parse@label__label_reference_multiple.txt.snap | 19 - ...rse@label__label_reference_range_error.txt.snap | 19 - ...abel__label_reference_range_incomplete.txt.snap | 15 - ...se@label__label_reference_range_simple.txt.snap | 20 - ...s__parse@label__label_reference_simple.txt.snap | 15 - ..._parser__latex__tests__parse@parameter.txt.snap | 10 - ...r__latex__tests__parse@parameter_error.txt.snap | 10 - ...__parse@structure__structure_enum_item.txt.snap | 47 - ...e@structure__structure_invalid_nesting.txt.snap | 23 - ...sts__parse@structure__structure_nested.txt.snap | 57 - ...s__parse@structure__structure_siblings.txt.snap | 29 - ...em_definition__theorem_definition_full.txt.snap | 30 - ...__theorem_definition_name_with_counter.txt.snap | 20 - ...eorem_definition_name_with_description.txt.snap | 20 - ...tion_name_with_description_and_counter.txt.snap | 25 - ...finition__theorem_definition_only_name.txt.snap | 15 - .../texlab/src/parser/test_data/bibtex/comment.txt | 6 - .../src/parser/test_data/bibtex/issue_809.txt | 3 - .../src/parser/test_data/bibtex/preamble.txt | 1 - .../parser/test_data/bibtex/samples/aho_2006.txt | 8 - .../parser/test_data/bibtex/samples/aksin_2006.txt | 16 - .../test_data/bibtex/samples/almendro_1998.txt | 14 - .../test_data/bibtex/samples/averroes_1998.txt | 21 - .../test_data/bibtex/samples/betram_1996.txt | 16 - .../parser/test_data/bibtex/samples/blom_2021.txt | 20 - .../parser/test_data/bibtex/samples/combi_2004.txt | 16 - .../parser/test_data/bibtex/samples/erwin_2007.txt | 14 - .../parser/test_data/bibtex/samples/jain_1999.txt | 18 - .../test_data/bibtex/samples/kastenholz_2006.txt | 20 - .../parser/test_data/bibtex/samples/knuth_1984.txt | 22 - .../parser/test_data/bibtex/samples/matuz_1990.txt | 14 - .../test_data/bibtex/samples/nietzsche_1998.txt | 24 - .../test_data/bibtex/samples/rivest_1978.txt | 17 - .../texlab/src/parser/test_data/build_log/001.txt | 83 - .../texlab/src/parser/test_data/build_log/002.txt | 64 - .../texlab/src/parser/test_data/build_log/003.txt | 65 - .../texlab/src/parser/test_data/build_log/004.txt | 83 - .../texlab/src/parser/test_data/build_log/005.txt | 385 - .../texlab/src/parser/test_data/build_log/006.txt | 122 - .../texlab/src/parser/test_data/build_log/007.txt | 176 - .../src/parser/test_data/latex/block_comments.txt | 9 - .../test_data/latex/caption/caption_default.txt | 1 - .../latex/caption/caption_default_error.txt | 1 - .../test_data/latex/caption/caption_figure.txt | 1 - .../test_data/latex/caption/caption_minimal.txt | 1 - .../latex/caption/caption_minimal_error.txt | 1 - .../test_data/latex/citation/citation_empty.txt | 1 - .../latex/citation/citation_missing_brace.txt | 1 - .../latex/citation/citation_multiple_keys.txt | 1 - .../test_data/latex/citation/citation_prenote.txt | 1 - .../latex/citation/citation_prenote_postnote.txt | 1 - .../latex/citation/citation_redundant_comma.txt | 1 - .../test_data/latex/citation/citation_simple.txt | 1 - .../test_data/latex/citation/citation_star.txt | 1 - .../latex/color/color_definition_simple.txt | 1 - .../latex/color/color_reference_simple.txt | 1 - .../latex/color/color_set_definition_error1.txt | 1 - .../latex/color/color_set_definition_error2.txt | 1 - .../latex/color/color_set_definition_error3.txt | 1 - .../latex/color/color_set_definition_error4.txt | 1 - .../latex/color/color_set_definition_simple.txt | 1 - .../command_definition_no_argc.txt | 1 - .../command_definition_no_impl.txt | 1 - .../command_definition_no_impl_error.txt | 1 - .../command_definition_optional.txt | 1 - .../command_definition_simple.txt | 1 - .../command_definition_with_begin.txt | 1 - .../command_definition/math_operator_no_impl.txt | 1 - .../command_definition/math_operator_simple.txt | 1 - .../latex/environment/environment_asymptote.txt | 3 - .../latex/environment/environment_definition.txt | 1 - .../environment_definition_optional_arg.txt | 1 - .../latex/environment/environment_nested.txt | 1 - .../environment_nested_missing_braces.txt | 1 - .../latex/environment/environment_simple.txt | 1 - .../texlab/src/parser/test_data/latex/equation.txt | 1 - .../test_data/latex/equation_missing_begin.txt | 1 - .../test_data/latex/generic_command_args.txt | 1 - .../test_data/latex/generic_command_empty.txt | 1 - .../test_data/latex/generic_command_escape.txt | 1 - .../latex/glossary/acronym_declaration.txt | 1 - .../latex/glossary/acronym_definition_options.txt | 1 - .../latex/glossary/acronym_definition_simple.txt | 1 - .../test_data/latex/glossary/acronym_package.txt | 1 - .../latex/glossary/acronym_reference_options.txt | 1 - .../latex/glossary/acronym_reference_simple.txt | 1 - .../glossary/glossary_entry_definition_simple.txt | 1 - .../glossary/glossary_entry_reference_options.txt | 1 - .../glossary/glossary_entry_reference_simple.txt | 1 - .../src/parser/test_data/latex/graphics_path.txt | 1 - .../test_data/latex/graphics_path_command.txt | 1 - .../test_data/latex/graphics_path_options.txt | 1 - .../latex/group/curly_group_missing_end.txt | 1 - .../test_data/latex/group/curly_group_simple.txt | 1 - .../test_data/latex/group/equation_missing_end.txt | 1 - .../test_data/latex/group/escaped_brackets.txt | 1 - .../test_data/latex/group/unmatched_braces.txt | 1 - .../test_data/latex/group/unmatched_brackets.txt | 1 - .../latex/group/unmatched_brackets_with_group.txt | 1 - .../src/parser/test_data/latex/hello_world.txt | 1 - .../latex/include/biblatex_include_options.txt | 1 - .../latex/include/biblatex_include_simple.txt | 1 - .../latex/include/bibtex_include_simple.txt | 1 - .../latex/include/class_include_empty.txt | 1 - .../latex/include/class_include_options.txt | 1 - .../latex/include/class_include_simple.txt | 1 - .../latex/include/graphics_include_command.txt | 1 - .../graphics_include_complicated_options.txt | 1 - .../latex/include/graphics_include_options.txt | 1 - .../latex/include/graphics_include_simple.txt | 1 - .../test_data/latex/include/import_incomplete.txt | 1 - .../test_data/latex/include/import_simple.txt | 1 - .../latex/include/inkscape_include_options.txt | 1 - .../latex/include/inkscape_include_simple.txt | 1 - .../latex/include/latex_include_equality_sign.txt | 1 - .../latex/include/latex_include_simple.txt | 1 - .../latex/include/latex_input_path_brackets.txt | 1 - .../latex/include/package_include_empty.txt | 1 - .../latex/include/package_include_multiple.txt | 1 - .../latex/include/package_include_options.txt | 1 - .../latex/include/package_include_simple.txt | 1 - .../latex/include/pgf_library_import_simple.txt | 1 - .../latex/include/svg_include_options.txt | 1 - .../test_data/latex/include/svg_include_simple.txt | 1 - .../latex/include/tikz_library_import_simple.txt | 1 - .../latex/include/verbatim_include_simple.txt | 1 - .../texlab/src/parser/test_data/latex/inline.txt | 1 - .../test_data/latex/inline_double_dollar.txt | 1 - .../src/parser/test_data/latex/issue_745.txt | 21 - .../src/parser/test_data/latex/issue_789.txt | 1 - .../src/parser/test_data/latex/issue_853.txt | 8 - .../src/parser/test_data/latex/issue_857.txt | 3 - .../latex/label/label_definition_line_break.txt | 2 - .../latex/label/label_definition_simple.txt | 1 - .../parser/test_data/latex/label/label_number.txt | 1 - .../latex/label/label_reference_equation.txt | 1 - .../latex/label/label_reference_incomplete.txt | 1 - .../latex/label/label_reference_multiple.txt | 1 - .../latex/label/label_reference_range_error.txt | 1 - .../label/label_reference_range_incomplete.txt | 1 - .../latex/label/label_reference_range_simple.txt | 1 - .../latex/label/label_reference_simple.txt | 1 - .../src/parser/test_data/latex/parameter.txt | 1 - .../src/parser/test_data/latex/parameter_error.txt | 1 - .../latex/structure/structure_enum_item.txt | 1 - .../latex/structure/structure_invalid_nesting.txt | 1 - .../test_data/latex/structure/structure_nested.txt | 1 - .../latex/structure/structure_siblings.txt | 1 - .../theorem_definition/theorem_definition_full.txt | 1 - .../theorem_definition_name_with_counter.txt | 1 - .../theorem_definition_name_with_description.txt | 1 - ...efinition_name_with_description_and_counter.txt | 1 - .../theorem_definition_only_name.txt | 1 - support/texlab/src/server.rs | 1060 -- support/texlab/src/server/dispatch.rs | 87 - support/texlab/src/server/options.rs | 214 - support/texlab/src/server/query.rs | 32 - support/texlab/src/syntax.rs | 22 - support/texlab/src/syntax/bibtex.rs | 304 - support/texlab/src/syntax/latex.rs | 29 - support/texlab/src/syntax/latex/cst.rs | 688 -- support/texlab/src/syntax/latex/kind.rs | 91 - support/texlab/src/util.rs | 16 - support/texlab/src/util/capabilities.rs | 179 - support/texlab/src/util/chktex.rs | 112 - support/texlab/src/util/components.rs | 120 - support/texlab/src/util/cursor.rs | 315 - support/texlab/src/util/label.rs | 267 - support/texlab/src/util/lang_data.rs | 68 - support/texlab/src/util/line_index.rs | 217 - support/texlab/src/util/line_index_ext.rs | 42 - support/texlab/src/util/lsp_enums.rs | 94 - support/texlab/src/util/regex_filter.rs | 20 - support/texlab/tests/lsp/fixture.rs | 266 - support/texlab/tests/lsp/main.rs | 3 - support/texlab/tests/lsp/text_document.rs | 11 - .../texlab/tests/lsp/text_document/completion.rs | 854 -- .../texlab/tests/lsp/text_document/definition.rs | 156 - .../tests/lsp/text_document/document_highlight.rs | 51 - .../tests/lsp/text_document/document_link.rs | 52 - .../tests/lsp/text_document/document_symbol.rs | 441 - .../tests/lsp/text_document/folding_range.rs | 66 - .../texlab/tests/lsp/text_document/formatting.rs | 134 - support/texlab/tests/lsp/text_document/hover.rs | 246 - .../texlab/tests/lsp/text_document/inlay_hint.rs | 57 - .../texlab/tests/lsp/text_document/references.rs | 270 - support/texlab/tests/lsp/text_document/rename.rs | 106 - ..._document__completion__acronym_package_ref.snap | 10 - ...xt_document__completion__acronym_ref_empty.snap | 10 - ...cument__completion__acronym_ref_open_brace.snap | 10 - ...t_document__completion__acronym_ref_simple.snap | 10 - ..._text_document__completion__argument_empty.snap | 26 - ..._document__completion__argument_open_brace.snap | 26 - ...__text_document__completion__argument_word.snap | 10 - ..._begin_environment_without_snippet_support.snap | 31 - .../lsp__text_document__completion__citation.snap | 16 - ...ext_document__completion__citation_acronym.snap | 11 - ..._document__completion__citation_open_brace.snap | 11 - ...__completion__citation_open_brace_multiple.snap | 11 - ...pletion__color_model_definition_open_brace.snap | 26 - ...ion__color_model_definition_set_open_brace.snap | 26 - ...pletion__color_model_definition_set_simple.snap | 26 - ..._completion__color_model_definition_simple.snap | 26 - ...ext_document__completion__color_open_brace.snap | 26 - ...p__text_document__completion__color_simple.snap | 26 - ...lsp__text_document__completion__color_word.snap | 26 - ...ment__completion__component_command_bibtex.snap | 31 - ...ment__completion__component_command_simple.snap | 31 - ...mpletion__component_command_simple_package.snap | 31 - ...t__completion__component_environment_class.snap | 11 - ...__component_environment_command_definition.snap | 11 - ...__completion__component_environment_simple.snap | 11 - ...mpletion__component_environment_simple_end.snap | 31 - ...ent__completion__entry_type_after_preamble.snap | 10 - ...ument__completion__entry_type_after_string.snap | 10 - ..._document__completion__entry_type_at_empty.snap | 26 - ...ent__completion__entry_type_before_article.snap | 10 - ...nt__completion__entry_type_before_preamble.snap | 10 - ...ment__completion__entry_type_before_string.snap | 10 - ...ent__completion__entry_type_complete_entry.snap | 10 - ...ment__completion__field_empty_entry_closed.snap | 26 - ...cument__completion__field_empty_entry_open.snap | 26 - ...cument__completion__field_entry_field_name.snap | 26 - ...letion__field_entry_two_fields_name_closed.snap | 26 - ...mpletion__field_entry_two_fields_name_open.snap | 26 - ...ument__completion__glossary_ref_open_brace.snap | 10 - ..._document__completion__glossary_ref_simple.snap | 10 - ...ent__completion__import_class_closed_brace.snap | 26 - ...ument__completion__import_class_open_brace.snap | 26 - ...t__completion__import_package_closed_brace.snap | 26 - ...ent__completion__import_package_open_brace.snap | 26 - ...sp__text_document__completion__issue_857_1.snap | 21 - .../lsp__text_document__completion__issue_864.snap | 11 - .../lsp__text_document__completion__label.snap | 36 - ...ent__completion__project_resolution_import.snap | 31 - ..._completion__project_resolution_texlabroot.snap | 31 - ...__text_document__completion__theorem_begin.snap | 11 - ...sp__text_document__completion__theorem_end.snap | 11 - ...ent__completion__tikz_library_closed_brace.snap | 26 - ...ument__completion__tikz_library_open_brace.snap | 26 - ...p__text_document__completion__user_command.snap | 11 - ...ext_document__completion__user_environment.snap | 16 - ...t_document__document_link__document_import.snap | 19 - ..._document__document_link__document_include.snap | 19 - ..._document__document_symbol__enumerate_flat.snap | 96 - ...ocument__document_symbol__enumerate_nested.snap | 140 - ...t_document__document_symbol__equation_flat.snap | 60 - ...document__document_symbol__equation_nested.snap | 86 - ...text_document__document_symbol__float_flat.snap | 60 - ...xt_document__document_symbol__float_nested.snap | 86 - ...ocument__document_symbol__ignored_patterns.snap | 24 - ...xt_document__document_symbol__section_flat.snap | 60 - ..._document__document_symbol__section_nested.snap | 87 - ...xt_document__document_symbol__theorem_flat.snap | 78 - ..._document__document_symbol__theorem_nested.snap | 113 - .../lsp__text_document__folding_range__bibtex.snap | 27 - .../lsp__text_document__folding_range__latex.snap | 41 - ...ument__formatting__bibtex_internal_command.snap | 7 - ..._formatting__bibtex_internal_insert_braces.snap | 7 - ...__formatting__bibtex_internal_join_strings.snap | 7 - ...rmatting__bibtex_internal_multiple_entries.snap | 15 - ...cument__formatting__bibtex_internal_parens.snap | 6 - ...ment__formatting__bibtex_internal_preamble.snap | 5 - ...cument__formatting__bibtex_internal_string.snap | 5 - ...formatting__bibtex_internal_trailing_comma.snap | 7 - ...ormatting__bibtex_internal_wrap_long_lines.snap | 9 - ...text_document__hover__citation_inside_cite.snap | 8 - ...ext_document__hover__citation_inside_entry.snap | 8 - ...t_document__hover__component_known_package.snap | 8 - ...ext_document__hover__entry_type_known_type.snap | 8 - .../lsp__text_document__hover__field_known.snap | 8 - ..._document__hover__label_theorem_child_file.snap | 8 - ...nt__hover__label_theorem_child_file_mumber.snap | 8 - .../lsp__text_document__hover__section.snap | 8 - ...t_document__hover__string_inside_reference.snap | 8 - ...ext_document__inlay_hint__label_definition.snap | 38 - support/texlab/tests/lsp/workspace.rs | 1 - .../lsp__workspace__symbol__filter_bibtex.snap | 42 - ...lsp__workspace__symbol__filter_type_figure.snap | 24 - .../lsp__workspace__symbol__filter_type_item.snap | 60 - .../lsp__workspace__symbol__filter_type_math.snap | 42 - ...sp__workspace__symbol__filter_type_section.snap | 78 - support/texlab/tests/lsp/workspace/symbol.rs | 124 - support/texlab/texlab.1 | 4 +- support/texlab/texlab.pdf | Bin 26434 -> 26391 bytes .../texlive/tlnet/tlpkg/installer/ctan-mirrors.pl | 3 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb | 60 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 | 2 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 | 2 +- .../texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc | 14 +- systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz | Bin 2439876 -> 2440232 bytes timestamp | 2 +- 1088 files changed, 41751 insertions(+), 41567 deletions(-) delete mode 100644 support/texlab/benches/bench_main.rs create mode 100644 support/texlab/crates/base-db/Cargo.toml create mode 100644 support/texlab/crates/base-db/src/config.rs create mode 100644 support/texlab/crates/base-db/src/diagnostics.rs create mode 100644 support/texlab/crates/base-db/src/diagnostics/bib.rs create mode 100644 support/texlab/crates/base-db/src/diagnostics/log.rs create mode 100644 support/texlab/crates/base-db/src/diagnostics/tex.rs create mode 100644 support/texlab/crates/base-db/src/document.rs create mode 100644 support/texlab/crates/base-db/src/graph.rs create mode 100644 support/texlab/crates/base-db/src/lib.rs create mode 100644 support/texlab/crates/base-db/src/line_index.rs create mode 100644 support/texlab/crates/base-db/src/semantics.rs create mode 100644 support/texlab/crates/base-db/src/semantics/auxiliary.rs create mode 100644 support/texlab/crates/base-db/src/semantics/tex.rs create mode 100644 support/texlab/crates/base-db/src/workspace.rs create mode 100644 support/texlab/crates/citeproc/Cargo.toml create mode 100644 support/texlab/crates/citeproc/src/driver.rs create mode 100644 support/texlab/crates/citeproc/src/entry.rs create mode 100644 support/texlab/crates/citeproc/src/field.rs create mode 100644 support/texlab/crates/citeproc/src/field/author.rs create mode 100644 support/texlab/crates/citeproc/src/field/date.rs create mode 100644 support/texlab/crates/citeproc/src/field/number.rs create mode 100644 support/texlab/crates/citeproc/src/field/text.rs create mode 100644 support/texlab/crates/citeproc/src/lib.rs create mode 100644 support/texlab/crates/citeproc/src/output.rs create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_aksin_2006.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_betram_1996.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_blom_2021.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_jain_1999.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_kastenholz_2006.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_rivest_1978.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__book_aho_2006.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__book_averroes_1998.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__book_knuth_1984.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__collection_matuz_1990.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__inproceedings_combi_2004.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__inproceedings_erwin_2007.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__mvbook_nietzsche_1988.snap create mode 100644 support/texlab/crates/citeproc/src/snapshots/citeproc__tests__patent_almendro_1998.snap create mode 100644 support/texlab/crates/citeproc/src/tests.rs create mode 100644 support/texlab/crates/distro/Cargo.toml create mode 100644 support/texlab/crates/distro/src/file_name_db.rs create mode 100644 support/texlab/crates/distro/src/kpsewhich.rs create mode 100644 support/texlab/crates/distro/src/language.rs create mode 100644 support/texlab/crates/distro/src/lib.rs create mode 100644 support/texlab/crates/distro/src/miktex.rs create mode 100644 support/texlab/crates/distro/src/texlive.rs create mode 100644 support/texlab/crates/parser/Cargo.toml create mode 100644 support/texlab/crates/parser/src/bibtex.rs create mode 100644 support/texlab/crates/parser/src/build_log.rs create mode 100644 support/texlab/crates/parser/src/latex.rs create mode 100644 support/texlab/crates/parser/src/latex/lexer.rs create mode 100644 support/texlab/crates/parser/src/latex/lexer/commands.rs create mode 100644 support/texlab/crates/parser/src/latex/lexer/types.rs create mode 100644 support/texlab/crates/parser/src/lib.rs create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@comment.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_809.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@preamble.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aho_2006.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aksin_2006.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__almendro_1998.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__averroes_1998.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__betram_1996.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__blom_2021.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__combi_2004.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__erwin_2007.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__jain_1999.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__knuth_1984.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__matuz_1990.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__rivest_1978.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@001.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@002.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@003.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@004.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@005.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@006.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@007.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@block_comments.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default_error.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_figure.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal_error.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_empty.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_missing_brace.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_star.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_definition_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_reference_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error1.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error2.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error3.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error4.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_asymptote.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation_missing_begin.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_args.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_empty.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_escape.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_declaration.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_package.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_command.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_missing_end.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__equation_missing_end.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__escaped_brackets.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_braces.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@hello_world.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__bibtex_include_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_empty.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_command.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_incomplete.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_empty.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_multiple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_options.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__verbatim_include_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline_double_dollar.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_745.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_789.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_853.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_857.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_874.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_line_break.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_number.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_equation.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_incomplete.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_multiple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_error.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_simple.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter_error.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_enum_item.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_nested.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_siblings.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap create mode 100644 support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/comment.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/issue_809.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/preamble.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/aho_2006.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/aksin_2006.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/almendro_1998.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/averroes_1998.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/betram_1996.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/blom_2021.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/combi_2004.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/erwin_2007.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/jain_1999.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/kastenholz_2006.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/knuth_1984.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/matuz_1990.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/nietzsche_1998.txt create mode 100644 support/texlab/crates/parser/src/test_data/bibtex/samples/rivest_1978.txt create mode 100644 support/texlab/crates/parser/src/test_data/build_log/001.txt create mode 100644 support/texlab/crates/parser/src/test_data/build_log/002.txt create mode 100644 support/texlab/crates/parser/src/test_data/build_log/003.txt create mode 100644 support/texlab/crates/parser/src/test_data/build_log/004.txt create mode 100644 support/texlab/crates/parser/src/test_data/build_log/005.txt create mode 100644 support/texlab/crates/parser/src/test_data/build_log/006.txt create mode 100644 support/texlab/crates/parser/src/test_data/build_log/007.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/block_comments.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/caption/caption_default.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/caption/caption_default_error.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/caption/caption_figure.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal_error.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/citation/citation_empty.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/citation/citation_missing_brace.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/citation/citation_multiple_keys.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote_postnote.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/citation/citation_redundant_comma.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/citation/citation_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/citation/citation_star.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/color/color_definition_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/color/color_reference_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error1.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error2.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error3.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error4.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_argc.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl_error.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_optional.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_with_begin.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_no_impl.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/environment/environment_asymptote.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/environment/environment_definition.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/environment/environment_definition_optional_arg.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/environment/environment_nested.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/environment/environment_nested_missing_braces.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/environment/environment_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/equation.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/equation_missing_begin.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/generic_command_args.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/generic_command_empty.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/generic_command_escape.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/glossary/acronym_declaration.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/glossary/acronym_package.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_definition_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/graphics_path.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/graphics_path_command.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/graphics_path_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/group/curly_group_missing_end.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/group/curly_group_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/group/equation_missing_end.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/group/escaped_brackets.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/group/unmatched_braces.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets_with_group.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/hello_world.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/bibtex_include_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/class_include_empty.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/class_include_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/class_include_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/graphics_include_command.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/graphics_include_complicated_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/graphics_include_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/graphics_include_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/import_incomplete.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/import_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/latex_include_equality_sign.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/latex_include_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/latex_input_path_brackets.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/package_include_empty.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/package_include_multiple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/package_include_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/package_include_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/pgf_library_import_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/svg_include_options.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/svg_include_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/tikz_library_import_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/include/verbatim_include_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/inline.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/inline_double_dollar.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/issue_745.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/issue_789.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/issue_853.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/issue_857.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/issue_874.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_definition_line_break.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_definition_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_number.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_reference_equation.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_reference_incomplete.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_reference_multiple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_error.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_incomplete.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/label/label_reference_simple.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/parameter.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/parameter_error.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/structure/structure_enum_item.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/structure/structure_invalid_nesting.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/structure/structure_nested.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/structure/structure_siblings.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_full.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt create mode 100644 support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_only_name.txt create mode 100644 support/texlab/crates/syntax/Cargo.toml create mode 100644 support/texlab/crates/syntax/src/bibtex.rs create mode 100644 support/texlab/crates/syntax/src/latex.rs create mode 100644 support/texlab/crates/syntax/src/latex/cst.rs create mode 100644 support/texlab/crates/syntax/src/latex/kind.rs create mode 100644 support/texlab/crates/syntax/src/lib.rs create mode 100644 support/texlab/crates/texlab/Cargo.toml create mode 100644 support/texlab/crates/texlab/benches/bench_main.rs create mode 100644 support/texlab/crates/texlab/data/components.json.gz create mode 100644 support/texlab/crates/texlab/data/lang_data.json create mode 100644 support/texlab/crates/texlab/src/client.rs create mode 100644 support/texlab/crates/texlab/src/features.rs create mode 100644 support/texlab/crates/texlab/src/features/build.rs create mode 100644 support/texlab/crates/texlab/src/features/build/progress.rs create mode 100644 support/texlab/crates/texlab/src/features/completion.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/acronym_ref.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/argument.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/begin_snippet.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/builder.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/citation.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/color.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/color_model.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/component_command.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/component_environment.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/entry_type.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/field.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/glossary_ref.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/import.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/include.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/label.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/theorem.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/tikz_library.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/user_command.rs create mode 100644 support/texlab/crates/texlab/src/features/completion/user_environment.rs create mode 100644 support/texlab/crates/texlab/src/features/definition.rs create mode 100644 support/texlab/crates/texlab/src/features/definition/command.rs create mode 100644 support/texlab/crates/texlab/src/features/definition/document.rs create mode 100644 support/texlab/crates/texlab/src/features/definition/entry.rs create mode 100644 support/texlab/crates/texlab/src/features/definition/label.rs create mode 100644 support/texlab/crates/texlab/src/features/definition/string.rs create mode 100644 support/texlab/crates/texlab/src/features/folding.rs create mode 100644 support/texlab/crates/texlab/src/features/formatting.rs create mode 100644 support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs create mode 100644 support/texlab/crates/texlab/src/features/formatting/latexindent.rs create mode 100644 support/texlab/crates/texlab/src/features/forward_search.rs create mode 100644 support/texlab/crates/texlab/src/features/highlight.rs create mode 100644 support/texlab/crates/texlab/src/features/highlight/label.rs create mode 100644 support/texlab/crates/texlab/src/features/hover.rs create mode 100644 support/texlab/crates/texlab/src/features/hover/citation.rs create mode 100644 support/texlab/crates/texlab/src/features/hover/component.rs create mode 100644 support/texlab/crates/texlab/src/features/hover/entry_type.rs create mode 100644 support/texlab/crates/texlab/src/features/hover/field.rs create mode 100644 support/texlab/crates/texlab/src/features/hover/label.rs create mode 100644 support/texlab/crates/texlab/src/features/hover/string_ref.rs create mode 100644 support/texlab/crates/texlab/src/features/inlay_hint.rs create mode 100644 support/texlab/crates/texlab/src/features/inlay_hint/label.rs create mode 100644 support/texlab/crates/texlab/src/features/link.rs create mode 100644 support/texlab/crates/texlab/src/features/link/include.rs create mode 100644 support/texlab/crates/texlab/src/features/reference.rs create mode 100644 support/texlab/crates/texlab/src/features/reference/entry.rs create mode 100644 support/texlab/crates/texlab/src/features/reference/label.rs create mode 100644 support/texlab/crates/texlab/src/features/reference/string.rs create mode 100644 support/texlab/crates/texlab/src/features/rename.rs create mode 100644 support/texlab/crates/texlab/src/features/rename/command.rs create mode 100644 support/texlab/crates/texlab/src/features/rename/entry.rs create mode 100644 support/texlab/crates/texlab/src/features/rename/label.rs create mode 100644 support/texlab/crates/texlab/src/features/symbol.rs create mode 100644 support/texlab/crates/texlab/src/features/symbol/bibtex.rs create mode 100644 support/texlab/crates/texlab/src/features/symbol/latex.rs create mode 100644 support/texlab/crates/texlab/src/features/symbol/project_order.rs create mode 100644 support/texlab/crates/texlab/src/features/symbol/types.rs create mode 100644 support/texlab/crates/texlab/src/features/workspace_command.rs create mode 100644 support/texlab/crates/texlab/src/features/workspace_command/change_environment.rs create mode 100644 support/texlab/crates/texlab/src/features/workspace_command/clean.rs create mode 100644 support/texlab/crates/texlab/src/features/workspace_command/dep_graph.rs create mode 100644 support/texlab/crates/texlab/src/lib.rs create mode 100644 support/texlab/crates/texlab/src/main.rs create mode 100644 support/texlab/crates/texlab/src/server.rs create mode 100644 support/texlab/crates/texlab/src/server/dispatch.rs create mode 100644 support/texlab/crates/texlab/src/server/options.rs create mode 100644 support/texlab/crates/texlab/src/util.rs create mode 100644 support/texlab/crates/texlab/src/util/capabilities.rs create mode 100644 support/texlab/crates/texlab/src/util/chktex.rs create mode 100644 support/texlab/crates/texlab/src/util/components.rs create mode 100644 support/texlab/crates/texlab/src/util/cursor.rs create mode 100644 support/texlab/crates/texlab/src/util/diagnostics.rs create mode 100644 support/texlab/crates/texlab/src/util/label.rs create mode 100644 support/texlab/crates/texlab/src/util/lang_data.rs create mode 100644 support/texlab/crates/texlab/src/util/line_index_ext.rs create mode 100644 support/texlab/crates/texlab/src/util/lsp_enums.rs create mode 100644 support/texlab/crates/texlab/src/util/regex_filter.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/fixture.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/main.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/completion.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/definition.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/document_highlight.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/document_link.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/folding_range.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/formatting.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/hover.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/inlay_hint.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/references.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/rename.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_flat.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_nested.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_flat.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_nested.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_flat.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_nested.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__ignored_patterns.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_flat.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_nested.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_flat.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_nested.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__bibtex.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__latex.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_cite.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_entry.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__component_known_package.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__entry_type_known_type.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__field_known.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file_mumber.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__section.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__string_inside_reference.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/workspace.rs create mode 100644 support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_bibtex.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_figure.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_item.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_math.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_section.snap create mode 100644 support/texlab/crates/texlab/tests/lsp/workspace/symbol.rs delete mode 100644 support/texlab/data/components.json.gz delete mode 100644 support/texlab/data/lang_data.json delete mode 100644 support/texlab/src/citation.rs delete mode 100644 support/texlab/src/citation/driver.rs delete mode 100644 support/texlab/src/citation/entry.rs delete mode 100644 support/texlab/src/citation/field.rs delete mode 100644 support/texlab/src/citation/field/author.rs delete mode 100644 support/texlab/src/citation/field/date.rs delete mode 100644 support/texlab/src/citation/field/number.rs delete mode 100644 support/texlab/src/citation/field/text.rs delete mode 100644 support/texlab/src/citation/output.rs delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__article_aksin_2006.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__article_betram_1996.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__article_blom_2021.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__article_jain_1999.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__article_kastenholz_2006.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__article_rivest_1978.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__book_aho_2006.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__book_averroes_1998.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__book_knuth_1984.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__collection_matuz_1990.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__inproceedings_combi_2004.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__inproceedings_erwin_2007.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__mvbook_nietzsche_1988.snap delete mode 100644 support/texlab/src/citation/snapshots/texlab__citation__tests__patent_almendro_1998.snap delete mode 100644 support/texlab/src/citation/tests.rs delete mode 100644 support/texlab/src/client.rs delete mode 100644 support/texlab/src/config.rs delete mode 100644 support/texlab/src/db.rs delete mode 100644 support/texlab/src/db/analysis.rs delete mode 100644 support/texlab/src/db/analysis/label.rs delete mode 100644 support/texlab/src/db/context.rs delete mode 100644 support/texlab/src/db/diagnostics.rs delete mode 100644 support/texlab/src/db/diagnostics/bib.rs delete mode 100644 support/texlab/src/db/diagnostics/log.rs delete mode 100644 support/texlab/src/db/diagnostics/tex.rs delete mode 100644 support/texlab/src/db/discovery.rs delete mode 100644 support/texlab/src/db/document.rs delete mode 100644 support/texlab/src/db/parse.rs delete mode 100644 support/texlab/src/db/workspace.rs delete mode 100644 support/texlab/src/distro.rs delete mode 100644 support/texlab/src/distro/file_name_db.rs delete mode 100644 support/texlab/src/distro/kpsewhich.rs delete mode 100644 support/texlab/src/distro/miktex.rs delete mode 100644 support/texlab/src/distro/texlive.rs delete mode 100644 support/texlab/src/features.rs delete mode 100644 support/texlab/src/features/build.rs delete mode 100644 support/texlab/src/features/build/progress.rs delete mode 100644 support/texlab/src/features/completion.rs delete mode 100644 support/texlab/src/features/completion/acronym_ref.rs delete mode 100644 support/texlab/src/features/completion/argument.rs delete mode 100644 support/texlab/src/features/completion/begin_snippet.rs delete mode 100644 support/texlab/src/features/completion/builder.rs delete mode 100644 support/texlab/src/features/completion/citation.rs delete mode 100644 support/texlab/src/features/completion/color.rs delete mode 100644 support/texlab/src/features/completion/color_model.rs delete mode 100644 support/texlab/src/features/completion/component_command.rs delete mode 100644 support/texlab/src/features/completion/component_environment.rs delete mode 100644 support/texlab/src/features/completion/entry_type.rs delete mode 100644 support/texlab/src/features/completion/field.rs delete mode 100644 support/texlab/src/features/completion/glossary_ref.rs delete mode 100644 support/texlab/src/features/completion/import.rs delete mode 100644 support/texlab/src/features/completion/include.rs delete mode 100644 support/texlab/src/features/completion/label.rs delete mode 100644 support/texlab/src/features/completion/theorem.rs delete mode 100644 support/texlab/src/features/completion/tikz_library.rs delete mode 100644 support/texlab/src/features/completion/user_command.rs delete mode 100644 support/texlab/src/features/completion/user_environment.rs delete mode 100644 support/texlab/src/features/definition.rs delete mode 100644 support/texlab/src/features/definition/command.rs delete mode 100644 support/texlab/src/features/definition/document.rs delete mode 100644 support/texlab/src/features/definition/entry.rs delete mode 100644 support/texlab/src/features/definition/label.rs delete mode 100644 support/texlab/src/features/definition/string.rs delete mode 100644 support/texlab/src/features/folding.rs delete mode 100644 support/texlab/src/features/formatting.rs delete mode 100644 support/texlab/src/features/formatting/bibtex_internal.rs delete mode 100644 support/texlab/src/features/formatting/latexindent.rs delete mode 100644 support/texlab/src/features/forward_search.rs delete mode 100644 support/texlab/src/features/highlight.rs delete mode 100644 support/texlab/src/features/highlight/label.rs delete mode 100644 support/texlab/src/features/hover.rs delete mode 100644 support/texlab/src/features/hover/citation.rs delete mode 100644 support/texlab/src/features/hover/component.rs delete mode 100644 support/texlab/src/features/hover/entry_type.rs delete mode 100644 support/texlab/src/features/hover/field.rs delete mode 100644 support/texlab/src/features/hover/label.rs delete mode 100644 support/texlab/src/features/hover/string_ref.rs delete mode 100644 support/texlab/src/features/inlay_hint.rs delete mode 100644 support/texlab/src/features/inlay_hint/label.rs delete mode 100644 support/texlab/src/features/link.rs delete mode 100644 support/texlab/src/features/link/include.rs delete mode 100644 support/texlab/src/features/reference.rs delete mode 100644 support/texlab/src/features/reference/entry.rs delete mode 100644 support/texlab/src/features/reference/label.rs delete mode 100644 support/texlab/src/features/reference/string.rs delete mode 100644 support/texlab/src/features/rename.rs delete mode 100644 support/texlab/src/features/rename/command.rs delete mode 100644 support/texlab/src/features/rename/entry.rs delete mode 100644 support/texlab/src/features/rename/label.rs delete mode 100644 support/texlab/src/features/symbol.rs delete mode 100644 support/texlab/src/features/symbol/bibtex.rs delete mode 100644 support/texlab/src/features/symbol/latex.rs delete mode 100644 support/texlab/src/features/symbol/project_order.rs delete mode 100644 support/texlab/src/features/symbol/types.rs delete mode 100644 support/texlab/src/features/workspace_command.rs delete mode 100644 support/texlab/src/features/workspace_command/change_environment.rs delete mode 100644 support/texlab/src/features/workspace_command/clean.rs delete mode 100644 support/texlab/src/features/workspace_command/dep_graph.rs delete mode 100644 support/texlab/src/lib.rs delete mode 100644 support/texlab/src/main.rs delete mode 100644 support/texlab/src/parser.rs delete mode 100644 support/texlab/src/parser/bibtex.rs delete mode 100644 support/texlab/src/parser/build_log.rs delete mode 100644 support/texlab/src/parser/latex.rs delete mode 100644 support/texlab/src/parser/latex/lexer.rs delete mode 100644 support/texlab/src/parser/latex/lexer/commands.rs delete mode 100644 support/texlab/src/parser/latex/lexer/types.rs delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@comment.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@issue_809.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@preamble.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__aho_2006.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__aksin_2006.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__almendro_1998.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__averroes_1998.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__betram_1996.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__blom_2021.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__combi_2004.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__erwin_2007.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__jain_1999.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__knuth_1984.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__matuz_1990.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__rivest_1978.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@001.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@002.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@003.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@004.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@005.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@006.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@007.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@block_comments.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_default.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_default_error.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_figure.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_minimal.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_minimal_error.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_empty.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_missing_brace.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_prenote.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_star.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_definition_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_reference_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error1.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error2.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error3.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error4.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_asymptote.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_definition.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_nested.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@equation.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@equation_missing_begin.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@generic_command_args.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@generic_command_empty.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@generic_command_escape.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_declaration.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_package.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@graphics_path.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@graphics_path_command.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@graphics_path_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__curly_group_missing_end.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__curly_group_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__equation_missing_end.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__escaped_brackets.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__unmatched_braces.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__unmatched_brackets.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@hello_world.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__biblatex_include_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__biblatex_include_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__bibtex_include_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__class_include_empty.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__class_include_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__class_include_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_command.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__import_incomplete.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__import_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__inkscape_include_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__inkscape_include_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__latex_include_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_empty.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_multiple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__svg_include_options.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__svg_include_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__verbatim_include_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@inline.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@inline_double_dollar.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_745.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_789.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_853.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_857.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_definition_line_break.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_definition_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_number.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_equation.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_incomplete.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_multiple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_range_error.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_range_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_simple.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@parameter.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@parameter_error.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_enum_item.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_nested.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_siblings.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap delete mode 100644 support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap delete mode 100644 support/texlab/src/parser/test_data/bibtex/comment.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/issue_809.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/preamble.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/aho_2006.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/aksin_2006.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/almendro_1998.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/averroes_1998.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/betram_1996.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/blom_2021.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/combi_2004.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/erwin_2007.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/jain_1999.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/kastenholz_2006.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/knuth_1984.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/matuz_1990.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/nietzsche_1998.txt delete mode 100644 support/texlab/src/parser/test_data/bibtex/samples/rivest_1978.txt delete mode 100644 support/texlab/src/parser/test_data/build_log/001.txt delete mode 100644 support/texlab/src/parser/test_data/build_log/002.txt delete mode 100644 support/texlab/src/parser/test_data/build_log/003.txt delete mode 100644 support/texlab/src/parser/test_data/build_log/004.txt delete mode 100644 support/texlab/src/parser/test_data/build_log/005.txt delete mode 100644 support/texlab/src/parser/test_data/build_log/006.txt delete mode 100644 support/texlab/src/parser/test_data/build_log/007.txt delete mode 100644 support/texlab/src/parser/test_data/latex/block_comments.txt delete mode 100644 support/texlab/src/parser/test_data/latex/caption/caption_default.txt delete mode 100644 support/texlab/src/parser/test_data/latex/caption/caption_default_error.txt delete mode 100644 support/texlab/src/parser/test_data/latex/caption/caption_figure.txt delete mode 100644 support/texlab/src/parser/test_data/latex/caption/caption_minimal.txt delete mode 100644 support/texlab/src/parser/test_data/latex/caption/caption_minimal_error.txt delete mode 100644 support/texlab/src/parser/test_data/latex/citation/citation_empty.txt delete mode 100644 support/texlab/src/parser/test_data/latex/citation/citation_missing_brace.txt delete mode 100644 support/texlab/src/parser/test_data/latex/citation/citation_multiple_keys.txt delete mode 100644 support/texlab/src/parser/test_data/latex/citation/citation_prenote.txt delete mode 100644 support/texlab/src/parser/test_data/latex/citation/citation_prenote_postnote.txt delete mode 100644 support/texlab/src/parser/test_data/latex/citation/citation_redundant_comma.txt delete mode 100644 support/texlab/src/parser/test_data/latex/citation/citation_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/citation/citation_star.txt delete mode 100644 support/texlab/src/parser/test_data/latex/color/color_definition_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/color/color_reference_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/color/color_set_definition_error1.txt delete mode 100644 support/texlab/src/parser/test_data/latex/color/color_set_definition_error2.txt delete mode 100644 support/texlab/src/parser/test_data/latex/color/color_set_definition_error3.txt delete mode 100644 support/texlab/src/parser/test_data/latex/color/color_set_definition_error4.txt delete mode 100644 support/texlab/src/parser/test_data/latex/color/color_set_definition_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/command_definition/command_definition_no_argc.txt delete mode 100644 support/texlab/src/parser/test_data/latex/command_definition/command_definition_no_impl.txt delete mode 100644 support/texlab/src/parser/test_data/latex/command_definition/command_definition_no_impl_error.txt delete mode 100644 support/texlab/src/parser/test_data/latex/command_definition/command_definition_optional.txt delete mode 100644 support/texlab/src/parser/test_data/latex/command_definition/command_definition_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/command_definition/command_definition_with_begin.txt delete mode 100644 support/texlab/src/parser/test_data/latex/command_definition/math_operator_no_impl.txt delete mode 100644 support/texlab/src/parser/test_data/latex/command_definition/math_operator_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/environment/environment_asymptote.txt delete mode 100644 support/texlab/src/parser/test_data/latex/environment/environment_definition.txt delete mode 100644 support/texlab/src/parser/test_data/latex/environment/environment_definition_optional_arg.txt delete mode 100644 support/texlab/src/parser/test_data/latex/environment/environment_nested.txt delete mode 100644 support/texlab/src/parser/test_data/latex/environment/environment_nested_missing_braces.txt delete mode 100644 support/texlab/src/parser/test_data/latex/environment/environment_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/equation.txt delete mode 100644 support/texlab/src/parser/test_data/latex/equation_missing_begin.txt delete mode 100644 support/texlab/src/parser/test_data/latex/generic_command_args.txt delete mode 100644 support/texlab/src/parser/test_data/latex/generic_command_empty.txt delete mode 100644 support/texlab/src/parser/test_data/latex/generic_command_escape.txt delete mode 100644 support/texlab/src/parser/test_data/latex/glossary/acronym_declaration.txt delete mode 100644 support/texlab/src/parser/test_data/latex/glossary/acronym_definition_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/glossary/acronym_definition_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/glossary/acronym_package.txt delete mode 100644 support/texlab/src/parser/test_data/latex/glossary/acronym_reference_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/glossary/acronym_reference_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/glossary/glossary_entry_definition_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/glossary/glossary_entry_reference_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/glossary/glossary_entry_reference_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/graphics_path.txt delete mode 100644 support/texlab/src/parser/test_data/latex/graphics_path_command.txt delete mode 100644 support/texlab/src/parser/test_data/latex/graphics_path_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/group/curly_group_missing_end.txt delete mode 100644 support/texlab/src/parser/test_data/latex/group/curly_group_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/group/equation_missing_end.txt delete mode 100644 support/texlab/src/parser/test_data/latex/group/escaped_brackets.txt delete mode 100644 support/texlab/src/parser/test_data/latex/group/unmatched_braces.txt delete mode 100644 support/texlab/src/parser/test_data/latex/group/unmatched_brackets.txt delete mode 100644 support/texlab/src/parser/test_data/latex/group/unmatched_brackets_with_group.txt delete mode 100644 support/texlab/src/parser/test_data/latex/hello_world.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/biblatex_include_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/biblatex_include_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/bibtex_include_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/class_include_empty.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/class_include_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/class_include_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/graphics_include_command.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/graphics_include_complicated_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/graphics_include_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/graphics_include_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/import_incomplete.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/import_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/inkscape_include_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/inkscape_include_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/latex_include_equality_sign.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/latex_include_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/latex_input_path_brackets.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/package_include_empty.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/package_include_multiple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/package_include_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/package_include_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/pgf_library_import_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/svg_include_options.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/svg_include_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/tikz_library_import_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/include/verbatim_include_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/inline.txt delete mode 100644 support/texlab/src/parser/test_data/latex/inline_double_dollar.txt delete mode 100644 support/texlab/src/parser/test_data/latex/issue_745.txt delete mode 100644 support/texlab/src/parser/test_data/latex/issue_789.txt delete mode 100644 support/texlab/src/parser/test_data/latex/issue_853.txt delete mode 100644 support/texlab/src/parser/test_data/latex/issue_857.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_definition_line_break.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_definition_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_number.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_reference_equation.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_reference_incomplete.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_reference_multiple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_reference_range_error.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_reference_range_incomplete.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_reference_range_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/label/label_reference_simple.txt delete mode 100644 support/texlab/src/parser/test_data/latex/parameter.txt delete mode 100644 support/texlab/src/parser/test_data/latex/parameter_error.txt delete mode 100644 support/texlab/src/parser/test_data/latex/structure/structure_enum_item.txt delete mode 100644 support/texlab/src/parser/test_data/latex/structure/structure_invalid_nesting.txt delete mode 100644 support/texlab/src/parser/test_data/latex/structure/structure_nested.txt delete mode 100644 support/texlab/src/parser/test_data/latex/structure/structure_siblings.txt delete mode 100644 support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_full.txt delete mode 100644 support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt delete mode 100644 support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt delete mode 100644 support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt delete mode 100644 support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_only_name.txt delete mode 100644 support/texlab/src/server.rs delete mode 100644 support/texlab/src/server/dispatch.rs delete mode 100644 support/texlab/src/server/options.rs delete mode 100644 support/texlab/src/server/query.rs delete mode 100644 support/texlab/src/syntax.rs delete mode 100644 support/texlab/src/syntax/bibtex.rs delete mode 100644 support/texlab/src/syntax/latex.rs delete mode 100644 support/texlab/src/syntax/latex/cst.rs delete mode 100644 support/texlab/src/syntax/latex/kind.rs delete mode 100644 support/texlab/src/util.rs delete mode 100644 support/texlab/src/util/capabilities.rs delete mode 100644 support/texlab/src/util/chktex.rs delete mode 100644 support/texlab/src/util/components.rs delete mode 100644 support/texlab/src/util/cursor.rs delete mode 100644 support/texlab/src/util/label.rs delete mode 100644 support/texlab/src/util/lang_data.rs delete mode 100644 support/texlab/src/util/line_index.rs delete mode 100644 support/texlab/src/util/line_index_ext.rs delete mode 100644 support/texlab/src/util/lsp_enums.rs delete mode 100644 support/texlab/src/util/regex_filter.rs delete mode 100644 support/texlab/tests/lsp/fixture.rs delete mode 100644 support/texlab/tests/lsp/main.rs delete mode 100644 support/texlab/tests/lsp/text_document.rs delete mode 100644 support/texlab/tests/lsp/text_document/completion.rs delete mode 100644 support/texlab/tests/lsp/text_document/definition.rs delete mode 100644 support/texlab/tests/lsp/text_document/document_highlight.rs delete mode 100644 support/texlab/tests/lsp/text_document/document_link.rs delete mode 100644 support/texlab/tests/lsp/text_document/document_symbol.rs delete mode 100644 support/texlab/tests/lsp/text_document/folding_range.rs delete mode 100644 support/texlab/tests/lsp/text_document/formatting.rs delete mode 100644 support/texlab/tests/lsp/text_document/hover.rs delete mode 100644 support/texlab/tests/lsp/text_document/inlay_hint.rs delete mode 100644 support/texlab/tests/lsp/text_document/references.rs delete mode 100644 support/texlab/tests/lsp/text_document/rename.rs delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_flat.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_nested.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_flat.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_nested.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_flat.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_nested.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__ignored_patterns.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_flat.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_nested.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_flat.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_nested.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__bibtex.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__latex.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_cite.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_entry.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__component_known_package.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__entry_type_known_type.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__field_known.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file_mumber.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__section.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__string_inside_reference.snap delete mode 100644 support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap delete mode 100644 support/texlab/tests/lsp/workspace.rs delete mode 100644 support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_bibtex.snap delete mode 100644 support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_figure.snap delete mode 100644 support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_item.snap delete mode 100644 support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_math.snap delete mode 100644 support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_section.snap delete mode 100644 support/texlab/tests/lsp/workspace/symbol.rs diff --git a/FILES.byname b/FILES.byname index 47a1884ffc..5c14a44256 100644 --- a/FILES.byname +++ b/FILES.byname @@ -86,7 +86,7 @@ 2022/09/02 | 16825 | biblio/bibtex/bibtex-x/bibtex.c 2022/05/17 | 68194 | biblio/bibtex/bibtex-x/bibtex.h 2023/02/25 | 4015 | biblio/bibtex/bibtex-x/bibtexu.1 -2023/02/25 | 20268 | biblio/bibtex/bibtex-x/ChangeLog +2023/04/10 | 20399 | biblio/bibtex/bibtex-x/ChangeLog 2021/06/30 | 4848 | biblio/bibtex/bibtex-x/config.h.in 2007/07/03 | 710 | biblio/bibtex/bibtex-x/configure 2022/04/29 | 1499 | biblio/bibtex/bibtex-x/configure.ac @@ -156,9 +156,9 @@ 2022/04/16 | 504 | biblio/bibtex/bibtex-x/tests/sortu-fi.bbl 2022/04/16 | 504 | biblio/bibtex/bibtex-x/tests/sortu-tr.bbl 2022/04/16 | 65 | biblio/bibtex/bibtex-x/tests/substra.aux -2022/05/17 | 5432 | biblio/bibtex/bibtex-x/tests/substra.bbl +2023/04/10 | 5972 | biblio/bibtex/bibtex-x/tests/substra.bbl 2022/04/16 | 65 | biblio/bibtex/bibtex-x/tests/substru.aux -2022/05/17 | 17563 | biblio/bibtex/bibtex-x/tests/substru.bbl +2023/04/10 | 19075 | biblio/bibtex/bibtex-x/tests/substru.bbl 2022/05/08 | 151 | biblio/bibtex/bibtex-x/tests/testcasea.bib 2022/05/08 | 778 | biblio/bibtex/bibtex-x/tests/testcase.bst 2022/05/08 | 1054 | biblio/bibtex/bibtex-x/tests/testcaseu.bib @@ -175,7 +175,7 @@ 2022/04/16 | 716 | biblio/bibtex/bibtex-x/tests/testsortu.bib 2010/03/17 | 531 | biblio/bibtex/bibtex-x/tests/teststyle.bst 2022/05/17 | 309 | biblio/bibtex/bibtex-x/tests/testsubstra.bib -2022/05/08 | 3740 | biblio/bibtex/bibtex-x/tests/testsubstr.bst +2023/04/10 | 4135 | biblio/bibtex/bibtex-x/tests/testsubstr.bst 2022/05/17 | 1086 | biblio/bibtex/bibtex-x/tests/testsubstru.bib 2022/05/08 | 1051 | biblio/bibtex/bibtex-x/tests/testtxtprfx.bst 2022/04/29 | 5237 | biblio/bibtex/bibtex-x/tests/testwidtha.bib @@ -204,7 +204,7 @@ 2022/05/22 | 94162 | biblio/bibtex/bibtex-x/utils.c 2022/04/29 | 5163 | biblio/bibtex/bibtex-x/utils.h 2022/05/22 | 3731 | biblio/bibtex/bibtex-x/version.h -2023/03/20 | 517965 | biblio/bibtex/bibtex-x.zip +2023/04/11 | 518368 | biblio/bibtex/bibtex-x.zip 1991/09/08 | 918 | biblio/bibtex/contrib/abstyles/a4c.sty 1991/09/28 | 1000 | biblio/bibtex/contrib/abstyles/a4c.tex 1992/05/25 | 17727 | biblio/bibtex/contrib/abstyles/aabbrv.bst @@ -2051,12 +2051,12 @@ 2023/04/02 | 1675 | biblio/citation-style-language/README.md 2023/04/02 | 11957 | biblio/citation-style-language/vancouver.csl 2023/04/03 | 4503971 | biblio/citation-style-language.zip -2023/04/10 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2023/04/11 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2022/10/08 | 127 | biblio/ctan-bibdata/biblatex-ctan/ctan.cbx -2023/04/10 | 2777199 | biblio/ctan-bibdata/ctan.bib -2023/04/10 | 3662677 | biblio/ctan-bibdata/ctan.pdf +2023/04/11 | 2777637 | biblio/ctan-bibdata/ctan.bib +2023/04/11 | 3663579 | biblio/ctan-bibdata/ctan.pdf 2023/01/16 | 1489 | biblio/ctan-bibdata/README -2023/04/10 | 4059583 | biblio/ctan-bibdata.zip +2023/04/11 | 4061171 | 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 @@ -5412,7 +5412,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/04/10 | 100544 | FILES.last07days +2023/04/11 | 98906 | 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 @@ -232202,17 +232202,17 @@ 2017/04/21 | 1634 | macros/latex/contrib/phonrule/phonrule.sty 2017/04/21 | 492 | macros/latex/contrib/phonrule/README.md 2017/04/21 | 44782 | macros/latex/contrib/phonrule.zip -2023/04/09 | 462 | macros/latex/contrib/photobook/DEPENDS.txt -2023/04/09 | 1527 | macros/latex/contrib/photobook/LICENSE -2023/04/09 | 10191 | macros/latex/contrib/photobook/Makefile -2023/04/09 | 165042 | macros/latex/contrib/photobook/photobook.cls -2023/04/09 | 143035 | macros/latex/contrib/photobook/photobook.pdf -2023/04/09 | 1705 | macros/latex/contrib/photobook/README.md -2023/04/09 | 4219 | macros/latex/contrib/photobook/scripts/cls2tex.sh -2023/04/09 | 890 | macros/latex/contrib/photobook/scripts/make-spreads.cfg.example -2023/04/09 | 16847 | macros/latex/contrib/photobook/scripts/make-spreads.sh -2023/04/09 | 14221 | macros/latex/contrib/photobook/scripts/README.md -2023/04/09 | 191900 | macros/latex/contrib/photobook.zip +2023/04/11 | 462 | macros/latex/contrib/photobook/DEPENDS.txt +2023/04/11 | 1527 | macros/latex/contrib/photobook/LICENSE +2023/04/11 | 10191 | macros/latex/contrib/photobook/Makefile +2023/04/11 | 164576 | macros/latex/contrib/photobook/photobook.cls +2023/04/11 | 142873 | macros/latex/contrib/photobook/photobook.pdf +2023/04/11 | 1705 | macros/latex/contrib/photobook/README.md +2023/04/11 | 4219 | macros/latex/contrib/photobook/scripts/cls2tex.sh +2023/04/11 | 890 | macros/latex/contrib/photobook/scripts/make-spreads.cfg.example +2023/04/11 | 16847 | macros/latex/contrib/photobook/scripts/make-spreads.sh +2023/04/11 | 14221 | macros/latex/contrib/photobook/scripts/README.md +2023/04/11 | 191658 | macros/latex/contrib/photobook.zip 2004/07/15 | 1773 | macros/latex/contrib/photo/Makefile 2004/07/15 | 26571 | macros/latex/contrib/photo/photo.dtx 1999/07/25 | 595 | macros/latex/contrib/photo/photo.ins @@ -244613,13 +244613,13 @@ 2012/02/06 | 135018 | macros/luatex/latex/pgfmolbio/SampleScf.scf 2012/03/09 | 867 | macros/luatex/latex/pgfmolbio/SampleUniprot.txt 2013/07/31 | 923987 | macros/luatex/latex/pgfmolbio.zip -2023/04/04 | 169134 | macros/luatex/latex/piton/piton.dtx -2023/04/04 | 309157 | macros/luatex/latex/piton/piton-french.pdf -2023/04/04 | 59937 | macros/luatex/latex/piton/piton-french.tex +2023/04/11 | 174764 | macros/luatex/latex/piton/piton.dtx +2023/04/11 | 309931 | macros/luatex/latex/piton/piton-french.pdf +2023/04/10 | 62080 | macros/luatex/latex/piton/piton-french.tex 2023/02/11 | 1440 | macros/luatex/latex/piton/piton.ins -2023/04/04 | 703435 | macros/luatex/latex/piton/piton.pdf +2023/04/11 | 703833 | macros/luatex/latex/piton/piton.pdf 2022/11/09 | 890 | macros/luatex/latex/piton/README.md -2023/04/04 | 738356 | macros/luatex/latex/piton.zip +2023/04/11 | 740804 | macros/luatex/latex/piton.zip 2017/08/26 | 36035 | macros/luatex/latex/placeat/placeat.dtx 2017/08/26 | 4438 | macros/luatex/latex/placeat/placeat.lua 2017/08/26 | 97006 | macros/luatex/latex/placeat/placeat.pdf @@ -281520,61 +281520,61 @@ 2018/04/15 | 1313 | support/latex-git-log/po/de.po 2020/02/26 | 3353 | support/latex-git-log/README.md 2020/02/27 | 87742 | support/latex-git-log.zip -2023/04/07 | 6163996 | support/latexindent/bin/linux/latexindent -2023/04/07 | 6393199 | support/latexindent/bin/macos/latexindent -2023/04/07 | 8703632 | support/latexindent/bin/windows/latexindent.exe -2023/04/07 | 22877 | support/latexindent/defaultSettings.yaml -2023/04/07 | 5908 | support/latexindent/documentation/contributors.bib -2023/04/07 | 7161 | support/latexindent/documentation/figure-schematic.png -2023/04/07 | 4402 | support/latexindent/documentation/latex-indent.bib -2023/04/07 | 1243960 | support/latexindent/documentation/latexindent.pdf -2023/04/07 | 430280 | support/latexindent/documentation/latexindent.tex -2023/04/07 | 54385 | support/latexindent/documentation/latexindent-yaml-schema.json -2023/04/07 | 44096 | support/latexindent/documentation/logo.png -2023/04/07 | 65092 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm -2023/04/07 | 24410 | support/latexindent/LatexIndent/Arguments.pm -2023/04/07 | 7428 | support/latexindent/LatexIndent/BackUpFileProcedure.pm -2023/04/07 | 4816 | support/latexindent/LatexIndent/BlankLines.pm -2023/04/07 | 12646 | support/latexindent/LatexIndent/Braces.pm -2023/04/07 | 5390 | support/latexindent/LatexIndent/Check.pm -2023/04/07 | 10620 | support/latexindent/LatexIndent/Command.pm -2023/04/07 | 25284 | support/latexindent/LatexIndent/Document.pm -2023/04/07 | 1485 | support/latexindent/LatexIndent/DoubleBackSlash.pm -2023/04/07 | 6271 | support/latexindent/LatexIndent/Else.pm -2023/04/07 | 6807 | support/latexindent/LatexIndent/Environment.pm -2023/04/07 | 11300 | support/latexindent/LatexIndent/FileContents.pm -2023/04/07 | 8462 | support/latexindent/LatexIndent/FileExtension.pm -2023/04/07 | 52668 | support/latexindent/LatexIndent/GetYamlSettings.pm -2023/04/07 | 11142 | support/latexindent/LatexIndent/Heading.pm -2023/04/07 | 13419 | support/latexindent/LatexIndent/HiddenChildren.pm -2023/04/07 | 3482 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm -2023/04/07 | 8829 | support/latexindent/LatexIndent/IfElseFi.pm -2023/04/07 | 20797 | support/latexindent/LatexIndent/Indent.pm -2023/04/07 | 6717 | support/latexindent/LatexIndent/Item.pm -2023/04/07 | 5429 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm -2023/04/07 | 9839 | support/latexindent/LatexIndent/Lines.pm -2023/04/07 | 13103 | support/latexindent/LatexIndent/LogFile.pm -2023/04/07 | 2320 | support/latexindent/LatexIndent/Logger.pm -2023/04/07 | 7280 | support/latexindent/LatexIndent/MandatoryArgument.pm -2023/04/07 | 18522 | support/latexindent/LatexIndent/ModifyLineBreaks.pm -2023/04/07 | 1558 | support/latexindent/latexindent-module-installer.pl -2023/04/07 | 4339 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm -2023/04/07 | 6522 | support/latexindent/LatexIndent/OptionalArgument.pm -2023/04/07 | 3413 | support/latexindent/latexindent.pl -2023/04/07 | 2690 | support/latexindent/LatexIndent/Preamble.pm -2023/04/07 | 3747 | support/latexindent/LatexIndent/Replacement.pm -2023/04/07 | 4365 | support/latexindent/LatexIndent/RoundBrackets.pm -2023/04/07 | 20766 | support/latexindent/LatexIndent/Sentence.pm -2023/04/07 | 13890 | support/latexindent/LatexIndent/Special.pm -2023/04/07 | 2701 | support/latexindent/LatexIndent/Switches.pm -2023/04/07 | 3339 | support/latexindent/LatexIndent/Tokens.pm -2023/04/07 | 6882 | support/latexindent/LatexIndent/TrailingComments.pm -2023/04/07 | 5808 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm -2023/04/07 | 27328 | support/latexindent/LatexIndent/Verbatim.pm -2023/04/07 | 838 | support/latexindent/LatexIndent/Version.pm -2023/04/07 | 31148 | support/latexindent/LatexIndent/Wrap.pm -2023/04/07 | 2008 | support/latexindent/README -2023/04/07 | 11162198 | support/latexindent.zip +2023/04/11 | 6164028 | support/latexindent/bin/linux/latexindent +2023/04/11 | 6393230 | support/latexindent/bin/macos/latexindent +2023/04/11 | 8703661 | support/latexindent/bin/windows/latexindent.exe +2023/04/11 | 22877 | support/latexindent/defaultSettings.yaml +2023/04/11 | 5908 | support/latexindent/documentation/contributors.bib +2023/04/11 | 7161 | support/latexindent/documentation/figure-schematic.png +2023/04/11 | 4402 | support/latexindent/documentation/latex-indent.bib +2023/04/11 | 1244704 | support/latexindent/documentation/latexindent.pdf +2023/04/11 | 430280 | support/latexindent/documentation/latexindent.tex +2023/04/11 | 54385 | support/latexindent/documentation/latexindent-yaml-schema.json +2023/04/11 | 44096 | support/latexindent/documentation/logo.png +2023/04/11 | 65092 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm +2023/04/11 | 24410 | support/latexindent/LatexIndent/Arguments.pm +2023/04/11 | 7428 | support/latexindent/LatexIndent/BackUpFileProcedure.pm +2023/04/11 | 4816 | support/latexindent/LatexIndent/BlankLines.pm +2023/04/11 | 12646 | support/latexindent/LatexIndent/Braces.pm +2023/04/11 | 5390 | support/latexindent/LatexIndent/Check.pm +2023/04/11 | 10620 | support/latexindent/LatexIndent/Command.pm +2023/04/11 | 25007 | support/latexindent/LatexIndent/Document.pm +2023/04/11 | 1485 | support/latexindent/LatexIndent/DoubleBackSlash.pm +2023/04/11 | 6271 | support/latexindent/LatexIndent/Else.pm +2023/04/11 | 6807 | support/latexindent/LatexIndent/Environment.pm +2023/04/11 | 11300 | support/latexindent/LatexIndent/FileContents.pm +2023/04/11 | 8762 | support/latexindent/LatexIndent/FileExtension.pm +2023/04/11 | 52668 | support/latexindent/LatexIndent/GetYamlSettings.pm +2023/04/11 | 11142 | support/latexindent/LatexIndent/Heading.pm +2023/04/11 | 13419 | support/latexindent/LatexIndent/HiddenChildren.pm +2023/04/11 | 3482 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm +2023/04/11 | 8829 | support/latexindent/LatexIndent/IfElseFi.pm +2023/04/11 | 20797 | support/latexindent/LatexIndent/Indent.pm +2023/04/11 | 6717 | support/latexindent/LatexIndent/Item.pm +2023/04/11 | 5429 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm +2023/04/11 | 9839 | support/latexindent/LatexIndent/Lines.pm +2023/04/11 | 13072 | support/latexindent/LatexIndent/LogFile.pm +2023/04/11 | 2320 | support/latexindent/LatexIndent/Logger.pm +2023/04/11 | 7280 | support/latexindent/LatexIndent/MandatoryArgument.pm +2023/04/11 | 18522 | support/latexindent/LatexIndent/ModifyLineBreaks.pm +2023/04/11 | 1558 | support/latexindent/latexindent-module-installer.pl +2023/04/11 | 4339 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm +2023/04/11 | 6522 | support/latexindent/LatexIndent/OptionalArgument.pm +2023/04/11 | 3413 | support/latexindent/latexindent.pl +2023/04/11 | 2690 | support/latexindent/LatexIndent/Preamble.pm +2023/04/11 | 3747 | support/latexindent/LatexIndent/Replacement.pm +2023/04/11 | 4365 | support/latexindent/LatexIndent/RoundBrackets.pm +2023/04/11 | 20766 | support/latexindent/LatexIndent/Sentence.pm +2023/04/11 | 13890 | support/latexindent/LatexIndent/Special.pm +2023/04/11 | 2701 | support/latexindent/LatexIndent/Switches.pm +2023/04/11 | 3339 | support/latexindent/LatexIndent/Tokens.pm +2023/04/11 | 6882 | support/latexindent/LatexIndent/TrailingComments.pm +2023/04/11 | 5808 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm +2023/04/11 | 27328 | support/latexindent/LatexIndent/Verbatim.pm +2023/04/11 | 838 | support/latexindent/LatexIndent/Version.pm +2023/04/11 | 31148 | support/latexindent/LatexIndent/Wrap.pm +2023/04/11 | 2008 | support/latexindent/README +2023/04/11 | 11162542 | support/latexindent.zip 2021/10/26 | 16439 | support/latex-make/figlatex.dtx 2021/10/26 | 238535 | support/latex-make/figlatex.pdf 2001/06/07 | 302 | support/latexmake/latexmake.diz @@ -284481,7 +284481,7 @@ 2021/05/03 | 629 | support/TeX4ht/doc/README 2020/08/24 | 358454 | support/TeX4ht/doc/TeX4ht-doc.tex 2021/05/11 | 262 | support/TeX4ht/README -2023/04/08 | 221392 | support/TeX4ht/source/ChangeLog +2023/04/11 | 221829 | support/TeX4ht/source/ChangeLog 2021/05/03 | 1375 | support/TeX4ht/source/checklog.lua 2021/05/03 | 1189 | support/TeX4ht/source/common-code.tex 2021/05/03 | 2727 | support/TeX4ht/source/common-info.tex @@ -284493,7 +284493,7 @@ 2021/05/03 | 1121 | support/TeX4ht/source/README 2021/05/03 | 1744 | support/TeX4ht/source/t1fontmake.lua 2021/05/03 | 297 | support/TeX4ht/source/t1fontsample.tex -2023/04/06 | 1157029 | support/TeX4ht/source/tex4ht-4ht.tex +2023/04/11 | 1157234 | support/TeX4ht/source/tex4ht-4ht.tex 2021/05/03 | 7127 | support/TeX4ht/source/tex4ht-auto-script.tex 2021/05/16 | 1539 | support/TeX4ht/source/tex4ht-bibtex2.tex 2022/06/05 | 21307 | support/TeX4ht/source/tex4ht-cond4ht.tex @@ -284682,540 +284682,548 @@ 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/03/26 | 869 | support/texlab/benches/bench_main.rs -2023/03/26 | 50058 | support/texlab/Cargo.lock -2023/03/26 | 2147 | support/texlab/Cargo.toml -2023/03/26 | 26995 | support/texlab/CHANGELOG.md -2023/03/26 | 181 | support/texlab/CONTRIBUTING.md -2023/03/26 | 6970534 | support/texlab/data/components.json.gz -2023/03/26 | 56243 | support/texlab/data/lang_data.json -2023/03/26 | 380190 | support/texlab/images/demo.gif -2023/03/26 | 35149 | support/texlab/LICENSE -2023/03/26 | 3767 | support/texlab/README.md -2023/03/26 | 22224 | support/texlab/src/citation/driver.rs -2023/03/26 | 3231 | support/texlab/src/citation/entry.rs -2023/03/26 | 1631 | support/texlab/src/citation/field/author.rs -2023/03/26 | 2490 | support/texlab/src/citation/field/date.rs -2023/03/26 | 1385 | support/texlab/src/citation/field/number.rs -2023/03/26 | 60 | support/texlab/src/citation/field.rs -2023/03/26 | 6933 | support/texlab/src/citation/field/text.rs -2023/03/26 | 1760 | support/texlab/src/citation/output.rs -2023/03/26 | 905 | support/texlab/src/citation.rs -2023/03/26 | 1064 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_aksin_2006.snap -2023/03/26 | 800 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_betram_1996.snap -2023/03/26 | 1330 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_blom_2021.snap -2023/03/26 | 1062 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_jain_1999.snap -2023/03/26 | 1314 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_kastenholz_2006.snap -2023/03/26 | 988 | support/texlab/src/citation/snapshots/texlab__citation__tests__article_rivest_1978.snap -2023/03/26 | 585 | support/texlab/src/citation/snapshots/texlab__citation__tests__book_aho_2006.snap -2023/03/26 | 1411 | support/texlab/src/citation/snapshots/texlab__citation__tests__book_averroes_1998.snap -2023/03/26 | 1223 | support/texlab/src/citation/snapshots/texlab__citation__tests__book_knuth_1984.snap -2023/03/26 | 720 | support/texlab/src/citation/snapshots/texlab__citation__tests__collection_matuz_1990.snap -2023/03/26 | 1176 | support/texlab/src/citation/snapshots/texlab__citation__tests__inproceedings_combi_2004.snap -2023/03/26 | 1051 | support/texlab/src/citation/snapshots/texlab__citation__tests__inproceedings_erwin_2007.snap -2023/03/26 | 1428 | support/texlab/src/citation/snapshots/texlab__citation__tests__mvbook_nietzsche_1988.snap -2023/03/26 | 967 | support/texlab/src/citation/snapshots/texlab__citation__tests__patent_almendro_1998.snap -2023/03/26 | 11874 | support/texlab/src/citation/tests.rs -2023/03/26 | 3163 | support/texlab/src/client.rs -2023/03/26 | 5215 | support/texlab/src/config.rs -2023/03/26 | 3197 | support/texlab/src/db/analysis/label.rs -2023/03/26 | 6456 | support/texlab/src/db/analysis.rs -2023/03/26 | 778 | support/texlab/src/db/context.rs -2023/03/26 | 3197 | support/texlab/src/db/diagnostics/bib.rs -2023/03/26 | 2905 | support/texlab/src/db/diagnostics/log.rs -2023/03/26 | 5843 | support/texlab/src/db/diagnostics.rs -2023/03/26 | 4524 | support/texlab/src/db/diagnostics/tex.rs -2023/03/26 | 7243 | support/texlab/src/db/discovery.rs -2023/03/26 | 5440 | support/texlab/src/db/document.rs -2023/03/26 | 1769 | support/texlab/src/db/parse.rs -2023/03/26 | 255 | support/texlab/src/db.rs -2023/03/26 | 6226 | support/texlab/src/db/workspace.rs -2023/03/26 | 1816 | support/texlab/src/distro/file_name_db.rs -2023/03/26 | 710 | support/texlab/src/distro/kpsewhich.rs -2023/03/26 | 2467 | support/texlab/src/distro/miktex.rs -2023/03/26 | 1955 | support/texlab/src/distro.rs -2023/03/26 | 820 | support/texlab/src/distro/texlive.rs -2023/03/26 | 1668 | support/texlab/src/features/build/progress.rs -2023/03/26 | 5486 | support/texlab/src/features/build.rs -2023/03/26 | 844 | support/texlab/src/features/completion/acronym_ref.rs -2023/03/26 | 1752 | support/texlab/src/features/completion/argument.rs -2023/03/26 | 283 | support/texlab/src/features/completion/begin_snippet.rs -2023/03/26 | 25164 | support/texlab/src/features/completion/builder.rs -2023/03/26 | 1710 | support/texlab/src/features/completion/citation.rs -2023/03/26 | 1236 | support/texlab/src/features/completion/color_model.rs -2023/03/26 | 499 | support/texlab/src/features/completion/color.rs -2023/03/26 | 692 | support/texlab/src/features/completion/component_command.rs -2023/03/26 | 533 | support/texlab/src/features/completion/component_environment.rs -2023/03/26 | 711 | support/texlab/src/features/completion/entry_type.rs -2023/03/26 | 849 | support/texlab/src/features/completion/field.rs -2023/03/26 | 1221 | support/texlab/src/features/completion/glossary_ref.rs -2023/03/26 | 1567 | support/texlab/src/features/completion/import.rs -2023/03/26 | 4276 | support/texlab/src/features/completion/include.rs -2023/03/26 | 3055 | support/texlab/src/features/completion/label.rs -2023/03/26 | 1702 | support/texlab/src/features/completion.rs -2023/03/26 | 576 | support/texlab/src/features/completion/theorem.rs -2023/03/26 | 730 | support/texlab/src/features/completion/tikz_library.rs -2023/03/26 | 864 | support/texlab/src/features/completion/user_command.rs -2023/03/26 | 661 | support/texlab/src/features/completion/user_environment.rs -2023/03/26 | 1331 | support/texlab/src/features/definition/command.rs -2023/03/26 | 999 | support/texlab/src/features/definition/document.rs -2023/03/26 | 1215 | support/texlab/src/features/definition/entry.rs -2023/03/26 | 1258 | support/texlab/src/features/definition/label.rs -2023/03/26 | 1870 | support/texlab/src/features/definition.rs -2023/03/26 | 995 | support/texlab/src/features/definition/string.rs -2023/03/26 | 2164 | support/texlab/src/features/folding.rs -2023/03/26 | 7195 | support/texlab/src/features/formatting/bibtex_internal.rs -2023/03/26 | 2071 | support/texlab/src/features/formatting/latexindent.rs -2023/03/26 | 1088 | support/texlab/src/features/formatting.rs -2023/03/26 | 5313 | support/texlab/src/features/forward_search.rs -2023/03/26 | 1069 | support/texlab/src/features/highlight/label.rs -2023/03/26 | 308 | support/texlab/src/features/highlight.rs -2023/03/26 | 785 | support/texlab/src/features/hover/citation.rs -2023/03/26 | 852 | support/texlab/src/features/hover/component.rs -2023/03/26 | 556 | support/texlab/src/features/hover/entry_type.rs -2023/03/26 | 613 | support/texlab/src/features/hover/field.rs -2023/03/26 | 672 | support/texlab/src/features/hover/label.rs -2023/03/26 | 1184 | support/texlab/src/features/hover.rs -2023/03/26 | 1158 | support/texlab/src/features/hover/string_ref.rs -2023/03/26 | 1536 | support/texlab/src/features/inlay_hint/label.rs -2023/03/26 | 1173 | support/texlab/src/features/inlay_hint.rs -2023/03/26 | 639 | support/texlab/src/features/link/include.rs -2023/03/26 | 1025 | support/texlab/src/features/link.rs -2023/03/26 | 1900 | support/texlab/src/features/reference/entry.rs -2023/03/26 | 1027 | support/texlab/src/features/reference/label.rs -2023/03/26 | 1123 | support/texlab/src/features/reference.rs -2023/03/26 | 1367 | support/texlab/src/features/reference/string.rs -2023/03/26 | 1318 | support/texlab/src/features/rename/command.rs -2023/03/26 | 2263 | support/texlab/src/features/rename/entry.rs -2023/03/26 | 2914 | support/texlab/src/features/rename/label.rs -2023/03/26 | 1818 | support/texlab/src/features/rename.rs -2023/03/26 | 262 | support/texlab/src/features.rs -2023/03/26 | 2628 | support/texlab/src/features/symbol/bibtex.rs -2023/03/26 | 13568 | support/texlab/src/features/symbol/latex.rs -2023/03/26 | 5482 | support/texlab/src/features/symbol/project_order.rs -2023/03/26 | 3337 | support/texlab/src/features/symbol.rs -2023/03/26 | 4510 | support/texlab/src/features/symbol/types.rs -2023/03/26 | 2867 | support/texlab/src/features/workspace_command/change_environment.rs -2023/03/26 | 2612 | support/texlab/src/features/workspace_command/clean.rs -2023/03/26 | 1534 | support/texlab/src/features/workspace_command/dep_graph.rs -2023/03/26 | 62 | support/texlab/src/features/workspace_command.rs -2023/03/26 | 3021 | support/texlab/src/lib.rs -2023/03/26 | 1865 | support/texlab/src/main.rs -2023/03/26 | 11459 | support/texlab/src/parser/bibtex.rs -2023/03/26 | 5692 | support/texlab/src/parser/build_log.rs -2023/03/26 | 5993 | support/texlab/src/parser/latex/lexer/commands.rs -2023/03/26 | 1896 | support/texlab/src/parser/latex/lexer.rs -2023/03/26 | 2565 | support/texlab/src/parser/latex/lexer/types.rs -2023/03/26 | 32490 | support/texlab/src/parser/latex.rs -2023/03/26 | 125 | support/texlab/src/parser.rs -2023/03/26 | 220 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@comment.txt.snap -2023/03/26 | 693 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@issue_809.txt.snap -2023/03/26 | 359 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@preamble.txt.snap -2023/03/26 | 3653 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__aho_2006.txt.snap -2023/03/26 | 7517 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__aksin_2006.txt.snap -2023/03/26 | 7308 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__almendro_1998.txt.snap -2023/03/26 | 10366 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__averroes_1998.txt.snap -2023/03/26 | 5850 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__betram_1996.txt.snap -2023/03/26 | 6630 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__blom_2021.txt.snap -2023/03/26 | 7143 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__combi_2004.txt.snap -2023/03/26 | 6822 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__erwin_2007.txt.snap -2023/03/26 | 7514 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__jain_1999.txt.snap -2023/03/26 | 8854 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap -2023/03/26 | 9465 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__knuth_1984.txt.snap -2023/03/26 | 5046 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__matuz_1990.txt.snap -2023/03/26 | 11001 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap -2023/03/26 | 6458 | support/texlab/src/parser/snapshots/texlab__parser__bibtex__tests__parse@samples__rivest_1978.txt.snap -2023/03/26 | 702 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@001.txt.snap -2023/03/26 | 434 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@002.txt.snap -2023/03/26 | 659 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@003.txt.snap -2023/03/26 | 961 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@004.txt.snap -2023/03/26 | 939 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@005.txt.snap -2023/03/26 | 1658 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@006.txt.snap -2023/03/26 | 399 | support/texlab/src/parser/snapshots/texlab__parser__build_log__tests__parse@007.txt.snap -2023/03/26 | 732 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@block_comments.txt.snap -2023/03/26 | 612 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_default_error.txt.snap -2023/03/26 | 633 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_default.txt.snap -2023/03/26 | 758 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_figure.txt.snap -2023/03/26 | 485 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_minimal_error.txt.snap -2023/03/26 | 506 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@caption__caption_minimal.txt.snap -2023/03/26 | 281 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_empty.txt.snap -2023/03/26 | 307 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_missing_brace.txt.snap -2023/03/26 | 439 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap -2023/03/26 | 594 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap -2023/03/26 | 458 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_prenote.txt.snap -2023/03/26 | 390 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap -2023/03/26 | 330 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_simple.txt.snap -2023/03/26 | 328 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@citation__citation_star.txt.snap -2023/03/26 | 720 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_definition_simple.txt.snap -2023/03/26 | 342 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_reference_simple.txt.snap -2023/03/26 | 835 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error1.txt.snap -2023/03/26 | 574 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error2.txt.snap -2023/03/26 | 443 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error3.txt.snap -2023/03/26 | 234 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_error4.txt.snap -2023/03/26 | 966 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@color__color_set_definition_simple.txt.snap -2023/03/26 | 490 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap -2023/03/26 | 342 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap -2023/03/26 | 363 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap -2023/03/26 | 746 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap -2023/03/26 | 631 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap -2023/03/26 | 1163 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap -2023/03/26 | 362 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap -2023/03/26 | 488 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap -2023/03/26 | 1060 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_asymptote.txt.snap -2023/03/26 | 897 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap -2023/03/26 | 1089 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_definition.txt.snap -2023/03/26 | 1177 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap -2023/03/26 | 1107 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_nested.txt.snap -2023/03/26 | 728 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@environment__environment_simple.txt.snap -2023/03/26 | 800 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@equation_missing_begin.txt.snap -2023/03/26 | 365 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@equation.txt.snap -2023/03/26 | 446 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@generic_command_args.txt.snap -2023/03/26 | 202 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@generic_command_empty.txt.snap -2023/03/26 | 201 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@generic_command_escape.txt.snap -2023/03/26 | 1450 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_declaration.txt.snap -2023/03/26 | 1345 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap -2023/03/26 | 744 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap -2023/03/26 | 746 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_package.txt.snap -2023/03/26 | 801 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap -2023/03/26 | 358 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap -2023/03/26 | 951 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap -2023/03/26 | 897 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap -2023/03/26 | 351 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap -2023/03/26 | 610 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@graphics_path_command.txt.snap -2023/03/26 | 538 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@graphics_path_options.txt.snap -2023/03/26 | 433 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@graphics_path.txt.snap -2023/03/26 | 298 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__curly_group_missing_end.txt.snap -2023/03/26 | 318 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__curly_group_simple.txt.snap -2023/03/26 | 807 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__equation_missing_end.txt.snap -2023/03/26 | 370 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__escaped_brackets.txt.snap -2023/03/26 | 228 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__unmatched_braces.txt.snap -2023/03/26 | 230 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__unmatched_brackets.txt.snap -2023/03/26 | 316 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap -2023/03/26 | 228 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@hello_world.txt.snap -2023/03/26 | 847 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__biblatex_include_options.txt.snap -2023/03/26 | 372 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__biblatex_include_simple.txt.snap -2023/03/26 | 362 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__bibtex_include_simple.txt.snap -2023/03/26 | 309 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__class_include_empty.txt.snap -2023/03/26 | 1052 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__class_include_options.txt.snap -2023/03/26 | 361 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__class_include_simple.txt.snap -2023/03/26 | 886 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_command.txt.snap -2023/03/26 | 748 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap -2023/03/26 | 703 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_options.txt.snap -2023/03/26 | 373 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__graphics_include_simple.txt.snap -2023/03/26 | 302 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__import_incomplete.txt.snap -2023/03/26 | 456 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__import_simple.txt.snap -2023/03/26 | 689 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__inkscape_include_options.txt.snap -2023/03/26 | 359 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__inkscape_include_simple.txt.snap -2023/03/26 | 415 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap -2023/03/26 | 349 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__latex_include_simple.txt.snap -2023/03/26 | 463 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap -2023/03/26 | 310 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_empty.txt.snap -2023/03/26 | 469 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_multiple.txt.snap -2023/03/26 | 1053 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_options.txt.snap -2023/03/26 | 362 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__package_include_simple.txt.snap -2023/03/26 | 368 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap -2023/03/26 | 688 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__svg_include_options.txt.snap -2023/03/26 | 358 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__svg_include_simple.txt.snap -2023/03/26 | 370 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap -2023/03/26 | 371 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@include__verbatim_include_simple.txt.snap -2023/03/26 | 635 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@inline_double_dollar.txt.snap -2023/03/26 | 617 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@inline.txt.snap -2023/03/26 | 4286 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_745.txt.snap -2023/03/26 | 333 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_789.txt.snap -2023/03/26 | 1777 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_853.txt.snap -2023/03/26 | 890 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@issue_857.txt.snap -2023/03/26 | 438 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_definition_line_break.txt.snap -2023/03/26 | 342 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_definition_simple.txt.snap -2023/03/26 | 549 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_number.txt.snap -2023/03/26 | 347 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_equation.txt.snap -2023/03/26 | 811 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_incomplete.txt.snap -2023/03/26 | 442 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_multiple.txt.snap -2023/03/26 | 465 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_range_error.txt.snap -2023/03/26 | 366 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap -2023/03/26 | 493 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_range_simple.txt.snap -2023/03/26 | 335 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@label__label_reference_simple.txt.snap -2023/03/26 | 173 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@parameter_error.txt.snap -2023/03/26 | 168 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@parameter.txt.snap -2023/03/26 | 1246 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_enum_item.txt.snap -2023/03/26 | 551 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap -2023/03/26 | 1731 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_nested.txt.snap -2023/03/26 | 692 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@structure__structure_siblings.txt.snap -2023/03/26 | 757 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap -2023/03/26 | 512 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap -2023/03/26 | 655 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap -2023/03/26 | 512 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap -2023/03/26 | 373 | support/texlab/src/parser/snapshots/texlab__parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap -2023/03/26 | 82 | support/texlab/src/parser/test_data/bibtex/comment.txt -2023/03/26 | 50 | support/texlab/src/parser/test_data/bibtex/issue_809.txt -2023/03/26 | 25 | support/texlab/src/parser/test_data/bibtex/preamble.txt -2023/03/26 | 314 | support/texlab/src/parser/test_data/bibtex/samples/aho_2006.txt -2023/03/26 | 679 | support/texlab/src/parser/test_data/bibtex/samples/aksin_2006.txt -2023/03/26 | 706 | support/texlab/src/parser/test_data/bibtex/samples/almendro_1998.txt -2023/03/26 | 1008 | support/texlab/src/parser/test_data/bibtex/samples/averroes_1998.txt -2023/03/26 | 556 | support/texlab/src/parser/test_data/bibtex/samples/betram_1996.txt -2023/03/26 | 860 | support/texlab/src/parser/test_data/bibtex/samples/blom_2021.txt -2023/03/26 | 674 | support/texlab/src/parser/test_data/bibtex/samples/combi_2004.txt -2023/03/26 | 615 | support/texlab/src/parser/test_data/bibtex/samples/erwin_2007.txt -2023/03/26 | 674 | support/texlab/src/parser/test_data/bibtex/samples/jain_1999.txt -2023/03/26 | 898 | support/texlab/src/parser/test_data/bibtex/samples/kastenholz_2006.txt -2023/03/26 | 993 | support/texlab/src/parser/test_data/bibtex/samples/knuth_1984.txt -2023/03/26 | 517 | support/texlab/src/parser/test_data/bibtex/samples/matuz_1990.txt -2023/03/26 | 1112 | support/texlab/src/parser/test_data/bibtex/samples/nietzsche_1998.txt -2023/03/26 | 557 | support/texlab/src/parser/test_data/bibtex/samples/rivest_1978.txt -2023/03/26 | 3194 | support/texlab/src/parser/test_data/build_log/001.txt -2023/03/26 | 2455 | support/texlab/src/parser/test_data/build_log/002.txt -2023/03/26 | 2515 | support/texlab/src/parser/test_data/build_log/003.txt -2023/03/26 | 3057 | support/texlab/src/parser/test_data/build_log/004.txt -2023/03/26 | 13353 | support/texlab/src/parser/test_data/build_log/005.txt -2023/03/26 | 4130 | support/texlab/src/parser/test_data/build_log/006.txt -2023/03/26 | 7762 | support/texlab/src/parser/test_data/build_log/007.txt -2023/03/26 | 48 | support/texlab/src/parser/test_data/latex/block_comments.txt -2023/03/26 | 26 | support/texlab/src/parser/test_data/latex/caption/caption_default_error.txt -2023/03/26 | 27 | support/texlab/src/parser/test_data/latex/caption/caption_default.txt -2023/03/26 | 39 | support/texlab/src/parser/test_data/latex/caption/caption_figure.txt -2023/03/26 | 21 | support/texlab/src/parser/test_data/latex/caption/caption_minimal_error.txt -2023/03/26 | 22 | support/texlab/src/parser/test_data/latex/caption/caption_minimal.txt -2023/03/26 | 7 | support/texlab/src/parser/test_data/latex/citation/citation_empty.txt -2023/03/26 | 9 | support/texlab/src/parser/test_data/latex/citation/citation_missing_brace.txt -2023/03/26 | 15 | support/texlab/src/parser/test_data/latex/citation/citation_multiple_keys.txt -2023/03/26 | 20 | support/texlab/src/parser/test_data/latex/citation/citation_prenote_postnote.txt -2023/03/26 | 15 | support/texlab/src/parser/test_data/latex/citation/citation_prenote.txt -2023/03/26 | 12 | support/texlab/src/parser/test_data/latex/citation/citation_redundant_comma.txt -2023/03/26 | 10 | support/texlab/src/parser/test_data/latex/citation/citation_simple.txt -2023/03/26 | 10 | support/texlab/src/parser/test_data/latex/citation/citation_star.txt -2023/03/26 | 33 | support/texlab/src/parser/test_data/latex/color/color_definition_simple.txt -2023/03/26 | 13 | support/texlab/src/parser/test_data/latex/color/color_reference_simple.txt -2023/03/26 | 39 | support/texlab/src/parser/test_data/latex/color/color_set_definition_error1.txt -2023/03/26 | 30 | support/texlab/src/parser/test_data/latex/color/color_set_definition_error2.txt -2023/03/26 | 25 | support/texlab/src/parser/test_data/latex/color/color_set_definition_error3.txt -2023/03/26 | 15 | support/texlab/src/parser/test_data/latex/color/color_set_definition_error4.txt -2023/03/26 | 44 | support/texlab/src/parser/test_data/latex/color/color_set_definition_simple.txt -2023/03/26 | 22 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_no_argc.txt -2023/03/26 | 16 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_no_impl_error.txt -2023/03/26 | 17 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_no_impl.txt -2023/03/26 | 29 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_optional.txt -2023/03/26 | 23 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_simple.txt -2023/03/26 | 80 | support/texlab/src/parser/test_data/latex/command_definition/command_definition_with_begin.txt -2023/03/26 | 26 | support/texlab/src/parser/test_data/latex/command_definition/math_operator_no_impl.txt -2023/03/26 | 31 | support/texlab/src/parser/test_data/latex/command_definition/math_operator_simple.txt -2023/03/26 | 50 | support/texlab/src/parser/test_data/latex/environment/environment_asymptote.txt -2023/03/26 | 44 | support/texlab/src/parser/test_data/latex/environment/environment_definition_optional_arg.txt -2023/03/26 | 47 | support/texlab/src/parser/test_data/latex/environment/environment_definition.txt -2023/03/26 | 52 | support/texlab/src/parser/test_data/latex/environment/environment_nested_missing_braces.txt -2023/03/26 | 43 | support/texlab/src/parser/test_data/latex/environment/environment_nested.txt -2023/03/26 | 33 | support/texlab/src/parser/test_data/latex/environment/environment_simple.txt -2023/03/26 | 28 | support/texlab/src/parser/test_data/latex/equation_missing_begin.txt -2023/03/26 | 13 | support/texlab/src/parser/test_data/latex/equation.txt -2023/03/26 | 14 | support/texlab/src/parser/test_data/latex/generic_command_args.txt -2023/03/26 | 4 | support/texlab/src/parser/test_data/latex/generic_command_empty.txt -2023/03/26 | 2 | support/texlab/src/parser/test_data/latex/generic_command_escape.txt -2023/03/26 | 64 | support/texlab/src/parser/test_data/latex/glossary/acronym_declaration.txt -2023/03/26 | 76 | support/texlab/src/parser/test_data/latex/glossary/acronym_definition_options.txt -2023/03/26 | 44 | support/texlab/src/parser/test_data/latex/glossary/acronym_definition_simple.txt -2023/03/26 | 35 | support/texlab/src/parser/test_data/latex/glossary/acronym_package.txt -2023/03/26 | 32 | support/texlab/src/parser/test_data/latex/glossary/acronym_reference_options.txt -2023/03/26 | 19 | support/texlab/src/parser/test_data/latex/glossary/acronym_reference_simple.txt -2023/03/26 | 39 | support/texlab/src/parser/test_data/latex/glossary/glossary_entry_definition_simple.txt -2023/03/26 | 25 | support/texlab/src/parser/test_data/latex/glossary/glossary_entry_reference_options.txt -2023/03/26 | 9 | support/texlab/src/parser/test_data/latex/glossary/glossary_entry_reference_simple.txt -2023/03/26 | 32 | support/texlab/src/parser/test_data/latex/graphics_path_command.txt -2023/03/26 | 33 | support/texlab/src/parser/test_data/latex/graphics_path_options.txt -2023/03/26 | 28 | support/texlab/src/parser/test_data/latex/graphics_path.txt -2023/03/26 | 12 | support/texlab/src/parser/test_data/latex/group/curly_group_missing_end.txt -2023/03/26 | 13 | support/texlab/src/parser/test_data/latex/group/curly_group_simple.txt -2023/03/26 | 28 | support/texlab/src/parser/test_data/latex/group/equation_missing_end.txt -2023/03/26 | 6 | support/texlab/src/parser/test_data/latex/group/escaped_brackets.txt -2023/03/26 | 2 | support/texlab/src/parser/test_data/latex/group/unmatched_braces.txt -2023/03/26 | 2 | support/texlab/src/parser/test_data/latex/group/unmatched_brackets.txt -2023/03/26 | 4 | support/texlab/src/parser/test_data/latex/group/unmatched_brackets_with_group.txt -2023/03/26 | 12 | support/texlab/src/parser/test_data/latex/hello_world.txt -2023/03/26 | 42 | support/texlab/src/parser/test_data/latex/include/biblatex_include_options.txt -2023/03/26 | 28 | support/texlab/src/parser/test_data/latex/include/biblatex_include_simple.txt -2023/03/26 | 22 | support/texlab/src/parser/test_data/latex/include/bibtex_include_simple.txt -2023/03/26 | 16 | support/texlab/src/parser/test_data/latex/include/class_include_empty.txt -2023/03/26 | 44 | support/texlab/src/parser/test_data/latex/include/class_include_options.txt -2023/03/26 | 23 | support/texlab/src/parser/test_data/latex/include/class_include_simple.txt -2023/03/26 | 52 | support/texlab/src/parser/test_data/latex/include/graphics_include_command.txt -2023/03/26 | 39 | support/texlab/src/parser/test_data/latex/include/graphics_include_complicated_options.txt -2023/03/26 | 39 | support/texlab/src/parser/test_data/latex/include/graphics_include_options.txt -2023/03/26 | 29 | support/texlab/src/parser/test_data/latex/include/graphics_include_simple.txt -2023/03/26 | 11 | support/texlab/src/parser/test_data/latex/include/import_incomplete.txt -2023/03/26 | 17 | support/texlab/src/parser/test_data/latex/include/import_simple.txt -2023/03/26 | 30 | support/texlab/src/parser/test_data/latex/include/inkscape_include_options.txt -2023/03/26 | 20 | support/texlab/src/parser/test_data/latex/include/inkscape_include_simple.txt -2023/03/26 | 17 | support/texlab/src/parser/test_data/latex/include/latex_include_equality_sign.txt -2023/03/26 | 17 | support/texlab/src/parser/test_data/latex/include/latex_include_simple.txt -2023/03/26 | 20 | support/texlab/src/parser/test_data/latex/include/latex_input_path_brackets.txt -2023/03/26 | 13 | support/texlab/src/parser/test_data/latex/include/package_include_empty.txt -2023/03/26 | 28 | support/texlab/src/parser/test_data/latex/include/package_include_multiple.txt -2023/03/26 | 41 | support/texlab/src/parser/test_data/latex/include/package_include_options.txt -2023/03/26 | 20 | support/texlab/src/parser/test_data/latex/include/package_include_simple.txt -2023/03/26 | 19 | support/texlab/src/parser/test_data/latex/include/pgf_library_import_simple.txt -2023/03/26 | 34 | support/texlab/src/parser/test_data/latex/include/svg_include_options.txt -2023/03/26 | 24 | support/texlab/src/parser/test_data/latex/include/svg_include_simple.txt -2023/03/26 | 20 | support/texlab/src/parser/test_data/latex/include/tikz_library_import_simple.txt -2023/03/26 | 27 | support/texlab/src/parser/test_data/latex/include/verbatim_include_simple.txt -2023/03/26 | 21 | support/texlab/src/parser/test_data/latex/inline_double_dollar.txt -2023/03/26 | 19 | support/texlab/src/parser/test_data/latex/inline.txt -2023/03/26 | 271 | support/texlab/src/parser/test_data/latex/issue_745.txt -2023/03/26 | 19 | support/texlab/src/parser/test_data/latex/issue_789.txt -2023/03/26 | 135 | support/texlab/src/parser/test_data/latex/issue_853.txt -2023/03/26 | 55 | support/texlab/src/parser/test_data/latex/issue_857.txt -2023/03/26 | 19 | support/texlab/src/parser/test_data/latex/label/label_definition_line_break.txt -2023/03/26 | 11 | support/texlab/src/parser/test_data/latex/label/label_definition_simple.txt -2023/03/26 | 21 | support/texlab/src/parser/test_data/latex/label/label_number.txt -2023/03/26 | 11 | support/texlab/src/parser/test_data/latex/label/label_reference_equation.txt -2023/03/26 | 47 | support/texlab/src/parser/test_data/latex/label/label_reference_incomplete.txt -2023/03/26 | 14 | support/texlab/src/parser/test_data/latex/label/label_reference_multiple.txt -2023/03/26 | 19 | support/texlab/src/parser/test_data/latex/label/label_reference_range_error.txt -2023/03/26 | 15 | support/texlab/src/parser/test_data/latex/label/label_reference_range_incomplete.txt -2023/03/26 | 20 | support/texlab/src/parser/test_data/latex/label/label_reference_range_simple.txt -2023/03/26 | 9 | support/texlab/src/parser/test_data/latex/label/label_reference_simple.txt -2023/03/26 | 1 | support/texlab/src/parser/test_data/latex/parameter_error.txt -2023/03/26 | 2 | support/texlab/src/parser/test_data/latex/parameter.txt -2023/03/26 | 60 | support/texlab/src/parser/test_data/latex/structure/structure_enum_item.txt -2023/03/26 | 27 | support/texlab/src/parser/test_data/latex/structure/structure_invalid_nesting.txt -2023/03/26 | 90 | support/texlab/src/parser/test_data/latex/structure/structure_nested.txt -2023/03/26 | 35 | support/texlab/src/parser/test_data/latex/structure/structure_siblings.txt -2023/03/26 | 31 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_full.txt -2023/03/26 | 21 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt -2023/03/26 | 26 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt -2023/03/26 | 21 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt -2023/03/26 | 16 | support/texlab/src/parser/test_data/latex/theorem_definition/theorem_definition_only_name.txt -2023/03/26 | 2416 | support/texlab/src/server/dispatch.rs -2023/03/26 | 6452 | support/texlab/src/server/options.rs -2023/03/26 | 627 | support/texlab/src/server/query.rs -2023/03/26 | 38464 | support/texlab/src/server.rs -2023/03/26 | 7955 | support/texlab/src/syntax/bibtex.rs -2023/03/26 | 16983 | support/texlab/src/syntax/latex/cst.rs -2023/03/26 | 1668 | support/texlab/src/syntax/latex/kind.rs -2023/03/26 | 689 | support/texlab/src/syntax/latex.rs -2023/03/26 | 485 | support/texlab/src/syntax.rs -2023/03/26 | 6018 | support/texlab/src/util/capabilities.rs -2023/03/26 | 3430 | support/texlab/src/util/chktex.rs -2023/03/26 | 3590 | support/texlab/src/util/components.rs -2023/03/26 | 9926 | support/texlab/src/util/cursor.rs -2023/03/26 | 8297 | support/texlab/src/util/label.rs -2023/03/26 | 1969 | support/texlab/src/util/lang_data.rs -2023/03/26 | 1280 | support/texlab/src/util/line_index_ext.rs -2023/03/26 | 6484 | support/texlab/src/util/line_index.rs -2023/03/26 | 4008 | support/texlab/src/util/lsp_enums.rs -2023/03/26 | 415 | support/texlab/src/util/regex_filter.rs -2023/03/26 | 319 | support/texlab/src/util.rs -2023/03/26 | 8318 | support/texlab/tests/lsp/fixture.rs -2023/03/26 | 47 | support/texlab/tests/lsp/main.rs -2023/03/26 | 13426 | support/texlab/tests/lsp/text_document/completion.rs -2023/03/26 | 3387 | support/texlab/tests/lsp/text_document/definition.rs -2023/03/26 | 1322 | support/texlab/tests/lsp/text_document/document_highlight.rs -2023/03/26 | 1157 | support/texlab/tests/lsp/text_document/document_link.rs -2023/03/26 | 8171 | support/texlab/tests/lsp/text_document/document_symbol.rs -2023/03/26 | 1208 | support/texlab/tests/lsp/text_document/folding_range.rs -2023/03/26 | 3004 | support/texlab/tests/lsp/text_document/formatting.rs -2023/03/26 | 3943 | support/texlab/tests/lsp/text_document/hover.rs -2023/03/26 | 1737 | support/texlab/tests/lsp/text_document/inlay_hint.rs -2023/03/26 | 4169 | support/texlab/tests/lsp/text_document/references.rs -2023/03/26 | 1743 | support/texlab/tests/lsp/text_document/rename.rs -2023/03/26 | 186 | support/texlab/tests/lsp/text_document.rs -2023/03/26 | 226 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap -2023/03/26 | 265 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap -2023/03/26 | 278 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap -2023/03/26 | 279 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap -2023/03/26 | 399 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap -2023/03/26 | 404 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap -2023/03/26 | 211 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap -2023/03/26 | 550 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap -2023/03/26 | 313 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap -2023/03/26 | 291 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap -2023/03/26 | 269 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap -2023/03/26 | 583 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap -2023/03/26 | 407 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap -2023/03/26 | 403 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap -2023/03/26 | 404 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap -2023/03/26 | 408 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap -2023/03/26 | 404 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap -2023/03/26 | 405 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap -2023/03/26 | 414 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap -2023/03/26 | 594 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap -2023/03/26 | 583 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap -2023/03/26 | 494 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap -2023/03/26 | 257 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap -2023/03/26 | 279 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap -2023/03/26 | 544 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap -2023/03/26 | 223 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap -2023/03/26 | 194 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap -2023/03/26 | 186 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap -2023/03/26 | 384 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap -2023/03/26 | 182 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap -2023/03/26 | 185 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap -2023/03/26 | 179 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap -2023/03/26 | 205 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap -2023/03/26 | 421 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap -2023/03/26 | 420 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap -2023/03/26 | 441 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap -2023/03/26 | 486 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap -2023/03/26 | 485 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap -2023/03/26 | 263 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap -2023/03/26 | 264 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap -2023/03/26 | 459 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap -2023/03/26 | 464 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap -2023/03/26 | 449 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap -2023/03/26 | 448 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap -2023/03/26 | 512 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap -2023/03/26 | 299 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap -2023/03/26 | 1814 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap -2023/03/26 | 699 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap -2023/03/26 | 711 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap -2023/03/26 | 250 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap -2023/03/26 | 255 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap -2023/03/26 | 452 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap -2023/03/26 | 451 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap -2023/03/26 | 259 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap -2023/03/26 | 351 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap -2023/03/26 | 351 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap -2023/03/26 | 338 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap -2023/03/26 | 1980 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_flat.snap -2023/03/26 | 3204 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_nested.snap -2023/03/26 | 1381 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_flat.snap -2023/03/26 | 1936 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_nested.snap -2023/03/26 | 1809 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_flat.snap -2023/03/26 | 2368 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_nested.snap -2023/03/26 | 766 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__ignored_patterns.snap -2023/03/26 | 1465 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_flat.snap -2023/03/26 | 2132 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_nested.snap -2023/03/26 | 1821 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_flat.snap -2023/03/26 | 2516 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_nested.snap -2023/03/26 | 650 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__bibtex.snap -2023/03/26 | 841 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__latex.snap -2023/03/26 | 167 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap -2023/03/26 | 157 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap -2023/03/26 | 181 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap -2023/03/26 | 946 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap -2023/03/26 | 132 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap -2023/03/26 | 160 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap -2023/03/26 | 143 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap -2023/03/26 | 157 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap -2023/03/26 | 520 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap -2023/03/26 | 308 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_cite.snap -2023/03/26 | 314 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_entry.snap -2023/03/26 | 875 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__component_known_package.snap -2023/03/26 | 659 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__entry_type_known_type.snap -2023/03/26 | 234 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__field_known.snap -2023/03/26 | 406 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file_mumber.snap -2023/03/26 | 332 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file.snap -2023/03/26 | 212 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__section.snap -2023/03/26 | 272 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__string_inside_reference.snap -2023/03/26 | 1586 | support/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap -2023/03/26 | 12 | support/texlab/tests/lsp/workspace.rs -2023/03/26 | 699 | support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_bibtex.snap -2023/03/26 | 409 | support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_figure.snap -2023/03/26 | 998 | support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_item.snap -2023/03/26 | 719 | support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_math.snap -2023/03/26 | 1313 | support/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_section.snap -2023/03/26 | 2970 | support/texlab/tests/lsp/workspace/symbol.rs -2023/03/26 | 615 | support/texlab/texlab.1 -2023/03/26 | 26434 | support/texlab/texlab.pdf -2023/03/26 | 2586 | support/texlab/texlab.tex -2023/03/26 | 7708706 | support/texlab.zip +2023/04/11 | 49947 | support/texlab/Cargo.lock +2023/04/11 | 332 | support/texlab/Cargo.toml +2023/04/11 | 27244 | support/texlab/CHANGELOG.md +2023/04/11 | 181 | support/texlab/CONTRIBUTING.md +2023/04/11 | 463 | support/texlab/crates/base-db/Cargo.toml +2023/04/11 | 4941 | support/texlab/crates/base-db/src/config.rs +2023/04/11 | 1955 | support/texlab/crates/base-db/src/diagnostics/bib.rs +2023/04/11 | 2201 | support/texlab/crates/base-db/src/diagnostics/log.rs +2023/04/11 | 430 | support/texlab/crates/base-db/src/diagnostics.rs +2023/04/11 | 3546 | support/texlab/crates/base-db/src/diagnostics/tex.rs +2023/04/11 | 4755 | support/texlab/crates/base-db/src/document.rs +2023/04/11 | 5020 | support/texlab/crates/base-db/src/graph.rs +2023/04/11 | 182 | support/texlab/crates/base-db/src/lib.rs +2023/04/11 | 6484 | support/texlab/crates/base-db/src/line_index.rs +2023/04/11 | 1170 | support/texlab/crates/base-db/src/semantics/auxiliary.rs +2023/04/11 | 364 | support/texlab/crates/base-db/src/semantics.rs +2023/04/11 | 9563 | support/texlab/crates/base-db/src/semantics/tex.rs +2023/04/11 | 8868 | support/texlab/crates/base-db/src/workspace.rs +2023/04/11 | 538 | support/texlab/crates/citeproc/Cargo.toml +2023/04/11 | 22210 | support/texlab/crates/citeproc/src/driver.rs +2023/04/11 | 4724 | support/texlab/crates/citeproc/src/entry.rs +2023/04/11 | 2074 | support/texlab/crates/citeproc/src/field/author.rs +2023/04/11 | 2665 | support/texlab/crates/citeproc/src/field/date.rs +2023/04/11 | 1626 | support/texlab/crates/citeproc/src/field/number.rs +2023/04/11 | 60 | support/texlab/crates/citeproc/src/field.rs +2023/04/11 | 8955 | support/texlab/crates/citeproc/src/field/text.rs +2023/04/11 | 890 | support/texlab/crates/citeproc/src/lib.rs +2023/04/11 | 1760 | support/texlab/crates/citeproc/src/output.rs +2023/04/11 | 1052 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_aksin_2006.snap +2023/04/11 | 788 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_betram_1996.snap +2023/04/11 | 1317 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_blom_2021.snap +2023/04/11 | 1050 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_jain_1999.snap +2023/04/11 | 1301 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_kastenholz_2006.snap +2023/04/11 | 976 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_rivest_1978.snap +2023/04/11 | 572 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__book_aho_2006.snap +2023/04/11 | 1398 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__book_averroes_1998.snap +2023/04/11 | 1210 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__book_knuth_1984.snap +2023/04/11 | 707 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__collection_matuz_1990.snap +2023/04/11 | 1163 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__inproceedings_combi_2004.snap +2023/04/11 | 1038 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__inproceedings_erwin_2007.snap +2023/04/11 | 1415 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__mvbook_nietzsche_1988.snap +2023/04/11 | 954 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__patent_almendro_1998.snap +2023/04/11 | 11868 | support/texlab/crates/citeproc/src/tests.rs +2023/04/11 | 227 | support/texlab/crates/distro/Cargo.toml +2023/04/11 | 1812 | support/texlab/crates/distro/src/file_name_db.rs +2023/04/11 | 710 | support/texlab/crates/distro/src/kpsewhich.rs +2023/04/11 | 1124 | support/texlab/crates/distro/src/language.rs +2023/04/11 | 1997 | support/texlab/crates/distro/src/lib.rs +2023/04/11 | 2467 | support/texlab/crates/distro/src/miktex.rs +2023/04/11 | 820 | support/texlab/crates/distro/src/texlive.rs +2023/04/11 | 386 | support/texlab/crates/parser/Cargo.toml +2023/04/11 | 11420 | support/texlab/crates/parser/src/bibtex.rs +2023/04/11 | 5684 | support/texlab/crates/parser/src/build_log.rs +2023/04/11 | 5993 | support/texlab/crates/parser/src/latex/lexer/commands.rs +2023/04/11 | 1897 | support/texlab/crates/parser/src/latex/lexer.rs +2023/04/11 | 2552 | support/texlab/crates/parser/src/latex/lexer/types.rs +2023/04/11 | 32603 | support/texlab/crates/parser/src/latex.rs +2023/04/11 | 125 | support/texlab/crates/parser/src/lib.rs +2023/04/11 | 234 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@comment.txt.snap +2023/04/11 | 761 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_809.txt.snap +2023/04/11 | 373 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@preamble.txt.snap +2023/04/11 | 3667 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aho_2006.txt.snap +2023/04/11 | 7531 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aksin_2006.txt.snap +2023/04/11 | 7322 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__almendro_1998.txt.snap +2023/04/11 | 10380 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__averroes_1998.txt.snap +2023/04/11 | 5864 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__betram_1996.txt.snap +2023/04/11 | 6644 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__blom_2021.txt.snap +2023/04/11 | 7157 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__combi_2004.txt.snap +2023/04/11 | 6836 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__erwin_2007.txt.snap +2023/04/11 | 7528 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__jain_1999.txt.snap +2023/04/11 | 8868 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap +2023/04/11 | 9479 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__knuth_1984.txt.snap +2023/04/11 | 5060 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__matuz_1990.txt.snap +2023/04/11 | 11015 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap +2023/04/11 | 6472 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__rivest_1978.txt.snap +2023/04/11 | 716 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@001.txt.snap +2023/04/11 | 448 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@002.txt.snap +2023/04/11 | 673 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@003.txt.snap +2023/04/11 | 975 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@004.txt.snap +2023/04/11 | 953 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@005.txt.snap +2023/04/11 | 1672 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@006.txt.snap +2023/04/11 | 464 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@007.txt.snap +2023/04/11 | 746 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@block_comments.txt.snap +2023/04/11 | 626 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default_error.txt.snap +2023/04/11 | 647 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default.txt.snap +2023/04/11 | 772 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_figure.txt.snap +2023/04/11 | 499 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal_error.txt.snap +2023/04/11 | 520 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal.txt.snap +2023/04/11 | 295 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_empty.txt.snap +2023/04/11 | 321 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_missing_brace.txt.snap +2023/04/11 | 453 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap +2023/04/11 | 608 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap +2023/04/11 | 472 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote.txt.snap +2023/04/11 | 404 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap +2023/04/11 | 344 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_simple.txt.snap +2023/04/11 | 342 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_star.txt.snap +2023/04/11 | 734 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_definition_simple.txt.snap +2023/04/11 | 356 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_reference_simple.txt.snap +2023/04/11 | 849 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error1.txt.snap +2023/04/11 | 588 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error2.txt.snap +2023/04/11 | 457 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error3.txt.snap +2023/04/11 | 248 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error4.txt.snap +2023/04/11 | 980 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_simple.txt.snap +2023/04/11 | 504 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap +2023/04/11 | 356 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap +2023/04/11 | 377 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap +2023/04/11 | 760 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap +2023/04/11 | 645 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap +2023/04/11 | 1177 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap +2023/04/11 | 376 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap +2023/04/11 | 502 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap +2023/04/11 | 1074 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_asymptote.txt.snap +2023/04/11 | 911 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap +2023/04/11 | 1103 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition.txt.snap +2023/04/11 | 1191 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap +2023/04/11 | 1121 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested.txt.snap +2023/04/11 | 742 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_simple.txt.snap +2023/04/11 | 814 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation_missing_begin.txt.snap +2023/04/11 | 379 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation.txt.snap +2023/04/11 | 460 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_args.txt.snap +2023/04/11 | 216 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_empty.txt.snap +2023/04/11 | 215 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_escape.txt.snap +2023/04/11 | 1464 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_declaration.txt.snap +2023/04/11 | 1359 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap +2023/04/11 | 758 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap +2023/04/11 | 760 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_package.txt.snap +2023/04/11 | 815 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap +2023/04/11 | 372 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap +2023/04/11 | 965 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap +2023/04/11 | 911 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap +2023/04/11 | 365 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap +2023/04/11 | 624 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_command.txt.snap +2023/04/11 | 552 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_options.txt.snap +2023/04/11 | 447 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path.txt.snap +2023/04/11 | 312 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_missing_end.txt.snap +2023/04/11 | 332 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_simple.txt.snap +2023/04/11 | 821 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__equation_missing_end.txt.snap +2023/04/11 | 384 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__escaped_brackets.txt.snap +2023/04/11 | 242 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_braces.txt.snap +2023/04/11 | 244 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets.txt.snap +2023/04/11 | 330 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap +2023/04/11 | 242 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@hello_world.txt.snap +2023/04/11 | 861 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_options.txt.snap +2023/04/11 | 386 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_simple.txt.snap +2023/04/11 | 376 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__bibtex_include_simple.txt.snap +2023/04/11 | 323 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_empty.txt.snap +2023/04/11 | 1066 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_options.txt.snap +2023/04/11 | 375 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_simple.txt.snap +2023/04/11 | 900 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_command.txt.snap +2023/04/11 | 762 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap +2023/04/11 | 717 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_options.txt.snap +2023/04/11 | 387 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_simple.txt.snap +2023/04/11 | 316 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_incomplete.txt.snap +2023/04/11 | 470 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_simple.txt.snap +2023/04/11 | 703 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_options.txt.snap +2023/04/11 | 373 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_simple.txt.snap +2023/04/11 | 429 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap +2023/04/11 | 363 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_simple.txt.snap +2023/04/11 | 477 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap +2023/04/11 | 324 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_empty.txt.snap +2023/04/11 | 483 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_multiple.txt.snap +2023/04/11 | 1067 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_options.txt.snap +2023/04/11 | 376 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_simple.txt.snap +2023/04/11 | 382 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap +2023/04/11 | 702 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_options.txt.snap +2023/04/11 | 372 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_simple.txt.snap +2023/04/11 | 384 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap +2023/04/11 | 385 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__verbatim_include_simple.txt.snap +2023/04/11 | 649 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline_double_dollar.txt.snap +2023/04/11 | 631 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline.txt.snap +2023/04/11 | 4300 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_745.txt.snap +2023/04/11 | 347 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_789.txt.snap +2023/04/11 | 1791 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_853.txt.snap +2023/04/11 | 904 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_857.txt.snap +2023/04/11 | 745 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_874.txt.snap +2023/04/11 | 452 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_line_break.txt.snap +2023/04/11 | 356 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_simple.txt.snap +2023/04/11 | 563 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_number.txt.snap +2023/04/11 | 361 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_equation.txt.snap +2023/04/11 | 825 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_incomplete.txt.snap +2023/04/11 | 456 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_multiple.txt.snap +2023/04/11 | 479 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_error.txt.snap +2023/04/11 | 380 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap +2023/04/11 | 507 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_simple.txt.snap +2023/04/11 | 349 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_simple.txt.snap +2023/04/11 | 187 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter_error.txt.snap +2023/04/11 | 182 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter.txt.snap +2023/04/11 | 1260 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_enum_item.txt.snap +2023/04/11 | 565 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap +2023/04/11 | 1745 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_nested.txt.snap +2023/04/11 | 706 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_siblings.txt.snap +2023/04/11 | 771 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap +2023/04/11 | 526 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap +2023/04/11 | 669 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap +2023/04/11 | 526 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap +2023/04/11 | 387 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap +2023/04/11 | 82 | support/texlab/crates/parser/src/test_data/bibtex/comment.txt +2023/04/11 | 50 | support/texlab/crates/parser/src/test_data/bibtex/issue_809.txt +2023/04/11 | 25 | support/texlab/crates/parser/src/test_data/bibtex/preamble.txt +2023/04/11 | 314 | support/texlab/crates/parser/src/test_data/bibtex/samples/aho_2006.txt +2023/04/11 | 679 | support/texlab/crates/parser/src/test_data/bibtex/samples/aksin_2006.txt +2023/04/11 | 706 | support/texlab/crates/parser/src/test_data/bibtex/samples/almendro_1998.txt +2023/04/11 | 1008 | support/texlab/crates/parser/src/test_data/bibtex/samples/averroes_1998.txt +2023/04/11 | 556 | support/texlab/crates/parser/src/test_data/bibtex/samples/betram_1996.txt +2023/04/11 | 860 | support/texlab/crates/parser/src/test_data/bibtex/samples/blom_2021.txt +2023/04/11 | 674 | support/texlab/crates/parser/src/test_data/bibtex/samples/combi_2004.txt +2023/04/11 | 615 | support/texlab/crates/parser/src/test_data/bibtex/samples/erwin_2007.txt +2023/04/11 | 674 | support/texlab/crates/parser/src/test_data/bibtex/samples/jain_1999.txt +2023/04/11 | 898 | support/texlab/crates/parser/src/test_data/bibtex/samples/kastenholz_2006.txt +2023/04/11 | 993 | support/texlab/crates/parser/src/test_data/bibtex/samples/knuth_1984.txt +2023/04/11 | 517 | support/texlab/crates/parser/src/test_data/bibtex/samples/matuz_1990.txt +2023/04/11 | 1112 | support/texlab/crates/parser/src/test_data/bibtex/samples/nietzsche_1998.txt +2023/04/11 | 557 | support/texlab/crates/parser/src/test_data/bibtex/samples/rivest_1978.txt +2023/04/11 | 3194 | support/texlab/crates/parser/src/test_data/build_log/001.txt +2023/04/11 | 2455 | support/texlab/crates/parser/src/test_data/build_log/002.txt +2023/04/11 | 2515 | support/texlab/crates/parser/src/test_data/build_log/003.txt +2023/04/11 | 3057 | support/texlab/crates/parser/src/test_data/build_log/004.txt +2023/04/11 | 13353 | support/texlab/crates/parser/src/test_data/build_log/005.txt +2023/04/11 | 4130 | support/texlab/crates/parser/src/test_data/build_log/006.txt +2023/04/11 | 7762 | support/texlab/crates/parser/src/test_data/build_log/007.txt +2023/04/11 | 48 | support/texlab/crates/parser/src/test_data/latex/block_comments.txt +2023/04/11 | 26 | support/texlab/crates/parser/src/test_data/latex/caption/caption_default_error.txt +2023/04/11 | 27 | support/texlab/crates/parser/src/test_data/latex/caption/caption_default.txt +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/caption/caption_figure.txt +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal_error.txt +2023/04/11 | 22 | support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal.txt +2023/04/11 | 7 | support/texlab/crates/parser/src/test_data/latex/citation/citation_empty.txt +2023/04/11 | 9 | support/texlab/crates/parser/src/test_data/latex/citation/citation_missing_brace.txt +2023/04/11 | 15 | support/texlab/crates/parser/src/test_data/latex/citation/citation_multiple_keys.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote_postnote.txt +2023/04/11 | 15 | support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote.txt +2023/04/11 | 12 | support/texlab/crates/parser/src/test_data/latex/citation/citation_redundant_comma.txt +2023/04/11 | 10 | support/texlab/crates/parser/src/test_data/latex/citation/citation_simple.txt +2023/04/11 | 10 | support/texlab/crates/parser/src/test_data/latex/citation/citation_star.txt +2023/04/11 | 33 | support/texlab/crates/parser/src/test_data/latex/color/color_definition_simple.txt +2023/04/11 | 13 | support/texlab/crates/parser/src/test_data/latex/color/color_reference_simple.txt +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error1.txt +2023/04/11 | 30 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error2.txt +2023/04/11 | 25 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error3.txt +2023/04/11 | 15 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error4.txt +2023/04/11 | 44 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_simple.txt +2023/04/11 | 22 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_argc.txt +2023/04/11 | 16 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl_error.txt +2023/04/11 | 17 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl.txt +2023/04/11 | 29 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_optional.txt +2023/04/11 | 23 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_simple.txt +2023/04/11 | 80 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_with_begin.txt +2023/04/11 | 26 | support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_no_impl.txt +2023/04/11 | 31 | support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_simple.txt +2023/04/11 | 50 | support/texlab/crates/parser/src/test_data/latex/environment/environment_asymptote.txt +2023/04/11 | 44 | support/texlab/crates/parser/src/test_data/latex/environment/environment_definition_optional_arg.txt +2023/04/11 | 47 | support/texlab/crates/parser/src/test_data/latex/environment/environment_definition.txt +2023/04/11 | 52 | support/texlab/crates/parser/src/test_data/latex/environment/environment_nested_missing_braces.txt +2023/04/11 | 43 | support/texlab/crates/parser/src/test_data/latex/environment/environment_nested.txt +2023/04/11 | 33 | support/texlab/crates/parser/src/test_data/latex/environment/environment_simple.txt +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/equation_missing_begin.txt +2023/04/11 | 13 | support/texlab/crates/parser/src/test_data/latex/equation.txt +2023/04/11 | 14 | support/texlab/crates/parser/src/test_data/latex/generic_command_args.txt +2023/04/11 | 4 | support/texlab/crates/parser/src/test_data/latex/generic_command_empty.txt +2023/04/11 | 2 | support/texlab/crates/parser/src/test_data/latex/generic_command_escape.txt +2023/04/11 | 64 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_declaration.txt +2023/04/11 | 76 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_options.txt +2023/04/11 | 44 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_simple.txt +2023/04/11 | 35 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_package.txt +2023/04/11 | 32 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_options.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_simple.txt +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_definition_simple.txt +2023/04/11 | 25 | support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_options.txt +2023/04/11 | 9 | support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_simple.txt +2023/04/11 | 32 | support/texlab/crates/parser/src/test_data/latex/graphics_path_command.txt +2023/04/11 | 33 | support/texlab/crates/parser/src/test_data/latex/graphics_path_options.txt +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/graphics_path.txt +2023/04/11 | 12 | support/texlab/crates/parser/src/test_data/latex/group/curly_group_missing_end.txt +2023/04/11 | 13 | support/texlab/crates/parser/src/test_data/latex/group/curly_group_simple.txt +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/group/equation_missing_end.txt +2023/04/11 | 6 | support/texlab/crates/parser/src/test_data/latex/group/escaped_brackets.txt +2023/04/11 | 2 | support/texlab/crates/parser/src/test_data/latex/group/unmatched_braces.txt +2023/04/11 | 2 | support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets.txt +2023/04/11 | 4 | support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets_with_group.txt +2023/04/11 | 12 | support/texlab/crates/parser/src/test_data/latex/hello_world.txt +2023/04/11 | 42 | support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_options.txt +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_simple.txt +2023/04/11 | 22 | support/texlab/crates/parser/src/test_data/latex/include/bibtex_include_simple.txt +2023/04/11 | 16 | support/texlab/crates/parser/src/test_data/latex/include/class_include_empty.txt +2023/04/11 | 44 | support/texlab/crates/parser/src/test_data/latex/include/class_include_options.txt +2023/04/11 | 23 | support/texlab/crates/parser/src/test_data/latex/include/class_include_simple.txt +2023/04/11 | 52 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_command.txt +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_complicated_options.txt +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_options.txt +2023/04/11 | 29 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_simple.txt +2023/04/11 | 11 | support/texlab/crates/parser/src/test_data/latex/include/import_incomplete.txt +2023/04/11 | 17 | support/texlab/crates/parser/src/test_data/latex/include/import_simple.txt +2023/04/11 | 30 | support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_options.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_simple.txt +2023/04/11 | 17 | support/texlab/crates/parser/src/test_data/latex/include/latex_include_equality_sign.txt +2023/04/11 | 17 | support/texlab/crates/parser/src/test_data/latex/include/latex_include_simple.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/include/latex_input_path_brackets.txt +2023/04/11 | 13 | support/texlab/crates/parser/src/test_data/latex/include/package_include_empty.txt +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/include/package_include_multiple.txt +2023/04/11 | 41 | support/texlab/crates/parser/src/test_data/latex/include/package_include_options.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/include/package_include_simple.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/include/pgf_library_import_simple.txt +2023/04/11 | 34 | support/texlab/crates/parser/src/test_data/latex/include/svg_include_options.txt +2023/04/11 | 24 | support/texlab/crates/parser/src/test_data/latex/include/svg_include_simple.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/include/tikz_library_import_simple.txt +2023/04/11 | 27 | support/texlab/crates/parser/src/test_data/latex/include/verbatim_include_simple.txt +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/inline_double_dollar.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/inline.txt +2023/04/11 | 271 | support/texlab/crates/parser/src/test_data/latex/issue_745.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/issue_789.txt +2023/04/11 | 135 | support/texlab/crates/parser/src/test_data/latex/issue_853.txt +2023/04/11 | 55 | support/texlab/crates/parser/src/test_data/latex/issue_857.txt +2023/04/11 | 37 | support/texlab/crates/parser/src/test_data/latex/issue_874.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/label/label_definition_line_break.txt +2023/04/11 | 11 | support/texlab/crates/parser/src/test_data/latex/label/label_definition_simple.txt +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/label/label_number.txt +2023/04/11 | 11 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_equation.txt +2023/04/11 | 47 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_incomplete.txt +2023/04/11 | 14 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_multiple.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_error.txt +2023/04/11 | 15 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_incomplete.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_simple.txt +2023/04/11 | 9 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_simple.txt +2023/04/11 | 1 | support/texlab/crates/parser/src/test_data/latex/parameter_error.txt +2023/04/11 | 2 | support/texlab/crates/parser/src/test_data/latex/parameter.txt +2023/04/11 | 60 | support/texlab/crates/parser/src/test_data/latex/structure/structure_enum_item.txt +2023/04/11 | 27 | support/texlab/crates/parser/src/test_data/latex/structure/structure_invalid_nesting.txt +2023/04/11 | 90 | support/texlab/crates/parser/src/test_data/latex/structure/structure_nested.txt +2023/04/11 | 35 | support/texlab/crates/parser/src/test_data/latex/structure/structure_siblings.txt +2023/04/11 | 31 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_full.txt +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt +2023/04/11 | 26 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt +2023/04/11 | 16 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_only_name.txt +2023/04/11 | 227 | support/texlab/crates/syntax/Cargo.toml +2023/04/11 | 7955 | support/texlab/crates/syntax/src/bibtex.rs +2023/04/11 | 16983 | support/texlab/crates/syntax/src/latex/cst.rs +2023/04/11 | 1668 | support/texlab/crates/syntax/src/latex/kind.rs +2023/04/11 | 689 | support/texlab/crates/syntax/src/latex.rs +2023/04/11 | 864 | support/texlab/crates/syntax/src/lib.rs +2023/04/11 | 1205 | support/texlab/crates/texlab/benches/bench_main.rs +2023/04/11 | 1812 | support/texlab/crates/texlab/Cargo.toml +2023/04/11 | 6970534 | support/texlab/crates/texlab/data/components.json.gz +2023/04/11 | 56243 | support/texlab/crates/texlab/data/lang_data.json +2023/04/11 | 3163 | support/texlab/crates/texlab/src/client.rs +2023/04/11 | 1668 | support/texlab/crates/texlab/src/features/build/progress.rs +2023/04/11 | 4825 | support/texlab/crates/texlab/src/features/build.rs +2023/04/11 | 838 | support/texlab/crates/texlab/src/features/completion/acronym_ref.rs +2023/04/11 | 1717 | support/texlab/crates/texlab/src/features/completion/argument.rs +2023/04/11 | 283 | support/texlab/crates/texlab/src/features/completion/begin_snippet.rs +2023/04/11 | 24957 | support/texlab/crates/texlab/src/features/completion/builder.rs +2023/04/11 | 1654 | support/texlab/crates/texlab/src/features/completion/citation.rs +2023/04/11 | 1238 | support/texlab/crates/texlab/src/features/completion/color_model.rs +2023/04/11 | 490 | support/texlab/crates/texlab/src/features/completion/color.rs +2023/04/11 | 680 | support/texlab/crates/texlab/src/features/completion/component_command.rs +2023/04/11 | 521 | support/texlab/crates/texlab/src/features/completion/component_environment.rs +2023/04/11 | 702 | support/texlab/crates/texlab/src/features/completion/entry_type.rs +2023/04/11 | 840 | support/texlab/crates/texlab/src/features/completion/field.rs +2023/04/11 | 1191 | support/texlab/crates/texlab/src/features/completion/glossary_ref.rs +2023/04/11 | 1556 | support/texlab/crates/texlab/src/features/completion/import.rs +2023/04/11 | 4028 | support/texlab/crates/texlab/src/features/completion/include.rs +2023/04/11 | 2815 | support/texlab/crates/texlab/src/features/completion/label.rs +2023/04/11 | 1904 | support/texlab/crates/texlab/src/features/completion.rs +2023/04/11 | 559 | support/texlab/crates/texlab/src/features/completion/theorem.rs +2023/04/11 | 721 | support/texlab/crates/texlab/src/features/completion/tikz_library.rs +2023/04/11 | 575 | support/texlab/crates/texlab/src/features/completion/user_command.rs +2023/04/11 | 635 | support/texlab/crates/texlab/src/features/completion/user_environment.rs +2023/04/11 | 1300 | support/texlab/crates/texlab/src/features/definition/command.rs +2023/04/11 | 984 | support/texlab/crates/texlab/src/features/definition/document.rs +2023/04/11 | 1191 | support/texlab/crates/texlab/src/features/definition/entry.rs +2023/04/11 | 1161 | support/texlab/crates/texlab/src/features/definition/label.rs +2023/04/11 | 1856 | support/texlab/crates/texlab/src/features/definition.rs +2023/04/11 | 1037 | support/texlab/crates/texlab/src/features/definition/string.rs +2023/04/11 | 2143 | support/texlab/crates/texlab/src/features/folding.rs +2023/04/11 | 7196 | support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs +2023/04/11 | 2007 | support/texlab/crates/texlab/src/features/formatting/latexindent.rs +2023/04/11 | 1083 | support/texlab/crates/texlab/src/features/formatting.rs +2023/04/11 | 5245 | support/texlab/crates/texlab/src/features/forward_search.rs +2023/04/11 | 1049 | support/texlab/crates/texlab/src/features/highlight/label.rs +2023/04/11 | 358 | support/texlab/crates/texlab/src/features/highlight.rs +2023/04/11 | 749 | support/texlab/crates/texlab/src/features/hover/citation.rs +2023/04/11 | 819 | support/texlab/crates/texlab/src/features/hover/component.rs +2023/04/11 | 547 | support/texlab/crates/texlab/src/features/hover/entry_type.rs +2023/04/11 | 604 | support/texlab/crates/texlab/src/features/hover/field.rs +2023/04/11 | 851 | support/texlab/crates/texlab/src/features/hover/label.rs +2023/04/11 | 1171 | support/texlab/crates/texlab/src/features/hover.rs +2023/04/11 | 1189 | support/texlab/crates/texlab/src/features/hover/string_ref.rs +2023/04/11 | 1327 | support/texlab/crates/texlab/src/features/inlay_hint/label.rs +2023/04/11 | 1283 | support/texlab/crates/texlab/src/features/inlay_hint.rs +2023/04/11 | 555 | support/texlab/crates/texlab/src/features/link/include.rs +2023/04/11 | 932 | support/texlab/crates/texlab/src/features/link.rs +2023/04/11 | 1898 | support/texlab/crates/texlab/src/features/reference/entry.rs +2023/04/11 | 1007 | support/texlab/crates/texlab/src/features/reference/label.rs +2023/04/11 | 1070 | support/texlab/crates/texlab/src/features/reference.rs +2023/04/11 | 1402 | support/texlab/crates/texlab/src/features/reference/string.rs +2023/04/11 | 1305 | support/texlab/crates/texlab/src/features/rename/command.rs +2023/04/11 | 2292 | support/texlab/crates/texlab/src/features/rename/entry.rs +2023/04/11 | 1066 | support/texlab/crates/texlab/src/features/rename/label.rs +2023/04/11 | 1740 | support/texlab/crates/texlab/src/features/rename.rs +2023/04/11 | 262 | support/texlab/crates/texlab/src/features.rs +2023/04/11 | 2582 | support/texlab/crates/texlab/src/features/symbol/bibtex.rs +2023/04/11 | 13414 | support/texlab/crates/texlab/src/features/symbol/latex.rs +2023/04/11 | 5537 | support/texlab/crates/texlab/src/features/symbol/project_order.rs +2023/04/11 | 3430 | support/texlab/crates/texlab/src/features/symbol.rs +2023/04/11 | 4445 | support/texlab/crates/texlab/src/features/symbol/types.rs +2023/04/11 | 2897 | support/texlab/crates/texlab/src/features/workspace_command/change_environment.rs +2023/04/11 | 2456 | support/texlab/crates/texlab/src/features/workspace_command/clean.rs +2023/04/11 | 1590 | support/texlab/crates/texlab/src/features/workspace_command/dep_graph.rs +2023/04/11 | 62 | support/texlab/crates/texlab/src/features/workspace_command.rs +2023/04/11 | 826 | support/texlab/crates/texlab/src/lib.rs +2023/04/11 | 1865 | support/texlab/crates/texlab/src/main.rs +2023/04/11 | 2411 | support/texlab/crates/texlab/src/server/dispatch.rs +2023/04/11 | 6453 | support/texlab/crates/texlab/src/server/options.rs +2023/04/11 | 37434 | support/texlab/crates/texlab/src/server.rs +2023/04/11 | 6018 | support/texlab/crates/texlab/src/util/capabilities.rs +2023/04/11 | 3729 | support/texlab/crates/texlab/src/util/chktex.rs +2023/04/11 | 3500 | support/texlab/crates/texlab/src/util/components.rs +2023/04/11 | 9648 | support/texlab/crates/texlab/src/util/cursor.rs +2023/04/11 | 4157 | support/texlab/crates/texlab/src/util/diagnostics.rs +2023/04/11 | 6224 | support/texlab/crates/texlab/src/util/label.rs +2023/04/11 | 1969 | support/texlab/crates/texlab/src/util/lang_data.rs +2023/04/11 | 1605 | support/texlab/crates/texlab/src/util/line_index_ext.rs +2023/04/11 | 4008 | support/texlab/crates/texlab/src/util/lsp_enums.rs +2023/04/11 | 415 | support/texlab/crates/texlab/src/util/regex_filter.rs +2023/04/11 | 320 | support/texlab/crates/texlab/src/util.rs +2023/04/11 | 8392 | support/texlab/crates/texlab/tests/lsp/fixture.rs +2023/04/11 | 47 | support/texlab/crates/texlab/tests/lsp/main.rs +2023/04/11 | 13426 | support/texlab/crates/texlab/tests/lsp/text_document/completion.rs +2023/04/11 | 3387 | support/texlab/crates/texlab/tests/lsp/text_document/definition.rs +2023/04/11 | 1322 | support/texlab/crates/texlab/tests/lsp/text_document/document_highlight.rs +2023/04/11 | 1157 | support/texlab/crates/texlab/tests/lsp/text_document/document_link.rs +2023/04/11 | 8171 | support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs +2023/04/11 | 1208 | support/texlab/crates/texlab/tests/lsp/text_document/folding_range.rs +2023/04/11 | 3003 | support/texlab/crates/texlab/tests/lsp/text_document/formatting.rs +2023/04/11 | 3943 | support/texlab/crates/texlab/tests/lsp/text_document/hover.rs +2023/04/11 | 1737 | support/texlab/crates/texlab/tests/lsp/text_document/inlay_hint.rs +2023/04/11 | 4169 | support/texlab/crates/texlab/tests/lsp/text_document/references.rs +2023/04/11 | 1743 | support/texlab/crates/texlab/tests/lsp/text_document/rename.rs +2023/04/11 | 186 | support/texlab/crates/texlab/tests/lsp/text_document.rs +2023/04/11 | 226 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap +2023/04/11 | 265 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap +2023/04/11 | 278 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap +2023/04/11 | 279 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap +2023/04/11 | 399 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap +2023/04/11 | 404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap +2023/04/11 | 211 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap +2023/04/11 | 550 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap +2023/04/11 | 313 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap +2023/04/11 | 291 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap +2023/04/11 | 269 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap +2023/04/11 | 583 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap +2023/04/11 | 407 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap +2023/04/11 | 403 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap +2023/04/11 | 404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap +2023/04/11 | 408 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap +2023/04/11 | 404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap +2023/04/11 | 405 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap +2023/04/11 | 414 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap +2023/04/11 | 594 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap +2023/04/11 | 583 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap +2023/04/11 | 494 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap +2023/04/11 | 257 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap +2023/04/11 | 279 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap +2023/04/11 | 544 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap +2023/04/11 | 223 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap +2023/04/11 | 194 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap +2023/04/11 | 186 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap +2023/04/11 | 384 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap +2023/04/11 | 182 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap +2023/04/11 | 185 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap +2023/04/11 | 179 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap +2023/04/11 | 205 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap +2023/04/11 | 421 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap +2023/04/11 | 420 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap +2023/04/11 | 441 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap +2023/04/11 | 486 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap +2023/04/11 | 485 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap +2023/04/11 | 263 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap +2023/04/11 | 264 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap +2023/04/11 | 459 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap +2023/04/11 | 464 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap +2023/04/11 | 449 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap +2023/04/11 | 448 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap +2023/04/11 | 512 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap +2023/04/11 | 313 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap +2023/04/11 | 1814 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap +2023/04/11 | 699 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap +2023/04/11 | 711 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap +2023/04/11 | 250 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap +2023/04/11 | 255 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap +2023/04/11 | 452 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap +2023/04/11 | 451 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap +2023/04/11 | 273 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap +2023/04/11 | 351 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap +2023/04/11 | 368 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap +2023/04/11 | 355 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap +2023/04/11 | 2009 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_flat.snap +2023/04/11 | 3204 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_nested.snap +2023/04/11 | 1404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_flat.snap +2023/04/11 | 1936 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_nested.snap +2023/04/11 | 1832 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_flat.snap +2023/04/11 | 2368 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_nested.snap +2023/04/11 | 783 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__ignored_patterns.snap +2023/04/11 | 1488 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_flat.snap +2023/04/11 | 2132 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_nested.snap +2023/04/11 | 1847 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_flat.snap +2023/04/11 | 2516 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_nested.snap +2023/04/11 | 650 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__bibtex.snap +2023/04/11 | 841 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__latex.snap +2023/04/11 | 167 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap +2023/04/11 | 157 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap +2023/04/11 | 181 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap +2023/04/11 | 946 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap +2023/04/11 | 132 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap +2023/04/11 | 160 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap +2023/04/11 | 143 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap +2023/04/11 | 157 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap +2023/04/11 | 520 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap +2023/04/11 | 308 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_cite.snap +2023/04/11 | 314 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_entry.snap +2023/04/11 | 875 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__component_known_package.snap +2023/04/11 | 659 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__entry_type_known_type.snap +2023/04/11 | 234 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__field_known.snap +2023/04/11 | 406 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file_mumber.snap +2023/04/11 | 332 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file.snap +2023/04/11 | 212 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__section.snap +2023/04/11 | 272 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__string_inside_reference.snap +2023/04/11 | 1586 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap +2023/04/11 | 12 | support/texlab/crates/texlab/tests/lsp/workspace.rs +2023/04/11 | 719 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_bibtex.snap +2023/04/11 | 426 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_figure.snap +2023/04/11 | 1021 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_item.snap +2023/04/11 | 739 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_math.snap +2023/04/11 | 1339 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_section.snap +2023/04/11 | 2970 | support/texlab/crates/texlab/tests/lsp/workspace/symbol.rs +2023/04/11 | 380190 | support/texlab/images/demo.gif +2023/04/11 | 35149 | support/texlab/LICENSE +2023/04/11 | 3767 | support/texlab/README.md +2023/04/11 | 615 | support/texlab/texlab.1 +2023/04/11 | 26391 | support/texlab/texlab.pdf +2023/04/11 | 2586 | support/texlab/texlab.tex +2023/04/11 | 7720139 | 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 @@ -290799,7 +290807,7 @@ 2023/03/28 | 1588 | systems/texlive/tlnet/archive/collection-pictures.r66684.tar.xz 2023/01/26 | 976 | systems/texlive/tlnet/archive/collection-plaingeneric.r65622.tar.xz 2022/12/27 | 816 | systems/texlive/tlnet/archive/collection-pstricks.r65367.tar.xz -2023/04/06 | 1688 | systems/texlive/tlnet/archive/collection-publishers.r66780.tar.xz +2023/04/11 | 1696 | systems/texlive/tlnet/archive/collection-publishers.r66821.tar.xz 2020/03/04 | 340 | systems/texlive/tlnet/archive/collection-texworks.r54074.tar.xz 2023/02/20 | 388 | systems/texlive/tlnet/archive/collection-wintools.r65952.tar.xz 2022/11/08 | 660 | systems/texlive/tlnet/archive/collection-xetex.r64951.tar.xz @@ -292325,8 +292333,10 @@ 2020/11/25 | 10880 | systems/texlive/tlnet/archive/elsarticle.source.r56999.tar.xz 2022/04/06 | 349288 | systems/texlive/tlnet/archive/els-cas-templates.doc.r62931.tar.xz 2022/04/06 | 54856 | systems/texlive/tlnet/archive/els-cas-templates.r62931.tar.xz -2022/05/01 | 1107648 | systems/texlive/tlnet/archive/elteikthesis.doc.r63186.tar.xz -2022/05/01 | 5780 | systems/texlive/tlnet/archive/elteikthesis.r63186.tar.xz +2023/04/11 | 1015496 | systems/texlive/tlnet/archive/elteiktdk.doc.r66821.tar.xz +2023/04/11 | 2752 | systems/texlive/tlnet/archive/elteiktdk.r66821.tar.xz +2023/04/11 | 1116288 | systems/texlive/tlnet/archive/elteikthesis.doc.r66820.tar.xz +2023/04/11 | 5788 | systems/texlive/tlnet/archive/elteikthesis.r66820.tar.xz 2019/02/28 | 176308 | systems/texlive/tlnet/archive/eltex.doc.r15878.tar.xz 2019/02/28 | 12888 | systems/texlive/tlnet/archive/eltex.r15878.tar.xz 2019/02/28 | 2380 | systems/texlive/tlnet/archive/elvish.doc.r15878.tar.xz @@ -294655,12 +294665,12 @@ 2023/02/18 | 43256 | systems/texlive/tlnet/archive/kpathsea.amd64-freebsd.r65877.tar.xz 2023/02/20 | 38760 | systems/texlive/tlnet/archive/kpathsea.amd64-netbsd.r65923.tar.xz 2023/02/18 | 32400 | systems/texlive/tlnet/archive/kpathsea.armhf-linux.r65877.tar.xz -2023/02/27 | 1040296 | systems/texlive/tlnet/archive/kpathsea.doc.r66209.tar.xz +2023/04/11 | 1040300 | systems/texlive/tlnet/archive/kpathsea.doc.r66822.tar.xz 2023/02/18 | 39536 | systems/texlive/tlnet/archive/kpathsea.i386-freebsd.r65877.tar.xz 2023/02/18 | 43088 | systems/texlive/tlnet/archive/kpathsea.i386-linux.r65877.tar.xz 2023/02/20 | 35528 | systems/texlive/tlnet/archive/kpathsea.i386-netbsd.r65923.tar.xz 2023/02/18 | 41308 | systems/texlive/tlnet/archive/kpathsea.i386-solaris.r65877.tar.xz -2023/02/27 | 32520 | systems/texlive/tlnet/archive/kpathsea.r66209.tar.xz +2023/04/11 | 32584 | systems/texlive/tlnet/archive/kpathsea.r66822.tar.xz 2023/02/20 | 83868 | systems/texlive/tlnet/archive/kpathsea.universal-darwin.r65895.tar.xz 2023/02/20 | 518324 | systems/texlive/tlnet/archive/kpathsea.windows.r65891.tar.xz 2023/03/11 | 45896 | systems/texlive/tlnet/archive/kpathsea.x86_64-cygwin.r66544.tar.xz @@ -299927,13 +299937,13 @@ 2022/02/27 | 108804 | systems/texlive/tlnet/archive/tex4ht.amd64-freebsd.r62206.tar.xz 2023/02/20 | 87356 | systems/texlive/tlnet/archive/tex4ht.amd64-netbsd.r65923.tar.xz 2022/04/21 | 69948 | systems/texlive/tlnet/archive/tex4ht.armhf-linux.r63092.tar.xz -2023/04/09 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r66806.tar.xz +2023/04/11 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r66823.tar.xz 2022/02/27 | 93760 | systems/texlive/tlnet/archive/tex4ht.i386-freebsd.r62206.tar.xz 2022/02/27 | 91280 | systems/texlive/tlnet/archive/tex4ht.i386-linux.r62210.tar.xz 2023/02/20 | 76164 | systems/texlive/tlnet/archive/tex4ht.i386-netbsd.r65923.tar.xz 2022/02/27 | 83964 | systems/texlive/tlnet/archive/tex4ht.i386-solaris.r62206.tar.xz -2023/04/09 | 1133944 | systems/texlive/tlnet/archive/tex4ht.r66806.tar.xz -2023/04/09 | 1443208 | systems/texlive/tlnet/archive/tex4ht.source.r66806.tar.xz +2023/04/11 | 1133984 | systems/texlive/tlnet/archive/tex4ht.r66823.tar.xz +2023/04/11 | 1447948 | systems/texlive/tlnet/archive/tex4ht.source.r66823.tar.xz 2023/02/20 | 184636 | systems/texlive/tlnet/archive/tex4ht.universal-darwin.r65895.tar.xz 2023/02/20 | 62196 | systems/texlive/tlnet/archive/tex4ht.windows.r65891.tar.xz 2023/03/11 | 58016 | systems/texlive/tlnet/archive/tex4ht.x86_64-cygwin.r66544.tar.xz @@ -300150,12 +300160,12 @@ 2022/02/10 | 342980 | systems/texlive/tlnet/archive/texlive.infra.amd64-freebsd.r61925.tar.xz 2022/04/17 | 377636 | systems/texlive/tlnet/archive/texlive.infra.amd64-netbsd.r62368.tar.xz 2022/02/10 | 159564 | systems/texlive/tlnet/archive/texlive.infra.armhf-linux.r61925.tar.xz -2023/03/10 | 206432 | systems/texlive/tlnet/archive/texlive.infra.doc.r66512.tar.xz +2023/04/11 | 206464 | systems/texlive/tlnet/archive/texlive.infra.doc.r66822.tar.xz 2022/02/10 | 310740 | systems/texlive/tlnet/archive/texlive.infra.i386-freebsd.r61925.tar.xz 2022/02/10 | 155752 | systems/texlive/tlnet/archive/texlive.infra.i386-linux.r61925.tar.xz 2022/04/17 | 362812 | systems/texlive/tlnet/archive/texlive.infra.i386-netbsd.r62368.tar.xz 2022/02/10 | 306488 | systems/texlive/tlnet/archive/texlive.infra.i386-solaris.r61925.tar.xz -2023/03/10 | 352940 | systems/texlive/tlnet/archive/texlive.infra.r66512.tar.xz +2023/04/11 | 353060 | systems/texlive/tlnet/archive/texlive.infra.r66822.tar.xz 2022/04/17 | 308304 | systems/texlive/tlnet/archive/texlive.infra.universal-darwin.r62358.tar.xz 2023/02/20 | 3084040 | systems/texlive/tlnet/archive/texlive.infra.windows.r65931.tar.xz 2022/02/10 | 180056 | systems/texlive/tlnet/archive/texlive.infra.x86_64-cygwin.r61925.tar.xz @@ -300193,7 +300203,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/04/10 | 423552 | systems/texlive/tlnet/archive/texlive-scripts.doc.r66811.tar.xz +2023/04/11 | 423552 | systems/texlive/tlnet/archive/texlive-scripts.doc.r66817.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 @@ -300215,7 +300225,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/04/10 | 114016 | systems/texlive/tlnet/archive/texlive-scripts.r66811.tar.xz +2023/04/11 | 114032 | systems/texlive/tlnet/archive/texlive-scripts.r66817.tar.xz 2022/09/13 | 580 | systems/texlive/tlnet/archive/texlive-scripts.universal-darwin.r64356.tar.xz 2023/03/08 | 60300 | systems/texlive/tlnet/archive/texlive-scripts.windows.r66427.tar.xz 2022/09/13 | 596 | systems/texlive/tlnet/archive/texlive-scripts.x86_64-cygwin.r64356.tar.xz @@ -301021,9 +301031,9 @@ 2019/02/28 | 13868 | systems/texlive/tlnet/archive/uaclasses.source.r15878.tar.xz 2021/01/08 | 30020 | systems/texlive/tlnet/archive/uafthesis.doc.r57349.tar.xz 2021/01/08 | 7548 | systems/texlive/tlnet/archive/uafthesis.r57349.tar.xz -2022/08/23 | 4343048 | systems/texlive/tlnet/archive/uantwerpendocs.doc.r64165.tar.xz -2022/08/23 | 6475900 | systems/texlive/tlnet/archive/uantwerpendocs.r64165.tar.xz -2022/08/23 | 43988 | systems/texlive/tlnet/archive/uantwerpendocs.source.r64165.tar.xz +2023/04/11 | 4360632 | systems/texlive/tlnet/archive/uantwerpendocs.doc.r66819.tar.xz +2023/04/11 | 6475944 | systems/texlive/tlnet/archive/uantwerpendocs.r66819.tar.xz +2023/04/11 | 44216 | systems/texlive/tlnet/archive/uantwerpendocs.source.r66819.tar.xz 2019/02/28 | 106832 | systems/texlive/tlnet/archive/uassign.doc.r38459.tar.xz 2019/02/28 | 1984 | systems/texlive/tlnet/archive/uassign.r38459.tar.xz 2023/03/21 | 273308 | systems/texlive/tlnet/archive/ucalgmthesis.doc.r66602.tar.xz @@ -302071,16 +302081,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/03/12 | 125532 | systems/texlive/tlnet/install-tl -2023/04/10 | 5735742 | systems/texlive/tlnet/install-tl-unx.tar.gz -2023/04/10 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 -2023/04/10 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2023/04/11 | 5735810 | systems/texlive/tlnet/install-tl-unx.tar.gz +2023/04/11 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2023/04/11 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2023/02/19 | 5098 | systems/texlive/tlnet/install-tl-windows.bat -2023/04/10 | 21036061 | systems/texlive/tlnet/install-tl-windows.exe -2023/04/10 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 -2023/04/10 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2023/04/10 | 26025645 | systems/texlive/tlnet/install-tl.zip -2023/04/10 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2023/04/10 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2023/04/11 | 21036561 | systems/texlive/tlnet/install-tl-windows.exe +2023/04/11 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2023/04/11 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2023/04/11 | 26025652 | systems/texlive/tlnet/install-tl.zip +2023/04/11 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2023/04/11 | 455 | 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 @@ -302090,7 +302100,7 @@ 2023/01/17 | 1280 | systems/texlive/tlnet/tlpkg/gpg/trustdb.gpg 2023/01/17 | 49938 | systems/texlive/tlnet/tlpkg/installer/config.guess 2010/11/11 | 11651 | systems/texlive/tlnet/tlpkg/installer/COPYING.MinGW-runtime.txt -2023/04/09 | 7179 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl +2023/04/10 | 7143 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/01/11 | 216583 | 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 @@ -302132,12 +302142,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/04/10 | 18035035 | systems/texlive/tlnet/tlpkg/texlive.tlpdb -2023/04/10 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2023/04/11 | 18038054 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2023/04/11 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2023/02/20 | 86803 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm -2023/04/10 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 -2023/04/10 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2023/04/10 | 2438476 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2023/04/11 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2023/04/11 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2023/04/11 | 2439876 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2023/02/20 | 58928 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm 2023/02/26 | 42350 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm 2023/02/21 | 16138 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm @@ -304858,12 +304868,12 @@ 2023/04/06 | 90624 | systems/texlive/tlnet/tlpkg/translations/vi.po 2023/04/06 | 63592 | systems/texlive/tlnet/tlpkg/translations/zh_CN.po 2023/04/06 | 61459 | systems/texlive/tlnet/tlpkg/translations/zh_TW.po -2023/03/13 | 4669456 | systems/texlive/tlnet/update-tlmgr-r66512.exe -2023/03/13 | 154 | systems/texlive/tlnet/update-tlmgr-r66512.exe.sha512 -2023/03/13 | 455 | systems/texlive/tlnet/update-tlmgr-r66512.exe.sha512.asc -2023/03/13 | 9440395 | systems/texlive/tlnet/update-tlmgr-r66512.sh -2023/03/13 | 153 | systems/texlive/tlnet/update-tlmgr-r66512.sh.sha512 -2023/03/13 | 455 | systems/texlive/tlnet/update-tlmgr-r66512.sh.sha512.asc +2023/04/11 | 4669661 | systems/texlive/tlnet/update-tlmgr-r66822.exe +2023/04/11 | 154 | systems/texlive/tlnet/update-tlmgr-r66822.exe.sha512 +2023/04/11 | 455 | systems/texlive/tlnet/update-tlmgr-r66822.exe.sha512.asc +2023/04/11 | 9441276 | systems/texlive/tlnet/update-tlmgr-r66822.sh +2023/04/11 | 153 | systems/texlive/tlnet/update-tlmgr-r66822.sh.sha512 +2023/04/11 | 455 | systems/texlive/tlnet/update-tlmgr-r66822.sh.sha512.asc 2020/11/23 | 215 | systems/unix/tex-fpc/ch.ch/mkchatty 2020/11/17 | 215 | systems/unix/tex-fpc/ch.ch/mkdebug 2020/11/17 | 206 | systems/unix/tex-fpc/ch.ch/mkini @@ -312541,7 +312551,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/04/11 | 186 | timestamp +2023/04/12 | 186 | timestamp 2002/08/26 | 61898 | usergrps/dante/antrag.pdf 2002/08/26 | 118217 | usergrps/dante/antrag.ps 2021/11/11 | 917 | usergrps/dante/dtk/doc/beispiel.bib diff --git a/FILES.byname.gz b/FILES.byname.gz index 45ddfe7969..b45fc25864 100644 Binary files a/FILES.byname.gz and b/FILES.byname.gz differ diff --git a/FILES.last07days b/FILES.last07days index 65c9c982f0..4ef7f82df4 100644 --- a/FILES.last07days +++ b/FILES.last07days @@ -1,25 +1,676 @@ +2023/04/11 | 9 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_simple.txt +2023/04/11 | 9 | support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_simple.txt +2023/04/11 | 9 | support/texlab/crates/parser/src/test_data/latex/citation/citation_missing_brace.txt +2023/04/11 | 993 | support/texlab/crates/parser/src/test_data/bibtex/samples/knuth_1984.txt +2023/04/11 | 984 | support/texlab/crates/texlab/src/features/definition/document.rs +2023/04/11 | 9839 | support/latexindent/LatexIndent/Lines.pm +2023/04/11 | 980 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_simple.txt.snap +2023/04/11 | 976 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_rivest_1978.snap +2023/04/11 | 975 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@004.txt.snap +2023/04/11 | 965 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_definition_simple.txt.snap +2023/04/11 | 9648 | support/texlab/crates/texlab/src/util/cursor.rs +2023/04/11 | 9563 | support/texlab/crates/base-db/src/semantics/tex.rs +2023/04/11 | 954 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__patent_almendro_1998.snap +2023/04/11 | 953 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@005.txt.snap +2023/04/11 | 9479 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__knuth_1984.txt.snap +2023/04/11 | 946 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_multiple_entries.snap +2023/04/11 | 9441276 | systems/texlive/tlnet/update-tlmgr-r66822.sh +2023/04/11 | 932 | support/texlab/crates/texlab/src/features/link.rs +2023/04/11 | 911 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_options.txt.snap +2023/04/11 | 911 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition_optional_arg.txt.snap +2023/04/11 | 90 | support/texlab/crates/parser/src/test_data/latex/structure/structure_nested.txt +2023/04/11 | 904 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_857.txt.snap +2023/04/11 | 900 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_command.txt.snap +2023/04/11 | 898 | support/texlab/crates/parser/src/test_data/bibtex/samples/kastenholz_2006.txt +2023/04/11 | 8955 | support/texlab/crates/citeproc/src/field/text.rs +2023/04/11 | 890 | support/texlab/crates/citeproc/src/lib.rs +2023/04/11 | 890 | macros/latex/contrib/photobook/scripts/make-spreads.cfg.example +2023/04/11 | 8868 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__kastenholz_2006.txt.snap +2023/04/11 | 8868 | support/texlab/crates/base-db/src/workspace.rs +2023/04/11 | 8829 | support/latexindent/LatexIndent/IfElseFi.pm +2023/04/11 | 8762 | support/latexindent/LatexIndent/FileExtension.pm +2023/04/11 | 875 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__component_known_package.snap +2023/04/11 | 8703661 | support/latexindent/bin/windows/latexindent.exe +2023/04/11 | 864 | support/texlab/crates/syntax/src/lib.rs +2023/04/11 | 861 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_options.txt.snap +2023/04/11 | 860 | support/texlab/crates/parser/src/test_data/bibtex/samples/blom_2021.txt +2023/04/11 | 851 | support/texlab/crates/texlab/src/features/hover/label.rs +2023/04/11 | 849 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error1.txt.snap +2023/04/11 | 841 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__latex.snap +2023/04/11 | 840 | support/texlab/crates/texlab/src/features/completion/field.rs +2023/04/11 | 8392 | support/texlab/crates/texlab/tests/lsp/fixture.rs +2023/04/11 | 838 | support/texlab/crates/texlab/src/features/completion/acronym_ref.rs +2023/04/11 | 838 | support/latexindent/LatexIndent/Version.pm +2023/04/11 | 82 | support/texlab/crates/parser/src/test_data/bibtex/comment.txt +2023/04/11 | 826 | support/texlab/crates/texlab/src/lib.rs +2023/04/11 | 825 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_incomplete.txt.snap +2023/04/11 | 821 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__equation_missing_end.txt.snap +2023/04/11 | 820 | support/texlab/crates/distro/src/texlive.rs +2023/04/11 | 819 | support/texlab/crates/texlab/src/features/hover/component.rs +2023/04/11 | 8171 | support/texlab/crates/texlab/tests/lsp/text_document/document_symbol.rs +2023/04/11 | 815 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_options.txt.snap +2023/04/11 | 814 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation_missing_begin.txt.snap +2023/04/11 | 80 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_with_begin.txt +2023/04/11 | 7 | support/texlab/crates/parser/src/test_data/latex/citation/citation_empty.txt +2023/04/11 | 7955 | support/texlab/crates/syntax/src/bibtex.rs +2023/04/11 | 788 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_betram_1996.snap +2023/04/11 | 783 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__ignored_patterns.snap +2023/04/11 | 7762 | support/texlab/crates/parser/src/test_data/build_log/007.txt +2023/04/11 | 772 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_figure.txt.snap +2023/04/11 | 7720139 | support/texlab.zip +2023/04/11 | 771 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_full.txt.snap +2023/04/11 | 76 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_options.txt +2023/04/11 | 762 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_complicated_options.txt.snap +2023/04/11 | 761 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@issue_809.txt.snap +2023/04/11 | 760 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_package.txt.snap +2023/04/11 | 760 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_optional.txt.snap +2023/04/11 | 758 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_simple.txt.snap +2023/04/11 | 7531 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aksin_2006.txt.snap +2023/04/11 | 7528 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__jain_1999.txt.snap +2023/04/11 | 749 | support/texlab/crates/texlab/src/features/hover/citation.rs +2023/04/11 | 746 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@block_comments.txt.snap +2023/04/11 | 745 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_874.txt.snap +2023/04/11 | 742 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_simple.txt.snap +2023/04/11 | 7428 | support/latexindent/LatexIndent/BackUpFileProcedure.pm +2023/04/11 | 740804 | macros/luatex/latex/piton.zip +2023/04/11 | 739 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_math.snap +2023/04/11 | 734 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_definition_simple.txt.snap +2023/04/11 | 7322 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__almendro_1998.txt.snap +2023/04/11 | 7280 | support/latexindent/LatexIndent/MandatoryArgument.pm +2023/04/11 | 721 | support/texlab/crates/texlab/src/features/completion/tikz_library.rs +2023/04/11 | 719 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_bibtex.snap +2023/04/11 | 7196 | support/texlab/crates/texlab/src/features/formatting/bibtex_internal.rs +2023/04/11 | 717 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_options.txt.snap +2023/04/11 | 716 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@001.txt.snap +2023/04/11 | 7161 | support/latexindent/documentation/figure-schematic.png +2023/04/11 | 7157 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__combi_2004.txt.snap +2023/04/11 | 711 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_texlabroot.snap +2023/04/11 | 710 | support/texlab/crates/distro/src/kpsewhich.rs +2023/04/11 | 707 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__collection_matuz_1990.snap +2023/04/11 | 706 | support/texlab/crates/parser/src/test_data/bibtex/samples/almendro_1998.txt +2023/04/11 | 706 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_siblings.txt.snap +2023/04/11 | 703 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_options.txt.snap +2023/04/11 | 703833 | macros/luatex/latex/piton/piton.pdf +2023/04/11 | 702 | support/texlab/crates/texlab/src/features/completion/entry_type.rs +2023/04/11 | 702 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_options.txt.snap +2023/04/11 | 6 | support/texlab/crates/parser/src/test_data/latex/group/escaped_brackets.txt +2023/04/11 | 699 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__project_resolution_import.snap +2023/04/11 | 6970534 | support/texlab/crates/texlab/data/components.json.gz +2023/04/11 | 689 | support/texlab/crates/syntax/src/latex.rs +2023/04/11 | 6882 | support/latexindent/LatexIndent/TrailingComments.pm +2023/04/11 | 6836 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__erwin_2007.txt.snap +2023/04/11 | 680 | support/texlab/crates/texlab/src/features/completion/component_command.rs +2023/04/11 | 6807 | support/latexindent/LatexIndent/Environment.pm +2023/04/11 | 679 | support/texlab/crates/parser/src/test_data/bibtex/samples/aksin_2006.txt +2023/04/11 | 674 | support/texlab/crates/parser/src/test_data/bibtex/samples/jain_1999.txt +2023/04/11 | 674 | support/texlab/crates/parser/src/test_data/bibtex/samples/combi_2004.txt +2023/04/11 | 673 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@003.txt.snap +2023/04/11 | 6717 | support/latexindent/LatexIndent/Item.pm +2023/04/11 | 669 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description_and_counter.txt.snap +2023/04/11 | 6644 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__blom_2021.txt.snap +2023/04/11 | 659 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__entry_type_known_type.snap +2023/04/11 | 6522 | support/latexindent/LatexIndent/OptionalArgument.pm +2023/04/11 | 650 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__folding_range__bibtex.snap +2023/04/11 | 65092 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm +2023/04/11 | 64 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_declaration.txt +2023/04/11 | 649 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline_double_dollar.txt.snap +2023/04/11 | 6484 | support/texlab/crates/base-db/src/line_index.rs +2023/04/11 | 647 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default.txt.snap +2023/04/11 | 6475944 | systems/texlive/tlnet/archive/uantwerpendocs.r66819.tar.xz +2023/04/11 | 6472 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__rivest_1978.txt.snap +2023/04/11 | 645 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_simple.txt.snap +2023/04/11 | 6453 | support/texlab/crates/texlab/src/server/options.rs +2023/04/11 | 6393230 | support/latexindent/bin/macos/latexindent +2023/04/11 | 635 | support/texlab/crates/texlab/src/features/completion/user_environment.rs +2023/04/11 | 631 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@inline.txt.snap +2023/04/11 | 62 | support/texlab/crates/texlab/src/features/workspace_command.rs +2023/04/11 | 6271 | support/latexindent/LatexIndent/Else.pm +2023/04/11 | 626 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_default_error.txt.snap +2023/04/11 | 624 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_command.txt.snap +2023/04/11 | 6224 | support/texlab/crates/texlab/src/util/label.rs +2023/04/11 | 6164028 | support/latexindent/bin/linux/latexindent +2023/04/11 | 615 | support/texlab/texlab.1 +2023/04/11 | 615 | support/texlab/crates/parser/src/test_data/bibtex/samples/erwin_2007.txt +2023/04/11 | 60 | support/texlab/crates/parser/src/test_data/latex/structure/structure_enum_item.txt +2023/04/11 | 60 | support/texlab/crates/citeproc/src/field.rs +2023/04/11 | 608 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote_postnote.txt.snap +2023/04/11 | 604 | support/texlab/crates/texlab/src/features/hover/field.rs +2023/04/11 | 6018 | support/texlab/crates/texlab/src/util/capabilities.rs +2023/04/11 | 5993 | support/texlab/crates/parser/src/latex/lexer/commands.rs +2023/04/11 | 594 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_bibtex.snap +2023/04/11 | 5908 | support/latexindent/documentation/contributors.bib +2023/04/11 | 588 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error2.txt.snap +2023/04/11 | 5864 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__betram_1996.txt.snap +2023/04/11 | 583 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple_package.snap +2023/04/11 | 583 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation.snap +2023/04/11 | 5808 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm +2023/04/11 | 5788 | systems/texlive/tlnet/archive/elteikthesis.r66820.tar.xz +2023/04/11 | 575 | support/texlab/crates/texlab/src/features/completion/user_command.rs +2023/04/11 | 5735810 | systems/texlive/tlnet/install-tl-unx.tar.gz +2023/04/11 | 572 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__book_aho_2006.snap +2023/04/11 | 5684 | support/texlab/crates/parser/src/build_log.rs +2023/04/11 | 565 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_invalid_nesting.txt.snap +2023/04/11 | 563 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_number.txt.snap +2023/04/11 | 56243 | support/texlab/crates/texlab/data/lang_data.json +2023/04/11 | 55 | support/texlab/crates/parser/src/test_data/latex/issue_857.txt +2023/04/11 | 559 | support/texlab/crates/texlab/src/features/completion/theorem.rs +2023/04/11 | 557 | support/texlab/crates/parser/src/test_data/bibtex/samples/rivest_1978.txt +2023/04/11 | 556 | support/texlab/crates/parser/src/test_data/bibtex/samples/betram_1996.txt +2023/04/11 | 555 | support/texlab/crates/texlab/src/features/link/include.rs +2023/04/11 | 5537 | support/texlab/crates/texlab/src/features/symbol/project_order.rs +2023/04/11 | 552 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path_options.txt.snap +2023/04/11 | 550 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__begin_environment_without_snippet_support.snap +2023/04/11 | 547 | support/texlab/crates/texlab/src/features/hover/entry_type.rs +2023/04/11 | 544 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple_end.snap +2023/04/11 | 54385 | support/latexindent/documentation/latexindent-yaml-schema.json +2023/04/11 | 5429 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm +2023/04/11 | 5390 | support/latexindent/LatexIndent/Check.pm +2023/04/11 | 538 | support/texlab/crates/citeproc/Cargo.toml +2023/04/11 | 52 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_command.txt +2023/04/11 | 52 | support/texlab/crates/parser/src/test_data/latex/environment/environment_nested_missing_braces.txt +2023/04/11 | 526 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_description.txt.snap +2023/04/11 | 526 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_name_with_counter.txt.snap +2023/04/11 | 52668 | support/latexindent/LatexIndent/GetYamlSettings.pm +2023/04/11 | 5245 | support/texlab/crates/texlab/src/features/forward_search.rs +2023/04/11 | 521 | support/texlab/crates/texlab/src/features/completion/component_environment.rs +2023/04/11 | 520 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_wrap_long_lines.snap +2023/04/11 | 520 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal.txt.snap +2023/04/11 | 518368 | biblio/bibtex/bibtex-x.zip +2023/04/11 | 517 | support/texlab/crates/parser/src/test_data/bibtex/samples/matuz_1990.txt +2023/04/11 | 512 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_857_1.snap +2023/04/11 | 50 | support/texlab/crates/parser/src/test_data/latex/environment/environment_asymptote.txt +2023/04/11 | 50 | support/texlab/crates/parser/src/test_data/bibtex/issue_809.txt +2023/04/11 | 507 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_simple.txt.snap +2023/04/11 | 5060 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__matuz_1990.txt.snap +2023/04/11 | 504 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_argc.txt.snap +2023/04/11 | 502 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_simple.txt.snap +2023/04/11 | 5020 | support/texlab/crates/base-db/src/graph.rs +2023/04/11 | 4 | support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets_with_group.txt +2023/04/11 | 4 | support/texlab/crates/parser/src/test_data/latex/generic_command_empty.txt +2023/04/11 | 499 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@caption__caption_minimal_error.txt.snap +2023/04/11 | 49947 | support/texlab/Cargo.lock +2023/04/11 | 494 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_command_simple.snap +2023/04/11 | 4941 | support/texlab/crates/base-db/src/config.rs +2023/04/11 | 490 | support/texlab/crates/texlab/src/features/completion/color.rs +2023/04/11 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 +2023/04/11 | 48 | support/texlab/crates/parser/src/test_data/latex/block_comments.txt +2023/04/11 | 486 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_closed.snap +2023/04/11 | 485 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_two_fields_name_open.snap +2023/04/11 | 483 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_multiple.txt.snap +2023/04/11 | 4825 | support/texlab/crates/texlab/src/features/build.rs +2023/04/11 | 4816 | support/latexindent/LatexIndent/BlankLines.pm +2023/04/11 | 47 | support/texlab/crates/texlab/tests/lsp/main.rs +2023/04/11 | 47 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_incomplete.txt +2023/04/11 | 47 | support/texlab/crates/parser/src/test_data/latex/environment/environment_definition.txt +2023/04/11 | 479 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_error.txt.snap +2023/04/11 | 477 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_input_path_brackets.txt.snap +2023/04/11 | 4755 | support/texlab/crates/base-db/src/document.rs +2023/04/11 | 472 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_prenote.txt.snap +2023/04/11 | 4724 | support/texlab/crates/citeproc/src/entry.rs +2023/04/11 | 470 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_simple.txt.snap +2023/04/11 | 4669661 | systems/texlive/tlnet/update-tlmgr-r66822.exe +2023/04/11 | 464 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_open_brace.snap +2023/04/11 | 464 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@007.txt.snap +2023/04/11 | 463 | support/texlab/crates/base-db/Cargo.toml +2023/04/11 | 462 | macros/latex/contrib/photobook/DEPENDS.txt +2023/04/11 | 460 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_args.txt.snap +2023/04/11 | 459 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_class_closed_brace.snap +2023/04/11 | 457 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error3.txt.snap +2023/04/11 | 456 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_multiple.txt.snap +2023/04/11 | 455 | systems/texlive/tlnet/update-tlmgr-r66822.sh.sha512.asc +2023/04/11 | 455 | systems/texlive/tlnet/update-tlmgr-r66822.exe.sha512.asc +2023/04/11 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc +2023/04/11 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc +2023/04/11 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc +2023/04/11 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc +2023/04/11 | 453 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_multiple_keys.txt.snap +2023/04/11 | 452 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_closed_brace.snap +2023/04/11 | 452 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_line_break.txt.snap +2023/04/11 | 451 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__tikz_library_open_brace.snap +2023/04/11 | 44 | support/texlab/crates/parser/src/test_data/latex/include/class_include_options.txt +2023/04/11 | 44 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_definition_simple.txt +2023/04/11 | 44 | support/texlab/crates/parser/src/test_data/latex/environment/environment_definition_optional_arg.txt +2023/04/11 | 44 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_simple.txt +2023/04/11 | 449 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_closed_brace.snap +2023/04/11 | 448 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__import_package_open_brace.snap +2023/04/11 | 448 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@002.txt.snap +2023/04/11 | 447 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@graphics_path.txt.snap +2023/04/11 | 4445 | support/texlab/crates/texlab/src/features/symbol/types.rs +2023/04/11 | 44216 | systems/texlive/tlnet/archive/uantwerpendocs.source.r66819.tar.xz +2023/04/11 | 441 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_entry_field_name.snap +2023/04/11 | 44096 | support/latexindent/documentation/logo.png +2023/04/11 | 4402 | support/latexindent/documentation/latex-indent.bib +2023/04/11 | 43 | support/texlab/crates/parser/src/test_data/latex/environment/environment_nested.txt +2023/04/11 | 4365 | support/latexindent/LatexIndent/RoundBrackets.pm +2023/04/11 | 4360632 | systems/texlive/tlnet/archive/uantwerpendocs.doc.r66819.tar.xz +2023/04/11 | 4339 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm +2023/04/11 | 430 | support/texlab/crates/base-db/src/diagnostics.rs +2023/04/11 | 430280 | support/latexindent/documentation/latexindent.tex +2023/04/11 | 4300 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_745.txt.snap +2023/04/11 | 42 | support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_options.txt +2023/04/11 | 429 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_equality_sign.txt.snap +2023/04/11 | 426 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_figure.snap +2023/04/11 | 423552 | systems/texlive/tlnet/archive/texlive-scripts.doc.r66817.tar.xz +2023/04/11 | 421 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_closed.snap +2023/04/11 | 4219 | macros/latex/contrib/photobook/scripts/cls2tex.sh +2023/04/11 | 420 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__field_empty_entry_open.snap +2023/04/11 | 41 | support/texlab/crates/parser/src/test_data/latex/include/package_include_options.txt +2023/04/11 | 4169 | support/texlab/crates/texlab/tests/lsp/text_document/references.rs +2023/04/11 | 415 | support/texlab/crates/texlab/src/util/regex_filter.rs +2023/04/11 | 4157 | support/texlab/crates/texlab/src/util/diagnostics.rs +2023/04/11 | 414 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_word.snap +2023/04/11 | 4130 | support/texlab/crates/parser/src/test_data/build_log/006.txt +2023/04/11 | 408 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_simple.snap +2023/04/11 | 407 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_open_brace.snap +2023/04/11 | 406 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file_mumber.snap +2023/04/11 | 4061171 | biblio/ctan-bibdata.zip +2023/04/11 | 405 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_simple.snap +2023/04/11 | 404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_open_brace.snap +2023/04/11 | 404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_simple.snap +2023/04/11 | 404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_open_brace.snap +2023/04/11 | 404 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_redundant_comma.txt.snap +2023/04/11 | 403 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__color_model_definition_set_open_brace.snap +2023/04/11 | 4028 | support/texlab/crates/texlab/src/features/completion/include.rs +2023/04/11 | 4008 | support/texlab/crates/texlab/src/util/lsp_enums.rs +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_options.txt +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_complicated_options.txt +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_definition_simple.txt +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error1.txt +2023/04/11 | 39 | support/texlab/crates/parser/src/test_data/latex/caption/caption_figure.txt +2023/04/11 | 399 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_empty.snap +2023/04/11 | 3943 | support/texlab/crates/texlab/tests/lsp/text_document/hover.rs +2023/04/11 | 387 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@theorem_definition__theorem_definition_only_name.txt.snap +2023/04/11 | 387 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__graphics_include_simple.txt.snap +2023/04/11 | 386 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__biblatex_include_simple.txt.snap +2023/04/11 | 386 | support/texlab/crates/parser/Cargo.toml +2023/04/11 | 385 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__verbatim_include_simple.txt.snap +2023/04/11 | 384 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_at_empty.snap +2023/04/11 | 384 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__tikz_library_import_simple.txt.snap +2023/04/11 | 384 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__escaped_brackets.txt.snap +2023/04/11 | 382 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__pgf_library_import_simple.txt.snap +2023/04/11 | 380 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_range_incomplete.txt.snap +2023/04/11 | 380190 | support/texlab/images/demo.gif +2023/04/11 | 37 | support/texlab/crates/parser/src/test_data/latex/issue_874.txt +2023/04/11 | 379 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@equation.txt.snap +2023/04/11 | 377 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl.txt.snap +2023/04/11 | 376 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_simple.txt.snap +2023/04/11 | 376 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__bibtex_include_simple.txt.snap +2023/04/11 | 376 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__math_operator_no_impl.txt.snap +2023/04/11 | 3767 | support/texlab/README.md +2023/04/11 | 375 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_simple.txt.snap +2023/04/11 | 3747 | support/latexindent/LatexIndent/Replacement.pm +2023/04/11 | 37434 | support/texlab/crates/texlab/src/server.rs +2023/04/11 | 373 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__inkscape_include_simple.txt.snap +2023/04/11 | 373 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@preamble.txt.snap +2023/04/11 | 372 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__svg_include_simple.txt.snap +2023/04/11 | 372 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_reference_simple.txt.snap +2023/04/11 | 3729 | support/texlab/crates/texlab/src/util/chktex.rs +2023/04/11 | 368 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_import.snap +2023/04/11 | 3667 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__aho_2006.txt.snap +2023/04/11 | 3663579 | biblio/ctan-bibdata/ctan.pdf +2023/04/11 | 365 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__glossary_entry_reference_simple.txt.snap +2023/04/11 | 364 | support/texlab/crates/base-db/src/semantics.rs +2023/04/11 | 363 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__latex_include_simple.txt.snap +2023/04/11 | 361 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_equation.txt.snap +2023/04/11 | 35 | support/texlab/crates/parser/src/test_data/latex/structure/structure_siblings.txt +2023/04/11 | 35 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_package.txt +2023/04/11 | 358 | support/texlab/crates/texlab/src/features/highlight.rs +2023/04/11 | 356 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_definition_simple.txt.snap +2023/04/11 | 356 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_no_impl_error.txt.snap +2023/04/11 | 356 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_reference_simple.txt.snap +2023/04/11 | 355 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_link__document_include.snap +2023/04/11 | 3546 | support/texlab/crates/base-db/src/diagnostics/tex.rs +2023/04/11 | 353060 | systems/texlive/tlnet/archive/texlive.infra.r66822.tar.xz +2023/04/11 | 351 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_environment.snap +2023/04/11 | 35149 | support/texlab/LICENSE +2023/04/11 | 3500 | support/texlab/crates/texlab/src/util/components.rs +2023/04/11 | 34 | support/texlab/crates/parser/src/test_data/latex/include/svg_include_options.txt +2023/04/11 | 349 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@label__label_reference_simple.txt.snap +2023/04/11 | 3482 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm +2023/04/11 | 347 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_789.txt.snap +2023/04/11 | 344 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_simple.txt.snap +2023/04/11 | 3430 | support/texlab/crates/texlab/src/features/symbol.rs +2023/04/11 | 342 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_star.txt.snap +2023/04/11 | 3413 | support/latexindent/latexindent.pl +2023/04/11 | 33 | support/texlab/crates/parser/src/test_data/latex/graphics_path_options.txt +2023/04/11 | 33 | support/texlab/crates/parser/src/test_data/latex/environment/environment_simple.txt +2023/04/11 | 33 | support/texlab/crates/parser/src/test_data/latex/color/color_definition_simple.txt +2023/04/11 | 3387 | support/texlab/crates/texlab/tests/lsp/text_document/definition.rs +2023/04/11 | 3339 | support/latexindent/LatexIndent/Tokens.pm +2023/04/11 | 332 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__label_theorem_child_file.snap +2023/04/11 | 332 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_simple.txt.snap +2023/04/11 | 332 | support/texlab/Cargo.toml +2023/04/11 | 330 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets_with_group.txt.snap +2023/04/11 | 32 | support/texlab/crates/parser/src/test_data/latex/graphics_path_command.txt +2023/04/11 | 32 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_options.txt +2023/04/11 | 32603 | support/texlab/crates/parser/src/latex.rs +2023/04/11 | 32584 | systems/texlive/tlnet/archive/kpathsea.r66822.tar.xz +2023/04/11 | 324 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_empty.txt.snap +2023/04/11 | 323 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_empty.txt.snap +2023/04/11 | 321 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_missing_brace.txt.snap +2023/04/11 | 320 | support/texlab/crates/texlab/src/util.rs +2023/04/11 | 3204 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_nested.snap +2023/04/11 | 31 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_full.txt +2023/04/11 | 31 | support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_simple.txt +2023/04/11 | 3194 | support/texlab/crates/parser/src/test_data/build_log/001.txt +2023/04/11 | 316 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__import_incomplete.txt.snap +2023/04/11 | 3163 | support/texlab/crates/texlab/src/client.rs +2023/04/11 | 314 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_entry.snap +2023/04/11 | 314 | support/texlab/crates/parser/src/test_data/bibtex/samples/aho_2006.txt +2023/04/11 | 313 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__issue_864.snap +2023/04/11 | 313 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_acronym.snap +2023/04/11 | 312 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__curly_group_missing_end.txt.snap +2023/04/11 | 31148 | support/latexindent/LatexIndent/Wrap.pm +2023/04/11 | 30 | support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_options.txt +2023/04/11 | 30 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error2.txt +2023/04/11 | 309931 | macros/luatex/latex/piton/piton-french.pdf +2023/04/11 | 308 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__citation_inside_cite.snap +2023/04/11 | 3057 | support/texlab/crates/parser/src/test_data/build_log/004.txt +2023/04/11 | 3003 | support/texlab/crates/texlab/tests/lsp/text_document/formatting.rs +2023/04/11 | 2 | support/texlab/crates/parser/src/test_data/latex/parameter.txt +2023/04/11 | 2 | support/texlab/crates/parser/src/test_data/latex/group/unmatched_brackets.txt +2023/04/11 | 2 | support/texlab/crates/parser/src/test_data/latex/group/unmatched_braces.txt +2023/04/11 | 2 | support/texlab/crates/parser/src/test_data/latex/generic_command_escape.txt +2023/04/11 | 29 | support/texlab/crates/parser/src/test_data/latex/include/graphics_include_simple.txt +2023/04/11 | 29 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_optional.txt +2023/04/11 | 2970 | support/texlab/crates/texlab/tests/lsp/workspace/symbol.rs +2023/04/11 | 295 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@citation__citation_empty.txt.snap +2023/04/11 | 291 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace_multiple.snap +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/include/package_include_multiple.txt +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/include/biblatex_include_simple.txt +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/group/equation_missing_end.txt +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/graphics_path.txt +2023/04/11 | 28 | support/texlab/crates/parser/src/test_data/latex/equation_missing_begin.txt +2023/04/11 | 2897 | support/texlab/crates/texlab/src/features/workspace_command/change_environment.rs +2023/04/11 | 283 | support/texlab/crates/texlab/src/features/completion/begin_snippet.rs +2023/04/11 | 2815 | support/texlab/crates/texlab/src/features/completion/label.rs +2023/04/11 | 27 | support/texlab/crates/parser/src/test_data/latex/structure/structure_invalid_nesting.txt +2023/04/11 | 27 | support/texlab/crates/parser/src/test_data/latex/include/verbatim_include_simple.txt +2023/04/11 | 27 | support/texlab/crates/parser/src/test_data/latex/caption/caption_default.txt +2023/04/11 | 279 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_command_definition.snap +2023/04/11 | 279 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_simple.snap +2023/04/11 | 278 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_open_brace.snap +2023/04/11 | 2777637 | biblio/ctan-bibdata/ctan.bib +2023/04/11 | 2752 | systems/texlive/tlnet/archive/elteiktdk.r66821.tar.xz +2023/04/11 | 273 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__user_command.snap +2023/04/11 | 27328 | support/latexindent/LatexIndent/Verbatim.pm +2023/04/11 | 272 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__string_inside_reference.snap +2023/04/11 | 27244 | support/texlab/CHANGELOG.md +2023/04/11 | 271 | support/texlab/crates/parser/src/test_data/latex/issue_745.txt +2023/04/11 | 2701 | support/latexindent/LatexIndent/Switches.pm +2023/04/11 | 26 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description_and_counter.txt +2023/04/11 | 26 | support/texlab/crates/parser/src/test_data/latex/command_definition/math_operator_no_impl.txt +2023/04/11 | 26 | support/texlab/crates/parser/src/test_data/latex/caption/caption_default_error.txt +2023/04/11 | 269 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__citation_open_brace.snap +2023/04/11 | 2690 | support/latexindent/LatexIndent/Preamble.pm +2023/04/11 | 2665 | support/texlab/crates/citeproc/src/field/date.rs +2023/04/11 | 265 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_ref_empty.snap +2023/04/11 | 264 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_simple.snap +2023/04/11 | 263 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__glossary_ref_open_brace.snap +2023/04/11 | 26391 | support/texlab/texlab.pdf +2023/04/11 | 262 | support/texlab/crates/texlab/src/features.rs +2023/04/11 | 26025652 | systems/texlive/tlnet/install-tl.zip +2023/04/11 | 25 | support/texlab/crates/parser/src/test_data/latex/glossary/glossary_entry_reference_options.txt +2023/04/11 | 25 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error3.txt +2023/04/11 | 25 | support/texlab/crates/parser/src/test_data/bibtex/preamble.txt +2023/04/11 | 2586 | support/texlab/texlab.tex +2023/04/11 | 2582 | support/texlab/crates/texlab/src/features/symbol/bibtex.rs +2023/04/11 | 257 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_class.snap +2023/04/11 | 255 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_end.snap +2023/04/11 | 2552 | support/texlab/crates/parser/src/latex/lexer/types.rs +2023/04/11 | 2516 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_nested.snap +2023/04/11 | 2515 | support/texlab/crates/parser/src/test_data/build_log/003.txt +2023/04/11 | 250 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__theorem_begin.snap +2023/04/11 | 25007 | support/latexindent/LatexIndent/Document.pm +2023/04/11 | 24 | support/texlab/crates/parser/src/test_data/latex/include/svg_include_simple.txt +2023/04/11 | 24957 | support/texlab/crates/texlab/src/features/completion/builder.rs +2023/04/11 | 248 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@color__color_set_definition_error4.txt.snap +2023/04/11 | 2467 | support/texlab/crates/distro/src/miktex.rs +2023/04/11 | 2456 | support/texlab/crates/texlab/src/features/workspace_command/clean.rs +2023/04/11 | 2455 | support/texlab/crates/parser/src/test_data/build_log/002.txt +2023/04/11 | 244 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_brackets.txt.snap +2023/04/11 | 24410 | support/latexindent/LatexIndent/Arguments.pm +2023/04/11 | 2439876 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz +2023/04/11 | 242 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@hello_world.txt.snap +2023/04/11 | 242 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@group__unmatched_braces.txt.snap +2023/04/11 | 2411 | support/texlab/crates/texlab/src/server/dispatch.rs +2023/04/11 | 23 | support/texlab/crates/parser/src/test_data/latex/include/class_include_simple.txt +2023/04/11 | 23 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_simple.txt +2023/04/11 | 2368 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_nested.snap +2023/04/11 | 234 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__field_known.snap +2023/04/11 | 234 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@comment.txt.snap +2023/04/11 | 2320 | support/latexindent/LatexIndent/Logger.pm +2023/04/11 | 22 | support/texlab/crates/parser/src/test_data/latex/include/bibtex_include_simple.txt +2023/04/11 | 22 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_argc.txt +2023/04/11 | 22 | support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal.txt +2023/04/11 | 2292 | support/texlab/crates/texlab/src/features/rename/entry.rs +2023/04/11 | 22877 | support/latexindent/defaultSettings.yaml +2023/04/11 | 227 | support/texlab/crates/syntax/Cargo.toml +2023/04/11 | 227 | support/texlab/crates/distro/Cargo.toml +2023/04/11 | 226 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__acronym_package_ref.snap +2023/04/11 | 223 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__component_environment_simple.snap +2023/04/11 | 22210 | support/texlab/crates/citeproc/src/driver.rs +2023/04/11 | 221829 | support/TeX4ht/source/ChangeLog +2023/04/11 | 2201 | support/texlab/crates/base-db/src/diagnostics/log.rs +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_description.txt +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_name_with_counter.txt +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/label/label_number.txt +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/inline_double_dollar.txt +2023/04/11 | 21 | support/texlab/crates/parser/src/test_data/latex/caption/caption_minimal_error.txt +2023/04/11 | 216 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_empty.txt.snap +2023/04/11 | 215 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@generic_command_escape.txt.snap +2023/04/11 | 2143 | support/texlab/crates/texlab/src/features/folding.rs +2023/04/11 | 2132 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_nested.snap +2023/04/11 | 212 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__hover__section.snap +2023/04/11 | 211 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__argument_word.snap +2023/04/11 | 21036561 | systems/texlive/tlnet/install-tl-windows.exe +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_simple.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/include/tikz_library_import_simple.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/include/package_include_simple.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/include/latex_input_path_brackets.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/include/inkscape_include_simple.txt +2023/04/11 | 20 | support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote_postnote.txt +2023/04/11 | 20797 | support/latexindent/LatexIndent/Indent.pm +2023/04/11 | 20766 | support/latexindent/LatexIndent/Sentence.pm +2023/04/11 | 2074 | support/texlab/crates/citeproc/src/field/author.rs +2023/04/11 | 206464 | systems/texlive/tlnet/archive/texlive.infra.doc.r66822.tar.xz +2023/04/11 | 205 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_complete_entry.snap +2023/04/11 | 2009 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__enumerate_flat.snap +2023/04/11 | 2008 | support/latexindent/README +2023/04/11 | 2007 | support/texlab/crates/texlab/src/features/formatting/latexindent.rs +2023/04/11 | 1 | support/texlab/crates/parser/src/test_data/latex/parameter_error.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_error.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/label/label_definition_line_break.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/issue_789.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/inline.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/include/pgf_library_import_simple.txt +2023/04/11 | 19 | support/texlab/crates/parser/src/test_data/latex/glossary/acronym_reference_simple.txt +2023/04/11 | 1997 | support/texlab/crates/distro/src/lib.rs +2023/04/11 | 1969 | support/texlab/crates/texlab/src/util/lang_data.rs +2023/04/11 | 1955 | support/texlab/crates/base-db/src/diagnostics/bib.rs +2023/04/11 | 194 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_preamble.snap +2023/04/11 | 1936 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_nested.snap +2023/04/11 | 191658 | macros/latex/contrib/photobook.zip +2023/04/11 | 1904 | support/texlab/crates/texlab/src/features/completion.rs +2023/04/11 | 1898 | support/texlab/crates/texlab/src/features/reference/entry.rs +2023/04/11 | 1897 | support/texlab/crates/parser/src/latex/lexer.rs +2023/04/11 | 187 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter_error.txt.snap +2023/04/11 | 186 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_after_string.snap +2023/04/11 | 186 | support/texlab/crates/texlab/tests/lsp/text_document.rs +2023/04/11 | 1865 | support/texlab/crates/texlab/src/main.rs +2023/04/11 | 185 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_preamble.snap +2023/04/11 | 1856 | support/texlab/crates/texlab/src/features/definition.rs +2023/04/11 | 18522 | support/latexindent/LatexIndent/ModifyLineBreaks.pm +2023/04/11 | 1847 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__theorem_flat.snap +2023/04/11 | 1832 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__float_flat.snap +2023/04/11 | 182 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_article.snap +2023/04/11 | 182 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@parameter.txt.snap +2023/04/11 | 182 | support/texlab/crates/base-db/src/lib.rs +2023/04/11 | 181 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_join_strings.snap +2023/04/11 | 181 | support/texlab/CONTRIBUTING.md +2023/04/11 | 1814 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__label.snap +2023/04/11 | 1812 | support/texlab/crates/texlab/Cargo.toml +2023/04/11 | 1812 | support/texlab/crates/distro/src/file_name_db.rs +2023/04/11 | 18038054 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2023/04/11 | 17 | support/texlab/crates/parser/src/test_data/latex/include/latex_include_simple.txt +2023/04/11 | 17 | support/texlab/crates/parser/src/test_data/latex/include/latex_include_equality_sign.txt +2023/04/11 | 17 | support/texlab/crates/parser/src/test_data/latex/include/import_simple.txt +2023/04/11 | 17 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl.txt +2023/04/11 | 179 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__completion__entry_type_before_string.snap +2023/04/11 | 1791 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@issue_853.txt.snap +2023/04/11 | 1760 | support/texlab/crates/citeproc/src/output.rs +2023/04/11 | 174764 | macros/luatex/latex/piton/piton.dtx +2023/04/11 | 1745 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_nested.txt.snap +2023/04/11 | 1743 | support/texlab/crates/texlab/tests/lsp/text_document/rename.rs +2023/04/11 | 1740 | support/texlab/crates/texlab/src/features/rename.rs +2023/04/11 | 1737 | support/texlab/crates/texlab/tests/lsp/text_document/inlay_hint.rs +2023/04/11 | 1717 | support/texlab/crates/texlab/src/features/completion/argument.rs +2023/04/11 | 1705 | macros/latex/contrib/photobook/README.md +2023/04/11 | 16 | support/texlab/crates/parser/src/test_data/latex/theorem_definition/theorem_definition_only_name.txt +2023/04/11 | 16 | support/texlab/crates/parser/src/test_data/latex/include/class_include_empty.txt +2023/04/11 | 16 | support/texlab/crates/parser/src/test_data/latex/command_definition/command_definition_no_impl_error.txt +2023/04/11 | 16983 | support/texlab/crates/syntax/src/latex/cst.rs +2023/04/11 | 1696 | systems/texlive/tlnet/archive/collection-publishers.r66821.tar.xz +2023/04/11 | 16847 | macros/latex/contrib/photobook/scripts/make-spreads.sh +2023/04/11 | 167 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_command.snap +2023/04/11 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx +2023/04/11 | 1672 | support/texlab/crates/parser/src/snapshots/parser__build_log__tests__parse@006.txt.snap +2023/04/11 | 1668 | support/texlab/crates/texlab/src/features/build/progress.rs +2023/04/11 | 1668 | support/texlab/crates/syntax/src/latex/kind.rs +2023/04/11 | 1654 | support/texlab/crates/texlab/src/features/completion/citation.rs +2023/04/11 | 164576 | macros/latex/contrib/photobook/photobook.cls +2023/04/11 | 1626 | support/texlab/crates/citeproc/src/field/number.rs +2023/04/11 | 160 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_preamble.snap +2023/04/11 | 1605 | support/texlab/crates/texlab/src/util/line_index_ext.rs +2023/04/11 | 15 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_range_incomplete.txt +2023/04/11 | 15 | support/texlab/crates/parser/src/test_data/latex/color/color_set_definition_error4.txt +2023/04/11 | 15 | support/texlab/crates/parser/src/test_data/latex/citation/citation_prenote.txt +2023/04/11 | 15 | support/texlab/crates/parser/src/test_data/latex/citation/citation_multiple_keys.txt +2023/04/11 | 1590 | support/texlab/crates/texlab/src/features/workspace_command/dep_graph.rs +2023/04/11 | 1586 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__inlay_hint__label_definition.snap +2023/04/11 | 157 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_trailing_comma.snap +2023/04/11 | 157 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_insert_braces.snap +2023/04/11 | 1558 | support/latexindent/latexindent-module-installer.pl +2023/04/11 | 1556 | support/texlab/crates/texlab/src/features/completion/import.rs +2023/04/11 | 154 | systems/texlive/tlnet/update-tlmgr-r66822.exe.sha512 +2023/04/11 | 153 | systems/texlive/tlnet/update-tlmgr-r66822.sh.sha512 +2023/04/11 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 +2023/04/11 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 +2023/04/11 | 1527 | macros/latex/contrib/photobook/LICENSE +2023/04/11 | 14 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_multiple.txt +2023/04/11 | 14 | support/texlab/crates/parser/src/test_data/latex/generic_command_args.txt +2023/04/11 | 1488 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__section_flat.snap +2023/04/11 | 1485 | support/latexindent/LatexIndent/DoubleBackSlash.pm +2023/04/11 | 1464 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_declaration.txt.snap +2023/04/11 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 +2023/04/11 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 +2023/04/11 | 1447948 | systems/texlive/tlnet/archive/tex4ht.source.r66823.tar.xz +2023/04/11 | 143 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_string.snap +2023/04/11 | 142873 | macros/latex/contrib/photobook/photobook.pdf +2023/04/11 | 14221 | macros/latex/contrib/photobook/scripts/README.md +2023/04/11 | 1415 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__mvbook_nietzsche_1988.snap +2023/04/11 | 1404 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__document_symbol__equation_flat.snap +2023/04/11 | 1402 | support/texlab/crates/texlab/src/features/reference/string.rs +2023/04/11 | 13 | support/texlab/crates/parser/src/test_data/latex/include/package_include_empty.txt +2023/04/11 | 13 | support/texlab/crates/parser/src/test_data/latex/group/curly_group_simple.txt +2023/04/11 | 13 | support/texlab/crates/parser/src/test_data/latex/equation.txt +2023/04/11 | 13 | support/texlab/crates/parser/src/test_data/latex/color/color_reference_simple.txt +2023/04/11 | 1398 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__book_averroes_1998.snap +2023/04/11 | 13890 | support/latexindent/LatexIndent/Special.pm +2023/04/11 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r66823.tar.xz +2023/04/11 | 135 | support/texlab/crates/parser/src/test_data/latex/issue_853.txt +2023/04/11 | 1359 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@glossary__acronym_definition_options.txt.snap +2023/04/11 | 13426 | support/texlab/crates/texlab/tests/lsp/text_document/completion.rs +2023/04/11 | 13419 | support/latexindent/LatexIndent/HiddenChildren.pm +2023/04/11 | 13414 | support/texlab/crates/texlab/src/features/symbol/latex.rs +2023/04/11 | 1339 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_section.snap +2023/04/11 | 13353 | support/texlab/crates/parser/src/test_data/build_log/005.txt +2023/04/11 | 132 | support/texlab/crates/texlab/tests/lsp/text_document/snapshots/lsp__text_document__formatting__bibtex_internal_parens.snap +2023/04/11 | 1327 | support/texlab/crates/texlab/src/features/inlay_hint/label.rs +2023/04/11 | 1322 | support/texlab/crates/texlab/tests/lsp/text_document/document_highlight.rs +2023/04/11 | 1317 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_blom_2021.snap +2023/04/11 | 13072 | support/latexindent/LatexIndent/LogFile.pm +2023/04/11 | 1305 | support/texlab/crates/texlab/src/features/rename/command.rs +2023/04/11 | 1301 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_kastenholz_2006.snap +2023/04/11 | 1300 | support/texlab/crates/texlab/src/features/definition/command.rs +2023/04/11 | 12 | support/texlab/crates/texlab/tests/lsp/workspace.rs +2023/04/11 | 12 | support/texlab/crates/parser/src/test_data/latex/hello_world.txt +2023/04/11 | 12 | support/texlab/crates/parser/src/test_data/latex/group/curly_group_missing_end.txt +2023/04/11 | 12 | support/texlab/crates/parser/src/test_data/latex/citation/citation_redundant_comma.txt +2023/04/11 | 1283 | support/texlab/crates/texlab/src/features/inlay_hint.rs +2023/04/11 | 12646 | support/latexindent/LatexIndent/Braces.pm +2023/04/11 | 1260 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@structure__structure_enum_item.txt.snap +2023/04/11 | 125 | support/texlab/crates/parser/src/lib.rs +2023/04/11 | 1244704 | support/latexindent/documentation/latexindent.pdf +2023/04/11 | 1238 | support/texlab/crates/texlab/src/features/completion/color_model.rs +2023/04/11 | 1210 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__book_knuth_1984.snap +2023/04/11 | 1208 | support/texlab/crates/texlab/tests/lsp/text_document/folding_range.rs +2023/04/11 | 1205 | support/texlab/crates/texlab/benches/bench_main.rs +2023/04/11 | 11 | support/texlab/crates/parser/src/test_data/latex/label/label_reference_equation.txt +2023/04/11 | 11 | support/texlab/crates/parser/src/test_data/latex/label/label_definition_simple.txt +2023/04/11 | 11 | support/texlab/crates/parser/src/test_data/latex/include/import_incomplete.txt +2023/04/11 | 1191 | support/texlab/crates/texlab/src/features/definition/entry.rs +2023/04/11 | 1191 | support/texlab/crates/texlab/src/features/completion/glossary_ref.rs +2023/04/11 | 1191 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested_missing_braces.txt.snap +2023/04/11 | 1189 | support/texlab/crates/texlab/src/features/hover/string_ref.rs +2023/04/11 | 11868 | support/texlab/crates/citeproc/src/tests.rs +2023/04/11 | 1177 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@command_definition__command_definition_with_begin.txt.snap +2023/04/11 | 1171 | support/texlab/crates/texlab/src/features/hover.rs +2023/04/11 | 1170 | support/texlab/crates/base-db/src/semantics/auxiliary.rs +2023/04/11 | 1163 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__inproceedings_combi_2004.snap +2023/04/11 | 1161 | support/texlab/crates/texlab/src/features/definition/label.rs +2023/04/11 | 1157 | support/texlab/crates/texlab/tests/lsp/text_document/document_link.rs +2023/04/11 | 1157234 | support/TeX4ht/source/tex4ht-4ht.tex +2023/04/11 | 11420 | support/texlab/crates/parser/src/bibtex.rs +2023/04/11 | 114032 | systems/texlive/tlnet/archive/texlive-scripts.r66817.tar.xz +2023/04/11 | 1133984 | systems/texlive/tlnet/archive/tex4ht.r66823.tar.xz +2023/04/11 | 11300 | support/latexindent/LatexIndent/FileContents.pm +2023/04/11 | 1124 | support/texlab/crates/distro/src/language.rs +2023/04/11 | 1121 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_nested.txt.snap +2023/04/11 | 1116288 | systems/texlive/tlnet/archive/elteikthesis.doc.r66820.tar.xz +2023/04/11 | 11162542 | support/latexindent.zip +2023/04/11 | 11142 | support/latexindent/LatexIndent/Heading.pm +2023/04/11 | 1112 | support/texlab/crates/parser/src/test_data/bibtex/samples/nietzsche_1998.txt +2023/04/11 | 1103 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_definition.txt.snap +2023/04/11 | 11015 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__nietzsche_1998.txt.snap +2023/04/11 | 10 | support/texlab/crates/parser/src/test_data/latex/citation/citation_star.txt +2023/04/11 | 10 | support/texlab/crates/parser/src/test_data/latex/citation/citation_simple.txt +2023/04/11 | 1083 | support/texlab/crates/texlab/src/features/formatting.rs +2023/04/11 | 1074 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@environment__environment_asymptote.txt.snap +2023/04/11 | 1070 | support/texlab/crates/texlab/src/features/reference.rs +2023/04/11 | 1067 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__package_include_options.txt.snap +2023/04/11 | 1066 | support/texlab/crates/texlab/src/features/rename/label.rs +2023/04/11 | 1066 | support/texlab/crates/parser/src/snapshots/parser__latex__tests__parse@include__class_include_options.txt.snap +2023/04/11 | 10620 | support/latexindent/LatexIndent/Command.pm +2023/04/11 | 1052 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_aksin_2006.snap +2023/04/11 | 1050 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__article_jain_1999.snap +2023/04/11 | 1049 | support/texlab/crates/texlab/src/features/highlight/label.rs +2023/04/11 | 1040300 | systems/texlive/tlnet/archive/kpathsea.doc.r66822.tar.xz +2023/04/11 | 1038 | support/texlab/crates/citeproc/src/snapshots/citeproc__tests__inproceedings_erwin_2007.snap +2023/04/11 | 10380 | support/texlab/crates/parser/src/snapshots/parser__bibtex__tests__parse@samples__averroes_1998.txt.snap +2023/04/11 | 1037 | support/texlab/crates/texlab/src/features/definition/string.rs +2023/04/11 | 1021 | support/texlab/crates/texlab/tests/lsp/workspace/snapshots/lsp__workspace__symbol__filter_type_item.snap +2023/04/11 | 10191 | macros/latex/contrib/photobook/Makefile +2023/04/11 | 1015496 | systems/texlive/tlnet/archive/elteiktdk.doc.r66821.tar.xz +2023/04/11 | 1008 | support/texlab/crates/parser/src/test_data/bibtex/samples/averroes_1998.txt +2023/04/11 | 1007 | support/texlab/crates/texlab/src/features/reference/label.rs 2023/04/10 | 93792 | macros/latex/contrib/elteikthesis/elteikthesis_minted.pdf 2023/04/10 | 83904 | systems/texlive/tlnet/archive/luatexja.source.r66814.tar.xz 2023/04/10 | 73764 | systems/texlive/tlnet/archive/metapost.r66815.tar.xz +2023/04/10 | 7143 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/04/10 | 6290 | macros/latex/contrib/elteiktdk/samples_hu/impl.tex 2023/04/10 | 6285 | macros/latex/contrib/elteikthesis/samples_hu/impl.tex +2023/04/10 | 62080 | macros/luatex/latex/piton/piton-french.tex 2023/04/10 | 6199 | macros/latex/contrib/elteiktdk/samples_en/impl.tex 2023/04/10 | 6198 | macros/latex/contrib/elteikthesis/samples_en/impl.tex +2023/04/10 | 5972 | biblio/bibtex/bibtex-x/tests/substra.bbl 2023/04/10 | 5878 | macros/latex/contrib/elteiktdk/elteiktdk.cls 2023/04/10 | 587852 | systems/texlive/tlnet/archive/nostarch.doc.r66812.tar.xz -2023/04/10 | 5735742 | systems/texlive/tlnet/install-tl-unx.tar.gz 2023/04/10 | 528 | macros/latex/contrib/elteikthesis/elteikthesis_minted.tex -2023/04/10 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 2023/04/10 | 463564 | macros/latex/contrib/elteikthesis/elteikthesis_hu.pdf -2023/04/10 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc -2023/04/10 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc -2023/04/10 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc -2023/04/10 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc 2023/04/10 | 434374 | macros/latex/contrib/elteikthesis/elteikthesis_en.pdf -2023/04/10 | 423552 | systems/texlive/tlnet/archive/texlive-scripts.doc.r66811.tar.xz -2023/04/10 | 4059583 | biblio/ctan-bibdata.zip +2023/04/10 | 4135 | biblio/bibtex/bibtex-x/tests/testsubstr.bst 2023/04/10 | 3909 | macros/latex/contrib/elteikthesis/README_hu.md -2023/04/10 | 3662677 | biblio/ctan-bibdata/ctan.pdf 2023/04/10 | 3569 | macros/latex/contrib/elteikthesis/README.md 2023/04/10 | 3454 | macros/latex/contrib/elteiktdk/README_hu.md 2023/04/10 | 3336 | macros/latex/contrib/elteikthesis/elteikthesis_hu.tex @@ -31,32 +682,24 @@ 2023/04/10 | 3111 | macros/latex/contrib/elteiktdk/elteiktdk_hu.tex 2023/04/10 | 306031 | macros/latex/contrib/elteiktdk/elteiktdk_en.pdf 2023/04/10 | 3046 | macros/latex/contrib/elteiktdk/elteiktdk_en.tex -2023/04/10 | 2777199 | biblio/ctan-bibdata/ctan.bib -2023/04/10 | 26025645 | systems/texlive/tlnet/install-tl.zip 2023/04/10 | 2480 | macros/latex/contrib/elteikthesis/samples_hu/sim.tex 2023/04/10 | 2480 | macros/latex/contrib/elteiktdk/samples_hu/sim.tex 2023/04/10 | 2473 | macros/latex/contrib/elteikthesis/samples_en/sim.tex 2023/04/10 | 2473 | macros/latex/contrib/elteiktdk/samples_en/sim.tex 2023/04/10 | 2447124 | systems/texlive/tlnet/archive/metapost.doc.r66815.tar.xz -2023/04/10 | 2438476 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz 2023/04/10 | 22224 | systems/texlive/tlnet/archive/nostarch.source.r66812.tar.xz -2023/04/10 | 21036061 | systems/texlive/tlnet/install-tl-windows.exe +2023/04/10 | 20399 | biblio/bibtex/bibtex-x/ChangeLog 2023/04/10 | 193088 | systems/texlive/tlnet/archive/luatexja.r66814.tar.xz -2023/04/10 | 18035035 | systems/texlive/tlnet/tlpkg/texlive.tlpdb +2023/04/10 | 19075 | biblio/bibtex/bibtex-x/tests/substru.bbl 2023/04/10 | 172359 | macros/latex/contrib/elteikthesis/README_hu.pdf 2023/04/10 | 169068 | macros/latex/contrib/elteiktdk/README_hu.pdf 2023/04/10 | 168297 | macros/latex/contrib/elteikthesis/README.pdf -2023/04/10 | 1678 | biblio/ctan-bibdata/biblatex-ctan/ctan.bbx 2023/04/10 | 16734 | macros/latex/contrib/elteikthesis/elteikthesis.cls 2023/04/10 | 166760 | macros/latex/contrib/elteiktdk/README.pdf -2023/04/10 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512 2023/04/10 | 153756 | systems/texlive/tlnet/archive/photobook.doc.r66813.tar.xz -2023/04/10 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512 2023/04/10 | 1514579 | macros/latex/contrib/elteikthesis.zip 2023/04/10 | 1512 | macros/latex/contrib/elteikthesis/elteikthesis.bib 2023/04/10 | 1512 | macros/latex/contrib/elteiktdk/elteiktdk.bib -2023/04/10 | 145 | systems/texlive/tlnet/install-tl.zip.sha512 -2023/04/10 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 2023/04/10 | 1424 | macros/latex/contrib/elteikthesis/LICENSE 2023/04/10 | 1261484 | macros/latex/contrib/elteiktdk.zip 2023/04/10 | 1198 | macros/latex/contrib/elteikthesis/samples_en/intro.tex @@ -67,7 +710,6 @@ 2023/04/10 | 11690 | macros/latex/contrib/elteikthesis/samples_hu/user.tex 2023/04/10 | 11687 | macros/latex/contrib/elteikthesis/samples_en/user.tex 2023/04/10 | 11683 | macros/latex/contrib/elteiktdk/samples_hu/spec.tex -2023/04/10 | 114016 | systems/texlive/tlnet/archive/texlive-scripts.r66811.tar.xz 2023/04/10 | 1093458 | macros/latex/contrib/elteikthesis/images/elte_cimer_szines.eps 2023/04/10 | 1093458 | macros/latex/contrib/elteiktdk/images/elte_cimer_szines.eps 2023/04/10 | 1081 | macros/latex/contrib/elteiktdk/samples_hu/sum.tex @@ -82,7 +724,6 @@ 2023/04/09 | 945 | macros/luatex/generic/luatexja/doc/jfm-testf.lua 2023/04/09 | 91292 | macros/latex/contrib/nostarch/nostarch.dtx 2023/04/09 | 896 | macros/luatex/generic/luatexja/tool/otf-KozMinPr6N-Regular.txt -2023/04/09 | 890 | macros/latex/contrib/photobook/scripts/make-spreads.cfg.example 2023/04/09 | 885 | macros/luatex/generic/luatexja/src/patches/lltjp-stfloats.sty 2023/04/09 | 88423 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma 2023/04/09 | 8831 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma @@ -112,7 +753,6 @@ 2023/04/09 | 73334 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma 2023/04/09 | 72979 | systems/win32/miktex/tm/packages/latexindent.tar.lzma 2023/04/09 | 72919 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma -2023/04/09 | 7179 | systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl 2023/04/09 | 71228 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma 2023/04/09 | 702738 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma 2023/04/09 | 702568 | macros/latex/contrib/nostarch.zip @@ -168,7 +808,6 @@ 2023/04/09 | 4808 | macros/luatex/generic/luatexja/src/jfm-tmin.lua 2023/04/09 | 47872 | systems/texlive/tlnet/archive/thuthesis.source.r66804.tar.xz 2023/04/09 | 473095 | systems/win32/miktex/tm/packages/next/miktex-doc.tar.lzma -2023/04/09 | 462 | macros/latex/contrib/photobook/DEPENDS.txt 2023/04/09 | 460413 | macros/luatex/generic/luatexja/doc/ltjsclasses.pdf 2023/04/09 | 45763 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma 2023/04/09 | 4521 | macros/luatex/generic/luatexja/src/ltj-stack.lua @@ -185,7 +824,6 @@ 2023/04/09 | 4262 | macros/luatex/generic/luatexja/tool/kyoikukanji.txt 2023/04/09 | 425 | macros/luatex/generic/luatexja/src/patches/lltjp-everyshi.sty 2023/04/09 | 42507 | systems/win32/miktex/tm/packages/next/miktex-upmendex-bin-x64.tar.lzma -2023/04/09 | 4219 | macros/latex/contrib/photobook/scripts/cls2tex.sh 2023/04/09 | 4215 | macros/luatex/generic/luatexja/src/ltj-charrange.lua 2023/04/09 | 4212 | systems/texlive/tlnet/archive/ifptex.r66803.tar.xz 2023/04/09 | 42038 | systems/win32/miktex/tm/packages/nahuatl__source.tar.lzma @@ -278,7 +916,6 @@ 2023/04/09 | 19588 | systems/win32/miktex/tm/packages/mpchess__source.tar.lzma 2023/04/09 | 192 | macros/luatex/generic/luatexja/src/jfm-mono.lua 2023/04/09 | 19234 | macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty -2023/04/09 | 191900 | macros/latex/contrib/photobook.zip 2023/04/09 | 189 | macros/luatex/generic/luatexja/src/patches/lltjp-preview.sty 2023/04/09 | 1897404 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma 2023/04/09 | 1896552 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma @@ -295,13 +932,10 @@ 2023/04/09 | 175385 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma 2023/04/09 | 1740 | macros/luatex/generic/luatexja/tool/test_exist_nodelib.tex 2023/04/09 | 173400 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma -2023/04/09 | 1705 | macros/latex/contrib/photobook/README.md -2023/04/09 | 16847 | macros/latex/contrib/photobook/scripts/make-spreads.sh 2023/04/09 | 166557 | macros/luatex/generic/luatexja/doc/lltjp-geometry.pdf 2023/04/09 | 1655032 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma 2023/04/09 | 1654980 | systems/win32/miktex/tm/packages/thuthesis__doc.tar.lzma 2023/04/09 | 1654538 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma -2023/04/09 | 165042 | macros/latex/contrib/photobook/photobook.cls 2023/04/09 | 1646024 | systems/texlive/tlnet/archive/thuthesis.doc.r66804.tar.xz 2023/04/09 | 1637 | macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty 2023/04/09 | 1611 | macros/luatex/generic/luatexja/src/patches/lltjp-footmisc.sty @@ -313,16 +947,12 @@ 2023/04/09 | 154928 | macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua 2023/04/09 | 15429 | macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua 2023/04/09 | 1536 | macros/luatex/generic/luatexja/COPYING -2023/04/09 | 1527 | macros/latex/contrib/photobook/LICENSE 2023/04/09 | 151736 | systems/texlive/tlnet/archive/texlive-msg-translations.r66808.tar.xz 2023/04/09 | 1515013 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma 2023/04/09 | 14914 | macros/luatex/generic/luatexja/src/patches/lltjp-listings.sty 2023/04/09 | 14573 | systems/win32/miktex/tm/packages/tikz-trackschematic__source.tar.lzma 2023/04/09 | 1455707 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma 2023/04/09 | 14447 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma -2023/04/09 | 1443208 | systems/texlive/tlnet/archive/tex4ht.source.r66806.tar.xz -2023/04/09 | 143035 | macros/latex/contrib/photobook/photobook.pdf -2023/04/09 | 14221 | macros/latex/contrib/photobook/scripts/README.md 2023/04/09 | 140765 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma 2023/04/09 | 1397 | macros/luatex/generic/luatexja/tool/ivslist.tex 2023/04/09 | 1395565 | systems/win32/miktex/tm/packages/mpchess__doc.tar.lzma @@ -330,7 +960,6 @@ 2023/04/09 | 13815 | macros/latex/contrib/nostarch/nssample.tex 2023/04/09 | 13726 | macros/luatex/generic/luatexja/doc/lltjp-geometry.tex 2023/04/09 | 1367 | macros/latex/contrib/nostarch/Makefile -2023/04/09 | 136384 | systems/texlive/tlnet/archive/tex4ht.doc.r66806.tar.xz 2023/04/09 | 135905 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma 2023/04/09 | 134137 | systems/win32/miktex/tm/packages/pst-bar__doc.tar.lzma 2023/04/09 | 1338191 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma @@ -352,7 +981,6 @@ 2023/04/09 | 1150 | systems/win32/miktex/tm/packages/next/pr.ini 2023/04/09 | 11506 | macros/luatex/generic/luatexja/src/jfm-ujisv.lua 2023/04/09 | 1148687 | macros/luatex/generic/luatexja/doc/luatexja-ja.pdf -2023/04/09 | 1133944 | systems/texlive/tlnet/archive/tex4ht.r66806.tar.xz 2023/04/09 | 11335 | macros/luatex/generic/luatexja/tool/unicodeBlocks.tex 2023/04/09 | 1130 | macros/luatex/generic/luatexja/tool/function_uax50.lua 2023/04/09 | 112942 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma @@ -362,7 +990,6 @@ 2023/04/09 | 105428 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma 2023/04/09 | 103723 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma 2023/04/09 | 103608 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma -2023/04/09 | 10191 | macros/latex/contrib/photobook/Makefile 2023/04/09 | 101615 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma 2023/04/09 | 10148 | systems/win32/miktex/tm/packages/pst-bar__source.tar.lzma 2023/04/08 | 9552 | macros/generic/ifptex.zip @@ -461,7 +1088,6 @@ 2023/04/08 | 28167 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm 2023/04/08 | 2801 | fonts/gelasio/enc/gls_5xld5w.enc 2023/04/08 | 2747624 | systems/texlive/tlnet/archive/simpleicons.r66795.tar.xz -2023/04/08 | 221392 | support/TeX4ht/source/ChangeLog 2023/04/08 | 2107404 | install/fonts/gelasio.tds.zip 2023/04/08 | 2076924 | fonts/gelasio.zip 2023/04/08 | 20547 | fonts/gelasio/map/gelasio.map @@ -747,7 +1373,6 @@ 2023/04/08 | 1292 | fonts/gelasio/tfm/Gelasio-Bold-sup-ot1.tfm 2023/04/08 | 1288 | fonts/gelasio/tfm/Gelasio-Regular-sup-ot1.tfm 2023/04/08 | 1284 | fonts/gelasio/tfm/Gelasio-Medium-sup-ot1.tfm -2023/04/07 | 9839 | support/latexindent/LatexIndent/Lines.pm 2023/04/07 | 948980 | systems/win32/miktex/tm/packages/milsymb__doc.tar.lzma 2023/04/07 | 941771 | graphics/pgf/contrib/yquant.zip 2023/04/07 | 93900 | systems/win32/miktex/tm/packages/biblatex-gb7714-2015__source.tar.lzma @@ -758,12 +1383,8 @@ 2023/04/07 | 898326 | systems/win32/miktex/tm/packages/babel__doc.tar.lzma 2023/04/07 | 89510 | systems/win32/miktex/tm/packages/stex.tar.lzma 2023/04/07 | 890297 | systems/win32/miktex/tm/packages/l3backend__doc.tar.lzma -2023/04/07 | 8829 | support/latexindent/LatexIndent/IfElseFi.pm -2023/04/07 | 8703632 | support/latexindent/bin/windows/latexindent.exe 2023/04/07 | 863 | macros/latex/contrib/thuthesis/thuthesis-inline.cbx 2023/04/07 | 856773 | systems/win32/miktex/tm/packages/scikgtex__doc.tar.lzma -2023/04/07 | 8462 | support/latexindent/LatexIndent/FileExtension.pm -2023/04/07 | 838 | support/latexindent/LatexIndent/Version.pm 2023/04/07 | 80783 | systems/win32/miktex/tm/packages/l3experimental__source.tar.lzma 2023/04/07 | 804453 | systems/win32/miktex/tm/packages/widows-and-orphans__doc.tar.lzma 2023/04/07 | 79994 | systems/win32/miktex/tm/packages/graph35__source.tar.lzma @@ -771,44 +1392,27 @@ 2023/04/07 | 778 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bbx 2023/04/07 | 764 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsOneZero.tfm 2023/04/07 | 7514 | macros/latex/contrib/thuthesis/README.md -2023/04/07 | 7428 | support/latexindent/LatexIndent/BackUpFileProcedure.pm 2023/04/07 | 736242 | systems/win32/miktex/tm/packages/l3build__doc.tar.lzma -2023/04/07 | 7280 | support/latexindent/LatexIndent/MandatoryArgument.pm 2023/04/07 | 727272 | systems/win32/miktex/tm/packages/babel__source.tar.lzma -2023/04/07 | 7161 | support/latexindent/documentation/figure-schematic.png 2023/04/07 | 7121 | systems/win32/miktex/tm/packages/scikgtex.tar.lzma 2023/04/07 | 7112 | systems/win32/miktex/tm/packages/filecontents__source.tar.lzma -2023/04/07 | 6882 | support/latexindent/LatexIndent/TrailingComments.pm 2023/04/07 | 685908 | systems/win32/miktex/tm/packages/ragged2e__doc.tar.lzma -2023/04/07 | 6807 | support/latexindent/LatexIndent/Environment.pm -2023/04/07 | 6717 | support/latexindent/LatexIndent/Item.pm 2023/04/07 | 665 | fonts/simpleicons/README.md 2023/04/07 | 66285 | systems/win32/miktex/tm/packages/siunitx.tar.lzma -2023/04/07 | 6522 | support/latexindent/LatexIndent/OptionalArgument.pm -2023/04/07 | 65092 | support/latexindent/LatexIndent/AlignmentAtAmpersand.pm 2023/04/07 | 642594 | systems/win32/miktex/tm/packages/texinfo__source.tar.lzma -2023/04/07 | 6393199 | support/latexindent/bin/macos/latexindent 2023/04/07 | 63069 | systems/win32/miktex/tm/packages/acmart__source.tar.lzma -2023/04/07 | 6271 | support/latexindent/LatexIndent/Else.pm -2023/04/07 | 6163996 | support/latexindent/bin/linux/latexindent 2023/04/07 | 612478 | systems/win32/miktex/tm/packages/milsymb__source.tar.lzma 2023/04/07 | 602 | macros/latex/contrib/thuthesis/latexmkrc 2023/04/07 | 602832 | systems/win32/miktex/tm/packages/l3kernel__source.tar.lzma 2023/04/07 | 599854 | systems/win32/miktex/tm/packages/tikz-ext__doc.tar.lzma 2023/04/07 | 596844 | systems/win32/miktex/tm/packages/piton__doc.tar.lzma -2023/04/07 | 5908 | support/latexindent/documentation/contributors.bib -2023/04/07 | 5808 | support/latexindent/LatexIndent/UnNamedGroupingBracesBrackets.pm 2023/04/07 | 5744 | systems/win32/miktex/tm/packages/muling__source.tar.lzma 2023/04/07 | 548 | macros/latex/contrib/thuthesis/data/acknowledgements.tex 2023/04/07 | 5447 | systems/win32/miktex/tm/packages/songproj.tar.lzma 2023/04/07 | 5438 | macros/latex/contrib/thuthesis/data/denotation.tex -2023/04/07 | 54385 | support/latexindent/documentation/latexindent-yaml-schema.json -2023/04/07 | 5429 | support/latexindent/LatexIndent/KeyEqualsValuesBraces.pm -2023/04/07 | 5390 | support/latexindent/LatexIndent/Check.pm 2023/04/07 | 5383 | systems/win32/miktex/tm/packages/osda.tar.lzma 2023/04/07 | 53243 | systems/win32/miktex/tm/packages/markdown.tar.lzma 2023/04/07 | 52953 | systems/win32/miktex/tm/packages/emo__source.tar.lzma -2023/04/07 | 52668 | support/latexindent/LatexIndent/GetYamlSettings.pm 2023/04/07 | 516860 | systems/win32/miktex/tm/packages/regstats__doc.tar.lzma 2023/04/07 | 510870 | systems/win32/miktex/tm/packages/pgf-periodictable.tar.lzma 2023/04/07 | 5006608 | fonts/simpleicons.zip @@ -817,7 +1421,6 @@ 2023/04/07 | 4960 | macros/latex/contrib/thuthesis/data/chap02.tex 2023/04/07 | 4863345 | systems/win32/miktex/tm/packages/acmart__doc.tar.lzma 2023/04/07 | 48254 | systems/win32/miktex/tm/packages/piton__source.tar.lzma -2023/04/07 | 4816 | support/latexindent/LatexIndent/BlankLines.pm 2023/04/07 | 4796 | macros/latex/contrib/thuthesis/thusetup.tex 2023/04/07 | 46921 | systems/win32/miktex/tm/packages/bithesis__source.tar.lzma 2023/04/07 | 4656 | macros/latex/contrib/thuthesis/data/chap01.tex @@ -827,12 +1430,7 @@ 2023/04/07 | 46116 | macros/latex/contrib/thuthesis/thuthesis-numeric.bst 2023/04/07 | 46113 | macros/latex/contrib/thuthesis/thuthesis-bachelor.bst 2023/04/07 | 460041 | macros/latex/contrib/thuthesis/thuthesis-example.pdf -2023/04/07 | 44096 | support/latexindent/documentation/logo.png -2023/04/07 | 4402 | support/latexindent/documentation/latex-indent.bib -2023/04/07 | 4365 | support/latexindent/LatexIndent/RoundBrackets.pm -2023/04/07 | 4339 | support/latexindent/LatexIndent/NamedGroupingBracesBrackets.pm 2023/04/07 | 43278 | systems/win32/miktex/tm/packages/acmart.tar.lzma -2023/04/07 | 430280 | support/latexindent/documentation/latexindent.tex 2023/04/07 | 43012 | systems/win32/miktex/tm/packages/genmisc.tar.lzma 2023/04/07 | 4228 | systems/win32/miktex/tm/packages/regstats.tar.lzma 2023/04/07 | 420 | macros/latex/contrib/thuthesis/ref/appendix.bib @@ -843,18 +1441,14 @@ 2023/04/07 | 39110 | systems/win32/miktex/tm/packages/biblatex-apa__source.tar.lzma 2023/04/07 | 38984 | systems/win32/miktex/tm/packages/nicematrix.tar.lzma 2023/04/07 | 3836 | macros/latex/contrib/thuthesis/data/chap03.tex -2023/04/07 | 3747 | support/latexindent/LatexIndent/Replacement.pm 2023/04/07 | 366 | macros/latex/contrib/thuthesis/thuthesis-bachelor.cbx 2023/04/07 | 365 | macros/latex/contrib/thuthesis/thuthesis-numeric.cbx 2023/04/07 | 36438 | systems/win32/miktex/tm/packages/l3build.tar.lzma 2023/04/07 | 3511446 | systems/win32/miktex/tm/packages/pst-func__doc.tar.lzma 2023/04/07 | 3497002 | systems/win32/miktex/tm/packages/l3experimental__doc.tar.lzma -2023/04/07 | 3482 | support/latexindent/LatexIndent/HorizontalWhiteSpace.pm 2023/04/07 | 34580 | systems/win32/miktex/tm/packages/tikz-ext__source.tar.lzma 2023/04/07 | 34420 | systems/win32/miktex/tm/packages/l3backend__source.tar.lzma -2023/04/07 | 3413 | support/latexindent/latexindent.pl 2023/04/07 | 3366 | systems/win32/miktex/tm/packages/tangocolors__source.tar.lzma -2023/04/07 | 3339 | support/latexindent/LatexIndent/Tokens.pm 2023/04/07 | 32685 | systems/win32/miktex/tm/packages/pst-func__source.tar.lzma 2023/04/07 | 32623 | systems/win32/miktex/tm/packages/biblatex-apa.tar.lzma 2023/04/07 | 325417 | systems/win32/miktex/tm/packages/osda__doc.tar.lzma @@ -866,7 +1460,6 @@ 2023/04/07 | 31379 | systems/win32/miktex/tm/packages/proflycee.tar.lzma 2023/04/07 | 3124 | systems/texlive/tlnet/archive/realhats.source.r66785.tar.xz 2023/04/07 | 3114 | systems/win32/miktex/tm/packages/widows-and-orphans.tar.lzma -2023/04/07 | 31148 | support/latexindent/LatexIndent/Wrap.pm 2023/04/07 | 2979 | systems/win32/miktex/tm/packages/muling.tar.lzma 2023/04/07 | 2956 | macros/latex/contrib/thuthesis/data/chap04.tex 2023/04/07 | 29450 | systems/win32/miktex/tm/packages/tikz-ext.tar.lzma @@ -879,12 +1472,9 @@ 2023/04/07 | 27877 | systems/win32/miktex/tm/packages/luamplib__source.tar.lzma 2023/04/07 | 274 | fonts/simpleicons/tex/usimpleiconsOneZero.fd 2023/04/07 | 2749 | fonts/simpleicons/enc/simpleiconsFour.enc -2023/04/07 | 27328 | support/latexindent/LatexIndent/Verbatim.pm 2023/04/07 | 27158 | systems/win32/miktex/tm/packages/latexmk__source.tar.lzma 2023/04/07 | 271541 | systems/win32/miktex/tm/packages/erewhon-math.tar.lzma 2023/04/07 | 2713 | fonts/simpleicons/enc/simpleiconsEight.enc -2023/04/07 | 2701 | support/latexindent/LatexIndent/Switches.pm -2023/04/07 | 2690 | support/latexindent/LatexIndent/Preamble.pm 2023/04/07 | 2673 | fonts/simpleicons/enc/simpleiconsTwo.enc 2023/04/07 | 26611 | systems/win32/miktex/tm/packages/bithesis.tar.lzma 2023/04/07 | 2660 | fonts/simpleicons/enc/simpleiconsSix.enc @@ -901,20 +1491,16 @@ 2023/04/07 | 254 | fonts/simpleicons/tex/usimpleiconsSix.fd 2023/04/07 | 254 | fonts/simpleicons/tex/usimpleiconsOne.fd 2023/04/07 | 253150 | systems/win32/miktex/tm/packages/tikz-nfold__doc.tar.lzma -2023/04/07 | 25284 | support/latexindent/LatexIndent/Document.pm 2023/04/07 | 2523 | systems/win32/miktex/tm/packages/realhats.tar.lzma 2023/04/07 | 2510 | fonts/simpleicons/enc/simpleiconsNine.enc 2023/04/07 | 2482408 | systems/win32/miktex/tm/packages/wargame__doc.tar.lzma 2023/04/07 | 2470 | fonts/simpleicons/enc/simpleiconsFive.enc 2023/04/07 | 2457 | fonts/simpleicons/enc/simpleiconsThree.enc -2023/04/07 | 24410 | support/latexindent/LatexIndent/Arguments.pm 2023/04/07 | 2409 | fonts/simpleicons/enc/simpleiconsOneZero.enc 2023/04/07 | 23967 | systems/win32/miktex/tm/packages/l3experimental.tar.lzma 2023/04/07 | 2383 | systems/win32/miktex/tm/packages/filecontents.tar.lzma 2023/04/07 | 237679 | systems/win32/miktex/tm/packages/citation-style-language__doc.tar.lzma 2023/04/07 | 236566 | systems/win32/miktex/tm/packages/wargame.tar.lzma -2023/04/07 | 2320 | support/latexindent/LatexIndent/Logger.pm -2023/04/07 | 22877 | support/latexindent/defaultSettings.yaml 2023/04/07 | 2280 | macros/latex/contrib/thuthesis/data/abstract.tex 2023/04/07 | 226499 | systems/win32/miktex/tm/packages/euler-math.tar.lzma 2023/04/07 | 22396 | systems/win32/miktex/tm/packages/milsymb.tar.lzma @@ -927,15 +1513,12 @@ 2023/04/07 | 2118263 | systems/doc/luatex.zip 2023/04/07 | 210492 | macros/latex/contrib/thuthesis/thuthesis.dtx 2023/04/07 | 2088825 | systems/win32/miktex/tm/packages/kpfonts-otf__doc.tar.lzma -2023/04/07 | 20797 | support/latexindent/LatexIndent/Indent.pm -2023/04/07 | 20766 | support/latexindent/LatexIndent/Sentence.pm 2023/04/07 | 20747 | systems/win32/miktex/tm/packages/univie-ling__source.tar.lzma 2023/04/07 | 20646 | systems/win32/miktex/tm/packages/kpfonts-otf__source.tar.lzma 2023/04/07 | 20618 | systems/win32/miktex/tm/packages/pst-func.tar.lzma 2023/04/07 | 2024 | macros/latex/contrib/thuthesis/Makefile 2023/04/07 | 202069 | systems/win32/miktex/tm/packages/babel.tar.lzma 2023/04/07 | 201698 | systems/win32/miktex/tm/packages/wargame__source.tar.lzma -2023/04/07 | 2008 | support/latexindent/README 2023/04/07 | 2004495 | fonts/simpleicons/doc/simpleicons.pdf 2023/04/07 | 1984438 | systems/win32/miktex/tm/packages/erewhon-math__doc.tar.lzma 2023/04/07 | 197605 | systems/win32/miktex/tm/packages/pst-hsb__doc.tar.lzma @@ -950,7 +1533,6 @@ 2023/04/07 | 1876014 | systems/win32/miktex/tm/packages/realhats__doc.tar.lzma 2023/04/07 | 1861350 | systems/win32/miktex/tm/packages/concmath-otf__doc.tar.lzma 2023/04/07 | 1860078 | systems/win32/miktex/tm/packages/nicematrix__doc.tar.lzma -2023/04/07 | 18522 | support/latexindent/LatexIndent/ModifyLineBreaks.pm 2023/04/07 | 1844 | fonts/simpleicons/doc/simpleicons.tex 2023/04/07 | 18433 | systems/win32/miktex/tm/packages/tikzducks.tar.lzma 2023/04/07 | 1836 | macros/latex/contrib/thuthesis/data/appendix-translation.tex @@ -971,13 +1553,11 @@ 2023/04/07 | 16267 | systems/win32/miktex/tm/packages/regstats__source.tar.lzma 2023/04/07 | 161454 | systems/win32/miktex/tm/packages/nicematrix__source.tar.lzma 2023/04/07 | 157123 | systems/win32/miktex/tm/packages/luamplib__doc.tar.lzma -2023/04/07 | 1558 | support/latexindent/latexindent-module-installer.pl 2023/04/07 | 1557 | fonts/simpleicons/tex/simpleicons.sty 2023/04/07 | 1539089 | systems/win32/miktex/tm/packages/euler-math__doc.tar.lzma 2023/04/07 | 153153 | systems/win32/miktex/tm/packages/muling__doc.tar.lzma 2023/04/07 | 150923 | systems/win32/miktex/tm/packages/structmech__doc.tar.lzma 2023/04/07 | 1506228 | systems/win32/miktex/tm/packages/proflycee__doc.tar.lzma -2023/04/07 | 1485 | support/latexindent/LatexIndent/DoubleBackSlash.pm 2023/04/07 | 1478 | macros/latex/contrib/thuthesis/data/appendix.tex 2023/04/07 | 1455 | macros/latex/contrib/thuthesis/thuthesis-author-year.bbx 2023/04/07 | 1452 | macros/latex/contrib/thuthesis/data/resume.tex @@ -985,21 +1565,16 @@ 2023/04/07 | 141769 | systems/win32/miktex/tm/packages/concmath-otf.tar.lzma 2023/04/07 | 14110 | systems/win32/miktex/tm/packages/erewhon-math__source.tar.lzma 2023/04/07 | 13987 | systems/win32/miktex/tm/packages/widows-and-orphans__source.tar.lzma -2023/04/07 | 13890 | support/latexindent/LatexIndent/Special.pm 2023/04/07 | 1387 | macros/latex/contrib/thuthesis/thuthesis.ins 2023/04/07 | 13708 | systems/texlive/tlnet/archive/luatex.r66784.tar.xz -2023/04/07 | 13419 | support/latexindent/LatexIndent/HiddenChildren.pm 2023/04/07 | 132 | macros/latex/contrib/thuthesis/thuthesis-author-year.cbx 2023/04/07 | 1318490 | systems/win32/miktex/tm/packages/biblatex-gb7714-2015__doc.tar.lzma -2023/04/07 | 13103 | support/latexindent/LatexIndent/LogFile.pm 2023/04/07 | 130189 | fonts/simpleicons/doc/bindings.tex 2023/04/07 | 12936 | systems/win32/miktex/tm/packages/piton.tar.lzma 2023/04/07 | 12877 | systems/win32/miktex/tm/packages/xcharter-math__source.tar.lzma 2023/04/07 | 128658 | systems/win32/miktex/tm/packages/songproj__doc.tar.lzma 2023/04/07 | 1272492 | systems/win32/miktex/tm/packages/siunitx__doc.tar.lzma 2023/04/07 | 12704 | macros/latex/contrib/thuthesis/spine.pdf -2023/04/07 | 12646 | support/latexindent/LatexIndent/Braces.pm -2023/04/07 | 1243960 | support/latexindent/documentation/latexindent.pdf 2023/04/07 | 1236 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsSeven.tfm 2023/04/07 | 12358 | systems/win32/miktex/tm/packages/luamplib.tar.lzma 2023/04/07 | 1232 | fonts/simpleicons/tfm/SimpleIcons--simpleiconsTwo.tfm @@ -1019,17 +1594,13 @@ 2023/04/07 | 1165492 | macros/latex/contrib/thuthesis/thuthesis.pdf 2023/04/07 | 11616 | systems/win32/miktex/tm/packages/concmath-otf__source.tar.lzma 2023/04/07 | 11335 | systems/win32/miktex/tm/packages/tikz-nfold.tar.lzma -2023/04/07 | 11300 | support/latexindent/LatexIndent/FileContents.pm 2023/04/07 | 112339 | systems/win32/miktex/tm/packages/markdown__source.tar.lzma 2023/04/07 | 1119 | fonts/simpleicons/map/simpleicons.map -2023/04/07 | 11162198 | support/latexindent.zip -2023/04/07 | 11142 | support/latexindent/LatexIndent/Heading.pm 2023/04/07 | 1107501 | systems/win32/miktex/tm/packages/kpfonts-otf.tar.lzma 2023/04/07 | 110471 | systems/win32/miktex/tm/packages/latexmk.tar.lzma 2023/04/07 | 11016 | systems/win32/miktex/tm/packages/euler-math__source.tar.lzma 2023/04/07 | 109963 | systems/win32/miktex/tm/packages/emo.tar.lzma 2023/04/07 | 1090890 | systems/win32/miktex/tm/packages/bithesis__doc.tar.lzma -2023/04/07 | 10620 | support/latexindent/LatexIndent/Command.pm 2023/04/07 | 10124 | systems/win32/miktex/tm/packages/songproj__source.tar.lzma 2023/04/07 | 10001 | macros/latex/contrib/thuthesis/ref/refs.bib 2023/04/06 | 984 | systems/texlive/tlnet/archive/collection-luatex.r66777.tar.xz @@ -1103,13 +1674,11 @@ 2023/04/06 | 1870590 | macros/latex/contrib/proflycee.zip 2023/04/06 | 1790 | graphics/metapost/contrib/macros/mpchess/README.md 2023/04/06 | 1775307 | systems/doc/luatex/luatex.pdf -2023/04/06 | 1688 | systems/texlive/tlnet/archive/collection-publishers.r66780.tar.xz 2023/04/06 | 15233 | graphics/metapost/contrib/macros/mpchess/metapost/mpchess-skak.mp 2023/04/06 | 1309 | graphics/metapost/contrib/macros/mpchess/doc/fond.pdf 2023/04/06 | 13068 | systems/texlive/tlnet/archive/graph35.source.r66772.tar.xz 2023/04/06 | 119333 | macros/latex/contrib/proflycee/tex/ProfLycee.sty 2023/04/06 | 11844 | systems/texlive/tlnet/archive/texfindpkg.doc.r66777.tar.xz -2023/04/06 | 1157029 | support/TeX4ht/source/tex4ht-4ht.tex 2023/04/06 | 10867 | macros/latex/contrib/proflycee/tex/proflycee-tools-listings.tex 2023/04/06 | 107622 | systems/texlive/tlnet/tlpkg/translations/ru.po 2023/04/06 | 103515 | systems/texlive/tlnet/tlpkg/translations/sr.po @@ -1177,104 +1746,3 @@ 2023/04/05 | 1091688 | systems/texlive/tlnet/archive/bithesis.doc.r66765.tar.xz 2023/04/05 | 10352 | macros/latex/contrib/realhats/realhats.dtx 2023/04/05 | 101701 | graphics/pgf/contrib/tikzducks/tikzducks-generic.tex -2023/04/04 | 996 | macros/latex/contrib/siunitx/README.md -2023/04/04 | 9808 | macros/luatex/generic/luamplib/NEWS -2023/04/04 | 96197 | macros/luatex/generic/luamplib/luamplib.dtx -2023/04/04 | 9198 | macros/latex/contrib/siunitx/siunitx-symbol.dtx -2023/04/04 | 8866 | macros/latex/contrib/siunitx/siunitx-command.dtx -2023/04/04 | 802084 | systems/texlive/tlnet/archive/widows-and-orphans.doc.r66753.tar.xz -2023/04/04 | 792 | graphics/graph35/CHANGELOG.md -2023/04/04 | 738356 | macros/luatex/latex/piton.zip -2023/04/04 | 72210 | macros/latex/contrib/siunitx/CHANGELOG.md -2023/04/04 | 703435 | macros/luatex/latex/piton/piton.pdf -2023/04/04 | 701509 | macros/latex/contrib/ragged2e/ragged2e.pdf -2023/04/04 | 700131 | macros/latex/contrib/ragged2e.zip -2023/04/04 | 691514 | macros/latex/contrib/siunitx/siunitx.pdf -2023/04/04 | 67525 | graphics/graph35/graph35.dtx -2023/04/04 | 642304 | macros/latex/contrib/siunitx/siunitx-code.pdf -2023/04/04 | 6321 | macros/latex/contrib/regstats/regstats-example.log -2023/04/04 | 61769 | macros/latex/contrib/regstats/regstats.dtx -2023/04/04 | 59937 | macros/luatex/latex/piton/piton-french.tex -2023/04/04 | 59861 | macros/latex/contrib/regstats/regstats-example.pdf -2023/04/04 | 5951 | macros/luatex/generic/lua-tinyyaml.zip -2023/04/04 | 5611 | macros/luatex/generic/luamplib/test-luamplib-latex.tex -2023/04/04 | 5544 | macros/latex/contrib/siunitx/siunitx-locale.dtx -2023/04/04 | 547441 | install/macros/latex/contrib/regstats.tds.zip -2023/04/04 | 54007 | macros/latex/contrib/siunitx/siunitx-table.dtx -2023/04/04 | 5324 | macros/latex/contrib/regstats/README -2023/04/04 | 52928 | systems/texlive/tlnet/archive/markdown.r66751.tar.xz -2023/04/04 | 512258 | support/latexmk.zip -2023/04/04 | 50939 | macros/latex/contrib/ragged2e/ragged2e.dtx -2023/04/04 | 49736 | systems/texlive/tlnet/archive/biblatex-gb7714-2015.r66752.tar.xz -2023/04/04 | 483924 | support/latexmk/latexmk.pl -2023/04/04 | 4748 | macros/latex/contrib/siunitx/siunitx-abbreviations.cfg -2023/04/04 | 474650 | macros/latex/contrib/regstats/regstats.pdf -2023/04/04 | 41032 | support/latexmk/CHANGES -2023/04/04 | 3872 | macros/luatex/generic/luamplib/test-luamplib-plain.tex -2023/04/04 | 38160 | macros/latex/contrib/siunitx/siunitx-complex.dtx -2023/04/04 | 3720 | macros/unicodetex/latex/bithesis/bithesis.ins -2023/04/04 | 3687 | macros/latex/contrib/siunitx/siunitx.ins -2023/04/04 | 35994 | macros/latex/contrib/siunitx/siunitx-print.dtx -2023/04/04 | 3543368 | systems/texlive/tlnet/archive/pst-func.doc.r66750.tar.xz -2023/04/04 | 33867 | macros/latex/contrib/siunitx/siunitx-compound.dtx -2023/04/04 | 31776 | macros/latex/contrib/siunitx/siunitx-emulation.dtx -2023/04/04 | 31738 | macros/latex/contrib/siunitx/siunitx-version-1.cfg -2023/04/04 | 3131864 | graphics/graph35.zip -2023/04/04 | 309157 | macros/luatex/latex/piton/piton-french.pdf -2023/04/04 | 2951 | macros/latex/contrib/siunitx/siunitx-binary.dtx -2023/04/04 | 2908 | systems/texlive/tlnet/archive/widows-and-orphans.r66753.tar.xz -2023/04/04 | 2819 | macros/latex/contrib/osda/README.md -2023/04/04 | 2799724 | systems/texlive/tlnet/archive/citation-style-language.r66749.tar.xz -2023/04/04 | 27773 | macros/latex/contrib/osda/osda.dtx -2023/04/04 | 2752 | macros/luatex/generic/luamplib/Makefile -2023/04/04 | 273398 | macros/latex/contrib/siunitx/siunitx-v2.sty -2023/04/04 | 2649 | macros/unicodetex/latex/bithesis/contributing-zh.md -2023/04/04 | 2636 | macros/latex/contrib/siunitx/siunitx-code.tex -2023/04/04 | 2634 | macros/latex/contrib/osda/osda.ins -2023/04/04 | 2505 | support/latexmk/README -2023/04/04 | 248144 | systems/texlive/tlnet/archive/citation-style-language.doc.r66749.tar.xz -2023/04/04 | 2348 | macros/unicodetex/latex/bithesis/contributing.md -2023/04/04 | 232876 | support/latexmk/latexmk.txt -2023/04/04 | 231693 | graphics/graph35/sources.zip -2023/04/04 | 2294 | graphics/graph35/graph35.ins -2023/04/04 | 218501 | graphics/graph35/graph35-pixelart.sty -2023/04/04 | 21753 | graphics/graph35/graph35-en.tex -2023/04/04 | 21746 | macros/latex/contrib/siunitx/siunitx.dtx -2023/04/04 | 21726 | macros/luatex/generic/lua-tinyyaml/tinyyaml.lua -2023/04/04 | 215307 | macros/unicodetex/latex/bithesis/bithesis.dtx -2023/04/04 | 212107 | support/latexmk/latexmk.pdf -2023/04/04 | 20396 | systems/texlive/tlnet/archive/pst-func.r66750.tar.xz -2023/04/04 | 202132 | install/macros/luatex/generic/luamplib.tds.zip -2023/04/04 | 1996 | macros/luatex/generic/luamplib/README -2023/04/04 | 1946 | macros/unicodetex/latex/bithesis/README.md -2023/04/04 | 192843 | macros/latex/contrib/osda/osda.pdf -2023/04/04 | 1914 | graphics/graph35/README.md -2023/04/04 | 19106 | graphics/graph35/LICENSE.txt -2023/04/04 | 188084 | support/latexmk/latexmk.1 -2023/04/04 | 187497 | macros/luatex/generic/luamplib.zip -2023/04/04 | 18711 | macros/latex/contrib/ragged2e/LICENSE.md -2023/04/04 | 17951 | support/latexmk/INSTALL -2023/04/04 | 17885 | macros/latex/contrib/siunitx/siunitx-angle.dtx -2023/04/04 | 176 | macros/luatex/generic/lua-tinyyaml/README.md -2023/04/04 | 1729 | macros/latex/contrib/siunitx/siunitx-binary.cfg -2023/04/04 | 169134 | macros/luatex/latex/piton/piton.dtx -2023/04/04 | 1658 | macros/latex/contrib/ragged2e/README.md -2023/04/04 | 162079 | macros/latex/contrib/osda/example.png -2023/04/04 | 160377 | macros/latex/contrib/siunitx/siunitx.tex -2023/04/04 | 1566342 | install/macros/latex/contrib/siunitx.tds.zip -2023/04/04 | 153447 | macros/luatex/generic/luamplib/luamplib.pdf -2023/04/04 | 153028 | macros/latex/contrib/siunitx/siunitx-number.dtx -2023/04/04 | 1520898 | macros/latex/contrib/siunitx.zip -2023/04/04 | 1520378 | graphics/graph35/graph35-fr.pdf -2023/04/04 | 14969 | macros/latex/contrib/siunitx/siunitx-quantity.dtx -2023/04/04 | 1467891 | graphics/graph35/graph35-en.pdf -2023/04/04 | 1405756 | systems/texlive/tlnet/archive/biblatex-gb7714-2015.doc.r66752.tar.xz -2023/04/04 | 1297 | macros/latex/contrib/ragged2e/ragged2e.ins -2023/04/04 | 12568 | systems/texlive/tlnet/archive/widows-and-orphans.source.r66753.tar.xz -2023/04/04 | 12154 | graphics/graph35/graph35-keys.sty -2023/04/04 | 1166144 | systems/texlive/tlnet/archive/markdown.doc.r66751.tar.xz -2023/04/04 | 1143630 | macros/unicodetex/latex/bithesis.zip -2023/04/04 | 111884 | systems/texlive/tlnet/archive/markdown.source.r66751.tar.xz -2023/04/04 | 1109118 | macros/unicodetex/latex/bithesis/bithesis.pdf -2023/04/04 | 10931 | macros/latex/contrib/siunitx/siunitx-abbreviation.dtx -2023/04/04 | 103304 | macros/latex/contrib/siunitx/siunitx-unit.dtx diff --git a/biblio/ctan-bibdata/ctan.bib b/biblio/ctan-bibdata/ctan.bib index cdd10836e1..8e7cd4a6ec 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 11-04-2023, 02:00:11 +%% created at 12-04-2023, 02:00:11 %% %% This file is provided under the terms of the LPPL v1.3 or @@ -21303,7 +21303,7 @@ title = {The \texttt{elteiktdk} package}, subtitle = {TDK-thesis template for Hungarian TDK conferences, Section of Computer Science}, author = {Máté Cserép}, - date = {2023-04-10}, + date = {2023-04-11}, version = {2.0}, license = {mit}, mirror = {https://mirror.ctan.org/macros/latex/contrib/elteiktdk}, @@ -37803,8 +37803,8 @@ title = {The \texttt{latexindent} package}, subtitle = {Indent a \LaTeX{} document, highlighting the programming structure}, author = {Chris Hughes}, - date = {2023-04-07}, - version = {3.20.5}, + date = {2023-04-11}, + version = {3.20.6}, license = {gpl3}, mirror = {https://mirror.ctan.org/support/latexindent}, url = {https://ctan.org/pkg/latexindent}, @@ -52339,8 +52339,8 @@ title = {The \texttt{photobook} package}, subtitle = {A document class for typesetting photo books}, author = {Alex A. Naanou}, - date = {2023-04-09}, - version = {0.1.17}, + date = {2023-04-11}, + version = {0.1.18}, license = {bsd3}, mirror = {https://mirror.ctan.org/macros/latex/contrib/photobook}, url = {https://ctan.org/pkg/photobook}, @@ -52702,8 +52702,8 @@ title = {The \texttt{piton} package}, subtitle = {Typeset Python listings with LPEG}, author = {François Pantigny}, - date = {2023-04-04}, - version = {1.5}, + date = {2023-04-11}, + version = {1.5a}, license = {lppl1.3}, mirror = {https://mirror.ctan.org/macros/luatex/latex/piton}, url = {https://ctan.org/pkg/piton}, diff --git a/biblio/ctan-bibdata/ctan.pdf b/biblio/ctan-bibdata/ctan.pdf index 707b9cd234..674ff089e8 100644 Binary files a/biblio/ctan-bibdata/ctan.pdf and b/biblio/ctan-bibdata/ctan.pdf differ diff --git a/macros/latex/contrib/photobook/photobook.cls b/macros/latex/contrib/photobook/photobook.cls index 74f8b8f5e1..8dfe501db3 100644 --- a/macros/latex/contrib/photobook/photobook.cls +++ b/macros/latex/contrib/photobook/photobook.cls @@ -1,10 +1,13 @@ %---------------------------------------------------------------------- % +% photobook.cls +% ------------- % % This does the following: % - sets up the document/pdf for viewing as a book -% - adds support for page bleeds -% - adds basic templates for image pages +% - sets up page bleeds +% - defines cells as basic template building blocks +% - adds basic templates for image pages and spreads % % % This file contains both the code and the reference, but in a slightly @@ -22,7 +25,7 @@ % Docs are built by the Makefile, so reference it for more info. % % To make the reference use: - +% % $ make pdf % % @@ -33,32 +36,18 @@ % to edit it directly, edit the source instead. % % +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % -% XXX ASAP \bindingoffset should also affect fill/bleed images... (DONE) -% ...shift the macros that optionally account for \bindingoffset to -% account for \gutteroffset (DONE) -% ...everything should respect \bindingoffset (DONE) -% XXX ASAP add \gutteroffset and \gutterimageoffset to offset content -% from the gutter -% \gutterimageoffset is an additional offset added to bleed images... -% ...currently \bindingoffset is used for both... -% Q: should the gutter offsets be counted from the \bindingoffset??? -% -% +-------------------------------=-- -% | . . . = -% | . . . = -% | . . <-> \bindingoffset -% | . . . = -% | . <--> = \gutteroffset -% | . . . = -% | <--> . = \gutterimageoffset -% | . . . = -% +-------------------------------=-- -% -% XXX DOC... -% -% +% XXX ASAP should cover/jacket/endpaper/spread templates/cells account +% for \bindingoffset (likely no) and/or \gutteroffset ??? +% ...especially relevant to endpaper/spread... +% XXX ASAP revise how bleeds are handled by cells... % +% XXX captions behave in an odd way... +% the internal (macro) minipage for some reason does not affect text +% justification while adding a minipage in the macro argument works +% as expected -- some odd input mode??? +% XXX Q: should \blockwidth include \bindingoffset (current) or not??? % XXX revise \clearcaption / \captionclearpage... % XXX unify API -- see CellContent env... % XXX make this loadable both as a class and as a package... @@ -68,7 +57,8 @@ % - general macros -- \usecell{..} % - templates -- \ImagePage{..} % XXX see where we need to \ignorespaces... -% XXX might be a good idea to add a spine calculator... +% XXX might be a good idea to add a spine calculator (auto)... +% ...i.e. input paper and cover board thickness and auto-calc spine... % XXX might be fun to add a 'box' layout to build book boxes... % XXX add a grid cell / image cell (???) % make it trivial to define AxB cell layouts and fill them (fully/partially) @@ -80,17 +70,6 @@ % - pre-print % - customizing % - extending -% XXX add basic page templates: -% - acknowledgements -% Fields -% - \Title -% - \Authors -% - \Thanks -% - \ISBN -% - \Edition / \Issue -% - \CopyrightNotice -% - ... -% - info % XXX DOC add notes about external libs section: % - textpos % cell/cell* depend on absolute mode being set globally @@ -100,8 +79,8 @@ %%% NOTE: \def\@[A-Z]+ macros will be visible to both the %%% code and the generated docs... -\edef\photobook@FILEVERSION{v0.1.17} -\edef\photobook@FILEDATE{2023-04-09} +\edef\photobook@FILEVERSION{v0.1.18} +\edef\photobook@FILEDATE{2023-04-11} %% \documentclass{ltxdoc} @@ -249,7 +228,6 @@ %% \DescribeMacro{blockheight=} %% \DescribeMacro{bindingoffset=} %% \DescribeMacro{gutteroffset=} -%%% \DescribeMacro{gutterimageoffset=} %% \DescribeMacro{bleed=} % %% This is similar to what |geometry| does, but adds bleed support. @@ -271,7 +249,7 @@ %% . | blockheight . . = . | %% . | . | . . <--> bindingoffset | %% . | | . . = . | -%% . | . . . . . . | . <--> gutteroffset v +%% . | . . . . . . | . <--> gutteroffset v %% . | v . . = . %% . +-----------------------------------------+----- ^ . . --- %% . . . . | bleed @@ -295,7 +273,6 @@ \DeclareStringOption{blockheight} \DeclareStringOption[0pt]{bindingoffset}[0mm] \DeclareStringOption[0pt]{gutteroffset}[0mm] -\DeclareStringOption[0pt]{gutterimageoffset}[0mm] \DeclareStringOption[5mm]{bleed}[5mm] %% \DescribeMacro{flatfold=} @@ -332,6 +309,7 @@ %% \DescribeMacro{endpaper} %% \DescribeMacro{cover} %% \DescribeMacro{jacket} +%%% \DescribeMacro{web} % %% Sat page layout mode. % @@ -821,7 +799,6 @@ \setlength\bindingoffset{\photobook@bindingoffset} %% \DescribeMacro{\gutteroffset=} -%%% \DescribeMacro{\gutterimageoffset=} % %% Gutter offsets %% @@ -830,8 +807,6 @@ %% \newlength\gutteroffset \setlength\gutteroffset{\photobook@gutteroffset} -\newlength\gutterimageoffset -\setlength\gutterimageoffset{\photobook@gutterimageoffset} %% \DescribeMacro{\defaultfoldout=} % @@ -992,7 +967,7 @@ \setlength\clearance{0pt} -%% \DescribeMacro{\clearfoldoutbinding=} +%% \DescribeMacro{\clearfoldoutgutter=} %% \DescribeMacro{\clearfoldoutfold=} %% \DescribeMacro{\clearfoldoutedge=} % @@ -1000,8 +975,8 @@ %% %% For more info see \nameref{subsec:Foldout page cells} section. %% -\newlength\clearfoldoutbinding -\setlength\clearfoldoutbinding{8mm} +\newlength\clearfoldoutgutter +\setlength\clearfoldoutgutter{8mm} \newlength\clearfoldoutfold \setlength\clearfoldoutfold{5mm} \newlength\clearfoldoutedge @@ -3132,7 +3107,7 @@ %% automatically calculated and missing folds are the same as the previous %% fold or the default if no folds are specified. %% -%% If not || is given, then the value of |\defaultfoldout| is +%% If no || is given, then the value of |\defaultfoldout| is %% used (default: |2|). %% %% \begin{minipage}{\textwidth} @@ -3224,7 +3199,7 @@ %% \end{minipage} %% % -%% \DescribeMacro{\clearfoldoutbinding=} +%% \DescribeMacro{\clearfoldoutgutter=} %% \DescribeMacro{\clearfoldoutedge=} %% \DescribeMacro{\clearfoldoutfold=} % @@ -3235,7 +3210,7 @@ %% %% \clearfoldoutedge <-> %% \clearfoldoutfold <-> -%% <--> \clearfoldoutbinding +%% <--> \clearfoldoutgutter %% (3) /\ (2) %% +---------------------------------+ / \ %% +------------------------------- | / @@ -3256,7 +3231,7 @@ %% \begin{verbatim} %% %% \clearfoldoutedge <-> / -%% <--> \clearfoldoutbinding (3) / +%% <--> \clearfoldoutgutter (3) / %% \ %% +---------------------------------- \ (2) %% +---------------------------------+ / @@ -3420,7 +3395,7 @@ \ifnum \thephotobook@foldoutpanel = 2% \setlength\photobook@foldout@maxpanelwidth{% \photobook@foldout@maxpanelwidth - - \clearfoldoutbinding}\fi% + - \clearfoldoutgutter}\fi% % calculate widths... \ifdim #1 = 0pt% % first two panels do not need fold compensation... diff --git a/macros/latex/contrib/photobook/photobook.pdf b/macros/latex/contrib/photobook/photobook.pdf index 82e080074f..a6f4a5d2d1 100644 Binary files a/macros/latex/contrib/photobook/photobook.pdf and b/macros/latex/contrib/photobook/photobook.pdf differ diff --git a/macros/luatex/latex/piton/piton-french.pdf b/macros/luatex/latex/piton/piton-french.pdf index 89aee2d64a..9d1a1b1c27 100644 --- a/macros/luatex/latex/piton/piton-french.pdf +++ b/macros/luatex/latex/piton/piton-french.pdf @@ -228,20 +228,21 @@ endobj << /S /GoTo /D [ 133 0 R /Fit ] >> endobj 136 0 obj -<< /Filter /FlateDecode /Length 3574 >> +<< /Filter /FlateDecode /Length 3578 >> stream xÚ½[;$¹ Î÷WTx cµ©'Ð`zÛ}€3Û›/²a'¾ÀNìŸoêA½ê1Õs=4fª[")’úHª(¹üs‘ËŸdù{ýþéë]¹E9Êh½|ÿÇ'E¿ÈE- ” §ýè—ï¿,?]¤ÔNª»•AJ§¥´!ÿ¯oôüK£âóË”gHõ~õ/Î_ÊL|ùùû#s¿ÉµÝÌÜèÌ 2-L -™°¸ÁZLOÆkÆ,ŒÐÖ0™ë5M«+µN`P Q–G!­ÒxZØÈ_À]òJˆmú?ŠÅÁkûÎÙ"’†M‘­ ‰‹uV «+C—W—ÉϤ#YIÆ ¿ÐÆÄ¿pÏšHŸéXy¬•¸^'ýb ’›ת¾•µÈH, ¢«&,‰äBþk_ +#/‚µ‘\ÇɈ‹•N(U­H2߯Ù],­C_ã3«-lRä$ŽLcÈDÖÁ;œ±ˆ©6©[+œž‰ï:ÛŽˆ>-a‹JÔa2~ùá’¢|¤T4—lÇ(¹­ß¤1'hÏ¿&wHݒљԵÈ{ÝäÈCmájoãÄ2! T…Áì‚IÁ÷n‡#û‹Oþò’æF&p¿êK1ñ©Ù^B_“!„‰w;òŽ4´v®’´¿[ ù™SÈ:t"=W,h®YŠ(wa'á§YÍÉêÐöºO4ãè(}A+¦§ø=`Ÿþú&Ñ”Rf‹ÄD{c:üMÔ2Ò\|ÍÈSy†“£–‚@nRÕƒNŽ„w+*Q”¸££a±(EËâÖÅø¶˜ì Í tÅÎ7+k&ÞÔ`’ÔU‹Ò‚âôrG"7A$éëÒ‰q•Å½£2*÷@Õ9ÓäœaÍHK`õ7)…óúýX¥·h+a‰íD}?2nJ¨ …<¿’qo#¤­k sþöÄÎÏ›8Í)A#ÏÃÉáËÜ[ƒ©æñm;°FÌBiCoŸ-Œ´²{y4€¤GcÝZäu~ÆÕ(°Â;ýäàÒu\fªéW¥e]„ïUWáÕ÷ðšîÂkš˜È‡#¢E‹#8f/ÔÞ a{}}@Pjˆüõ*’§_3’Ç'ØAq]PÙ˜y^Eð–7mãsɸÒ,x$Óc…$×ó—#çÍs¸SûöH¤zÄÛ1Û”¹©ìÏ‘äˆ]èK48ÎËÖ׊:EEo˜$û6¡Ü.þhÊ0½køã;õ Ó2£í0EYøDјæ›Ô¥­d‰¹” d¿qê˜sÚ+Û+¹h‘À·<*sHüŠkDm¿¦ñ×.\où~~Eiü˜\5gÛJ_òü>bA±àVµÒ§]³=Y¦™u}dyí Í6lÿ€½B¡ÐÎTàvÆ묦4c¨Ø’Ý»¼Î‚_QLÀ|(‰BOØ®ç™n—áÜze\êdU5aƒÆ¼RÌ?„¦4’½®̦_ú"Âj³=,êêY%³¸_û(Ü…²D³F}LOOxx]e'ï1öê*ìy½ß÷[q+§vÈS rY>Äc3OÖ2’Êï#kÙRÖ¸ôÈÄ$GyÃ)¤Pv%e -^Xw=?=¤SU-ÄVJßüJEª󷲉œ2±ǪïÜš¿õHÓ¨¶J³Jïç1™OE^c/-ÛKGS€Å½4‰ýPéÍU¢ë²È°¦ÔKHòløVBJß#ß›*âF–â~ú…+žÃMþ•KÉü¯µ™äRNÈPå²÷—†ë‘¾®4+T»ºš©ÉЊuÜMlð0ÑDÜ:9èÅû•‡õåþ$"ÎÞG6­Ï‘½Ï|J¡}´ÃÑ¢0ÒÌú›7Ö@ô½;ÜÆZ¢Ð¸¢¶:´ÙVDç–G%›6^H·ÅãŠM§£´‘ìj4DhúØå?ñ`—þücT#îk è[EœÙ -å|R¼j©|¢,e¦d]•ËÓ¨"Uü—djs0°š«¯]x¾R´ÔÀ -­õ×Ç´¡P ëVôt·á¸Â)îù¦^ÈM)EXKȆÿuv³!{±ó—˜†î”lÁiÕL„•GV’ÅdåßÁdÅÜã\FyÎàËÁÙ¦éXÕ#…XKDŒƒ[›ŽÉåç¿I²íŸzI)2›`g>¨›£®#-þw˜ë¨f^Í5‡Ãöª¬àW†‰9"lE)Œç/½[´O³ƒ€,c{È®a·âHÛÜÚ'F'®ÿj¦ÉSŸ¡»ŒÙc |L1kt{ `„õ1Úä*dÞ3§*˜ReœòÐZe|€‡‚Ž}öxVŸ”—S -3.Ý:¿Rãh¯à{%^š°4ò].J›úc|”ðG9«SÂ4æc|ÔS…àíû|4 Å2{ÖG ·Hæ¢e—¡õƒ|lF3ñzÂ)цôp¢÷\Q¹¨¤zÏ¥-Úv»]‹Çé±3Ù™÷£éÞ‘kÙ™Jß)”%»eÜ%wûJh¦ìÛ\ºÙÃÈzUC–—ëõVTýxŸ\îbKÔâûÐÖóvÜËB(¤¾­±|·‹ß8Ö+f{µ!¢v¥Á|¡„«OÉ^4P+áú˜@äûÆZ&É J©}º]îš\”ŠPÕ^®Õl5»K»¢1 -$;MA/ŠëlÍûo¼¾ÇlJOiwûdÅMטò7õðû“‚©Ÿ·\»žÂw(¬„Y3­Mµ8õqKB "_ÏT†ûDýåšëØ$êt¯íþEw7§\÷a%qµ†Yi¤Ê<º›zNå»çotPQÉcµY­é1h)~GЪ‚j'hGÍlãÝ5nµÓýëÙ5Þ¶î°%:>·ûÝè·«­¼ùðóµèÌÌsûÆÄmªÑ¾qn[Q=.U|Ýyðy”¾²?|ÿôïY}ä^Jûåo¿|úégúþïôùcL‚_þ›FþBÈCæRqÞ¿–¿|úS¾fLÉ‚¡|ΙáBÕ,&bP¼k†½òý„ÅÑ$/v L(% J‘§c=ÈbXC£kƒq¼ƒ|éz]º˜.ý­šŠrtü5‰Dm(¼3‡WÏÿµKQzºÙ¿¢l—z°4¥ »¾—¸"ixcá`¼°¤Àiå»û`[}ñ,Ù©•äW‡+c`¬ °õ[[玷ƒcÁ—Ÿ1ŒÿOM²A -é!õ[€õ}ÇU.“néMw¾ 5sqúfØ´é›S]ÀÖöí²–oÄòÛè>‹ëFÜûÙým’üÆ·ôj§±¥V ø—Ûf¡T3¸•4ߢ)2ô}C·ÒÜÞõ^¥@so‹Ç{ ÑQe93­MÍÖ\ÆC)Žëµ¥ÜÖåõ[¥öygýÏ÷©’¶vûª«]›ðÚÏn Ý»»ƒ–/ OüÛ­ D„rl/[Ñ{Xré7ì¦bئšj¦ÓÛ­ƒb“/èu×Û;ŽóŒùmŽ<ãÚFö÷@Ÿãͯ”ðTUÏÒÚº¿ñjÕæ|@¡L˜çGcïLw~¾åힶ<´ñ\~æ[ -ï0~±|„ñÖÕ½õ)Çïç40ŽÑ¾5$•Ù“¯8wBNƧ ¨8é^Š÷ð”ã]ü%m -¼÷-e§LuJú®M§@RGñ´Ë]uú ýÚû~åÛ@Õ—‹Êºš's­^÷]÷ûuLoJ=I»j†ßö$ÿ ZMšŒ­?xëúÙ¹<Þy %!n‰WÚŸN (iù?Eˆ +™°¸ÁZLOÆkÆ,ŒÐÖ0™ë5M«+µN`P Q–G!­ÒxZØÈ_À]òJˆmú?ŠÅÁkûÎÙ"’†M‘­ ‰‹uV «+C—W—ÉϤ#YIÆ ¿ÐÆÄ¿pÏšHŸéXy¬°Z8G" %7åF˯W}+ë‘‘`FWmXË…ü×¾vF.^k#ÉŽ› +Pª2#¹ï×ì2–Ö¢¯ñ™U¶)rGæ1d&ëàYÄT›Ô­NÏÄwnGD„–°E%ê0I¿|pÉQ>Œ*GsɶŒ’ÛúMÓyƒöükrÉÔ-žI]‹¼×MŽ<Ô®ö6N,²@UÌn˜|ïv9²¿øä//ind×ø«¾ߘší%ôE0YP"L’xG±#ïHCËa÷*I{ܹş9…¬óH'Òsł暥ˆ€qv~šÕœ¬m¿ûD3ŽŽÒÇ´bzŠßæñé¯oòM)e¶øG\´7¦ÃßD-#ÍÅ׌>õ—g89j)è&U=èähAx·¢E‰;:‹òX´,n]Œo‹ÉÚÜ@×Qì|³²†€âM (I]eñ¸(-(†@/wÄ!rD’¾aÞËâ*‹{G'dT*îªs¦É9 Êš%–U7¸I)œ×ïÇ*½E[!Kl'êûÑqSBe(ìù•Œ{!m]ó·'v~ÞÄiN yN_æÞLå0oÛ5bJ z3ø$ha| µÝCèÌ{¤$=ëÖz$¯ó3®FÞé'—¬ã2{PM¿*-ë"|¯º +¯¾‡×4p^ÓÄD>-ZÁ1{¡ö^xÛëë‚RCäϨW‘<ýš‘<>ÁŠë‚šÈÆÌó*‚·ÜiŸKÖ•fÁëè ™+$¹ž¸9o–˜ÃÚ·G"Õ#ÜŽÙ¦ìMeŽ$GœèB_¢ÁÁp^¶¾VÔ)*zÃ$Ù· åvñGS–é]Ãß¡¨o˜–ñè-h‡)ÊÄ'ŠÆ4ß„ .m­ KlÌ¥¹ ûSÇœÓ^Ù^áÈE‹¾åQ™CâW\#ºhû5¿váxË÷ók,JãÇäª9ÛVú’ç÷ ºˆ·ª•>=ìšíÉ2ͬë#ËkOIh¶aûìm +…v¦·3^GF«¶¤A÷.¯³àW0J¢Ð¶ëyf„„ÇåpF(·^—ˆ:YUMØ 1ï‡ó¡)d/…k³é—¾€ˆ°Zãl‹ºzVÉ,î×> +w¡,ѬEcÓÓÓ#^WÙIÁ{Œ½ºJ {žpï÷ýVÜŠªòÔ‚G–ñèÀÌ“µÌŸ¤òûäZ¶”5.=21ÉQÞp +)”]I™‚Ö]ÏOéTU ±•Ò7¿RA‘êÀü­l"§L¬Æ±ê;·æo=Ò4ª­Ò¬ÒûyLæS‘×ØKËöÒÑÀ`q/Mb?Tzs•èº,2¬)õ’<~£•Ò÷È÷f†Š¸Q€¥¸Ÿ~áʆçpE“åR2?Ák­E&¹”2T¹ìýÅã¥áz¤¯+ÍŠ•CÅ®®fj2´bwÁæÅ5}ï·±–(4®¨­m¶ѹåQɦÒmñx bÓé(mE$» š>vùO<Üå‡?ÿÕˆûÁúVçDöB9Ÿï†Z*Ÿ(K™)YWåò4ªHÿ%™Ú\# ¬æêkžïƒ-5°Bk}Àõ1m(Tº=Ým8®pŠ{¾©rSJÖ²áÝlHç^ìü%¦¡;%[0BZ5aå‘•d1Yùw0Y1÷8—Qž3ørp¶i:VõH!ÖãàÖfÆ£crùùo’lû§^RŠÌ&Ø™jÆæ¨ëH‹ÿæ:ª™Wsã!¹ Û«²^€_&戰¥0ž¿ônÑ>ͲŒí!»†9ÜŠ#mskŸ¸þ«™&WL}†î2fóØ¡2ró%H´ãwsuçÔn·ç/Í Œ=åÈE—B+ó1ºi§³:×ç-MoU‡Ý¹g[:¨§l1ÐnŒëmR+Á–û? ' G·£¦tó¸G¤“>Åõñ‡uo¤­ÏC¥RR8[Ò¥JË=©8˜MR†cüœ%:ƒkHå‘\ÍÝÃ4 BQn4ÞÄ3 ÂËìïYÆ%@áÌŠwWh¥ÏùGˆYö§Ÿ@FÒå|v;rª0Þ‡ÈgÈ‚°6œ“¤>̃3Lö´-Ó³9mØà ¼0AÍüï-:¤”«;¯±%5‘†#וìçâ­^ûÁš‰6v'>g1‡}-åó0§ Á,íí VÁMÙˆ]Í5°Í‰÷ä8zs‹á·‰×Pg-}_ü:ë–ltæaÏØËQ}­Ös¯Ûör^8½a‹g¬Â£ÎÏ´÷PÔSæ-ý–^߀Òc}Å[ʹfºævŠý@àaÇN+ÖŠ,³ÝåËÓþ°äÜݻݷ÷åp~aÉ[dxN»d菉쒑cÌæǦt"ZO¸¶NÄïý9RÊ6Ÿ æ˜þ<ñ¸ýzGµŒŒÊÕIÿÃ_¥‘Ÿó,€íYF€'ýïó!W|Ôç/ðÃï>ÿ€Ë/v&¿c¹Há<†þyµêëázQQî‘ÇójsÁÎýðûc~äíèVr¢:fIÑF+;Îú +‡ªÅ86Ø•÷nt +œú W +JK}9:BN(?Ÿ[«µÌö°SB+LÕLlÄd#sÒ„÷>&si×ÌN×¹‡FJÛÙa¯s'Ñ‘+ó§d^¹~›ø—s©uµWò´YÚS™WÉÚƹ;Õ^Ñ +mY¯~£œjäÅVž³5kf-±neÉ® œ…³5tðy|°»â[|Š +tö‡ö¸•ŸM4dËMp}ºÓŠ7-4ÅÿivŒ¶)«Ù;sÂÛóÿa;€u?ÊcÂþ.`¯Wðœr˜sÞ‘~ë§:Ì—K<­fÇvœÓN£íSòå’´!¦;93Lë~†4õÔ`²ÙNn«¤ˆ0©åT‚® ¥o+>×g¬)fn¯Œð >F›\…Ì{æTSªŒSZ«ŒðPбÏÏê“òrJaæÑ¥[çWJbí|`¯Ä‹"–F¾ËE©bóAŒþ(0guJøƒÆ|Œzª¼}Ÿ¤XfÏú(áɼã£SÔ£ì2´~Íh&^O8%ÚNôž+*•TﹸEÛn·kñ¸3=vf83ó~´3Ý;r-;Sé;…²„c·lâ‘{£än_ Í”}›K7{Y¯jÈòr½ÞÌ‚ªÏcâ“Ë]l‰Z|ÚzÞŽ{Y…TÀ·5–ïwñÇzÍl¯6¤BÔ®4˜/”pcõ)Ù‹j%\_³ˆ|ßXË$¹A)µO·Ë]“‹RªÚKõší fwiW4Fd§)èEq­yÿWø˜Mé)ínŸŒ¢¸éSþ¦¾`R0õò6ƒk×S¸ã…•0k¦µ©§>niBTäë™ÊpŸ¨¿\s›DîµÝ¿èîæ”ë>¬$n¢Ö0+T™€Gw`SÏ©|÷âü**y¬6«5=-ÅïZUPíí¨™m¼»Æ­vºý/»ÃÛÖ¶DÇçv¿£ývµ•7~¾™ynߘ¸M5Ú7Îm+ªÇ¥Š¯û1Þ¡3ÒWö‡ïŸþ=«ÜKi¿üí—O?ýLßÿ>Œé@ðËÓÈ_yÈ\*Îû×ò—OÊW)Y0”Ï93\(£šÅD¬ŠwÍ°W¾ß€°8š$ãåÑ® …£dA)òt¬Y khtm0Ž÷/]¯KÂ¥¿USqBŽŽ¡&‘¨ …wæðêù¿v)JO· ûW”íRòÛèýÃÜÒ­Y®àù­ÅC¼‚æÅïn…m ‚§¼Â¬4x{km µ¶~këÜñ~p,ùò3†ü¾k¼j“ RH©ãìx1™„1éžÞt+ì Z3w§o†m›¾9Õlmß0kùN,¿îó¸nĽŸÝß'Éï|K·v[ª +rÓ*Ž’ÍàV:Ð|¦ÈÐwÝJ{{×}•Bͽ.ï&DGµåÌ´¶5[s¥8²×¦r[—×o–Úéõ?ߨJÚÚí¬®vm"Àk?s¸7tïnZ¾2<ño÷‚6Rʲ½luDïaɥ߰›Š›ªª™No·ŠM¾ ×]wwî9Î3æ;´:òŒkÙßi|Ž÷¾RÂS]=KkëvþÆ«U›ó…2až=Ž½3Ýúù–·{ÚþÐ>ÆwZpù™ï)@¾ÅøÅòE^|Ä[7T÷Ö©¿ŸÁ8FûÖB’TfO¾äÜ :Ÿ‚¢ò¤{-ÞÃSŽ@Vtuð—´)ðÞ·¶”2U*é»6BIÅ·Ò +,wõYèS€ôkìû•ïU_.*몞̵xÝwÜï×1Á)Yô$íª~Ûü'h5i26ÿà­ëhçyç}h0”†¸%^jw~:/ ´åÿ§ endstream endobj 133 0 obj @@ -363,26 +364,21 @@ endobj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 147 0 R /F62 150 0 R /F63 151 0 R /F65 152 0 R /F55 149 0 R /F54 148 0 R /F67 175 0 R /F53 146 0 R /F68 176 0 R /F22 154 0 R /F16 177 0 R /F32 156 0 R /F61 159 0 R >> /ProcSet [ /PDF /Text ] >> endobj 184 0 obj -<< /Filter /FlateDecode /Length 4171 >> -stream -xڵˎ$·í>_Q?°ŠD½ÁÓÛÛìSœ½>%±‰ñ%¿Rõ*Uu÷z‹Þ(’¢ø®‘Ûo›Ü~x¹|}ùËMÙ-ŠèÀ™íë¯/ -ÈMm! -­õæÒ©íëïÛß_¥R—·OVÊW)—R}~û¤­Ç+¸à åíòöË×_¤ˆ´þÿÃË—¯/ÿ­P•6 nÞzáƒÞþñû =°QXð›’€Úþø×öëË_ñA‡¤ƒ’J[ç&,&ðƒ8ºˆ×?¯ñ·&lñ¹¹&lX ¢fàþŠC 0ñîJ øNxÝ/Öž8Èã¬cCÏHÍ3¯ÄÔ7H÷n™*»ßó"Ž> ~·åŽ5oŸ€~h^:–G -ÿer&'q 'áÊàtæ[Þå9„BbIÈ×i]¹€A¼¯¼–(ÞoÞD¡¤cf,«2{i¿Óe½|a÷šX™˜æå[¥.üqR77mYz…É.Ýe:ÝÍ’²–C0R8³Ãž9W*rx-«#TÐ;u…µ,jéDpv^! Á)nZáÔ7Úµ„_(x}®FZ|^‘DßT~·]#^{áÊ®ÒÚ$ü WèD=Í©²×îÉÓ°–-í…²;-‘æk°È2Ã4§——:*KJÃR~é¨HO˜ ->zì!%Ú®=üA6Óz„3"ƒø§¡õxÖnióz²I»¹á6(ªJiRTy¡IQ…QQ-ùZ*ÿ qRiÞ±$CÁ ÝÙQÍ”“(æÍ£¡¾ßÏG¹*+‹-}¯KV‚ü„u«Yœ‰–±8Z°Æ® gD]ÖlÖv'X÷;å-Ks/íY¾M9WQ #aFƒ·›´ê\ !Ì ÁVÞ£#¡”\éé¼…—…»C}±0iTw†–’¨:ºòwa®`’Ê|‡u$ÝeýpæŒlê ó­Zj<þµ_g”þ²½…Nq•;<ý@q¨î”)®²tAUܺ•wæ3?éÍg†ÿ„ù4V eÔn[>Î$ñÆ»ˆž¦kò˜x{Š›Bó©è4ó;šO@ó©TœWd5½£f ‰eõóÈÛ[ЯÍ5¥žw²·Ù·ÍX“‰­š6xks°rÛ,ü@?¾ágitÜŽƒ¸`„ÂÍÛÅ I‰¨•‘†R?¢XÀ›.Уžh-P±Rx¢ÝSá Êuˆn" ¸ÛÍÄf%p.¿Á¡üÚRRx•ÖÄïJ+«âtV¡™ƒ##×ú 8%Òd-üA -¥žÝ°t‡é3–I~’¤'ýò¡×R+¼ ÇMy}(Îãz€ aÎN+^Ö—+e«eSÙKSá<`ˆ •ãÕ£jÁèâƒtº‘îv¡N Iøôíý“…#vê…¨˜Ž;muók¸äÏ5ŽÅ£ò ZÑŽLŸ\ÙB_á\¹Zs',¹ã_G­U5qäÂó’ô^"|S?ç†FuæšYsÍ”ï„CѵÚõñ)W­B«¦ÝŽ«kçØ9‰~e;Ù%ŸµlËË&6cLq9\Ùþ4’LÖð¡×OC¢896jŠ=†â“óÉó°²@i…ÞábÝs`IŒaeIj6Ëë'³YÖXô[b5Á -çã7˜ m…ÕqÂ2&"1a岂®[pe-»UVƒçÝóh`^qHqùA(¼éÔ4gyÆdÂ4ž¢¢ªŠnã˜b¼þSÊò¾‹©¬Ð!ìxûm -ÓX+<ìøVOâ}Çê®â¿S ½‘Nyœ«Ãâkó¸JT6 -OÞæ¸ÐwÒ‰”(³ÒíȲò1ö³Èä»$‚ùפ;YDû ®‹›Òˆä>?!ÒC᫳P´žŽ­œc&ö/xîHœÇANDëV{1Çžs!·²ÎíÜÉHY‹™íîØê;×2™gÙþc}fRv~‚õ]õ™†ÜäqE^³ -Í%>NáŸê8ë;gÇ—¹5äI¹uMBëY¸òŒ–ê%hñ¯¾šE ]¡Œ| À.¾-9‘ÉéÍY Ó­ ÿ‚P`Ѷº b6>r K›Ò®é›â[¾W¿³ !üQçáÿÿÞÚïŸ&G¢0׆ ”µìH¸ ŒÔ›42°t$”[g;<žv·Ù¨HSñçÆ>Í .öáuàXœèÒñ<"õ¸#¸YóEQ@ÐOäT¥KùŸ Ö÷T„CFO+ž)ŠLQõ5¡4 ˜.óž¯zKÔbü)Ñô>U‰<òKÛNx»ç÷äRܱ¿ÆxaО9}ëi~®í6§€wýÙ¥LC¿i|{½ ÿèõ*=bØЊ†Â&m;›–ù¦#úwÑ÷|cÛ;wûZ&:‰°i K½®Fz…¡féþˆQi»Üí܉Z‰ü4'e :Hù›¡øD óDv#YÙy#ÅI^ °Š4™s©ëªÓZ·1°†¸¡MÁ5+~mj³c-Ñ¿·FºÀ©û|Õ2?cGÀŠIÙöwÿ×’Å­¿ºG;FIK¼ieÁk•¶îtÛ>)ÌW×–ômÚi[¯×M§…WcG¾UzÚwT(T-Ðvj=½<”ôJó C¾ž7S)OeùIF´Á† "%aö-Ú±™ÛÆS#Ï÷‰ž—½â·~Óqao®gj%´2½u £qƒ5¹öÇyÅý|ép]×ÊÞ’SƒëÆ)Öî1¥ýhØò1µÅ¥™?dà‰ë)½si÷hv?6™¡2çxìš#-yt°©³"; -ͨуÀî5)á;Æ]4Èî}O1`YÀ+d¦çÐh'¬¶›¢üµ«!`ç¤ä0§£¯šú³š¿ç:A" U½ CøK}Q?.…äõâg -Œ1]UäMŠU'°“ó2FØaª´I´'H®¶o‰€£ -Zô³Ë(Eí¬»¹“³´ÊP(<Ù¼êsìPÚ¥†¦“µƒö_pãÐ'Ýc88vu£ÆùHaBÃ`]U*nÜéGp2^xÿ±nA8ÙøôþA>‚íœåÇ„[ -iô¹.V„»üì…›Æ8wmÏ„¼åatã? 9¨¬Öûy’T™Û‹ös)‘»¹9¬XSåÑ‚º°›ÑlÒ#HÆ>öPС°ÍÒ>vÌYÌÆÉtÊÛçNÖAÛSÍ:ž㯡åäÚE¾ER|ÝÇ_üµ+.….ø>A=£-€z@Ô‡n êòØaÀi…%ã ¡ð÷_ðö?ñó#…¶ÿ¥¿£`¢ ¤hÚ¶¿!F ú6{,"ª…€ò`P›'bs•¨¾Uk¡¾{‡”Ó/]³@N:™°Z‰4-½7.uدµFW¹˜¬å„ï—Ÿüu-_žcÉcìÆ%£›gÔ°5]õU¡ØU…Ê؃ªP<¨ -Ùôäè‘ØØi´*M ñuöùã€)WÁûu{¯™«vm^¦A½¶’3'3R°¨Õœ8HôÞk#)g£¤E—ÒŸe9ØTJèÜ×:=îÙÚ7ÙÕ×bä„Þoñ»ú7oŽ¤OÚáqâ¸rû»Y6rÅå´Qš êÔ§RŽ"uC¶¼ž3ýQLoÏ*5›GnÒïzc¬é{còäÐän›•ÿ)+‹D„É‚ 2ú?3Q… +<< /Filter /FlateDecode /Length 4168 >> +stream +xڵˎ$·í>_Q?°ŠÞ`0Àôö¶ûgoOIìCâC|ÉD‰R©ª»×³XôvW•D‘ÅwÜ~ÛäöÃËåëË_nÊmI$¯½Ý¾þú¢àÜÔ“0ÆlÁ+!½Ú¾þ¾ýýU*uyûä¤|•Ò)Õç·OƸҸ¥¼]Þ~ùúã‹ W€ÿxùòõå¿ ª2Vh¶à‚Ñlÿøý¸$œ›’Âjµýñ¯í×—¿Â†¤×+$•qÎOXfLŒ†àè\Kø\_¸†ß±…çöš±=bJA=WøX\€ˆ÷WEwâë~±þÄë2ÞË66rFšyE¦¾é|ïVÈq±±û½ÜAâðÓ᳨wœ}û¤ñ‡¡¥S}¤à_!gr2×t社8SøÖ€wBi¢YËu^W.` ï¯%F[°I(é‰ÙË©Â^kûï¼F]¯ÜØÖ¿fVf¦ùÖ¨Öz +8©›Ÿ¶,?Ñ•É>ße:ß-’²–Cm¥ðv‡=q ¬TåðZW¨Útî´Ö²h¤Ñ»y…"§¸…W;Üp×2~±âõq¸ZéðyE}ÛøÝw y=î…¯»Šk£ðg\5õ<§É^¿S%Ïèµl™ ”Ûi‰<ߘŒE‘¢9L¸´QERÚ’ò £"?!*è 4è‰CÊ´]9üA6óv„ "ƒøç¡íx¶nyó8Ù¥Ý^ŽpU£4+ª²Ð¤¨â¨¨–ü×FØÿqTiÁ“$ëŠA¾³£š(GQ,›‡Cß’@G¹)+‰-}oK6‚„u§Zœ‰–±8Fiá¬[A/ˆú¢Ùœc'Øð +Ž$¸—÷¿.ߧœ«Œ¤„•zFƒ¶ tê\!FÛ‚k¼GB)¹ÒÓe / w‡újaò(v†–’¨8¦ñwa®µÖ“T–;¤#ñ.é‡Û0gdƒN¶i©ñü…W¾Î(ýu{+ +LqÕ;4ý@qi­Ø)ÑúHqÕ¥+‚¤šô­¼3Ÿå 7ŸþæÓ:#”U»mù8“Dïxš¾Ëcæí)n +̧ ÓÌïh>5˜O¥Ò¼â  ›¡àŽšÕ],›¿XFÞÞ¢yíæ¨+õ²“Üz߶`&¶iÚ<â=®ÍÁÊì³LDlà£ùøŽŸÃÑig8j ⣠+6oƒd%¢VJDJóLˆâ4ÜôÕðÄŠÃ㟠+O@®còÕÝî&¶(sùä×ͲÂk´f~7ZIõ §‹ +efBŽŒ\ëƒê”H[´|ò)”fvÃò¢Ï^H&éI–žü+D®¥Vx[Š›Êúº: „ë6ˆ999¤xI_®”­‘]e/M…BLÝ8Þ<ªLiS}¦ñ. ujHB§oïŸ,±S/D¥pÌØhgºØÂ¥p®q„•OЪv$úÌàÊVú*çêÕš;qÉð:j­¦É#š—¥·Êˆ¦%2ÍÁwõsnhŒ Qg®Ù5×lýÎ8T]k<ŒO¹êX5ãw\];ÇÞKð+ûÉ®þ¬ey,/»ØŒ1ÅQäp%ûÓYˆ2ÙÂÿ…^? ‰Òäب)öv|ˆO2Ì'ÏÃÊå¸ÃEºçÀ’X+âÊ’´lV0Of³œE°à·¤f.¢>¤o0Æ gÒ„e>LHbÆÊݶàJ.Zq9š¤Ï>¸çÉêyÅ!Å¡–©iÊòŒÈ …y³9;?Áú®úL ‹nò¸"­FY…î§ðOuœ ÌÙ un yrnݠЮ2£§úc ZÂk§¯ePW(+ߢ&ßÕœÈäô½×4óLól~s¢‹ §™ëÃ2ÁR0@’Àrk)»äå´ø>ažŠR àïÚyõ?)JŸœÆÓm,ýÒ±ÂÂmõ¦NÅL„D1,nJ¿ÆoŒoé^û.&ñÿÿ{ë¿š‰Ê\£PΑ#ᣰÒlJƒ‘ÑKGBùu¶#Ài÷›KJhiÛ!þÜ9Âg(ÁE>¼‰‹#]&G¤v6k^£* +Í9Uésþg‚õ=EÒ£§ÏE¡¨ùšº4t´,ó^®¸%ê1þ”è‹fŸª…¥mÐ^·ç÷äRܱ¿ÖaÁž9}ã4«¾šZŽD%îvuqVºÂ°:6͸î2 c¹dçñ“õ¥¸ž•bv»^V  ØaÑæÒ³›0^)7k.]5Ið˜¸í˜Q$3埌 ‹ûœ=“ÆWBèE@uG§œ`p^µÜAÓŸïø‹§&»›uà/:ÙOQ µ¨U?\ƒ3÷Ð8¦¡u)Sõr"jê»ÁO*úg2‘«fø Žg"p¨¤,¸…2’UPZèoIGB¸êÔD‹)Æ„afùwTÁÁ‰hýŒ¦t¼³ËYQ‰ˆ<ÙÓ0ŠÞÝjº&(Åp½öVƒáhÚ»–Í(r7¶mg­tk²@$X.K½X írjs”#íìm5È%0g¢ÐF ÁÛ'+]qfOu‚"úLs¥Ï¹ò`“tšf£\VÏÑ!…ÖVRƒnVyÞ›DzÜeõ˜»Zå©¢MCü™_Tшwü HÌ‚6 ¾ˆÍÊtØ×÷«õª€Ø8ÀR &×µ$}Tæ¬)²Dœ3g­46gäÇž‚kWkÝ‘I§FLcIÃÏE‘b¼ÎF'µš!8wn<>ùýºoNeâÊwÞ€ªÑZÒ#Öp â(м‰Ë©gA4u*ÊŠ`ÍŽ?ÅÌÛ®ümE;žŠ] O“¸“S´«Ê›¹Ø«Ûlœ}Ùñ™â¡wå¨ùËIñÐ¥|am£Û›lÓÔëxîJ^œe~¸GšG7ôóÕÃö‡e¾ŸEÓW…9ãyó¿ ˜ßÝOç…·-ü8Ì7Ô¼U±¢{²óɸҎgüâåŒç»ŸŒÝ¡þ¸{rÇ…V—źnXJøzê /†ÞÉ|çÌ)#¸9ê¹[û æ¨ÌâñlY¡7RO•Íè&ߥÕ]å0âƯ–ѾÎp-ùX‹]3c®%vÆV©gåYäJU2ÉìºÌ÷IÓSWÑ<ï &ìRLKk6kXÙCñ`IÃxÌ,íx—“8²—]¬_·6á?0 àu™>ž ŸúѺãè ”÷3NûÆÒE0ÔöÕŒ¥õˆ,Õ-~ù`ä± k"Ç"êÀ鳟ò'ÓÇϵݖð®?»–ið7Žï¯”ñ¢^¥§s {ÑP¸¬¢³i…o&—çÑØß1¸Û×B0ÁIÔ›°4˜æ`äWZ&æG KÛõ.s'Zu&ÑÓ’”],èuÎß Å'\˜&’I2HÎ*Nôb4©H[8—K±¾ù0½uk6°i"únůýƒmv¤%ø{k¨ ܺ/W=ó3v¬˜Tlÿq÷+YÜøÕ=Ú!JZÒ¨áÀÛ^¼6ic§Ûñ¤0]]{Ò·k§5n\¯[¦…WcG¾5zÚwT(P=Ðwj=¼<ôFó C¡7Û(ÏeùIFŒÑÅM'LÂì[´S7·§Vžï>¯{E3n|óq!o<6Uo‘ätV¥kÅ1Ö^hÆÁ Ó(ÈM œN(÷#ZÙÅ—ô±çavuÞJ¨ o…Jý…½Û@‚ëÉJZ­±ò(òòëC`É°­°;ªF•{ÿ–÷ÞØ‘E¡i;ó×åç áŽWïj‡ŠBƒW®žE†Â’#¡€XTÓ}ø½Y i=Ó(a”åÖe4ŒÖÖäÊñŠúùòẮ•½C§ÖÓ§8·Ç÷£cKÇÔU—FËòA\ÏéK¿‡³ùØl†êœã±kŽH°äÉ?v¦Ίâ(0£Ö N¹×¨„ïpÑtq/ð{ŠëA3E€ÖxáŒÛæ¯} ™“RÂ@˜¾jîÏêþžàtZ 0Tó2œÂ_싲ðñ9$o?c` ‘èª"os¬:œ—1Â>S¥Ë¢=Aò­}KDUÑŸ,O ¶³îæNÎÒ*C¡àXX`ÿñªÏ±CŸšfLÖÚC|ŸtáàØ="LØa ç\˜H&x;`6ˆ>V2^v/$™#Xæå>&•RHkvȱ V•Êú“K%Iô8wmˆ¤³JÓaô¿? «§\.„yšÕS…Û‹~ò¹EÈÝܬ© +`ú|ÜÍèÆäiF-®õ‡ + þõ×L¤HBH̦Éî¤;´;U‰#ì9pzE®,<=¢k8ÑËϾú¦âû`ès¤*V›¥±yC}èfiP@,=ŠÚ +Ì¢YDáï¿ÀíÂçG< )nÿËÁßEá´ÿlŒ2ø—göX$P äÁ‚v•òN{—©1{ù“ò&¬Ê_²E6®VBM‹¯¯K6Z­ÑU>e37á{àžgGÛÈ׎çX«ÛhSMÅ–-ÞÌW¼œ“X9§Ž=(礃rŽËOŽ^õH,2λ`TíÞH¯³³žL©|Í×åî.•Ûú¼BƒzíµbÊBä(Ϩ9âÏôÞëÿ¨ £æ3—Ò_d9º\`~g›žölåÝqí}Ö9ÁSÂnþÊÌ‘”Âé;> stream -xڵˎ#¹í>_áã,‚ÑH¢ž@§v{ 9e3·Íž’lɲ—äóC=¨w•ËÝîíª’(Šâ›,sæ¥>ýóÄãß?|úÏ'qâø_œ¬g`OV&¥?ýí×Oá¶Ã4è“PL)súí§_>ýùg DpþþéëÕàtæ-âôý—Ñ8&Œ:Y#Çß=ýôĹÑÏ?ÿ#BG8'Ë“gÞHÚLvŠÓdÛ~ 打~ 8ÑÅ´^\3ia„­. ®’øWæ5<çpÅO¾Žcð£ÎœKÈ÷yz¦^Ûf^~Ƽ›ÖaÇ1vG >œØ·ïó¡)…R=4å™à¦Ð]ÝuhÃä‡Z[_ès7Ñ@2åt°LèÂPw­Ÿ¼""¢ðc"ÑÊE"ì­‡¸ì!ä„ÐÌ‚ZagUsœþÆ¿ñp×벦ð˜F,}‡am˜ÑzÆ(Ž‰,aeúÚ®¤sÎŒsíÆJ -G‰i´|Í{¾Íbw‹'óH“š ¯ ¾ÝÅbýäžÅÅrÒÄ5ƵxVt>)¹¨/ÇXP[¦­±ëÉŸ`+¾f<n-^Ó~ä9í/\%¯õ0”\!»DPrü=tTmºC58:iøº£x%ÂÒVN\£„Íj•>á€•Ë „¹šL”|àÁÂ-tÏIâŽ)î#IÀ<à~0©Š‘“¸%LÝüǪë4Qõ­MB8áø8¥Mª´Çõ²¯I|Ž¨lfZÙé¸ÖëªèWØƦ4<”͸`Òé–ÏäoñYàc•ö°Ö”öŒ}ÐJ>‚-ž²qÓæ[YT(~ž{^ó•f1*švóˆ]8Ǽž`o™ ¯ð¤Vd½a…öÉ!‘ÓÑ_¹õ 5…4°qL“ S(‚~LØa9FÙ §û@96!C+ƯÜã~þ)f -YÑ–§$ÈÝu”e¡÷dy@X§Å÷ žOôZè[mŸƒSWàë™F„» é -2·Åqžîêlèë¸5GÆÍ}½‚X:ÚDmß ÿù¯\óÒ$¹¤°4=ÊŽÄŸÿ÷Ãî2F3/ô¸Œøá‹”òóïòÜ5}¥xÓ ô}Ã^5cå´Wñuw· iîïØ-HÏ$‡Õn­ýüûýÕPÁ SAì¯L¶ïñ«Ü%*àkG¦UÏ_¤{Jœ› Ðó.²8[ÂHš¸Ëç]ŒÑµdRôÛä»+ô0„Ÿ6÷:¶ÈL«‡zHG„Üyæå.UÕx¨k;À.ƒŒŠãßv€t‡“‡êB»Çd_%[ŠÃ]±D?ß8P2ñ!‰—”Jé—µáÃ'‡ÄõPÚ%¹ÿýÔ!Ü:rrÊ1ƒä~äÉi@ÃÚ…àî:ºÀ‡ºçÃZ“Ά:ÀcU“›8d‡~˜Ú4s½nΚLëf–™*qm½\¸ú# ^ý\8O*¤:Í>ðÝxÖ:;Èæ.ídéðHă ½UØwI7õLJéâ‘aC~[©oÌ;xHöŒÂ¼~®nh­ôMdz"¦0nm±‹ô  ep7·ò€1i8îÚ<$™RŒã‰mDsB£æŸF‹ICö\MâAa×ûv‘“šI׻ΗCÏyO2s„B9²>Æ¡Y‡J-PVÔQzb”çõ4ÚªG`b$Nß#,è‚¥ßÆ£è„:k>†GQÿ„JçAš¢þ°ãCNcßÆ£Þ1ëíAT\\ºM½mž¥BF|¬‹ˆá³Ö‹x_9|ð±.â°Öû3¸+ìåó^lœORúʈ6§œ”|Ji’˜Ž:§9qòZœ¸m7Ðé¾ B ¤%»ð/OgJpÑý{†+Øþ~‘ˆ' }rBæÄWÚÝ•‹PûŠI¡œ\+'![„Ø÷z¦»mM•q v]ÏOÚ§œzS"­¡Ää¯4¨ëAF>ÆÚ—‹p'B•99ïßØò´=Å0#¯e,Á¥ôQ™ª~¥n%K˜Òs‰ö¡¼Sà ×&&‰K¤Hú ѱŒ¸6»„›´O KWÎ3 ®çPLpµ+W1ÿ›bí2'i8 †M ;‹ƒÖžq[À/ab´_p‡ ¿¡¾ØèU!ÜcøuèâÛW¶ÊsfÅäë€y¿¯ƒÑEýU µA ‘·Cv"—i€xEÆε9¶—Â0R¬玲TŸdò D$W`2…Æ-5°Çp`¦`£2@EOGÓF -à¶Ü´QRè˜=RÍ•½µ½ì¢sùâÝ*ä#½†] ¥åj‚ŽGª„~ªf,®åÂ]CÅ™FO¤±û¦´™Ù-A“gºÒ{L”/ÔqzÒFºÄÁª[–ܤÖO³r¦æc±ë®´+FÒ{F"„¿ÙôÒ!IxÖbTÏ7ØW‡­WÊÑmÆXEF ’B1Úô¼d;$…”+œyPëx@ÖX4Èbé:ÒªU ñŠ|Œ¨€šôJåt»®EjfÀh¼›íÚ \ º/ÙÏq¼Å >ëG.ýš#ï;Õæn\É 3f"f©DÎÏJÔÛwB‰ª[¦DÃÂ$ãW|]¬pÚ±ëäj(Ø®˜uµ·~ì±Zù™ƒ‹ßïî©Ð5ù $¾Ñ+ ‚ÉyÅ&_ÑnhÕ÷ #Ä°Ksä9›ÙëTþÞ?Öa7ÝëÎKë-ƒêº.Ä;‘žs¶ “7nOgbѲôFÕ;Mh—1hØpb†¸Ý¢¸ iÄëêHCqDÔäM΀ÚK›906<ÜOI†• ž5þRÖ„FP¢ÞJ‹Ûu<..çc%HEÅýt‡ÓQ‡øÛV•£úqÖÒÑG-ÌT0œŸ…3›L_SRàù„ÎäðTÃØð[÷M -·ëioÏ×76uH®cßÍ°­Á%¼ÕÈ!¥@§ËPšÎm?¹']ü8t×Hi˜rˆD`åWdhÅ‘'Á£‘¦öšŒPj­Yffëw–¥7ý´Æ"®Evľ…ò¶s ý;zjdH°£O=îí=5è€3aõ||1¤F%a&Ò®ÛÆãÞ|,FÊ0ëìQŒ´d\¸5FJqÒš®ï¨úIþŽšx½W¯#ÆBG]i՗祔(~ªw)ÞÊð}c¼²éIãtª4à•XîtO¥5«É9f¦\žU4 -2Å@VÓo.µ”•V¬Òý˜ËàQ9ÏêÎ>å5 âÙHz;ï-1,0Bm#‘;u$Åû>¥ôÌ1BÝ©†5yÁ²6ok„}“Õ:¬[Wõö6@õæäˆiÒ«²nhõ0úД¾úFi"8¯}¬¦d¶Uœé:I ñªÆ@áÉtþuªßÿ´ê æP×ßý1á‡%9+— cÚUo§d€vPJ…ÌW£Ýך…C§ÈÝ. ŠÜ–—Ķû¤d,ðŽkäîTŽïìƒBëÍÅ~«‘òÞ–‚@ 9!¿Š-ÒF¨§@Ŭù‘ž‚4¯$³Ü”âìòï%¯ïnå\•uM<ºrjñ¡YdLdnCÆ25D‚MŽNÝ¢^Æk;äN›É™n{3à©{yÐ;óûÚë^ x{ c·N»º—µúÁ/ßèWXÂ[fƒi^Ñœ\ìæô³§ËÜÅÓOW\¨n.žž F+Ÿëè®-]÷q=‘;]M¶¨»Acø!?R&TqKz¯2w…ûV6ákâÒ˜˜¦ÚLoåq7>+S7b\ºRRÕ¥;RzäåΤ퓻 ß—„ýÍ@am ºõ€FvXeŸ‡RkB+„èVWí×óØÅÒe›Ù–íbÅ–„YŒõÌÔÖ/½¿Ñay«Õ-¼ff„?Ÿî&1O¡·<®R}»Á¶mN`NÉ W»êŽ¸ÉïÒS -Fhm^)Qw«0P~‹£4îðíVÛå£U«¿ômSS  -–Ãt§´x®¨ËRëŒ6¬/+––">4¥Yÿ®²‹B;æÖ^kÍÈC-S»DžIZéiùHGJ)bà o#c©¼¥ë¹ÙC#[.ƒ™IwKÛ|¼ ->„Þð!úm™„µfU/<ªÝ”¢3ÌI5žå¦4î÷< P²öZDÂÏÄwÄ~úïÿ? ‰ ïNÿ#EaTè·…yÿ>ý#‚ „Ÿóš_óèEcÞÀBœkÛpŽÍ“Äñ¬tS{o7/Á*»‡v^Zšì›óñt7sF„dG¤m2Üql…Ðzi¾ëýPO}©¼ö™_3ázøE ¹W¥@\ô~ò ‰/B Úöo-áC¯‡ï5[ÖìËWþ„À(ÖŒ )ƒIŸ›óbfѤO¸7‡·mh[ÍuÜ Y1y¾GlÍl!hwÆ?…ýbé[ ³ÎõXºW8‹&ùn“rHw(ŸE?E…Ž4Çïú¾É«)°‹WéRB«y•Žh]ZlJÈ–v›Õ_©åV´TN0¥'þÙʬDsÃ4#”Íž&ÁÃO úÑ“+u6ßÕ -Ɖ¾7m}²•a¯[[ëÇžù)^ôc_ºs7„oAcàÓ— Ave+üèG>P üh(Š‡2T,Ž¿Ðß}Að¨ Õ,6ߧänÅ­N<·ì<ô¦{3³.3‹O´ ÿÔŽq¦ë 撦ʄA2#¢ºð˜‹'ºÅË•ËmÜwS©ìyÛæ}û.çIƒÒ¬øº¯¤A2îå°Üý/çèj=[™Ù‘7GÑQ/—”| ñ[(³öRAåÕ->?%xÍ„²'Å‘ %ÅÉù?>|˜ +xڵˎ#¹í>_áã,‚Ñèý: ´ÛãÉ)›¹mö”dsHö½$ŸêA=(U¹ÜížÑ®*‰¢(¾É2gAšÓ?O<ýýçÿ|'ÿÅɦÜÉˤ §¿ýú)ÞÖÊ2£ÌIh¦µ=ýöÓ/Ÿþü‰³ "8ÿôõja: Ž qúþK…h=VŸœŒÃˆï¿ž~zâ\ù矿ÿ ˜“å)°`% í&{Í”t²uý'bP‘0é·ˆ^ü˜@›hÁ “NQØú’áj eY#ÂWø”ë4>ú̹Tå>ÏÏŒ€k×Í+ÏâX„aã:v“`âäľ}ŸMkØ~è¡éÀ·•îæ®C#“zh#lsÁÏÝDS’)ñXNWŽ Ó˜UßE42yA4@DÃÇ&¢Õ‹L4µK´väBå!'„aNévNwÇ©â¿ý›wý°®k(Á4Å2 ¶Ñ–YcfŒÒh‘ÉWƯýJZ0ï-ë6VÒ0JL£åkÙóm“°[8™G²˜4LS•©º‹ÅÆÉ#‹=Šå¤MkеxQt!+¹¤/ÇXÐ8fœ›±ëYÉ<Ÿ`k¾f8°_t´xÍû‘缿x•¼1ÀPr ì~AÉð÷tÐQRÕÂèr¤ñëŽâ•Ë89apÍŒ7ktþÄÖ¾0äj QÊG ·Ð=G$‰{¦¹¨$ Ť®Ûùv— s«ªÐHÑ{46 +à„ãã6ªÑ×˾%øQ×L´vdª‘ëuPM ƒ+k,ÓæAÊZ± @d¸`Ò›†ødjnñÙàc6Yë +{Æ>j -Á‚NÙúi {„­(“0Ï=¯ùÊ+æ "švóˆ]xÏ‚™`o™Ÿ á¤Vd½aöÉ!ÓÁ‘˜¹õÖ 4…´jã˜&ó¥AÃ4:›¯Ãr ²O÷rl=@V½tCŒÇù¤˜i`m@[ž² ×I–…Ù“e‚°ÉÁ)ˆï8Ÿä±à·$Ú¡¦¾¿×3Žˆw•Ä+U¸- x×#ßÆ­92mîëU‰¥£alÒöòŸÿÊ ÿ!O’K +K ‘£Hüù?ì.c ÂÐeÄ_¤”ŸWæ®é+½€›–Ð÷ {Uà¨Y'§½Š¯»»UR1ÃûU20ÉÕj·Î}þýþj ŽÊ’©Jì¯Mvñ«Ü%ª‚±ÎQ¦ÕÏ_¤Êœ› Ðó.²0[*Jš´Ëç]ŒÁ­dRŒÛä»kð0D˜¶÷:µÀÌè‡z@G€|vø)®‡R.Ùý§7øÈÉiÏ,û‘'gVݺË='>Ô='k©’p¶ü˜ààÎë–ØÄ¡8ôdvNfãÌõº%c2­[8Xè̵íráêS¼ù¹ê<©æ4‡Èwô¬Mqí]Ú#Ê Ðá‘<-zσwH€›úãÃô òÙPØV*Èó’9Ã0À/ÁÕ ­U‚¾éx6BÄÆÑÑö»ÈA-£»¹•L Cºkû\dN/ÒÛˆæ„Í?>“Æ̹žÄ}™÷í¢$4'’®w¡8ó\~ =Kä=ÉÌ +•Èú‡bdý*YÑGé Q^0Óh§‰•Lxs°€ nµy‚êýý«œi +úG)÷1< ä´îm<ñFƒ¶ž*ȧXûÒcï$¨²$ÓÝè;ž×Á§f”õT‹p1ý…TÆŠ_­[ɦŒ\bB,ï´pÂ÷‰Iä’)‘þ‚t¬#®Ý.UMú'jHWÎ3+®çPLp¯W)©’cã 'u ›ncã®%€_âÄd)¾Ày‘º¦3åäciî,¦aÊŸQT_'~‰%ãt§{dQèE7£—ÂÛ4ž+:½Üíâ' 8…†À¨ÁlÕR-Á ²ÝñF¾z‡‰Ž8€¨@¬hêr¥LâóxÝcw£JBÄ­ÕD­9«Y6UÕž²NcÅOÚe—¢/rÕQ9¨PéšÇº—¢gx•Þ¢CÊh¿¥'„ß +¼íRAåJÂ…`—L—Œ\í]q7d3Ú¶º8Ê“-æ;×Nêóz{y…ˆhÚV÷4®â +û¶ +F?kP‡Ú ZCŸ:÷£"ÿÄհů$#ä ]ëîóG"ˆ(Pk‘ÉpAýVÇ §RÔøõ< ifiqÈà^ٚ׫Z›÷V¬’Eu¨ÕÊ”:7c—U¥J-Yùg:Ý©•½h©¡ç47‰qÕÔà>€¿§b}±Ó *V…`7žÁWÒ^µ¯luà̉É×Qöý¾D#ôPT)ÔVš,„ÞÚ‰|^¶wÒun±£Æ‘†²^šKe©=)ä!DDW`2…Ö/5p€p`¦`§2”NžŽÁTÀ}¹i£¤Á1·†RÍ×½õ½îbpùÒÝ&ä”^d—„çDVÆô­ËÈfvÇAB%ïJ~å(ÍÏ·ÉE×Á]ù§}ˆºóDÐYŽ±š:©·< »ÖÊàJkÖ+ëÒ\ÅI‰ÜV_³†©ƒýêÀŒw µ% ê_¼… yVGÙ“£€¯Ù‰!åJ*΂Òëx@¶X4Êbí:2ºW é +}Œ¤€ºôJãt·®Ef•§h¼D›íû Sùt_ŠŸãyAz6Ž\ú18+EÞwªÍݸ’[fíDÌ(S™:ƒŸ•©·ï„"U·L‰Q _õYLµÂEPpoÈ®“WhTÅvÅ, «ƒ ´Çjåg„£‚a°§*@×ì/ ø&¯, +&ç ›r…»Á4ß3Ž$a—çÈs1³×©:ýE…ðD!¬Ãn»×—×[Õt[ˆ.">Gæì¦lÜužÎÄ¢ué 7©w.ºÐ®`бáÄ i»UqWÒˆ×Õ‘ÆâˆhÉ›’u—>sD0¶¼ØOM†Õ žG5ÿbÖ=!mq'E„0E—Ûʶß#BmNÿ~V*ŸXíLµÎÿÍ.ö‘IgW žðTÅ”7|Ńu;*ª.G< G̤™÷¨3÷`ö5}wãµ 7,˜eB›5õvSš°³ÁÓ™˜)O»ã˜ÍÞÇ!€ki§Ý¥ÖÛ½ô‰7Pßr˜Í¯*û¬~HÙKóà4’¯ÏtTÞde‰Ê *UÑcÈv€ŽpˆÌ;í¦£ãèN–5øM¾vÊP¨]Þ½/æí;¸J‡þ­·§Qj}/0¯à¼•ë[Õ¥}þbdò˜^ ÿºFwYuÚv¥WóL¥ñÛÀ¤I¥(Awó=é;—)ž­‰=G±'®C…Hß6ÚK)a˜§Ï] a½~˸×À1¥ps+»±IP,æéÊ]ÈœD :¼sx,\¯ »: +£ôú۹̟ÔfƒQ4_uFºÌ\é<ö–‘.·¼º!dÑê2ï'Üžo·*í)®˜5-¼­\ÐãßØóòä¥/Ë¡ +´$‡ßF¡²“Œã¨fo­5Ž²e’îg«HÒ¿Qrpü¹¦ü律 ,Dõ–ö1‚’ôV^Ü­{äaq9+²@.*î§;¼I:œâïnXUB謥£Z˜é.`8? !fw™¾®¤ÀË Ñái†±ã·ášn·ÓÞ0ž¯olêܤ¾²-âÞjäR€Óå)”®sÛ¤OéßÉ?’î)-Ó>‘¬þb‚Œ­8ò$x2ÒØ^SÊ­5ëUpãΊôæŸÕ¸QÄuÀ@ê[¨o:GÒ¿£§FÆ;øÔ”poï©œ gæ£xà‹¹JPv"íºmL)Áx°‹‘¶Ìyw##~ÑRœ´„fè;j~R¸£&žGïÕÄÛZèh+­úrÒ\…)%ŒŸÚ]Œ· +üЯbzò8“+ p%–;ÝSiÝjrŽ™1—ç4ŽR…bJ6Óo/­”•WlÒý˜ËÂQyEÏêÎ> ‹â9!$½÷–X¡·‘(:c}ŸR欠Pwªa]^°®ÍûáØdµëÖU½ý€Mzó’bÚ‡ôº…¬›š= >42Vß0M¤Îk«+™mç•ô ¤QéÇ©èo6ðlºNÿ:µïZuˆFshÚoþØø£ +Žy'— bÚUo§d +ì ”˜¯E»¯- N‡Bw»68xU嶾i´Ý'%S—®Qº @9¾³ +¬7üV#å½-‘@rB~[ä`ONYó#=y^Mfù)Å9äßk^7ÝÝʹjç» +x;uå´âC·MnƲ-„‚ŽNÝ¢QÆ[;äN›Ê™é{3ÔÓð.2Ñ;óûÚë^ õöÆn>uu/kõÄ/ßèWX"8f;ƒ¢ò¼ª9¹ØÍéO?•¹«§Ÿ¯¸`Ý\<-,<§ ¨•/utß—®Ç8 +ŸÈ®&×ÔÝ 1þB ”‰UÜã’žÇëÂ]ñ¾“]Eøƒ¸<&¥©6Ó[eÜ€Ï ÀÔSŒkWJ®º §SK|£\ À™tcr·ãûš°¿(¬m·^‘%«ìÓâPjM ý +òª}âz¦],C¶i‘mÙ.VlI˜ƒXÏNmý2„–·ZÝâkÊRø÷óén#òxËt•æÛÛ¶e8óZN¸ºUwÄM~—V1­…Öç•2u· +õ·8jãßnµ]>ZµúËÐ75Õ¡é9Ì J‹—Šº¬µÎdÃƲbm)â¤É(Ïøw•]Æ3¿öZhVj™˜Ú%ÊLÔ:pHO+ÈG:RòÈD«ú62•ÚÐ[ºž»=t²Ep!f&ß­móé*úfÇw´en”Dì°5«ÑxáQí¦½e^jz–›Ò¸ßóD íµˆ„Š?CÞûég¸ÿwøü1&.‚?ý7ü„QƒßçýûôˆR$Îk~M,€ aT| pnmÃ%6ÏÇ‹ÒÍí¼ÿͼ(«ìr:xiyrèÎ'àÝ ’둾yœd¸ÓØ¡÷ÒÂÐû¡ŸÆRyë3©¾fÆõð‹@s¯J…¸èý®ä! /b Ùöo=ác¯G5[ÑìËWþ„€(ÖR˜AO¤/Íy)³hó'Þ›ÃÛ>´mæ:mЮ˜¼ÜC¶f¶´ ˆ; †©Æ¯¢Â~qø­†Yçv,Ã+GÒ¢I¹Û¥òÌgá@a¡#Ï ;~èòjZ¹Å«t9¡Õ½J‡Hô.=65dË»-ê'¬Ôö+Zj/˜6ÿlå?Öb¸e† +e³§IðøƒzrµÎ†ZaÇ8É· ¶¯Oö2Lok홟âÅ@›øò»!|‹ž¾D ²+[ñG·8¨pBø#¢±(ËP©8þ‚÷!€‚ÖXj¾Ï)ÝŠ[xnÙyìð:ga/þ\gVŸhAÿ©ã M×Ì%Mµ?‚d)’ºð˜«'ºÅË”ËTŽ¼, ¡—óΤAmV|ÝWÒJ2$Yîþ€Kt¡Z=[ÛÙ¡7‡ÑÑ(—˜|O é[,³ŽRåÕ->?%Äv'Í žü>89ÿÏ|{Ô endstream endobj 193 0 obj @@ -666,17 +674,22 @@ endobj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F63 151 0 R /F62 150 0 R /F15 147 0 R /F54 148 0 R /F67 175 0 R /F53 146 0 R /F55 149 0 R /F16 177 0 R /F32 156 0 R /F61 159 0 R /F48 157 0 R >> /ProcSet [ /PDF /Text ] >> endobj 231 0 obj -<< /Filter /FlateDecode /Length 3056 >> -stream -xÚÕ[9o,¹Îõ+æˆ&«xjµfudXÙb£5ìÀ~#ÿ}ï£Ù==Zia鍊,ëøX‡_þqá—Ÿž–§?Ý„¾8æ4hyùøû“ ü".Æ14£ãZ\>~\~¹rŽŽse9ׯésyyœszþý-—øO¼ÑçJÏo4 h(¼<£Åk~R¾A|Æ/i,Ïo5O`IÔWÿïÁ¿[g”óºÍS"¢žú±®Ò“G*®Œ—óñ2}*×öïPÇqÒ†=ýúñ³¨:¨¦µÊU¯‘V•V¢¡äŒ†‚'6TäÈí!'5#•(Ë$ n¯u—y‡2¸-yÄFâá©+Þʘ%?Iô¡‘Õ|Ÿ sJ¾<ƒ½N æhÃ`€¡Üˆ Ö–ábJ…é»æ…QP^8†¿(uÍ£_¯ÁLÊ SàH’ †Ê}•$JfÅFžJ͵s[f›ÄdÉÂFÑ­…‹Áâ‘3S$8Pk”`vrÚ™J&%n:1äß,I¾‰©V®ºÌò4=­l¦˜tV\*˜øÍ(g†oqK`®ÑüAe=µó¼¨²6[núY;G5U×h(òÔÚc|Ò®exå«®°å«‘R4 SãPÀ,½êu€š‡–æ€q©bÞÐÂ.!ïÔÿ=3a™QÕ@—,3273ÀQ8úoy"  Õ•ƒ5Uj—+™|Ë?È^P zŒ&Ù.PnCj ‡ -‡„ênÜü7CH`„:ãjkÞ q/¸È¦”w›T–¾Ñnƒ“vgF˜­a¦ /… ×ÌoUÔR4Í™˜×AB‰×ñ\ÂàÐ>$éæZš‹xÑd’Zš4Y:¼TY‚:×ä×k5ÄëìÉ#ÏãNžoÇƀȔ…ëh ²òܢꢙ3hUGIk¦^9Í€Ë>å9z½s^’¸…yÐ8¯±L:¹ïÿŽHÉÒ5ÚÓ RO7ú„SÑ(Eþ#6ÔÖc(Æ} -€ñ ‰ÃõI)]ÞYf¹™-Ÿ¯œ*?³ -îÁ‰ŒÂÒùAe˜pSq˜£µ>^Û"EI.Mv+q* -Ҍ冟Ž®Ôv3)«8©I»3”Ñ w\WKŠ‹aëº%Êõv!Ï»p‚üïBF:¸z®;ºç:ŠÂ`ØPØŽâLX7Á5ׄ^Ðnù»Ôκ+$Ú¢6÷Ѻ›ÐU%Góô£ðŽg)£j :œ·ñ¬Ö(ÈòJ\!M›K¸kÅÜ1¥ì£K­Ÿ{áiì ~G;·Ÿ‘»àmÕ"~[6ïO%Œ®‰…RÂ8Üœ„~dˆÂ²µÕµ}\šã63Ï©ÔmÃ[ÎóBœ$›23˜óÕ,¬¡ƒb…cª J§…býwõŠ9–Îœ–Ìr–.ã´ªƒxQ…”Rb/”©iQ;ª‰Dy·Þa0e O ¡ J·Áƒi…Ã:ñsŠAÖ%fnMŠÞʵÛæ«Cà”ãà%TA×·Iìƒ`2q©qaàÿÞ¾§ô}]Õúhš£(ï…žíß•yÉÀÍÖ•‚Y£Ï¬{Pàh"gN˜Þ{=o€ºÖ:Cö¶Rkx”Ã.Þ·u Í¡¨¦‹…æ•)d‡‹"ÔpʼYë¿Rq_ÛHµæ2ÞUsk‘ødd£¾Én•Æ­Õ k©.‚H‘A$Í^ü…Š¿•ïä„F‘º°Ó^º¯ÀÉAÛÏèÓËÝkÖ3—4Û0(ó_*k½°«ÜLY'ÞúŒ·n—ôc¶ú‘ô?—w¹{í¹óÖï¼¾)\ÊN ™/Lx‹¼®·»¬ÏêîÂÎ×s;÷¸¼»[k·po»¾MtO»lšü¹ëžã›õôɆéêÑ^¥8-*I­˜ÐîÚ˜è!|”YWG´æ7£%‘ò}Dë$óÔæ;nII„mbཷ¤ƒh‡¥à·wrK7wž¿ðyÛä¾àXhP‰4΄’qäÁ“”»¦§K -´w‚ÃÈI¿ôm©©ES(Bõ@˜ö=áŽÓdR‰Q N¦ú”ÅÒªãì3ecBEp¶®¹¿®3”bnÖÄ¥Û@kl³Ô4ô^—¥uå,eàCjá†d(ÆÄjR¤®éû´|ßš¨4øI´þ.!‰Iw—~MêM¸}ÜšGc™²v·5ÿZZó(jÓüdï(6ØÝwµíÿ¯Zö4 ŸnÙšs»¡òhËž¢ µá¥m¿HÅï´ì j&ór3+ùDË^ù¨Û~ºeo JmÈ­-Àӿ³Eú,¥;Ùίb+Fü¶ã‘¿Y£9®9k4ËY/%…>X20©O4£C†³ÆªB9HYµEƒïhDƒAŠ.å¸ËOv¢Q(F=RÛiE§Ýµ g5­>íÉå^Ã9Î;ÕpV86œëâmf¨4aùç[Ñ‚ò\9¡ø=ø -„¾¨6¬66 ¥rMZj¾Ó€ŽoƳ=Ÿ4 ã›I:¯8m3ŠÇ…xtŠ9ŠâGI꽦cà ¿ÍB‘äì†øp“°Ô"ì±Ô÷ bG‘"êùIÆKa$Bçí÷[’q'0åôf¥cL[œñ7æ¼ðBI"3êQ^@Ðá*§¼ì÷,ã‹R¾N$`}]f¼}‘þô‡|c)Ó¢4#/HrGòØÐx1:ÿ"ØLZ#îfĘ¢wC-Îmµ¿É…‚Dʺm)¾ûÝáËéæ’ämÿ—z­¯‹ÖBä"xŸd'K0S|šYâö:hÚl]Æ-ùµ¯ZШ”Q½(~mF¢kC-åÇ(ñR¢ZœUy€pØšz£ì(KßÁ)ÏVJ3óƒðQ3jÞf‘]î—M놟o‘ä‹æÍôóíÐþæžþÃÛ>qàÖ|{»ƒ3öÛÚŽ íþðv‡¿ÝDç׶;€<ì·;Ú‚H(·è¡xÝžV1ÄSM´ó'umiàz\†ŽÄŠIÇUp¯zé«¢îRS¸)KÒÆ!³EÛóÑšTæKÊòBú»(öKÊò>5Rè¾°,ÿþñôïqNA§‘—ß~<ýò+=ÿýû™Ä„´‰ÿ„‘?‚εðóþuùëÓ_âx(¬§Îø„·Av2NKgšc ûëŸáøJ÷™ò!ËØE_‹Õ¬8ËÊ–×þM,èËt©_Ö{é)!:ø#7œåi â7ÙŒGd|ÕÞ|-¹`$¼SóêÊLZÌ„þÈ^D‡wmç‚F¤UtÆJ›koBÞÞhà'Y{®Äæ+g¹h‘ùHÍ_¯ -|Ú›C ƒž&y¼<>…µöAƼ9¶ê^müìKQY‰—­SøÛ†õ®×‘øú™«õ³´•C…ø_8yAö„å-@á³Bñ9ý阤ª'ë}€ó.cE(߈—ÝÝwÙEñ[T[²ÚR#¯voõ(9þÜJµÅ¡Òq–ñѺ÷g玈»Ó Á¶ÛØþ¼aŸûí%û1– -E+ªÅ˜ö Xrî !—GíÞ֢ͩҷ=‘GjmÖåí„7Ýn"Ý»ü©¦™4»ú~bTx¼-œäRϯ¶A•öШ">é¹Óç[“Gž&}%‚âáAuï‡~äûw 7ú:^ (‚Л‰ëñjR;Ê$ûIåNJÕk#ýœ'å»…Þ£±Ì1æ=½úh8³ZO¯>&Ïà¶{õ0ŽºÀq¦»ÜcÃÌ’ÿ¯öŒ)a1Ö„»`qÞ\̘W™m5nM¦YÐ1ýú¯¡®c7hZ#Ø1½SØØ€´m«t÷ÇZi2v².Ûâ“ŠÞA1Ø¡vƒ +<< /Filter /FlateDecode /Length 3144 >> +stream +xÚÕ[ÉŽ$¹ ½×Wä´¬…Ô$ +¨ì¨`|2Ü·ÁœÆ°v|òï›Ú׈Œ¬ž؇(Š"1ùå~ùéåöíåOw¡/Ž9-5\¾ýýEÐ ~ã˜2£ãZ\¾}¿ürå\9ÎÑr®ßÒçíõ‹àœÓ+éÑßp‹ÿÄWúÜèù¦I*_¿(«®ùIù&ãû0þ–ÆòüVóøDÞõÍÿ{UÒ¿ÛV”óºÍS"‚Šžú±®Ò‘&T\ëñ>âÚþÒqØ°§_¿ýìŠÉ´Æ,P|‹´ª´ „ !3NLT`äö¡4RŽT¢,“$¸½Ö]æBq¿å“ÄÃS?V|-cnùI¢/Y­÷)A0‡8r(Õëi¯K…9Ú°4’)˜Ä&·–á¢J…é‡ê…$£ ¼p E¼æѯנ&e†©p$à‚)t¿—@³b’'âútî·Õ&UÒ‚¤a£è¶ÂÅ ñŠ3S$Pk”ŽTÙÈig˜TJÜubÈ¿¹%ù&¦Z¹ê2ËÓô´²šªtfÅ$d¿Ôyfø·$Í5ª¿Ä|Níi×2¼òUW˜ùj¤•CË¥r d–^õu€š‡šæ$ã€1¯ha—2ïÔÿ½Ra™Áª ·,3R7”+ÀA5ÚoyÐêÊA›*µÆÊ’mùÙ +*A±Q%Û%ÊM¤fÀ8<顺7ÿI~HJBqµ-\dUÊ»MG–¾Ñnƒ‘v>#ÌÖru@^ +A®™ßzP·j iÎB-¸J¼Ž~Iƒö!I7×Ò\¥.Ú †2oTr^B–pœ[²ë-šR×3Ø“GžÇ^Û* +’ž]šôÔR:ùÑ å†Ÿ®pÞLJ*=/Ð 2Í/< ÝJèŠ;¦«9¡†žM·¹^/༠'Äÿ,`$¿fàº3¡G¦ƒˉŽp™árk®‰¼d»åÏP;ë¡h‹Ú ÜGín"WL†æéGá ÎR:FùÓ@up·ÑUkIÖ`‹»Ó¦îZ1·L)ùè2+ÁW±^xÚÅz‚?»iåÎíGä.x[´ˆßnÓûSù¢kB¡”/'OèG† ,k[]Û‡¥9.nóœIÝ'ÞršÂ$h2ÈÌ`NW³°„+(w”%뎡¨ÿÃU9–ά–Ìr•.«eUG©ëŠªL)¥Šãššµ£šH”wëSÖ20 ‚€°¦Ô1êб0éð^~E¡¢D”÷v‰›{“c‡·°µcÛ„ur€8Id•t}›ä>H&D–Ì"²ŽŽÀFU·õÖd‰·ÐÀ6D^¿À”æzãP¦§ÑfSYA™”"WïsŠbºL»ÆÅîlnGSˆ3†IzµZ×<^×iÝEž6ë¶Ò”WÚšÞjvðèÚ±Ïý`•Có!×vCy 戸¸µ©­åÉcMh¢Ò`'Qû» =æB]Ab¸7éçq¯ŠRä1q¿Wå­ôª(Q»HN^¦ÆŽ÷Y},ÿW=,Š°ñã=,ŠIn'*Ïö°Pš‚/í}$ ÐÃBP³Ì?y—‹ö°  Õ~¸‡…R^©q"·µ ×bŠøñž/îdK[qñÛŽQDþVqÍU笚K|q ›‹á˜D¥Ntg„(L­: PÁ el‹hŸÑ™!bܸ˶f(Œz¤¶Ó›‘v×v`಻'—GqÞ© TcF]B|]¨…¯Öê&‚ûxo† § ŠŸƒ¯’°ÑW™‡ÕÆŽŒZkóšïtdÄ7£oOãñÍ¢##¯¸ì»(¯¦”CÊ.ô$I½w _#xÃ÷!IÎNÄ„›š3«äKý­üSì ¤PúI~’òÍ´í¬ýñ%ýSÜ $âô´Ò1wi/V­øsÞ'x‘™Ágy‘‚œ+,yÙ¿ÅŽ/J œœø:s`C+Þ~§óSt~ŠOš²,JK:5ëjÿeHÉdÃ]¤Ñù¯êÄûÕ-o†Œ%p7TÑâܶò-þ-zl YÖm ññÝÇ/§ï[·W¢êV]»p-„.‚÷YvR³¡™b:„éŽ%\üÚ×-hTÊ©^‘_›‘ʵÁDÆ1(^K\«Vu š9Uê)‡yú€N™6N”– +(Aa©#oóÈ.û‹îeºÌäç/Ir‰Eóƒ“ó”¦P¬ýÇ_xgŸ?ÿÂCXÂõy Óæ¿ðBÔïyá!(À0xpáÑ–DBÁEåãÅe†ÉŒ³{—9)B·ã•EsM1-¿sáíýèÎ4 ãÃB‘o®74GÒ?ï«ë­†ÚºRîû·—GEf« \~ûþò˯ôüoôïgâÖwü'ŒüNª L ?ï_—¿¾ü%þŠBArúÆ'I Xd–PбZ‚ŽM´ðRWX†µXú,ü7‡R3©¬Í~4\û7± é—P›cÒSÂéA:`GyZ|jüæ[öøªñUÛ>\ò‡Hx§NÒ•&´X HqJS%ô":lX^ Z) +kp¤3Vg\{{xêN–z‘éåê]nÜˉnv ‘šoR |ÚW›‘Qž&YŒŸÊ­ÖÎÇ\+^ï¼ÙøÙ—/²„/3´øžMWPrôa¾æâjÍ%måð@üÏļ {ÂpÆC¹³øØùp (èîÉz Å<‡·±ŠVÝ ¯ø-[ÒÚRW ¯v;£Æ߬a[PÈN0ˆ³ŒÚ½?;WÑ݃*zp¿ªÝÆü‘}îç_*ˆ±QµÅ'¶–µÓöRJ«Ó%Ž;¸ÄÉ£v[ÞhDó‹´ômOä‘Z[µsù—OáM÷«¥H÷!Ø\@¬ÚÂï´ +÷['¸UÏÝ^j¤=4GŸôÜéó×YG–>{•v<º÷C;òw£¾‡p˜Nèx5©èiâv¼ÅߎÒö~Réc¨çÚH?GÖ¹AÓë`”¢*sÌz/H gVëeÿh²Ün»ý›qÔ}Ž37’=6¬ !ÙÿÖaÏèH ‹UMÑ +—áMûeƼrùÕVä½ÉM +:æ½J-4,6hZhÙ1½“Nî l@Úözm÷''¾|Û¼mñ £uP ö_IS»9 endstream endobj 230 0 obj @@ -689,28 +702,34 @@ endobj << /D [ 230 0 R /XYZ 79.37 771.024 null ] >> endobj 77 0 obj -<< /D [ 230 0 R /XYZ 79.37 388.053 null ] >> +<< /D [ 230 0 R /XYZ 79.37 340.415 null ] >> endobj 229 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F16 177 0 R /F15 147 0 R /F54 148 0 R /F62 150 0 R /F55 149 0 R /F70 187 0 R /F67 175 0 R /F32 156 0 R /F61 159 0 R >> /ProcSet [ /PDF /Text ] >> endobj 236 0 obj -<< /Filter /FlateDecode /Length 3891 >> -stream -xÚ½¹Ž#»1߯PhKó>€ÁÓ«Õž#Û=¼È†ØkÀ‘ßÅ£ÈâÑÝÒŒvƒ9ºEY÷EŠ_þyá—_>mß>ýé&ì%°`¥Õ—oÿø$à~˜rgãV\¾}¿üö¹¹q®$çzã\|áÜrxÿÛk|ÿúYI£Þ<þgt#âÿñíK~°i°‡'y£Sµ€ñInyt\—ÔW:'AÐåŸ7´a¤7õ©Ÿ 3ÄÍ”®¯JÀ;³µlÛŽëékCÇFL2\áÚÕfÈÒÕ=2M06„ñúû·_#ƒÌƒ´eRhdМϚ‡;ÒÒ™y3Zð—ÌMØt™¤^ùœ}Ms -ZeDZLf(· ß"‚¦Ü2uklTÝ=a?Î)»»Â^ËøºÓHæ¸zÑvQÖ®hgiÅyã3n÷1>áŒÏ¬±rÅ­SzfΡT9bºáŠ9%FÈÆTA³QšIêXB ¥Uºôt¢tGx ãXðf\qGAðA2;CB[£%î¸8áGÌ’ˆ_3'U%‹Ý²øsÍ Ì4G•¹ÛS'ÎsºÉA\1‘×:Wd(O¨\Ud~E3’Øq#ý’È™‰~ÿ²KìÂ\!™—Ž’ÚJxV+{@˜ì‹ŠÅw¶¬í ,Ò2ÿºtn ²ŠùÆõ÷Ä[Þ^?i^Ú›HÒ"[„/¥¸bÂÏe5R®˜qŒkÚ¢¬E…xñqÇöÓÁT°_ÉB¡×H§¢¢¶0]k´á82z´ü6ãŸLQ§$P’ÌJ"k«ÁOöÌYš_Þ£ åÑÕÖUTMLZœs#²Öм»n/ëG™E¡˜2r¤yä§Qe•ÐV91…Úh¦ùÄÁ“j^=bñHîaCÇŽha:-üѺ†?°«ê6,ƪì%A!u«Ë;ÁOª&o¨ÉàD®=C’ZGK£õKoï’EÛˆ"\¸ÖÍæU’lK¸™äF¯H®¸a¸1%YÄŽy‡ŒS20'ÔÅñWc_Š'Ê$1M™ÙPÕé¬ld(5ìkb-=Rì,É£ªO¬J¼‰(m;³#ë˜öUDo[ƒ2«PÆLÚðÒL9šé(Øù“qùm¤¡ÍpáÉ™†Zùøòˆ†}®Rì?1Ê‚ /&zÚjeîÏ°,wL†'eXgH-çI+•œÇÙžWqw ðìBu\=6&¦´¤ØTíµ “d ü(y•îLq½ï($¶¬sñÇ–ý©¯¥ò$òZÒöŽÖîäÖ6*§¨]vùîÅ數`½V’zx©[¬‚ÒÉ~ñ)Î؈8GbD\ïÚºžÏLÓ1’&Û2(æ…p{Ìd®Òle y2`ÿ95¾É¨D¹ER¸=y48{<&- -%"‹÷åùì צ®SÜ¢rvÏ-æPnâÛÀ/«1ýsX¶n†zN´â4óãËÒs!vqÿxЫ»ÊS\èÞSÈôh¤w?¡H ‚Šµ¢Î;ªEʤ…ˆ€ºïÞçH+•$áo>·–i[å¹eZ)4$ÞzØí;ª´R&&@÷•d휵l¤[Có‡g'ƒà«X€ìjÀÿ ¹` >Í$-ê€(H]„€Õp³ø訰ª:RUŒª‚ÆÎcî‡t­9Ñ¡’­9ZkªEŽúI¥öÎLÌ’×½vŽã¶¡«.g4ò_#ïCÇOijNýftÎ3rÆóÖ/™*ýò¥Ùø˜gaFÕ„±Ê…Äñ4MêªuM–[Ó8˜Z² à²5ó#m ‚ØV 9’ç6Piˆ”gb7–'í'ù1»¦£W22zŒ.«ÜE]·-VwÉ$^SÓ‡ÉH’ÔS±”Ü(*Y;E-,óA?Ú¤€<˜WÊv÷D¦VŒ»Ù£o¬=6.NõUZHÝœW9m]ï!›+ZÇZ !î¶~\2±C5'¥šÆ¶cp†Ifd(XŸM4»ÓÒÆVŠÁ‘´È—çµFGo©z®Ïvv)uJÔ^` ãÕ ±ÕZ‘ -Ø9.¹ƒæBƒävXã4Á1#ݹëÙäääð@‹SºÎNzÛ•ùº,m -÷.CÝí2öÍȱù õž}o£¼ñ±èoeÒØ¥@ɧ9'¨¤§»¥@¥ây¿Æs¤ ä0Bî¤ íôT -Ò¨XÞ;·€‘[ü´µ0èø£FLžS³¢bÀifDbÿŒ£\Û-˜ëô‡ÿüñØA¶ÍýH•”¨Ð£™‡·æV*½R%°«ôW*¦4'=mEMŒbßòzjŒt/‚‚k&ȇ“¬õV’¬Š®šŽŠR*-1ä–õSdB•þ®¤ªÓÞ)h}ÙrTÔ¡r¢¨­ ÐNOÑýÚÒ¡¢ÕÞW13R£ëuÌÎfliŒÒ]¹Îš $9¦MÊç²%-ÜÐún¼¯%\€gV`:èì -r(H¾† ­æ"bßÃLM$¿›ô”c™Wl:ù}"hw *­…ÌQ=‚(P•ÉÍš.ñZ¦ÐÌÍ¡ŒˆüŠ[ ¤±UÐrD4éÑ€ -vÃåDöû,y®iy’\kˆÒĸµèyçQíš5[ÛbêYó¬7ì©PŽµgaø?è©ŒeÆ‹r­X·Ÿ~(i!k§s_M5¿õ„n~7¹”£¬F Í”iÊú64€œ9t‰zr‰§g(†òŸYµ­ž ‰5ØXtn.ºœÁ,ÝÏa! ÜŠô~Ä72O©½5KxŽêe›ç8!0†§ÇÑ_µ²K_ˆ©‡À®¤d° Y_¡³G/•¹4eRعÓÒ¼9Ûôd.™ž˜6ÚŸM°Wz~ÀˆeÝ¢ N?”k\ ¶íwùÍ•‰™¾‡ûhžAkƒæb ò¦¯ÑX¦µM9‰Ù¢ÕôwÔâ¤ûâÔ^5ÎnªÆ—lŒ4ò|·_‘ó»9L±ü”b…ƒc,®;Æâî¯Ìù¾jux"|”!‘{쀜„¸ž5B©æ´ìh8b¼>ùFq­#æ@^ù)º,KܶZ’wÆ>q˜¨®¥¦ÂŽÈäC؉¡"šÉOô¨Z;¼¸°@2ˆ—’Òê¸D¨?ˆtyC¨½]×l‚¿·f(!òÓnÍ&øÓšMÝ–YÍí6« - ƒ›¶s”XÈîw¿…ßÉ Ïckpª›ï%ÎgÁðx3ÀVåpvÕC ×S¦/˜ì¯NÝÖ\š! §ü„q]¬7 òilgך©Ý«ÂHëz®ÂÀBˆE¦…ínÔ¸Ê2’Æ#/ý¢‰Ë(Ø O„|RÙâÁ¡òNów˜Àä;¸R¼jÞ&ÜúRFÕ[IniŠð“•ìæ•´ý¶­Öë®ìpå½5ù’–Hé—ïz¹3ÅKcÇ·Ÿ“†Ž°±Q¬FèÉæ • iÕàeÖÿü¶–éó˜´²g Þ¿ð7§ -«ìýŠø· YÚß|Éný%ŸŒï^æ”aö´‰PÓ¹!bÀ#}ò$œC!¥´ê/$[¸k[DÌ[û€mQÂÐ`\˜Gl‹Jv»_ôc¶E=f[ŒcÞ™iWŠWµ×ÂÞa[ -0ÌfǶdhË|LèlKÙÕè“ÄO8T„G€B|°e‰ŽÐÒÁ×r5 À±Á'_æ#Š¤¹Ÿ *ÑÍ´¢:–ÁS»jÄzkÇ\óVfÂ]N6ì½>]IÔbñ-¶ÎÏáŒoŽjØyÔ]ÙOÚe?ûý÷xk$ÒiÀa˜7rbäÚÄ'³Õ‚§Ý{š—*ÞµÔlØIëJ3ãý}.,ì»æ;U·ùòàÞú&UØfª¬Îµ`—ã¶ÑkíÚÈáɆ¨ÿÖ·‹.î)‡Ê…’ Rñúƒ1hŒ‚í ë’èºÓ ÂP+^3$ü¤¿¿6ƒì|ÉHsaö’Ð6¡w* ¤x뎴N‚žÑÚ]/§wnãŸãÍëÓ«ç±É㤧µ¼Û”²Ýiµ„pLÈ0Âü™‰Ùœô;( -óõÛ§ÿŽèsϬӗ¿}ÿôÛïðþïðóë…ƒñõ—ÿ¥‘ßÁ,‚õqÞ¿/ýô—üUJ^ ñú]ßGCz â²¾ºH/¥X°ÔקQ«£_Ü‘Ÿf;*V ÇË:òÌné‡ -³k„„‡SønŠÚ£7­—…¾üƒwqÒ·TaØÃY”´ÆGzÇœQ=,ê -^»=çÊ¥á*OáÖW Tò£@ _x’ñÔ~…§6 ñ–ÝÉC˜®eÈ)ÏeOMîòœÖ!µ×,„alÆ“ëíîÅlƒ ²p¡k¼ÚT;mP«œ´5ÊøZhåLs3nda·PÉÁ­;aŠ1Ì[°.“¡°.=àËÖųæñlu¿B×ýâžnKùÊ</9—§!¤¡w k°dÛFe¦vÑEßvÅâ• _Ÿ“w\¸ûÔXNÎþ·ÚÛ8¿~Ç…ö^6H5h`ë(ßÁxH¢¹Òügꬖ9>® IB¿@s±ªºqÙ}¯‘Žzfƒ dý3…q†PìG8%“j\aõyÓ´x—ßbJÒ˜È::•m#·`K ¿Œ§¥[B®–v4v­o$µ»œçÞiBËwèð³JÔ#±‡ˆ‡ÐÃÔœÜÿ_wdâiØÔP&A˜Ý0ü?«Þ© +<< /Filter /FlateDecode /Length 3429 >> +stream +xÚ½»Ž$·1߯˜ÐD‘Å7°XàZ£1 G†/Ù°û 8òï»ø(²Hv÷Ììî Âj®Ùd‘õ~°Z +{ùçEâÿÿô²}}ùñæå%ˆèœ—¯ÿxQ‰ÿ©K .Þ)!º|ývùõUJ'¥Ô€¿ÿ®åÙ\ß~°`ñ­7RâKü}ûíë//Rx‹ÛÄ ï_—áñÏÓ6V +%¶S¶1¸ÜðÏ•íòó&¥U¸ Eö¹i |ݼ#I[ù(´¿x…2úl/«ñ¹¢™öÊï +Ü ¡‚9ƒ¥}9£ú Ç·ò~–òÀžÁJ¿é<‰™[Ÿ“ÎJ¸'ÌïoÊ]"rœáœ-û9çðUc­½UX[9k:³­ûhxûAƒÇY_ýËš:G¥§Ñ×òàòäðZŽÛ—šÓ±1mG[ªºC0õMèÌv‘`Il‡•¸BÝ‘çM«×"ú±M)B›æ&L +\÷Z¿ža…ŒÄ§#Pærp23 +dOdAHå›@ìÃùÁȸμuaG9ŒQò•´ˆ™Ì„·L>ïÞòšŠV‘7ƒå¶Ñ(!X`ÂV è[g£ûiM=Ý•öZç·“&2§ÝÓŒ~ŠºwC»H+­›_p{Œñd|aƒ=Öã…6+sN…d°LGL·R ¯Õ ÙÚ&è«ÍpF¢ynv“SCkÍ•.?ÝQº3¼•õ";ïx  gxª­ÈÖ Ó"·3'ü„Yñká¤n³ Ú-G×òk“4ËêÂÝ‘:i7]Ò„ \ÛZU4¢>‘r5‘ô*‰f6ÍLÜØAZÓ±+s:38Ýÿ‚Þ³ŒÉ¡ªXsOxdå´@òÍû‰7ÜÈÿÓH"i‚=7ŒNNP ~¾;Ìl>LÁ1í鮃ãdîÄ~ÚèС:‚o~*"¡7D'r •éÆ §™É£•Ñ‚z²U²@[•EÖ5CoŽÌY^_ÇIÐÊŠäjÛ®ªa&-­¹1Y h9Ýp‚õ½Ì¢ÒB[˜i~'˜:⟱F¹ppĤ™×@'<²{ØÈð‘#Ú16¾…?xªæ6Å*Œ’ ‰ºÍ•“Лf„Ù7’ ÂudHVëdiŒyí]¶hS„+7¦Û¼F’mn!¹5{$×Ò¢×±3Y²E˜wÊ8 Qx¥g(^¾Y÷Z=Q!‰íÊÔÉFªÞIç “¡´°¯‹e²ôD±{‘H™Õ|bSâ£HD7x˜=1ò ´j"zÛ:”U… +fàâk7åd¦“`—7ó)Êh¢¡Íp›Ø:_yFæ‰Æ“7,°¬äûQè˜UÇK¥,Kôd¡U?3W…2º§ +h̙–yœŸjzlŽ#&N|BDfñ”v§l½ÊÞ%Œ¦GºîöZ¼Uå7ÑØÄÈd …³Ñ©šU"IyÅÙSF²R|©†sëÕ .àl‡DHãû*´dÆÈÓáˆeÝL¸"dŠ÷šY!‘/aê‘Ô¸žö ?í IŽ‚>ƒ¤ƒzWžP9«µ0c–ªèGV¶úo?>ßË0c€ú <ÿ+(«‘ÀhùCÀlLF7ïE*SD’žžžÐ'Ú°Ð$y@˜eÔ®;§'|¯=ñày=˜™ûäŸdæ®’ŠDö“iht*+ Çd¥Ú#yÇ*+¡‚Zèéš•y<ŲJ ûY)Öó)ROzòN5éñnäU®v¦S¥J>ûxPAD»‚’96M{]Ç$[‚0K^£û3xáô@!µÕŠdÒØz>ýs-=©²¸ÑÓºƒDÀ¹Nå¶Ãnµ5Dtb½ÎîâÁŒ%àL\7_©lj®† }ß/¦™Á“Ù6D-3nϙ̽<[[…9Ù8¼GNmè2 +$·D +$N úyÌZ JLKôQ"È^9¯nQ{wäË+’›4š˜êe åžêÖÀS¯™VZf¿27˜÷G½Z{–{†œãBÿžrD¡G'½ÿª´(¨X{ÔyG9¢Júñ`¹û1]ò”R%Ëø»Ïm5D~¯ò¹uZPFôhãißQ¦sunôXMÖ­YËÆ®kxþðÙÙ F­žñÿ„d0Ÿvƒu`¤/ODkSN3‹*«pýzOW£ª‘ ˆ1…ó”û][ÎÅt¨fkž›Z•£½iÔ>XIy@öº×¡Âq~o¨ŠHùµðBaITKò·"t_5µ1¬÷Pp)öÃk·ò)Ó¢œª‹c“  ùˆ¨à¨*ç¶Uå΋…'–F9),kY*sá°2G©VXR­xÒÐ⇆ÿx….ŒÕ«ÓÞtUéæyFî¹^9Àø^F=CiFµžhê6Þo‚㸶ÞÃD§5 ×a 2ë·í€•äƒÉÏs<åz¸\Óñ@dJ?vf¨*í3å‰w­õ>Æ;¤LÖñ¦Í;¥2D-†I¤ë >º_»‰áÑÚMä„(O‡µ›îÖnÚ±ìÞÚá°fG úå8gùÄø¸ÓhøíxŸ²ñ:·Å¨¦{`æ‚v®p²)‡w{Wd¤áf)ÆŒ…“ãݹëZËA+¤©áOY?ØÅöÑAé  ‹íV;í—F?}ù£¹üíÛ˯¿áøßñï— ú·.ÿË3¿¡µ7©´îß—¿¾ü¥|Ƨáâѱ`FÀÍL°éºJI-¬£[á½dj{Sª†WZ²p<ÿx«<­^YímúµBôóæOyå}¤TÐ0˜ž 粸÷¼óÔscŸøL÷+»øåØ@Åå÷îWöqJUŸ®Gh<Ò¨¸Ö·¦®®ÊµI¸gJ…Q +!°ß +¦&ìaj¬Ìý´³\Ä¥¬ÀNa¸F¥ÊåŽ:X¿1="¦ •hÙ"ÙÑÔÈPP?cW+À4›'á)¾5JÄ·‘RO%Y|[ç·ïàÔš„1‚‘v>ˆî¾‚šjžP" +s”äî°ÒTMëv˜WÈP™—hðóRëAºjw*J=r×OÀÊljz¯O¬é¶±%¶³†üvg—™VQQc^‹IJñÏ)ˉ+·RÍ‚bŠÒ&]îm^ß¾yáÐÞkÈF©N Ïð=*!µ—}¦Î*ÀœYNÖHÎ?1Rí}¥%aøÈUMq[+ÞÉR“íO[¼Í!ëw#›VJ€ž6Øûœ©™§e䬖1uö)ÚÆú¡k!§ÎgA'VMc gÖ~oúdK‡>õ²öAëY¿¯·B÷I¶S©ÔŒ' öN'xúòÕº †EÑ)¾Û(ü?Wádë endstream endobj 235 0 obj @@ -720,43 +739,32 @@ endobj << /D [ 235 0 R /XYZ 78.37 808.885 null ] >> endobj 81 0 obj -<< /D [ 235 0 R /XYZ 79.37 492.794 null ] >> +<< /D [ 235 0 R /XYZ 79.37 396.082 null ] >> endobj 85 0 obj -<< /D [ 235 0 R /XYZ 79.37 468.565 null ] >> +<< /D [ 235 0 R /XYZ 79.37 371.853 null ] >> endobj 89 0 obj -<< /D [ 235 0 R /XYZ 79.37 286.317 null ] >> +<< /D [ 235 0 R /XYZ 79.37 188.655 null ] >> endobj 234 0 obj -<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F16 177 0 R /F15 147 0 R /F62 150 0 R /F54 148 0 R /F53 146 0 R /F22 154 0 R /F67 175 0 R /F55 149 0 R /F32 156 0 R /F61 159 0 R /F48 157 0 R >> /ProcSet [ /PDF /Text ] >> +<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F70 187 0 R /F16 177 0 R /F15 147 0 R /F62 150 0 R /F54 148 0 R /F53 146 0 R /F22 154 0 R /F67 175 0 R /F55 149 0 R /F32 156 0 R /F61 159 0 R /F48 157 0 R >> /ProcSet [ /PDF /Text ] >> endobj 240 0 obj -<< /Filter /FlateDecode /Length 4256 >> -stream -xÚí¹Ž¹5Ÿ¯hg+Àâ’7  žV pfa2Ñáu´ìÿüx<ÞU]=Ó#là´ÓUÅëÝÉOÿ:ñÓ÷§óëÓ¯W¡OžyF^{øŸÄÉy&¥O9Éœ—Sï¥0Ç™5vÇP¹» •b8í0ê…©ºbÌ6<®…w³¯ “`¶V~ÌйÎйã†Îm bú »%ˆ¨§ïóz ²™Ué×ç7ý<ߘžˆýƒom3³×¼WÜðLížgÇÒºòøµÀŸ8¥©]A«VÊJxDùŽ3ƒº´­£ìïÅSè¸ ˜þIQ‚æ’'ÆÙu´ä -m˜ÓEˆ‰m ¥ÍQyJÇ8"d€CòêõÜ~ ¯|="_MÑÁ)Þ0ξ‘–É |ûÙåkQù"¦Ñ¹æB®°îÂaZd-C"”>™ŒÊLŽêt–à.´LNõ¹–pªŸ ‰M§ÎÂðM³Av¤¾nãLï2Á¼4#¤õzËä…JòBí }혘qh R$Œ¨Ut©¢3Y:lãždŽ³’P8´u£ƒÑpuÒáM‡dUžQ3yÙ꣟ ¬ÈAFžc‘s]OïìŒ bV ÒÊg:¤Yðÿß7i™Ö¢½etGhYe˜Ì¡æ‰¢£e+ Ô'-GÖ"HâZÃ…¬Æ#5foŒWþh âm -«‹ ¸ê HUû„q‚‰—:Q?ÄK™{9ó0þ~úöúôŸªp}~íOÚ -D©<ýã÷§ð‡f5‡PL)súï?O¿=ý¿¤4¶` -ÿá‡ð‚~䙑k· ˜V8‘aFëÞÞ‡”A^«‹Ã¸ùçï;q¥d -?-ÆTMöÆ|«i‰ð›èAršù +zÐn"†ÑƒõŸGHv¨pòŒ+˼˜0µ˜0ÁfâCÁ¸ÞEQ¬Ký_«PXrÙx˜ ¢t¯jó›óRV¹gV$ ¦|‘Ý }/b CdäUAÏâ<Œ1*“âa”m ¶ø•U<¾H‹áG‡C/2fUeŸ{Á>c6½~ùó§ÜeƒXŠiãû.úT„bIüMÊËÀûqÕ¤¬ƒ¢ÐªÆž=M‚»YñÙ -Rå°IAU¢•·::&Höå˜ -ˆZG%œÔÇ"û„Áá­_+ŒÌ?2üwÿÆÙÖŸ~TNh§ŒPÃ4R-õŒðè=X=®ÉÜ©ÀA1œâ#8áГ—ª@eÉ"uÐmRÀ*&GYiTÒÕIƼõ÷–ëè$¸ihâï OQ£c,í.E/zNâ#)C8š9'[ˆÉ®Þ¢ -ñ`?–­Û¦ ¢¦Daí úÙɦõZ¿¶Ã9ê©1ø£SYǼG's€¢Rg{92“óè0L}Í×õL^a`<Ïôý#¹fBM8‹£zÞ·)e àQ -F–ø–ôeÚ•ÏKè¤2h7ÍÔ»q’"c âsS\½u¨e€k'¿¶~†ªžÀ9­´ Ü[OfíÜoµ”÷Œ{sL¶÷ì’× ‰³%J”£˜?€)@dm;αa•Qã¦Ö£ Hú¹¶Dqç¡õa…öy¤UÖ³Id8çÖżKLIÄó#P }¸™8fCÙH)Ð!Ô3ÎŽ›1å,êñÑZå:ãUo¨¤°{7d{ëƒ:˜~쟓 Þð5ìVSDÉÃ¥ŽYÆ;´RWCiúJþôû˜Í¡W~‚mƒíQÈæÆUU~ïX´GÎüQϸp]u‚ËÛ¿pÐÊØtǧл9šK9" è!j†9n…qEi†¹n…¡õÝFaè¯a×(Œ³=Ò(Œ8¾Ç( }o… goñÏ”`V›iÕïôÏÖ‹7øiAÅøæ'/m˜àö­Ækè}·ñú¿Ëxm 1bæÒ•ö%š;!ʾõC šBêy'&x×ØU ‘Ö0¶~³EÿÒè£ÙÛ·2Y5¥pxØËWMI¥ÌŠCO׃üh³0^?×– ‘Át«•­³OÚ·e1±/ë†aì¿‘1Ž© S‰¼édlyH¦½Ÿ ¼/ý¥¸bØyD™ÝŒVáô¡WÍhÙ;S¡„™™Ž%À•&¼=š'ÆmzÝJ€£¨|ß#ç¿oylèÙâ2†~ŒS‚Ú„ž°±±ƒdD´/C뇸 `Pèì4ö!7,zõÜ…ÂÚ¸Ë=BáïŒÑgRâ'䧑è ´;Õ…Þ—¬Hjöôò­\é0ÏŽRþõª% -óZ ;ogK$¥•5KWJ^Ÿ?Ó¨ú’•Œ¯6Ò¶adzŠÕ[ùùºÝ¦Û­/mº - [}öMÞ ’é$CÝþi·…†:¨Ø6©æýU×½ûݪ‹Œ4…v¼ì–„²UÊϨ´¡”žm~!­£´ðaÃ!…fÇ,·¿,H㺢ø4‘f£MG·*Ë%vT_îø—¾äì Yj†õýÞ)²«Z›!Íìˆù;‰§Pî˜ÑD’´¬èª`î¢b®Y‘áÀ€Ô[¡ÔdÄbcÛxê]Í“¹ÔÝðÚ,9ºû…¨£D0ã2¶ÊU•­¨Ìµ£¨HÑÝ>%fc¼<Îv¡U(Í°´UÔ æsÍ›¤JöæÆ?ƒ’YÉ­•©@[?%®=WÓÖlX2/x*Ķeyíb©¾Ÿjm¾ºèæåöTÚ(ƒ§`|Ø0u[Švé‹¥l-6lK‰æJ ¶­ÊÉŽø†pY÷Î÷ùÈáKnÆEÆBB[ ãJmÔÖ¢'së8:z\ ³q«J˜ \wÿÚúã7 -QkØ™L«‚FÉ-:FÕI~I…jÄH3‡&IZ0Q’žº²Ïø†JÞÚ‚ÒUɯ´îË¢¢1%A²(R…)©ßX‘ÜžgéD·­{»ì·ÌP«ØóSo†–íÖ¦(¶Ù¬ŒàRUu ƒlЈʭ«òœÞ–SuéiÖ# 1PÀ´ïJ3þ¯a¤aÀƪ9:öv®eT6®ïº£‰)AòB¿ÒA®|”°äˆö¢9Ì·áÃzTEó:ßëšCÈ,›yXhÃõ‚@Iú- z›”J”RîÇéL¥CIad*Б¡îœ[¸´ƒy$×Ðð!¾ -¬C•ò³DG>WäÜT* —-ÚT] -FÛ£d‹”2m®…¤Ý©.U3ÀQéá§aïæ|%˜n–ôŸ“MÒÙòq{4)¸“ÕêˆÞŒ­(çßÚ|H“Ïç¡K`ìÖ©RJñ,n\÷£Ø7çŒúÌwA ­®Ÿ?+#¿ ‡º]ÿ“‘¦5uÒÖ›h«5Ú—xOBn[ò®FùÔ¢ ÎuWBAM•Æ®Yñº -ÊiÅôix;1Eá–û  䃚™1„Ð-Ċׄf²!=þÈýQÇÌX7œ'\d=Ž&[|là×=…N…V cŒ¹Y=ÍÞ“X¡-`Xn»ä¨ðˆa Ö» ‚ Ånµ™¼¡Ö«äK{s³Áˆ…•K*\s;Ø·a‡«&§ŸŸ®í̹VÆŽ*)æmù#µ¼ü3®ùÎx-œý—FŽ£¤;šÔx žÊÔj3ûÊß¹I­cµÆ°âGn*G‰i2dÄs"ƒ«µ{_•²¦í_Þ]ñ£¸™²LôdžbÚ°ö€:AÍg¡ Š§R¾L[™BŒ1H|óöÝÆ›ßÊZÆ1”P}òîDŸ”†Yo¦Ñ^’vï]ÑYüRö² ÄVU¨èJšŠUÓú|¢»{MˆÆ¥¡p¶dÅ:ÚL[Bôûàã„ëµh/å‘]<¸«²ï(+ ½ŠXteÅXbt©1îÙ+ºEV·au“‘9âadgm‹¯‰£%$¼×ksB”¢Æ€=·ãõúD2nêÜ_ˆ”_jM[_{—ñÐŽjêÑJI}³ÞÚ§VѢˤ°âˆ×&vV°—£UsÖk˜ú«ëšùt~ksTWV!ƒZ•e$™OÆÝŠã 3(Y=©î-À°œƒaZ?Á U- žp>ˆÃ:ÑXÖëöþ*îZ6 ¢¹yéOçþ1Óõ’.&³Í?õ-gž Q£Íœ×s%ªqÓj6îÚ¤Q¾nÜâhœõêÛ•SííZ­rìîë±*RYWjjŽ/Á´$üåߟnë ‚²)¶Ÿe!s¾µÍunéiçªJla\ΔÆé*—Ö@†¸Àß.ú $³Üm€™²±&$àÎma ½-*&=>…©Ý]‹›Ñ!$]Vô 5»©|³ñÐeaÒÙXŸÕÃÝJ%Ý‹ïõ¹]–ªF•ðÀÍ6Ê••Žç ‡Žwßõ³ŸªB2 i†I†@0Ê1ál :¶îâ@9Xóíõé^US +<< /Filter /FlateDecode /Length 4443 >> +stream +xÚíÉŽ+·ñ>_¡Üb ¦¹/À`€§ÑÓr‹ñnANAœ“ÉÿR\Š,.Ýj49ØÀ󨻹Ô^Åb‘üôï?}{9ùå*Ì)°`¥Õ§ï¿½øÀOâäSJœŒ[qúþûéï¯\ˆóÛφóWÎá—~8þ&=üU’s Ÿµ°ð¤=4yOî5¾Ïo®ç·|ÿ+ÌiåjNa,“Á “r©8·<Ï Þa$xÐ<¨á¾äoV–÷å]ümt~¶~‹ø¾@°ÆZZÎ7ŠWž‹âG¶—<[ü‹Ð’V×øŸruFèñKÄ¡À)ÓsÀ™#æi삉-˜Æ×ój¾D« ¾]s%ÍuÎÿ°}u—S\3é€S:0Ám¥“^QÞ°Æ·ÒírAXÍ´VãèÆ8 ¶Òª×©2cúÇo[ ®˜¶fšQíËŒˆþÈNXkEmMâˆ/Ú™ œl ½>]š 4ßfÜŽŒ3¾ÑÔ"¡þœi«$ÇIà/ÃGáCDú¦I4ù.iµrL…™Hz-ºü­ +ß”-àzÂÈ5KŒ0Ì91rmâ8Xpg2qÚ¦Ô6L)æ¢_èF½Ã†íëDÐÌ€]Fo>¡­ö·Â^I«‰ž›«ƒ=®Ä¢ôo.ÑÃÌT¡mQ~âÛØ"ý½Ž¶¤Á=0ÆcÜ 0'j|ܨ¶+z8ìŸ%¾Ã!SÐè5$“Z£ßƒÆ(ØΣ(×|A²ÏUeÐW+ŽþªÚæo_“m,âKFš—þEW´CïTÒâË;1|th¼š†7‚Ë3ug°t3>îÍŽëÓ|%6Î3gj@6¹G¥Ž[-!2ŒcþÈ€DŠdNÖ–ÌZ°=5=¬Iº°’߬ faÖOZqmêÞB_¤[ÂÛ¶ï0„­³àå8{¿9‘âžf~hŒæ/S%³ŽEè³’ÓF¹&õE¯gÚ„Zêü¦©é”ù“¡ëøâ+Œç¬Íª¸~sÎ3§¶©E:tVJ†l¸éL5dq–•#™qß”Epø®ºÞ•Wåâ>¯WYý¨Í]‹r‰lƒï¶}ASœIcÆ™+«ù«‹½"ªÙŠáS]¼.Jv,ñŸâ’x†8@ö¦8HbSúUÙ”z¸Kñå™Æ%Z¶bXk¯Éä¦vD9q±Ý´üÍ ½®~eGæ¤aÎùÑrhšÒ€9KàêÈ÷v +B%)ÆÙbä5'3­7iÏ‹r*@ù¶’.÷ÅðC\V'¶Åö{LyĹöÓ °ˆð\ŽPnè–eµÛª”»Gµ Ó0c7h1ÒuBdçl6³V5‘ÎäÈ’|C»ãZmL~H¹2²¨\ùéri)6”+•+·Ù³´ZìXZäĕθL,Öv]BPÕ^i ¤¦.0A– 9wZsnQTÄÆlª6§VU›UI»ÖfôŸ£±Òz&AìL(šwc9îóAM½—šd<¨›w;^Êßå¥4³Á £>Q—š—«žl#ÜZ„6ûæÇ2%íäǼœï¼œ?îåü–"æ/ÉËù[ŠFú¾Ç8%+®ò…Í /PóŠ ¬Ýk[ä¼WÜKÝ^XšÆŠ¹/ôâékÅ¿ÏÕaæ°AÐ冂/f«Ú÷š[ 4¾ÈOõAsÁ4Dm¥ÐÁpŬãìÄ-¥Â +æ]Õ”Fä]@•¬ùÿ™ñTžq È€‡â-䉴EúâR:¹‹+‘?Þøà$Þ8ξIi>5ξÌï˜i[ÒF‹›ð®ÖeÛ'+[.²‹8[’Zæ û\ëZªŸ $U»Ô‰ìšyô]Iï;2Á,ÞLe±ëT0U‚ºöÚ31ÓÐÒ<ó¥AŸö}®§FÎìé ó˜Wv +I8´õc€A¤:[ø¦#²®O[{[ŠÚ£…œH›öÇ’WTçOìŒbWBu‰37Ûáÿß6yY`á@w{3}mÊ®öèÙ#d‘û÷$äå™37.VRöŸ7I×ÔUQ|‹”n}ÒŽcÃdwÌY™²ñï·—¯ß_þÓ ®t̘pÒ^3mÜ響¿Ä04ð(âö²=ý÷_§ß^þ_r1´`þÁ‡ø~-eÀ™”¯Ñ0Q`Ò‡ÞßÇ|AÕ§ÆqÜòó×o»;•>-ÆÔ$uc¿¶œDü=î¾yGìhÒ/’d=í­O#d?T%ùÅ-ˆ:Ðv 8¨8ì‰â‘LÂo¤Lz¨7»äqà”®\Ú?ù¥©…ãm{U&*©‘¦7¶åÍ‚Œå š«Ò³T[¿¨n†¾WËfFòf¢g…ÆÍIÛÿ2ÌF!ì)"u1óŸ8{ }þ9@8®­ëÓ²¸ +÷…“ôúó_~*]6¦™±¡ïò§Ÿªb,`“ûÖ1Â5ìh,ŒnëÏž+1äl¥ÊÔ-‘.¤Ä¤HO“®N©Ž©„öÌqÐE$Ë£3MÚcU‹}ÆÄ¿R­­F!ÿ;ÓtëO¿6aବÐã“3HS j$ÅÝë-® ö#l¹¼mÎiêb#ÂÑÀŸDE¤Ul‚×…µ;¶Ðjj,ÃÑ©œglËÁÉ ’`×ÇÙÞÌñ‚6S_ûe=SÐ óLÏ°@Š&ôD³7ê·}·RÇð\å(_[9JÚžþºÄNi ®ÓN½I¬”[ œÛñ­W\V2 +ÚQį4ØÐ-8gHéú†3ëåŽ+&ÎÕ1ÕÞóL\5õâ€VsQ+ž Æ–Òslx% á¨õSëÏ1¨ ý\[€€B­Ûƒ¸Õ£œžè°žM ùÔºÚÿ‡´5l 1?‚ð‡ÛIb6lRBB3Óì¸S@vdûä ƒH²fMªN.-LÛZ¸ ½ÍA“W…~è_R +Äl„¶øÖÓ*SˆK³\óàvDLK]m+þË_1¢~Lؼg^† · ±nχJÈã²ãó"ü€Hp­ŽB•]à´,FBY‡‘î ø”3Ì[ý4¯ < ØOõ +Ã7¼ÂÑgz…a®^ah}·Wú¹ëÆÙžéFßㆾ7¼ÂD³ÄgZ¤¹êã³uÒâþ8MÁz#ððƒ¼—‚‹ÓâƒÞkì}¯÷û?ä½6@¼˜½P¦âöÙ¸‚·c6Oôh¸¼˜ð]SWK¼–cë»4üáh÷£…nÍXæ¼ÝËXMY¥"ŠCOߣü”Õf¼~®-¢¬Mý +²µ`ö¹{Zú˜òûªíæ£ë´qJeØÆäÍ(c+Ä>0±¼/ý#*#ÇA´ÝÍhUIzµŒÖ‘-4­xJ0Ž„?–WZƒ[:šG¹mneÀ!fÒ¡ëPòß·â5ˆkˆ¼Ï HâÑ[aFJlì!Y‘\Kßø)‚´ nnúP| 7è¢à\ÚäPw®¥O%†ŸŸ—VJ¦Ãƒd£ºòº)€ïÙã[9ÒažcüËÕ(P LJY»ÙX*W3Xîúöst™‘©ïŸr‚Âug7œ!Çg’,_·Ût›õµMW`á¦c–Žì )qüÈbj‹§Õö >x£-fŽ“E9Ӫϰ²¡Vžm~AÇø°ÑP¾vGlrûË‚5¾«ÙHOk6Út¬ñ«º±Ra‡µåž¿>t’˜^‡“Üë3[ZÄ¢èòw2OƒÞ{1 b%iÕÈÕÐÜ%Å\²"`*˜-oÐ]Æ_wûÀ%mväØ’…Õ¡´#ŸtØR‚yæ°Ng» Ô#I .´ˆ:ã|n “\ÆÞãLo¨)•ÒJc•Š¤åÓþu8SC+ ªh‘,OuØîµykÀbm?–ÚÄ£ýñ€®®eN®7 I0^·‰ñ -•r­ÔÙªçøj«z¨£;õF®Ø#ÒÁæÆTEèZad°E´½†–Û'îa‰ÖO"Ä­ +qð€Qä?¶q£–‘§ÆE«RF k;Zë{.QCš…³\) `æ">uŸé »ÑRÒU±¯rþuQˈgI“bm)ZÞéDm§eœ¶î]rØò@Ô¦—§Þ-Û­½Pj³Y5˜Ð¥7¦¥ +´”‡q:zaf1 +È]=í¤[¼´- +ëEL‡O Ž4¬ÔµÿaDÂCŸ+vn•xÙŸìÊ­ó¢”&“ç– ²4ß‚Úîu· ÕÏs’KfàÓçÃ’«Ì…Ÿ†Eûçé­_Ž;£IÁŘ¯ÖGìfjEï ‹è\Ïôš©v"º.ý:‚F)ÆMp?K|K^àɤ/r—xN¶£Æo?ë|U*=Öíûç”´ÔÕ)×ß[€E{M7%”¶5õÚ_ÅJ²¡òÜ6&êÕc¼¤qíʉ7(0·•2¨ñí$º\æº>h+_Û½cqµ( ÅøY 6“> endobj 93 0 obj -<< /D [ 239 0 R /XYZ 79.37 377.492 null ] >> -endobj -97 0 obj -<< /D [ 239 0 R /XYZ 79.37 131.809 null ] >> +<< /D [ 239 0 R /XYZ 79.37 294.653 null ] >> endobj 238 0 obj -<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 147 0 R /F62 150 0 R /F63 151 0 R /F65 152 0 R /F32 156 0 R /F22 154 0 R /F25 242 0 R /F53 146 0 R /F54 148 0 R >> /ProcSet [ /PDF /Text ] >> +<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 147 0 R /F62 150 0 R /F54 148 0 R /F63 151 0 R /F65 152 0 R /F32 156 0 R /F22 154 0 R /F25 242 0 R /F53 146 0 R >> /ProcSet [ /PDF /Text ] >> endobj 245 0 obj -<< /Filter /FlateDecode /Length 2937 >> -stream -xÚí[K¹ ¾Ï¯è?`E¢ÞÀ`·Ûc 9e1· § ›C°‡Ýÿ)‰zVõTÛ5Æb ÝSUÅçGJÅ–—ÿ\äåÛÓõíé/¯Ê^¢ˆœ¹¼ýú¤ð¼¨‹Bû‹wJH§.o¿]þñ,¥Qø /ŸŒ¼Ò ¥7x¿}"Ýã§ê Þ¹•'@£ø Ý5·~,\‰®”¯×—¾ýyr°Å“B¦@ª™+Z—V]V’Ýêø̪|O_óß4Ž>´"òWÜÖ8'b„yE{-R4 ^‰{Ö~ãzæšu3ÊZVå«[áïúþ¹È y„z©¤ïk–®ÙÖu™¤/Z€Ì•R–)“–ª-p„Ež}÷1_“N&O0Q(éX,oâ÷Öl`n/’M^>i—ùÉwôkÁº#ŽµSE#$ÙÇÔ'4×ÚNC7¾ëeŸåƧ®®õÚÏFºêÕå1Ä—ïæ’&2U^3k–Çîy£VV@P‹f´Õe•ØV×Ó´µÂδ’­"ë)iÏäë¬Óæ=^ô"hXè?Æ€°H­¾dyY¬ Éò…s¸², %Ø–/Ö>³G—QäOr˵ʶ(´ÃºÖ=¯>ˆ:êcˆŽ²7ë’#eöÏtT|nç*­ÃÑ–ø؉¶B‹xÉ´xüºž.hÊc«fIß·ÊUñ¿"E¡6ÊÄ×yÒ¹%Ï uíϫ͚̭;ÊXãªp^=ÿºeK°BE[1º¥ïbŽÕŒo´ÖçP‘1á«£9Ä:±¬~V¶PAhp3õŠØyeYS_'X -×üŸåê}@=äsê®Ï)U%ï5Ê~Óî¶ü"Z]m¬î®ô½åJ 0}hßsõâªÙV_”Ú Á—Æ9/tôðÐyЦÉgU®^f$(ü7ÒJDk•ß ­Aøhmâ ?P×0ůˆ~ªJÖálIß Å9¿y;Y<ßY3dÇã½úÍ)Ð!¦,ëHóÜ,˜sÊ˧ -Üi¹™yè´ÓN®•õ<®'“#Š±T5n¤²#›bº\1Z=¢C©gVÊ:œ¸[Çse[+¹+²÷òÞ†4ÊX-”Q³í˜ŸZ­Èü7ë†0Š+Ïc¾!¥€X3xÒ)éOëžótu[ÖçJÍ”9·§FÅ‚î—#.ÌUWžJ?ÿ¥¯Í*PvLzÐ+'Ž¶0[« -Ži®ǵÊÜ ïñNèÐrú°Oèö|lË(bû­(øÎÎW oÝ̘YÉ߉̱°RyxfÏ/5âõr'Í8#Œ®…œ*Ûâ Êùªn„ÓA¦ŸR…)Y¤°PÇÖ¤^=èK¥:Þ`j3eåG{®Ã)«HÕeBâ|JHw·&aR!# aP"&›¿8٪ƤN3W¯÷woÚájZo8Í`Ó”]›„׫P#g5t§:>bA¿TÄ,Mó¾T轶º„dz]FÐZÞTå8ÜÃß4ª—2ßi¦lˆ[Ï.2å ©+Ðêoú’IëiOTÆ–hͧb#Flé‚9n8ÑÏ©9èpà´kZX¥·kö.ò%¢ÐEŠ˜ŒûßËpù7ô://½Îé°ÖV+a­é±k뜄jÔ5ŒÊ×åꀷÆ•zŒ%½5D¥¨©ˆFPÄð¢ã‰†mÒNX°Å!ÏІÿšw”#ÕãÕO=7’ÂÒ¡-þÿmÖ+àÝ8ä¦Ñ#Å;çRM…Ón̤‰A>YwÕG)hW·†O½Á—aµ\ þï¼ïSk[ÈW•šXïÅ…R^Hˆ¼ð*Ôl$»CŒ§èJQÞ„ž“0tÀH\ÑÒD%O Ú©\F~šÐÂÒ·fQS| -É®ºÀÔìmj¨°¯“ŽØ׉³â Fjåçh«ÞôtÄì¶Ìc•¹› -ãÐà£FýDUZ#ÂTŽ††w{Ê2Z,‰©‹OkREn{!Éul9¨™?„V¤ zNç |ÎGú±)~Êœý±Õ†ymرHÛD‹ÿìçz‰aVóÕcÃE*4¸ q™Ñ’ͻ â™î§c²n_¹Gñ±i®ï?…ΣÞËÎ3’6x.ƒnðF®Sø‡ÜFc`fÕ™x×—g~Ž¸Xzs姩{Þ…IDëyðaÇ -€ñ®Ou,,pd÷ÞäóCž5Mö÷>ßëjZ £VF·é!ß+x²p†Ó¼™h¹í Þ -Àêl½_À! ®¯rXÆ(¹X:×d‡,.Œ tS¸d£×Éî{­Q`ŸWKäá%C݇—]õvqÇG²5îÅGìÂãyØΘ;òz»¹?G°ÝFaÝBŸXµFc Å#ÂèÅðQåú>êMz=uPŸáa\oÎàqEFÿH´D+¬õßå£ZJáCøÕˆ@R…ƒ:Õˆ@`â‡ø¨VN¿ËG5(áe<補ˆfuÑHš¸qE·_ ¹{Ks$QâÆÝj3Í›ÆÝ.. ›,0hàý†ú…1?” uÀ¢È›­²a|û´i£PÁඵ¹µC¬#ïtèBÄâQÚ¹C—Þlr°{‰¦ë ªï÷cëÐÖ°ß™;÷t•N -­ºß%µö¡§·õY%rŸÕ¾Mð˜üÌ=½àÜ^7S~”^Rªò8uHЊ·ÖÇS†•.pþ¹v°äßθ© ~§È ”ììÌ'ýž`ÕTy_z}ÒØ(näfmØÝžÜ{<ú¬ŠjáÙä†6.w·ÞqºÒ‹¼hgïw>>Õ3ßn± 7´4ÓpSjÿ£ˆü$5²\ç¦ÈÕ¬Ùó×­ s®»¾&3DÙz76›ûf©µ kë§d; IsWëŽRÔ[·ðöZOïµGµH•~`¦ußÓš9ï8›Ô>‡^ºÚ`MºÚPÕ¶Œ÷Û§¨¶ÁýéÛ§üF±I2 ªÝÿXÐ陥u+57¼æh«Ÿ¡Ê?IìFâÂwÆÒŠµ¡Cp«Áhõ¢½ò~j«í<•Œ?§ÕKañ«ì)^ª@öÏéôúÞÖ¤ xÜgj8µÃK9ÀbIÿ9z¼ÎïïÚP¢UB¯/½ÞéíRwÖý¿·k±ÿ‰Ü£½]u'³“R1;Ô9ª>úÐ÷ó”¨_ßžþ5Õ¹ +<< /Filter /FlateDecode /Length 3359 >> +stream +xÚí\K¹ ¾Ï¯ècrXE¢¨0ÀíöHNYø¶È)Èæl€äÿB=¨gUwµ]6öfgªJ¢(>>R,–ååŸyùürýòò§w£/J‰`Œr—/¿¾(z"/êâ‚Ðîâ¬Ҫ˗ß.¿¼J©ƒ”ÆKiÍÛOJJI·¬ H¿ÕG)AÓõMJôùÚÒpšBc‘î[xûÛ—?ÓšÊ\‚,n,©°!ð’øA*ç_iyxû ⪠ջÍÔÑÇ»:²é ­[ÇÉ|®…‹kþ‰ÜEŽà]Ê÷+¦«Fµ<Õéï7p¯y?i É3âNóªý¬|4ZúÊ£"§†$ål¡øÎbêc^ÏÉ7𯼃ŽËiMÞ·Á¢‡k?"­gÊ]Øs¡Uü])ÑC|Á­hÊà–¦­°ÒκŠëcÙwÙÑ=}£“<ÌTx¼‹H5K~Cê‘þd?`„CdjP´-)5¥L³Ž('ú]e¯TÑ÷A».ó£œ-04Âu?ø)Ê•é›êÖ|¿¶U¢õæq#7lYÑ’’EAÖe¡ò![RäÏ\3¥6÷±˜Î6÷=çìae|‘aôª¤ßVˆž•ç±e’çd‹Ø²#é&ØA‡ø÷€†ÒÂy_qj×!Šù»è^dÑÕÊ9›1ÅüªÝŠ³;ûÚ\;×n£™NQÚ½m‚Dº®lâPé÷6š/1©CÝã#Aº[‘&_!ýÅÃÆW¦û^:? ’ØÄÒ*¦Åw+Ëo¢˜ï‘äÛMYiï„W‹†{×$%'!Ä:ßIv4Ta¦8èm›D#ªe&f(¡~Ë^O„ACÔ•¶ó*d·+Øl +©*Ø¡Êᇇc8ŠvšŸ&w¼•'Izü$AÝ­{PWŠ˜¢À†D™ÇĨKYAOÆõ†J«¦œÈX%¼^9‹¡«è¬6‚A +ãÌœ ónšõ¥ï½å$qOïˈ¸–Ãj±ì‡{è›Fõ»Ìwš*ÞÖºE¦¼±ë +³zÀ›>]Òó‹¢2¶x«½õjÁ‘sÜp¢ŸS#Ð2`ÇiÖ¤°îÞ@Î×;Ï—„B)BRî¿.Ãå_ÈꜼx²:«ýšlÄW1Fª¯¯hæºJL ø$€¶äb¼Ó[CÔè5q}Èè1<'Ò‰¯È´i»8aÀ<å‡õv‡Õ‚@ ä„…!´¶…\)†z/,„”rBB¸ ¥ ÖÚdWÀ¸qˆ®åýÄçq3±¸¹ŠS¢$*\}j9]^ç§ -l!}kÅbSDv•…2ÂI7äP~_&+°/‰Â¡?&“šúÅ7Ç×&©#Š7eˬÌÝ;võó„©C|»fa2âíˆK{:PècÒâRMJÈM¿Çh;¦)@æŸWQ>é îµÝ‹Å‘~lr 2glµÇàV%Þd?ÀC^ÿb­–×ëœI’´S»¼ûÒáp¡‘Ñ+Døúôåå?3y4‚Îpÿí%ÞYŠ¡coLSÑ^þû˯/0u•XšM³$7»`ãéÄL@.¼„šãä¬D–®*~ˆx¼Á?ŽdõVæ%00“퀱'¿›ÆK'â­‰Še)ù4*²Tþüùsgž 0,s·ýqà¦R@M:\E3@váDÇÿ.óïÄÙö£žSKxü¼ŽF¶«(íH‹ÿìçR’ Á¯ê«%ÃeW¤p$'Ÿg´`óØú4 +Iiñ™æ§½ðXqÜ^ÙÙ4Ùõ?…гö[Íg¤O/@,‚nqͧñ7™Ѷ¸ˆÃ}ƒž9:bh¹ãwJ­Ný££x›(N! <¡ã}•¿y„æÉgF»‰öXÜy*ÚM”#¾CúTÄ¢,[•ÅâSž&OÄŸ×úvÄ_¸/J€ÂfÜh—ÙûL£çv +˧Y©àæÎÊÚ òNk <‚®ÒÒYx™»“¾ðù`mO9{äÓÄD;—(·¹G©×2OáFYŒ^´½èÄ.A¯Z~"¾Í+]OŒo‹LïÆ·ï"OãE@³H(‘y/†Úh‰£ßÅF ­¶GåI£ü +¸Ïà„pE÷Œ·#Œq_e£ZÊôÇ÷°QM$•?(SM¾‹jeºðU6ªA 'ÃAu‹€«‰~CФó+™ýÍÝ{›#RÈ°æ±q·Ëƒõd& "<îQ‰Ü ~S€Öž’"‡[iÃø>jS%¨HÀ`·5ÞZA«Àȃ~]  F‚›ûuã«Nî ¶ùkcn¨¯üCkØְߧ;·y•æ +ÝíÙZÚ‡ßÖz•8È­Wú8!æÄíu=·ø‚µ»ßߥGéµ¥*SÓD\ñÖ}rgm÷éX÷Z›Zò§4vjŠßIò¼O gŸñó‚URå ¢ïåqH`‚Pt˜›¥av[tïñ d³*¨…gÌ=nœîn½õ´¥5y‘ÎÞg?.'ÕßvÑ ÷¸4Õp—jÿD~’z[®sŸäªÖòáfº³cºµ‡nÃt×WÅt_¨íÛý„}ÿÔÚ™µõeÙNÒÜæºc€DkìÂÛ{-<Þk/jÙUúÞLë¾Í5sÞq<ö­}ðýîjÏ´ÝÕ«vd¼ßQ•*YÆüî;ªÜÞ±ig1S öÛœ®ìîyYº¹R»Ã{ö¶Ú êû§ü…b0®ã0”î¬ ‚]eî@÷—¢ìÝhwj÷—B:½9ÿcº¿”¦c.œÒü¥ÀkÕjþúÚ^¥ (¤ NmúR’NŒ¨M_ç7|­B$„wŸìõòJøÖyøÿ^¯ü]Èt6þÊV¯zŒÙ‰§¤'K‘ úÄÄ]–©Ÿ¾¼ü?-ª‘ endstream endobj 244 0 obj @@ -797,17 +802,20 @@ endobj 246 0 obj << /D [ 244 0 R /XYZ 78.37 808.885 null ] >> endobj +97 0 obj +<< /D [ 244 0 R /XYZ 79.37 771.024 null ] >> +endobj 101 0 obj -<< /D [ 244 0 R /XYZ 79.37 682.839 null ] >> +<< /D [ 244 0 R /XYZ 79.37 620.939 null ] >> endobj 105 0 obj -<< /D [ 244 0 R /XYZ 79.37 643.554 null ] >> +<< /D [ 244 0 R /XYZ 79.37 581.653 null ] >> endobj 109 0 obj -<< /D [ 244 0 R /XYZ 79.37 303.165 null ] >> +<< /D [ 244 0 R /XYZ 79.37 243.786 null ] >> endobj 243 0 obj -<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 147 0 R /F62 150 0 R /F53 146 0 R /F54 148 0 R /F70 187 0 R /F61 159 0 R /F63 151 0 R >> /ProcSet [ /PDF /Text ] >> +<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F53 146 0 R /F15 147 0 R /F54 148 0 R /F22 154 0 R /F62 150 0 R /F70 187 0 R /F61 159 0 R /F63 151 0 R >> /ProcSet [ /PDF /Text ] >> endobj 251 0 obj << /Filter /FlateDecode /Length 3274 >> @@ -985,140 +993,140 @@ endobj 274 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 147 0 R /F62 150 0 R /F63 151 0 R /F54 148 0 R >> /ProcSet [ /PDF /Text ] >> endobj -286 0 obj -<< /Filter /FlateDecode /Length 2139 >> +283 0 obj +<< /Filter /FlateDecode /Length 2181 >> stream -xÚíZÉŽ#¹½×W䛌n@A@©Õ`|ò¸nƒ9Ùì>Øÿ¾#¸%™É”Ô¶Ú˜Ã4 ®L.±¼X¸Dêåo‹^~x9¼|º»D8Z>~}1Ü¡³ø¨Ð/Þ¥Y>¾.?¿i W­¯g­Ñkm>kí.ü‹Ü~9½"XAAzäÍñ›×'+­2VzÊ]Ç E„öv®o2ÛÉèx/”\¥PÇ&ZyDia¡4A¥Y¥r;ºöœ¥ •Vч½nœ¹ºU[¨s/=EéM=1Ó°FF4L -QbWtð”1­”…ÆuÈڹR«cd†à“þ–^– a']ÓµÓþ—·ö¦¨ŒvÕÞnÕÂ[•<»å‘†[Q|Ò%sÆâ/™{,²$ÙBiMóªLk·…Ú‹Íüæ3çŒH–€*²P츗÷\ämøTz·}4ÉÜÛ{.v´¢U{è©4™:;U»…öÞ#ÞIPæž^Óà$¶®Ýá&FF¯ŒmA\[g’IÜó^ŒJˆo½Šézö—‚xêªQ(ä²MÖ¶,¨Œzm|³ -nbÁ·ÞØ+ [ÁW1‹šmNï©aðÔäyšVVÒ$ÿÿgI7²¤f@±E 07ú\¢[òЗb«ÀÜ÷Ñ7{´Àezø^í]r›Ï}2¾>ƒÏr—äþéjíâTôl/3*ãqñF+o¡Åºx|£æ.Ze‚é5w¦Ø˜5³Xsê/Ò/ïkFé _o™mL,þ¾ ¯hœC¥­Ûò^âÆI±¹x€ÍžêÓÍÎ+RFY;-·8ßZAã¹Î×¹ä×µ@2‘¶­oÍgEŸº6¤¿×#ïóñ5¯¥œ©û€Ï ~Çþ¤°/uö¯*é„Š—‹wÎ|Á^svO}~Evb ¥ ²- (4¡ß‘$n¾ÚWvû\ο/eÆ.c„uݱ6[ĺ†Lã FÁŧÐ5mmÕ héuŸ‡ª4-6‚¢.Sè5Â×U¸£=“Ç­(¶8èWú”8» ,=È™ÁØq/^c‰”ÃFçñáâ$¸9'å¼'±Èà0ó .—ÇòoŽ|«ƒònXójÔuë›">æó_>^þ¹aG8.þú"­ÄîaÑ.†}œÜò¯¿.¿¾ü±%d¡ˆÜ! õå§rÞážä3¦¼'¢TŒ0I/cÊŸ'E1&ÜRqUÉF‰Tåñ§>ÁÙ”J7sÿ;ÓÒ6>p†-‡Iâ»o -´}Ìu¸…º÷Š1^ñê+v -xRE/½Ìðiý¦’tóлø:ÖïyðòD¸ïaÈÅKƒ{¤Mß,Æ*4“N k†Gù·lÿ&7˜wõNF¹á—y€0ÎÎÚ½D5 ,¹>öœx¯‚ÛÎõqΉøÄ`v£? -¼ <Ï?,Ÿà üžá+¼ZEnÚò™¯æùŽ…äg’—À} Ñ2 |†¼6¼^~—i{§Çð§ #±¡ô°¿* áiXñàû»ÛÈæ Þ¶‘û Êzeý–4éyÖp ‚Þ~Øá çB|ÐáGj[R£"ÿ<à³ ->a3û {Tˆ‘Š=î¬|VáÝôfª{?Ø‹¡·ÜvûÂ`jD ì/ð çòÞ·òy­=Pᮣ¡·ŠnÏò”“㓜㞳ñGŽ+x±ö0öû9TÎÀw¶ËFt¤Á}ûYÃÛ ÿ4ûY§(Äÿ¯GžnÛpý€1*¯¿·‰˜*èðéjQ"1‘ݽDN/ë}‡9ŸÐ¼­õ¥¼ž^9RÛÝ!¿™·Ù%u™ËúXê‘n_€eÖæœùg¢ŽsºÌœp.e‘Âå`qf[Xí6|Ò}êöî!äöt<ó7E7‘ò¦¢ö¨üTâ3d.WêS+‹¤òXêew.ׂOvù®–fÂA$åý}ojˆÆ±ïfšIqjZ`I£‡Yn)n–BúÚO·¥2jÅ·K¹4]1¶î’߆Ró WÒ“òðá)º¶ºÍÊ]G¯•'ÈÔizOï`VÁëËgU±Õ䛊Wws?Ö²Aª‚×Y¬úäXJÛ—>G¯ç:¡/)d›¶¾kWfk9!A´½úZK¹ ÑÃ;Þî¤6Šº»µpŠÔÝÊ4мÝÊ‘Zj­˜×Û  †Œ;ÎgÆñêèÛŧeÊ1Öqê·œÊb0o­ð¶á$«Œ k®rr%Ñ—ºÒ÷ŽCÀÞ_~[z…h¬ËÜo¥“(ÛX⣗çõ‡šbÈ  ‚„;Å—úªs-‚—¶† xXvŒ© N¯läߟžòdlï[ó«ù­ùÅs‹ùóú?T!ÏÇÕïq䘞zg©_þ´úo[Žæ)o¥¹~Ж“æt5¬ÚG)çÁºÌî—‡¹¯Öm×Q¼öwÌÝoЮœsC„]ß»®è‰r©¾¿YSsÅû¬ÿ›^ÑFÑtßójSªÿ=d5÷äˆÃÇZFN8?ÿÂÍáßraÃòï4ðëb<ñYV¦ýcùxÒ‘†^EÏ ëp¤á¼`¯UXK†ùƒ“A0]WŲ—.Oõ³CéöÛ©gØŽÙÝN4µÜùX«œ-ÌLlФFÁ¾ 9Ò (iC¤9uÉÐô.ɪ“~ý4q7.t;žÖêiÜ«­½I¢’ú&%”%² žýÞrÅ}à™W)Xo¢IÚ)‡f‚¦»¬[&¹h/õë€ÎTs”S% lQn;Êù®"(gKÆCï˜å΄ã?AiÁZ +xÚÍZÉŽ¹½÷Wäˆ"Á h4Ð¥R 0>y¬Û`N¶gcì‹ßÁ%¸%3«4.ÐêN.±¼XÉH¹ý¶É퇗˗—7e¶ ‚Õ·/¿¾(š›Ú\à6g•Vm_¾n?¿J©oRÞ.R‚“R}’Ò^é'ÐøõíhC+ÐÇ™ødéÉÉ7GãÚ8ºì‘¼>R]Ÿ.üwÛ¸:¼i)Y¦Àk­¼¢ŒP5Ód©ìŽ®¹d)°Ñ*ú`¥×­S7Û´Õ¼÷ÚSŒ³i&dFÅ“Bc”ØfL™r¤qÛã0¢vaj¼&îˆø¤ße–$HØEŠ¶êÚiÿË—g{cJZ¶·mºhÿÊ’‡b·<¥¡Q—tÉœ¡øKæŠ,I6_FÓ>–©ÍИçY`4ó“Ëœ3"Yddu±ã^ÞK‘·âÃôÎ}4ÉÜÛ{¯v´Â¦½î©T™:;±Ý|}îï$({5¼}H‹“Ø’§;Ã-Œ N(Sƒ:¹¶Ì$“¸—½)”^{Óöì¯ñ4ÅQÉe›´±,h\õîëúj˜b×ÞÐ+«gÁ›˜Eͺ§÷T?xjò¼š&¦IúÿÊ’VŸdI B;_³$qÃO%ºcú\lµ¸€û>úf–¶™¼³½Knsy.®ç¿µËr—äþñfÌfEpàM/³FÊIm…Pc=z”þFÍmP´î5·ªØ˜43À9µÅKœÏ-£Gé _gˆmH,~߆Ç?UÎÊ‚Æμ#¯èÆŒd´yô“3<ò_{4w:7¤”0Jï´œq>;A­q1ð^tí,ˆ™Ÿ#$J[Ï·ê³Q>ÒïÛ‘‡÷ùxŒÎk)gÊ>ô§P¿c„1ØÛŸ=4¦,^½så æ–³{šs Ù…-h•Ðl¡œ0!ôIâæؾ± +Øçrúù\Îiè2†oçŽ1Ù"ÆVd*o­„V°Yi„Ū­a Š–NöyˆåáŠèL:ž=–¯zï­Jò^—²šÂúæw#F5àZÇÂ^o ô!q3^ -SÈáíîh/å±A¸–#û“>e€Î=^?È™ÀØq/^cDP•Îã#‘‹ùî9‘¾ÁøgpŠ9⢤ ÍÏà¾ry,ÿæÈÇàÅlù|n}Sćò!Æüç//ÿœÙ9r£à¶¿~}‰ÃHþaÀl +)¹Úí_ß~}ùsÍÈ´B ýÐDà‡ŸÊ …UBó(€Š"tV(½Ê/cÎ_gÅh‰0S±¬¥O«¢TåÏŸú g¨ŠØíýc¶¤­œd·™Ã"óÝ·‡¡_¨³GF]Ÿ¡n‘jlxõ? ;¡i£—Vø´þ¯²tõлø¢àÝÓð5š²p8Ã÷0fŽ¦â=ÒÆoˆeè\Á•t³jyˆÿ¶ùwòƒõTï j3ó€ë:BgkÌ^"Ζșÿì9Qµè½÷º°æDVj·úáø#žHádâï¾¢Išù¬Ïó‡|‡pt+ÉK pC­zõ4 5…¬Òß'ÆFÚcõô^šr>!1QzØߨà lö4¬(òÁ¸ïïoŸ'øÛ,ù3rU¹Æíh£\g«…—»Õz=Páf-¤b;Jž’¥zšO½ec«(ÿxMû ‹Œ'™ŠE*cðó^û~P“å¯ÝêZ÷Gk;:Ö>þZàLB¬0èèäóÄR˜À³äž‹L<s6ù¸ú#šô’õ}hŒ 7øî¼pŸfDASÿ[#Ž<ÁŸq\ý€éhõ¾³©ŽµNèðñf 2$"»[:íe½ì¿¼zm¦|"¾}gê-"=©×ÕuuÙÊeúØôˆâœ_…j*y­÷ÝUhfرN÷š Ö¥CR؜ф‘vf”îVç{ŸÇÓ›š;^z§§Ši¦jŽzQ¬½OæÞ¥|«=’Ô+K³äÍÃMpëþdßAkp%(œ{@çSAYòý=[ͳèU-û-iõÐ1Ë#Å×RLߺ^êÜ9ÃÚ‹»–;dßõfõì2ùiè<Ÿ¸“\tÃ4˜þrsÕýZx;7¢t¦ŽËk{«W ½¾›ÆŠ5£O °î"ldƒ°‚·U?Œ½rì¬í;¡£€· ¯Ýw²Mëܭ뺆Ö]HíD¯}¿:ÒÇDîJôð}¸É\ʉ)…dº¨t¡ëNéòJîªëKßOo; ë®ì»•ÛuìusDXyš§4€Úºe)FØÙÓÖtNh¥FšG½òQ§Ú•ÿæ5ŸPnjGLzǼgTAŠ=¤¶‰k‹J磽û‰ L;dì÷mž;ûÚÃNN!z¥öhúOœ¼› ÂÖÌ›§¸#ÔàjCçíãÍÉÍ3KeÇNÐxîÙNü[É¢¡$™Ô5¡ß¶ü”wÚôe@×ïKm}Û+ÚÖóÙ!Æ2ŸÀ´-cs.ÇÂß¹—Þh¤u3ÍòÆ{S39D">m°¶•x\ræí׬åh|@g¥’B#dkßIvW¾5;3§µ4ÂíûrZ(eºKÍf½SÅO °5µ‰rÈŸíÀò\}vFð굶õ¥«×éó.ª\þ…†ÿF??Æ÷áà·§…_é•Þ3UÜöí/TȦRôæDp¤àPªRp˜ÍiaÑŽŸäÏyŒ(déJ‘TþâËܵ+¤ÒÌpÊš]‘Fî|’Sò‚Z‰­% +OÞ(øÁwGºk_“F"õsŽâ÷ºê]ì×Iß>@Û­óçÕQ‡c<µYF±|`³à“½Ï3ž}ÉÐpx¦xJ…Ã)š(­° hÚk—¾?w¯ÜîLµF åg”K¡px4Zm,IF}ï˜å]˜ã?¦R‚ endstream endobj -285 0 obj -<< /Type /Page /Contents 286 0 R /Resources 284 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 233 0 R /Annots 288 0 R >> +282 0 obj +<< /Type /Page /Contents 283 0 R /Resources 281 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 233 0 R /Annots 285 0 R >> endobj -288 0 obj -[ 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R ] +285 0 obj +[ 278 0 R ] endobj 278 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 160.62 158.683 169.686 ]/A << /S /GoTo /D (section.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 102.186 158.683 111.252 ]/A << /S /GoTo /D (section.1) >> >> endobj -279 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 138.652 220.7 147.668 ]/A << /S /GoTo /D (section.2) >> >> -endobj -280 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 124.754 233.98 135.823 ]/A << /S /GoTo /D (subsection.2.1) >> >> +284 0 obj +<< /D [ 282 0 R /XYZ 78.37 808.885 null ] >> endobj 281 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 112.918 405.437 123.798 ]/A << /S /GoTo /D (subsection.2.2) >> >> -endobj -282 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 100.405 270.892 112.361 ]/A << /S /GoTo /D (subsection.2.3) >> >> -endobj -287 0 obj -<< /D [ 285 0 R /XYZ 78.37 808.885 null ] >> -endobj -284 0 obj -<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 147 0 R /F62 150 0 R /F55 149 0 R /F63 151 0 R /F53 146 0 R /F54 148 0 R /F16 177 0 R /F32 156 0 R /F61 159 0 R >> /ProcSet [ /PDF /Text ] >> +<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 147 0 R /F62 150 0 R /F55 149 0 R /F63 151 0 R /F53 146 0 R /F54 148 0 R /F69 186 0 R /F70 187 0 R /F16 177 0 R /F32 156 0 R /F61 159 0 R >> /ProcSet [ /PDF /Text ] >> endobj 317 0 obj -<< /Filter /FlateDecode /Length 1335 >> +<< /Filter /FlateDecode /Length 1454 >> stream -xÚíZËŽì&ÝÏWøš@Q ]YO#eÝ»(Ûd•ÿ߆§Á÷ë¶&™È‹–ÛmlpŸSç|økàïoÓåí—YÐ`™% .¾ wbЖI=hŒ“.¿ÿàœÞÇ“å¾)9JpG îWî>î¨çxŽñáŽÆ} ^óçdãyl7ž¤DËãSÿ¸üæG¢z#±È¤ÀA£e‚SŠ{ë@ÁxüXPû~üs¥;ƒ)õ4ÅO‘Ì~ÔK+ôï’ÆiË;(÷N -·cöï2ž´òw*3ž\«ãÛÃß„RT`ßÂ,5Jla¦is Ý"ðF0H¼ÜÂ8þúïF iºÔÅ„U 5ÞjÀ'糋uT(GõZuBܯT D¼»Nî¨y$’̪åÃÜÒÿêž©ÆS|­}¡Í´nëGáéh•=@Nñ¯²ì_3 .h“1—6¤Ñú§ä?ÞËýV¬#²‘A9Œ‡ÓÙE°1:áÊ$¦Ø2«XÔ¾WÂ{¬Š¬`  ºµª÷b…†‰0é,9Q,ÒµŒ­2°™‹™¶­ -éüï:Ý•M8¼Õ9÷xBqÚ£äÅžB‘'-é-ðWÍËà SÒœ9‚ä3å4g¢=9‰¨%+cš„M'ÔÍh2ôtWA˜¾À§äŠBh`"ÍP@KƒJbBÎv¢N›ñ× ÿ U ñò Ø ê@NÃr—ÂÒÿ¸*ÅPé=\C˜\×SïAóÔ¢Œµ.»ðw‘ùàH –2ôx ø¾øÙÇ%S|7nC¢YÇí¢²S–ñ’AdwÇÚ­+Üeºî¥Þßçäøq²Yûzº3`®àH#o¡š=Y -¦° ÚjÖð^ÂmqÝ0à%_j¸žJdÔ+ç5=‘Þä}eº‘û!îÇÇ逹ÀÌÌÊ»™í°°LYÑbÝ/P¿îºNÆ+wêD˜ëE˜RjO—”ŽÇ2D]¤HsÐ5Ä,ý•<§\§r‰F¥´Á«sˆÇ@ª˜ˆ}ÉCýåš‘¤=D+Ë­£¸­÷Õ¡¹©î_B-%W‹%Ÿ+Ͻ'·Rð¥\CûZ\\ÌôpQV12»‘VY¥?W1y=fÿ%¼·_†M2¶w=“qà"2@»ì·R9ã ÊáonòÜî³Y¶Â”¯*LW¸t^ïUÑaQ†âš5,˳7²”ÀÀb~“Å<ô×Åå\~ߟO­©Û{;+ý{FÃdWÀ3)íø*{yøÍ~A7]=?Ù]Õš+‚ämËl.å?YWK úq’) o1X`¤h@ÎlÙVèc1üóòöj±Œ× +xÚí[Mó&¾ï¯ðx)Ì H«HñfS©ç½U½¶§þÿkÁ€Á;É6Ú¾[ùùŒý<3Ï0Cäð× ‡__Æ—_®Š'Óðñç‹òä ãšÁ°’Õðñ÷ðû«”<ž~8ÐaïÍÿœ”þgã–ýOUçµòÛËéZô-à*%B>òmÔ•Ã) Å6aŸ.±Ÿº=8¥9>ý߈uoÄŽ* 9¡$—!ûŽüµ´’a$gÿ¬k«ôûczvÞ^N`CSçG‹‹±ã£cG'_ÃN?´<öž³§tM‡5üh„Òj `n‚ŸL„‹g@aL€ñˆÀŒ°×wNG®>ÊdñF#üøë«îól+bùgפËf¥É›AhºÎkìl‡«|Ù·×éÅÂ=2Øÿ„¸‚Êé×ó×òõÂË^~óð²Á`Ëçi>VýýwY1ßEHC}˜ìpßÐ!‰ŒÑ?gÒxBȆ)“±Tæ7vKŸ&/í{½C_Ø)e(¾,‰øpM#¿•‘^Ë1G÷a4tzÏ=ÃxlÖ0ïêGuˆzÀ‘xù«àøôßh»Ô`#H5 ’"x—òêmÝ$/t·Z_’Â_B@‰„Ùk…sô¬ÐÃiw€œì_ß!@LZ£Œ9º,@ȧ.¥ÜýÚY7Bä"=xžy¹˜d̃ÎôZ‰ÄïÌ^MqÓ]R…(4º2èVªÎEVäJG‘ÅrDœÇ¶ˆ¤¦@syW!]8oR«6èŒoGê´GÉK]JhKkàwÅ+À cò9iv¬©šzÜžÉÔ.+cš›I¨Û“Í 3诂90}‚Ná‚J`–N0¸–•PD=:(¼zØ™;lÆßT³ª,?¥X¡êÀÞ‡)òSMÃþãªlh ×ÉÌ ®Ë©HРëØ¢Lµ_™yùI‘f,qzâàøÒ{_«…QvßóÊng/;f7^"ˆ¬îT«u…;ΦØ2ÎIñë¤fV§–æŽ0òªI“µAaPÏ‹¼t6·eÂOVIæÝ$uFwrZñLš­.â>€2ÝÈÏ Á0„泜`ÖAÍ\߀Y +[>7 ÜÏû€é§œ·òD”óETr½È%ß‹‹$Ešƒ. ¤®®ä9å2”K4*© YCÜÎõð}QHyèÿ¢ä„Õ¸…h%¹µïVÀ ãK¨¥àj–äK…à¥×së +¾”käž‹‹·™..h„u›–VI%ªgkž‰ÙÏ„#? ›,x …£ÆdBêd%x\N¶õ™ú£ä8ÇýÚ\Û2g_BKªL†ì1ùW¦¹*Øͦ©P8kZü[|øˆFÿ œ%ÁÎi|ç-«õáôÒ—a\:9)¤iMÚ–¼â[‚ØíG;¹d>éãuûžbâ·§9­<[ï{…~óm +{5¼Ýš'+4–Ìz†7ço§LF žç“5ãá‘¿-ÐÝQ +#ÍdÉ>Ú¹¦òòšœÃXÙ%£•Í“ö +XD$€JÛ¶¬TÍ©¯lá91½Wu½Gf¤æWRoMUÙÕ6…,äè‘rž¬Îc÷ÅcíßZ +úÕ½š–Q‡ÏûØ bcíõ¿Ýè➨ ^ 6¯‡¼DšLkª¬= ûb2tÙ´-®ÉPeø­véy1v+>ýP.Ø󴲢ʈßò{뻌9Öw}&¥;"´,ˆË’~ýù!T mæu£0æ«šÒÕ._–‹UÌT•áX´†¹>{#ŠAC¢Z‘®› æ¡×¨˜¸L.çôûötjÉÜÞË9<Üßg\ö\2­õø*xyøí¢|n®»È5WÉËæÉ\ +²[-9èÇI¦¿=Äà@°f/SÂUëÒÇ9þþñòâ endstream endobj 316 0 obj << /Type /Page /Contents 317 0 R /Resources 315 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 319 0 R /Annots 320 0 R >> endobj 320 0 obj -[ 283 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R ] +[ 279 0 R 280 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R ] endobj -283 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 759.955 177.522 768.971 ]/A << /S /GoTo /D (section.3) >> >> +279 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 759.955 220.7 768.971 ]/A << /S /GoTo /D (section.2) >> >> +endobj +280 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 746.057 233.98 757.126 ]/A << /S /GoTo /D (subsection.2.1) >> >> +endobj +286 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 734.222 405.437 745.101 ]/A << /S /GoTo /D (subsection.2.2) >> >> +endobj +287 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 721.708 270.892 733.664 ]/A << /S /GoTo /D (subsection.2.3) >> >> +endobj +288 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 702.172 177.522 711.188 ]/A << /S /GoTo /D (section.3) >> >> endobj 289 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 745.619 245.866 757.574 ]/A << /S /GoTo /D (subsection.3.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 687.835 245.866 699.791 ]/A << /S /GoTo /D (subsection.3.1) >> >> endobj 290 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 734.112 160.018 745.061 ]/A << /S /GoTo /D (subsection.3.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 676.329 160.018 687.278 ]/A << /S /GoTo /D (subsection.3.2) >> >> endobj 291 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 723.98 290.319 733.215 ]/A << /S /GoTo /D (subsection.3.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 666.197 290.319 675.432 ]/A << /S /GoTo /D (subsection.3.3) >> >> endobj 292 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 702.172 217.522 711.288 ]/A << /S /GoTo /D (section.4) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 644.388 217.522 653.504 ]/A << /S /GoTo /D (section.4) >> >> endobj 293 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 690.107 264.755 699.342 ]/A << /S /GoTo /D (subsection.4.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 632.324 264.755 641.559 ]/A << /S /GoTo /D (subsection.4.1) >> >> endobj 294 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 676.438 250.11 687.317 ]/A << /S /GoTo /D (subsection.4.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 618.655 250.11 629.534 ]/A << /S /GoTo /D (subsection.4.2) >> >> endobj 295 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 666.197 276.738 675.213 ]/A << /S /GoTo /D (subsubsection.4.2.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 608.413 276.738 617.43 ]/A << /S /GoTo /D (subsubsection.4.2.1) >> >> endobj 296 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 654.241 265.45 663.407 ]/A << /S /GoTo /D (subsubsection.4.2.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 596.458 265.45 605.624 ]/A << /S /GoTo /D (subsubsection.4.2.2) >> >> endobj 297 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 640.573 286.86 651.452 ]/A << /S /GoTo /D (subsubsection.4.2.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 582.789 286.86 593.669 ]/A << /S /GoTo /D (subsubsection.4.2.3) >> >> endobj 298 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 628.618 282.1 639.566 ]/A << /S /GoTo /D (subsection.4.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 570.834 282.1 581.783 ]/A << /S /GoTo /D (subsection.4.3) >> >> endobj 299 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 616.104 361.512 628.06 ]/A << /S /GoTo /D (subsubsection.4.3.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 558.321 361.512 570.276 ]/A << /S /GoTo /D (subsubsection.4.3.1) >> >> endobj 300 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 604.149 443.664 616.104 ]/A << /S /GoTo /D (subsubsection.4.3.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 546.366 443.664 558.321 ]/A << /S /GoTo /D (subsubsection.4.3.2) >> >> endobj 301 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 592.194 456.307 604.149 ]/A << /S /GoTo /D (subsubsection.4.3.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 534.411 456.307 546.366 ]/A << /S /GoTo /D (subsubsection.4.3.3) >> >> endobj 302 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 580.677 256.267 591.746 ]/A << /S /GoTo /D (subsection.4.4) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 522.894 256.267 533.963 ]/A << /S /GoTo /D (subsection.4.4) >> >> endobj 303 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 568.722 231.599 579.791 ]/A << /S /GoTo /D (subsubsection.4.4.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 510.939 231.599 522.007 ]/A << /S /GoTo /D (subsubsection.4.4.1) >> >> endobj 304 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 556.767 232.157 567.835 ]/A << /S /GoTo /D (subsubsection.4.4.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 116.232 498.984 232.157 510.052 ]/A << /S /GoTo /D (subsubsection.4.4.2) >> >> endobj 305 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 544.812 362.538 555.771 ]/A << /S /GoTo /D (subsection.4.5) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 487.029 362.538 497.987 ]/A << /S /GoTo /D (subsection.4.5) >> >> endobj 306 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 534.69 169.492 543.816 ]/A << /S /GoTo /D (subsection.4.6) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 476.906 169.492 486.032 ]/A << /S /GoTo /D (subsection.4.6) >> >> endobj 307 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 511.058 143.002 521.898 ]/A << /S /GoTo /D (section.5) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 453.275 143.002 464.114 ]/A << /S /GoTo /D (section.5) >> >> endobj 308 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 498.984 223.799 509.982 ]/A << /S /GoTo /D (subsection.5.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 441.2 223.799 452.199 ]/A << /S /GoTo /D (subsection.5.1) >> >> endobj 309 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 487.029 277.208 497.987 ]/A << /S /GoTo /D (subsection.5.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 429.245 277.208 440.204 ]/A << /S /GoTo /D (subsection.5.2) >> >> endobj 310 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 475.073 214.513 486.032 ]/A << /S /GoTo /D (subsection.5.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 417.29 214.513 428.249 ]/A << /S /GoTo /D (subsection.5.3) >> >> endobj 311 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 463.118 261.178 474.117 ]/A << /S /GoTo /D (subsection.5.4) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 405.335 261.178 416.334 ]/A << /S /GoTo /D (subsection.5.4) >> >> endobj 312 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 441.26 219.843 452.159 ]/A << /S /GoTo /D (section.6) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 78.374 383.477 219.843 394.376 ]/A << /S /GoTo /D (section.6) >> >> endobj 313 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 429.255 259.525 440.204 ]/A << /S /GoTo /D (subsection.6.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 371.472 259.525 382.421 ]/A << /S /GoTo /D (subsection.6.1) >> >> endobj 314 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 416.852 364.391 428.807 ]/A << /S /GoTo /D (subsection.6.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 1]/H/I/C[1 0 0] /Rect [ 93.318 359.068 364.391 371.024 ]/A << /S /GoTo /D (subsection.6.2) >> >> endobj 318 0 obj << /D [ 316 0 R /XYZ 78.37 808.885 null ] >> @@ -1518,39 +1526,46 @@ endobj << /Type /Font /Subtype /CIDFontType0 /BaseFont /PRHOTU+LMMono9-Regular /FontDescriptor 354 0 R /W 353 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> endobj 359 0 obj -[ 28 [ 613 ] 35 [ 580 ] 47 [ 624 ] 50 [ 558 ] 55 [ 536 ] 72 [ 513 ] 77 [ 613 ] 81 [ 636 553 ] 84 [ 558 ] 96 [ 602 ] 104 [ 786 ] 116 [ 613 ] ] +[ 28 [ 613 ] 35 [ 580 ] 47 [ 624 ] 50 [ 558 ] 55 [ 536 ] 72 [ 513 ] 77 [ 613 ] 81 [ 636 553 ] 84 [ 558 ] 96 [ 602 ] 98 [ 458 ] 104 [ 786 ] 112 [ 613 ] 116 [ 613 ] ] endobj 361 0 obj << /Filter /FlateDecode /Length 23 >> stream -xÚc``à`Td`hÉ`hhà ú/ +xÚc``à`Td`hÉ`XÐÐ +ÚÏ endstream endobj 362 0 obj -<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1791 >> -stream -xÚ}UP×ßånw“pIî`w%–‰E8$¡©-FA0ˆ¨ I£9¹.œw°wx`øsáÏ•ãÝ- 9PádQÄ`Ú@-¶ÕÉí4!E)µq¦M3êLÓ í˜÷Ì£îm'i¦ow¾Ýyó}ï÷ý¾ï÷Þ# ¥’ I2ngVnNÞóvØm™Æ -Ǧ”¤si•Õ(„²Ñ:T,Š%P‰Ø0Ä)¯Ä *ŸJ¹ØŒ/ÆR9GÅy~MÈN?W©âå?æSÕúÐÄoTß"ÂÃ’ˆ#≒&5ä“$K&ü?èÔä””g3í5‚¥´Ìɧ¦¤<³1d7óÛ“ù]Æ’r»ËQná6¿+™ßÌçÛ]ò¬…ÚnãšËŒÖC¼ý_d~‰¯r˜_*Ø«*’ù¢2‹ƒwÙ…r^þ -f«Ùè0›ø*›É,ðÎ23¿ó…E|¶Ýæäó,%f›ÃÌ'%ñ¼Ãlæ˜Ίï ΪÒd»Pj8$û8 Öe'‡!—”½'¿()/73+¿0+ÙYíäÙÞdv-VGò7ýÊd¾]8l´f˜ì͹&³ÍiqÖòˆ%ž" D*ñ‘Cì&öDñQF8rQå¡&Ô¡ò*‰z’ûÉÛa™a¢"FQª˜TÆ*¯Q)Ô|KÁ-¼ë"Ç` -̇裉)lì¸PÏámèEª¿ÅÓéÖ×y[ê=N[Üä®8º?Ïû¤Àøƒ#¾ þ“VJbŒþÖ±Ÿèº€ì Kè`!Õåêµ´èì¥à(+0EjìoÛ‡À}Z¼‡þ l¡Ôè6àAX*‘0âwÐó'†¬öî>ÛÃþ¾ïÚäuÝYS˜dñ˜@Ow´äiæ §%‡àU*fnÌpë¡_[Z¹ý)+a:=Þ!^`ÿJßëÛâà°_»ÿõ)ìºÌ#ŽsðEømfîÌV#§~¤Ò/%+㮺 ¯}¢@3°S Ùõp ^ÿMhc \÷†Ã8î»1›kGÊÙª7^+6èŸ_^©™%äÛôüÅÕ¸ =hLЩÑU™_µMRôÅY0;3 -µJšûn™è>­@ãÈ£ŽWðZ=&VrÜ=ÃÜ:îÊá$øŠ@ç4¸2Ø,¸y™Ö­ùÇË0ÙÃIt5ÜB-îýw¦Š•LÑ«Œ†p«Ñ[2²-ô.!ÃÒÒÚ9Íç¨~¦]ŠÌþz¤\O® õRs[-¸ÌÁôiæVÏ‘Üå\rÝG2ؘ¹œËg4 )ÇÊnNº„Vjn¢ÃK¼¾ßôf*æõy+åa˜Ë}à¬Ä`@3‡"%0_-120²W–z`_fšFuZ‰I“Ãrj_õùN`4¦Y°ÏÉáË >‡´To£Të±J 5QCgAó·ø£t‚}™2«y‘Òtô]jóJœÌl$¼{šƒ_2Ý pz1‡rw‰ SÇNqèqF³ã4xw–U?ŠªF yeþs^>†]Z¸¯†Qøi¼Gà(Ù&ÂHä'FÀD6­G‹‹qXÁŽ8ì,–ÅFÿzú¤ŠñV.ƒQûYôÓÑ)W4ôÝÒT£â˜Ñ2&Æ8t~'ûòË»j3ôVFzœy[ìg, .‘-£5n+£Ù&¾}Lè5î‰{ õmnYYæÓ°V"'広ٵ±¨­ÒÎn½‰}]À $DH„š›ãéœààw Žyðéqi1&ð<Žf1 ÷.·ö& £ÁÖ㾌Q„•Ë»Ä1ÿYBèî mè®w·5þ˜Ío.mkÖ»{{Z¸¦þ–³õSMÞ¼²m$|æäû“¿Õͤ~ˆ#YÜü?É<¿øo*Ûï2Òp›u”¬ŽºBPsÞÊÖœ¯ÔOõ½?Àá<8¥5y2q û ̦%ww+;Nêo͵òòf>F%áçwàPŸâQ%zI–xõÇéj\EI4L ÃMúS#ÀÛÍ[AƒS·8ªo<[b¥Å‰pIéo u‚-aâ—š2Äœǃ"ëï§ô0e°§¸ÿ(tf쇿‚šÛèÏòiis‚þj®®§Â -wÿŒ{âÂ/Þ91é —¯`mô†âû½&Aw´©¡¹‰M_·j©Æã £]w"Ð}Ê'ユª0ùü‡e_ïj1å ‹ 0ƒ ”fÐf~Ý’ë —]éœoXþ’·- +Úåw÷èNtõôÙщs???Wãçžh÷ˆž&]³§Æî]n>54ÞæåÔ¡›; -éU òýK¤…îâ¿GWQO²=AšÝUd5¨VÕj)âÎê èóùü¾cþŽ+Ý*•Ô90Ø#Šb{»(ª"ÿ½6† +<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2095 >> +stream +xÚ}V P×ßãØ]Ð ë‘x »+±N +H¢©­& ‚`£ ’ŠÜ ÈÉ÷Á‡|rwÞÝ»;x² b ‰P‹­ÒÔèLý(J¨Ó6©Ì¨¦1oÍ£îm'i¦owþ»óæÿ¿ßÿë½'ÁÂÃ1‰DŸ™•¹3ocbî–íÚýÊÊ ¥Î°*eåvu©I£Ô‡²„%B1B&ÄK&L`¥Ž–ɤ#²ð :‡öÍ]<Ã$g†ä'ÏÁHY‚ø¹B¶44qMö," “`ñXöXBH(Éb #Yöÿ S“RR^ÍÐêêôå¥eF.5%å•!¹–ÛÄmV–Thk 圲RÅmNâ¶$qyÚq¶œ{I[É«Ë”š½œv/W ~›3ÔzWª×št†åI\AY¹«Ñê+8ñ«WkÔJƒZÅ™*Uj=g,Ss›väpYÚJ#—[^¢®4¨¹•+9ΠVseF£îGÉÉFSi’V_š¼WÔ1$kæ” É!»•Y[ó +Vææddæåg&kÜ^­žS©Êr!é{ýÖdžV¿_©IWi‹Õ9*u¥±ÜX‡‰#{KÆR±×°ll ¶ ÛŽ`{°b¬ ÓaF©XqDcÑ¡‡cM”Iî„e„y¤±ÒRéXx\øe¼ƒ&r |/Jx +×óð~d¦À<¸[*|Ë“ù‡¼ÃM,JÞ»­6Ÿ™ntX›l,Z=³Ê¬;P”ëX¬'ÝÁWþÜŽó¤Òmú©¢ ¸‡î1°„æãm5åV…¶`ôä>tÖáìeÑn¸SŽ¶…VŒF/¡åhŠe"\€æÁeâ³Îƒ‰Ìêv9*DaÛ7nDa—a¡XlÄ…‰›/D[™(á"Ôž>¼^]·©Z¡0v°ŒL!V¸Bö·‘yçÍ é´†ä?ý³3Ýd9hLdÊʬ!©4ÏûÀ(M™Gûûì\e©OÂ^2&ÆL-ŠZ…HùÔ·É Þï0 1ÄBÉͶùFY¸*ÈG¾ö)»:V^G1 ’Àms©½EÀðF‰ˆñPĨ +ª¹.1LÿN,!áþM¹ø›ÌÎC‡™ÿw`eKÈ„Ù:ë%O‚Ž ‡qûÀq¦œ¨Bëbøžú«;/6ÃD©0=ÛnŽj³šÖi]nØoÃö#Õµ +³½ÅffPz€^†3xË1ànUô£b['Øñªâ9åK>˾ ófrñ&ŸÛÒIܾ€OL³ÚmÌÝåZüŸ6€éE0ý—0º#üI> +<< /Type /FontDescriptor /FontName /EFEVND+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 362 0 R /CIDSet 361 0 R >> endobj 363 0 obj -<< /Filter /FlateDecode /Length 429 >> +<< /Filter /FlateDecode /Length 437 >> stream -xÚ’Ûjã0†ïõ³ôµlçPJ0ld×ÐIØÝ[Gš¤‚X2²}‘·_I·PJ¨ÁÆŸçŸÓo~¼n£ŸÒì1Ên9l°5½OUÃF£¥}º{F”(‡h{¯Öˆ-v0.Êe©UwãÄ¥§^â úZô€G¥?$¾Œwø/úµ*?þŸ6¦®tQ5m£ ûSe#îSwª;¹”o¨ÁIàšBÁ?h[eô=$·œs÷a¥eaj¿pËâËÐk”–ö29ìý,IA*Ñ]("[8;x‹µ»r†Z~ŠsÊÚ`xM²!$Þ*ë %…+Äù,É=¥QJ´&šÊR¢)ÑœhhrGT-‰V¦ ÑšˆªdÔo: 4çfœˆºÏ¨æ”ºÏ/Ê»œö óûÕýÿ|·[ôÖ:¯ÃO^z•Æ÷sјÆg…;¨á¬{zY³ÿ¯Ÿ +xÚ“_k«0Æïó)²‹BwáŒZëE8ÇV¶n´eìÖ&o{5‘¨ýö'É«ŒQ&(þÌóþ{gwoûàÐG’FwÐéÁpŠ—º%³ÙZó¡Õoˆiµ{¢oFó=ôt^TëJÉþÞŠ+Å/ƒ€Iõ³è/œ¥ú’¸:t~€`SnÞ·ëàùe§›ZuÛE,ØÁy¸Ô&`.ô û‹ ù…šZ ½%¡>á;˜NjõD£Ƙý°Q¢Ð¸#áØ4 §1NR 3vNnÅTHÞ䟼±Î¹àýµë¡©ÔI“ÕŠ†¶²ìzsõýß“ðÕ0RéüV£V¸Úö®)ÊHžS'›ßú¶­ ¡s£vUö×›¶|®-ÐØs„­s- kk¦Vg +kË骴WN@‰oë £Ž'D+˜^£tZâÿjãE…MÄØ2ÊÅ RŒT"-<%1RŠ”!-=-‘ +¤5ÒÆS!•H˜%ÁzéÂSÆ<-V_¢2K°BŠ½d£«gc–Çgõ³9[Ü^nŒ±ûà„÷Ù9,|ž™V·.Êßþ°Mÿ£×’üùè U endstream endobj 186 0 obj -<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /GEIHLW+LMRomanCaps10-Regular /DescendantFonts [ 364 0 R ] /ToUnicode 363 0 R >> +<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /EFEVND+LMRomanCaps10-Regular /DescendantFonts [ 364 0 R ] /ToUnicode 363 0 R >> endobj 364 0 obj -<< /Type /Font /Subtype /CIDFontType0 /BaseFont /GEIHLW+LMRomanCaps10-Regular /FontDescriptor 360 0 R /W 359 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> +<< /Type /Font /Subtype /CIDFontType0 /BaseFont /EFEVND+LMRomanCaps10-Regular /FontDescriptor 360 0 R /W 359 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> endobj 365 0 obj [ 28 [ 559 ] 34 [ 818 ] 36 [ 575 ] 38 [ 575 575 ] 42 [ 831 511 ] 47 [ 639 ] 49 [ 756 527 575 ] 54 [ 724 351 575 575 ] 59 [ 575 ] 63 [ 639 383 436 319 ] 71 [ 692 319 ] 75 [ 958 900 639 ] 81 [ 575 575 786 639 ] 88 [ 319 ] 91 [ 607 ] 95 [ 863 474 ] 98 [ 454 ] 100 [ 575 575 ] 104 [ 800 447 575 575 885 639 ] 112 [ 607 ] 114 [ 831 869 607 ] 118 [ 607 ] 168 [ 559 ] 251 [ 527 ] 319 [ 639 639 ] 499 [ 571 571 ] 502 [ 319 ] ] @@ -2421,47 +2436,46 @@ endobj << /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 476 0 R /W 475 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> endobj 481 0 obj -[ 28 [ 490 ] 54 [ 639 ] 57 [ 490 ] 59 [ 490 ] 66 [ 272 ] 72 [ 272 ] 77 [ 544 ] 83 [ 666 ] 88 [ 272 ] 96 [ 381 ] 105 [ 381 490 490 ] 112 [ 517 ] 118 [ 517 ] 121 [ 490 ] 187 [ 489 ] ] +[ 28 [ 490 ] 54 [ 639 ] 59 [ 490 ] 66 [ 272 ] 72 [ 272 ] 77 [ 544 ] 82 [ 490 666 ] 88 [ 272 ] 96 [ 381 ] 105 [ 381 490 490 ] 112 [ 517 ] 118 [ 517 ] 121 [ 490 ] 187 [ 489 ] ] endobj 483 0 obj << /Filter /FlateDecode /Length 27 >> stream -xÚc``à``` -Phhh(hr`€)„Q +xÚc``à```Ph1hh(hr`€'1 endstream endobj 484 0 obj -<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2381 >> -stream -xÚuV TWž’I©Í˜¶fìÌصnÕòP«ÖÚ¥Hcki}€„ ä HJB—Ã#$„<û°b·¥TmkÅÅêq«¥ÒC{<ÝîÞÑáìîD÷¸=g»÷̹3çŸÿ~ßÿÿûï¹<$4áñx3ekdë7oX¸1Y•“J/\‘,Wè²SÕÁŸë˜ÙÌó Œ`f!Ìs<†aH>C…²qaüÃB'_e»f ÔXÁsÂkz28_x -n -{žûz‚ ›4|ö" -AxÈL„@~BþÉCyÓxbžôÿÑ.ŠŒŽ~9N•[ ÎT(µÔ¢èèÅ/çåTl$•º;KeÐdeR©t:•ImŒ¤’TΚI½¨¢©4¹25;ƒReP2ù6J§‘«5”B­ÒåjæER2e¦†2¨ÔY÷V˳å©y:¥£ÓåjJ«”Sñ[·È¨u*ZK%fî–Ó9AQ¹œRjµ¹¯FEiuŠH•Z•Áùh¢²9i¢‚ë"Ö½‘$‹HÜ·6iËÚHm¾–ÊP©©t¹653[ù?›|lHR©sR³W§«ÒäÒå´6S[€pc²YŽ¬@b‘õÈFd ² Ù…d"{,$Ñ#ÈI>—Pnˆq0µ¡HÂò6…Ä„4†Œò·ó‡ù?†îíÈ„‹…Ñu¢)ì¿ÂËïéá~gûëñ‘¯`Úðˆkeè;’sº-h²Æb”ƒ3ŒC@ßÎcD§r‡c'¾ê;é$0ÿ»Õ‡à®AÇu’]vZ2/vÏ®”´ž“ðY¸²¡ÇF„—ƒ<|xpÖ·Pæ†sÜ3n1ãÌIÔ&}t«ðëýæ rÒ‹fT˜ã-´yû6°È@ú²µ¡‡„¶ÛèxÝže¤6é„ËÌ{"ˆÅ°NØe«ý€O áœÀ›ìlαFcàÁ“_ð™4¸B˜Ë¼ƒ:AÑRŠ-;0©а)Í°šcÒµ?mdÀ€ÆUÔ%ÇÐ  [.„åÌ4A8›ê‚[ÏþÕm.±¯¿è2Œ» úÍýŠ~lÆ*FÅÌ—´ýÊ·Ò³ŠŒD[Žò_¸>~erwF] ‰ýh*.* Ó¥›»Õö2bû{ÛoI×'Ã'áÔŸÏ\m/½ðÆa»ím°O*ÎÒ\WâtI›4×9ˆìû@=þýÅK×|–Þ¬N²ïØÇ ¯®Öj[²Ê\^f6IuÅMö–7Á®dC$ ­0— ósÌz|1¸×ÖŽ7ûÈ€³£Î…cC¦Û`®–„Èäɦ˜w£ÄöŸ·ÛŽõz ‡û ø¿ àe2|F û :!¾=3„µÃ}OЄòšc$ŠbçÙY&~~p_ -ɶ£;L  Q›ÿ$àõƒÀz„ÄžÝÂÜ“thœ•^—›çÖy;œñú¾€ƒCÞvVq°¯ƒÈûŠ]fÉ ì%{i -9éú/l?§†ŽSÀê'Ã_äêÛz€ ÃÝÃئ…Ãx[ :*I˜ˆÞ~m'qŒ~÷@&>_þŠÁBVþ"Ä&ü™õslK"Øâßs oãBx߇9A?7zâ.\v—Ï@¦L21ÿ6‹ì÷íÿ op™é¸¬žÇ -ƒeðO(|â£÷ÈȧS+d—, ÛIz\—V°ëa1&xßMðab¿Ä§u©iƒVÓžßæs»üD8ÛÈEs±¯%˜¿ •vŽb3àßLÒ‘ëßµ”ŽÊßGTB¾ °ÒßK€ÿ,—ZßW•b¥!–k­çºm!:Ñ7vÍn•Õ„¥|ï¾\)Ýfjjm=ä ršÝŒ4 â_†un8Ëý -GátÉy £SÓãÁÝfvÁÙv6WL©VF(DWˆ (vå{XÈò¿Ñžêúìk"\ï»óSŠ®ðÀic`Lã_‹¿Û1vê.&@Œ‘ü°úëÍÄwíç®üE:º|pþW'žj÷aK£ËÓØÑ©qèöYAeq©wœk®á¢yù[è]dÎÎÌŠÜJvÙ•S!(¬,¯,‘šk@ qBx«wíö™xeÊ;ËÛ¾ IŒB:Ë-=RìŒ) oUiòŒòEwb!ŸÀ( -N½=v;X¾‚Æ¡ î¿vŒï¾‰•2‰ð5‰NXQh‘™÷ŠJJ“AÎnúÚ>ýÜëaàK:wúg)D£¯±"Vÿâ’m‚ý.oc§?ß©*y´sàÄ0~ëôš¨¥)«“_'Ù¬^ axh8+®×3Ñ^ £å3eÌ\IµÒF/·q¥|ßZ“c’–XËÊŠ‰Øz6v Ê• FêíåöÈùªß¹ø‚ ï¹ºòìþ} 0ÖØÊðÚ¶æZ> ¯t7ðyÕLŽŒ}]ß;Âl¡bçUpÖ^ÅÄ¿¡ÍÂ_ BµÔiËÍm›Ãòa»`ŸÔ)&óvƒÖ w^ -Páóƒ íeÙ‡H8o2dçl`-·ÌÌ)Ì•ïÀ³ó[ º«»¥žüCÖX¨7Óò£gÎïò’p5³RpÑ÷q•úû±ÞñhásŠ¸"¹Yö­b„¸™çNÁ7¯¡_É U‰æ,"_Û³†ˆ9vYsÿîÔéÁÙsÕöÓ 4¦A²ʸ–ÉOÌWâY -—Ošþ F¾”Þß4] .6rø¼wP»ÄIJ¯ÅKÃÙÈóz&Ö †ªS -76YIZ Õ{ozµõ:‡Æ>Ó†zìnG[½¨£ñB³OÚ`iÜk4-&B™—©RhDØ®ÇàYi}y³¾ Ôh$°é2Çæ­R…'Ó¯ôŠì&£ÃˆïµZË›JÈ3ym&·Ñc™iE5Qkåm*Ì•Û‹š‡½žèöñ÷pÒrm5n–IMÕ…®–Z‡ƒƒ=köhŽ¨ºóD–z‡Ñ7ÙÈðàµn:ƒ‡Íå.gÈ -nš&Ö»˜¸F¨ª³»„D‚,;*ì 650exª³ÊVSUu ºÊÖ×æö9ljöÛlժæ1ï͸ÿŒäßU׌ +<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2377 >> +stream +xÚuV TWž’I+¥6cl±3ck»UËC­ZkWTZŠT[˶*JH0<IIx‡K‰€áò !‚ˆµµb}â¶H•¶V\Z=nµº´ÇÓíîÎîN´§Ûs¶{Ïœ;sîü÷ûþûýß½ç +ÐPD ÌÚüzÒšÄ ×'«³Ó˜…‹"’å +½*Mü¹ŽÃ>ÂHv6Â>)`É–²t(&|?,tê%®{¶Hs=‰ ‚æGƒýùÇà†°§ø¯‡ÆÃæ> +{‘„ dB"? ÿ ‚GRþÿhEFG¿§ÎÉ×d*”:zQtôâçƒýr:6’NHÛ™¥6j³2é4&Nˆ¤×GÒIj#?šI?§fèreš*ƒVgÐ)ò-´^+×hi…F­ÏÑ΋¤S”™ZÚ¨ÖdÑü[#WÉÓ´òtZϤË5´N)§ã7oJ¡×©˜¹SÎhåtDMkårZ©Óå¼¥Ó+"ÕET£R=ÒFçE¬{=)%"ñÕ¸µI›ÖFêòtt†ZC§Ëui™*mäÿ,ò×$µ&;Mµ:]½CþjºœÑeêò¾ÍF–"+Xäd=’ŒlB¶ Û‘Ld’…ä $9.ä囑¥ EªNð}ÈÚ2¡D¸^8  M +m­?-þ]ŠÞãþ^x×÷8Û¯}e”üîucm,sKvV¿ MÖ–˜äàT ãÐÓ Ûa²K¹Õ±Xž¸9qš<Þ–ï(¤Þóoí'Ž—/¤v¢Ü;•1ËVâت—¿Ó|üéýÇ$ÖñvÍÅQÂ5èøŠâ–”͋ݵ=uGïqø\ÙØk#Ã+@ž>8ûk˜â†sÝ3n°ìVY.ÔŠ¦üL›ø‹=– jʇfTZâH##¶yoN¢ç&°¨@6ú‚µ±—‚¶›èDý®e”6ëÅË,»"ÈÅ°^Üm«{Ÿ„‰áÜÀÜÎ¥¹àæ3uA›Kê(q#`À2 Àf¬bÕì|Y«©CùfzV¡‰ôd+÷ˉ…¯Ä¯Lîɨ/¦°ïÍE…ùL:¾±Gc/'ßy÷Å›øº‰dø(œöã©+í¥ç_?@ú¶¼–I¥À™OYê‹.¼eoK½ƒT}؈o/^ºê/éËê¢új‰šZ`­¡°%«,å3nª/j¶·ÖºIn%"Ë; +rH&/Ûb ƒ;žVp¤ÅOœõ.2ßÏê(ˆL=,ÛóvÔ‚ØsvÛá>épïŸס¼@…O¡ ÀJL?D'¥7'c†°vX63€&TÔ¦ØP;ÇÍ6‹ô¾²TŠkG·šAÉ ¶Žã @4 ëA +{b{GÖ©ujÕ}N®[ïëtz½ä}è»"Z +CØ!XÍþV> î"(6ÂQAØKöÒTjÊõ_ؾp'€µƒ +Ž/|w`è>2 wc—ÙVã- 謢`"::t]äaæí½™Ä|ù‹Æªê'16ù áûÈœ÷WdßiÐAN«ú% ˜„þ¶|pþV'Å’±jç’&—·©³KëЗYAU%y©o‚ßcÝÃ…óò*71Û©ìm™•9UlÄ•])*¨ª¨*Æ-µ •<&¾Ñ·v÷x¼2õOË=Ÿ2F#]åÖ^;eÚÔÚ\“|Ñ­X($1š†ÓnÞ¾Ã{çsxoŠÒ‰«×ÁÄÎëX)›_–éÅ•%)–Ý’âÒdMpëÅ~ÏÇ|^ v>é³'Ä!}•“p’øç–lyìqùšº:òœêâI;O&nœ\µ4uuòk·•3ˆ´¬ ç¤ 6: heuB¶œ}V@­Œ ¨ˆå6¾”ïYk³Íx±µ¼¼ˆ|†kàBa¨ÜQjq_¿F>Vó&È!cÏÖW¨)ø4wOdªµ•7u{m-uœ ¿Úçn9z¡zOƽfèe7Ž2©ó +¸ë®`ÒßÐf/¡Y÷éòƒ´ž¶V„Íå„°]TæuÇR|= -È› +ÔÄüà„A{¹j?çM…l›¬%³² rä[ U^+ @OMîÍÛŸObM #?”qêì‘!W³+EýV;‰p`¸k…öQ!ïˆË²ëå_+FÉë;âÜ©ÄÆ5Ì‹”:ѲžCðùu±½kȘÃ#Ú“Ä7'N¨Þ+¶ñ˜FÙ+ ÆÌŸ !y‰yJ"+¡ +ò(óŸÁègø5ðeóyòbËGŽ}ƒº%Nj2x9ç"ÏØX£ªO(ÜØtv\$k3ÖìÞG¾áÓ5èZû,êµ»žIgÓù?ÞXÒ´Ûd2•˜Ien¦Z¡•`ÛO;Ïà -†üR“‰Ä¦§86nÆÞÌ¥Ob7›&bwIa‘±­¢¹˜:•ë1»MÞ’YVT[¢7éÌ’ì 9x‘½°ÙápØÈßÁŽ^ÞZ®Í¦)¸¹¦ÀÕZçpð°gLƒ§ñ^íAuO®¤¤ÁarÍö¦F*> +<< /Type /FontDescriptor /FontName /UONDLP+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 484 0 R /CIDSet 483 0 R >> endobj 485 0 obj << /Filter /FlateDecode /Length 449 >> stream -xÚ…“Mo£0†ïþÞC¤ö@1ⶊÒj‘¶› j¯Äžd-8ä߯íVZm´H æ™×c³øö¾‹¥ÙC”Ý0º…ÞŒV@T¾4Y,6FŒ-èá@‚œ£ý}·Fì` Weµ©´®¸Òâ4J˜Uÿ­á¨ô—Ä÷¡W5üŠêMýýgýxÙš¶ÑImá8ž1ŸV«áääÿQR¦—Â4úÛ+£hrÃsž´,MëÙ“x2JãÙúAii'·ts$¥R‰a¢ð­›–OÞûÚJ Y­hì:«~°çàûšÄoV‚Uúèø‚I'Ú]woˆ2RTÂÁÕvszmZ ±Ÿ@%]T ç‹£øJªÏÐ4p‚–…‘ÐwÛè#•+èêÙ]-ÿŠ3ÌÚ`~Mø¿ë %¥+ÄXžž²<Ð2Gº”-‘Ö¨ä–)Ò=ÒR‰´Az -t›ºeH¨L1–³@9ºæè…O®±ßÚç¥i œCX·™ßÿÏ-£µnÂ! {৯4|ž£Ît>+ÜáÎÿƒ§·gòDh Õ +xÚ…“Án£0†ï<Åì!Rz HB[EH i%¤6‰’ìj¯Äžd-8äí×ö„Vª ÄÇü3þ=cF¿6»ðYè†é=ƒ-¶º7Ãâ½j‚Ñh©y_£êVˆÅmŸ`c4ßaã¢\–JvwV\*~îªïE “ö—!ñ“e®¶MÅÑTê„Áܶå0µW _⌲GB+^ãlñ•q…âÂblçŽÒ™§ÉŒhA±ÌÓ$!z$z *ˆ–D/ž¦¤L©æ4õ4eD”—rÆ> +<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /UONDLP+LMRoman12-Regular /DescendantFonts [ 486 0 R ] /ToUnicode 485 0 R >> endobj 486 0 obj -<< /Type /Font /Subtype /CIDFontType0 /BaseFont /TDTHQI+LMRoman12-Regular /FontDescriptor 482 0 R /W 481 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> +<< /Type /Font /Subtype /CIDFontType0 /BaseFont /UONDLP+LMRoman12-Regular /FontDescriptor 482 0 R /W 481 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> endobj 487 0 obj [ 66 [ 223 ] 77 [ 484 ] 81 [ 470 ] 84 [ 484 ] 105 [ 340 ] ] @@ -2707,7 +2721,7 @@ endobj << /Type /Pages /Parent 507 0 R /Count 10 /Kids [ 133 0 R 165 0 R 172 0 R 183 0 R 193 0 R 200 0 R 206 0 R 213 0 R 220 0 R 226 0 R ] >> endobj 233 0 obj -<< /Type /Pages /Parent 507 0 R /Count 10 /Kids [ 230 0 R 235 0 R 239 0 R 244 0 R 250 0 R 255 0 R 263 0 R 271 0 R 275 0 R 285 0 R ] >> +<< /Type /Pages /Parent 507 0 R /Count 10 /Kids [ 230 0 R 235 0 R 239 0 R 244 0 R 250 0 R 255 0 R 263 0 R 271 0 R 275 0 R 282 0 R ] >> endobj 319 0 obj << /Type /Pages /Parent 507 0 R /Count 1 /Kids [ 316 0 R ] >> @@ -2815,7 +2829,7 @@ endobj << /Title 7 0 R /A 4 0 R /Parent 508 0 R /Next 10 0 R >> endobj 509 0 obj -<< /Names [ (Doc-Start) 138 0 R (page.1) 137 0 R (page.10) 228 0 R (page.11) 232 0 R (page.12) 237 0 R (page.13) 241 0 R (page.14) 246 0 R (page.15) 252 0 R (page.16) 257 0 R (page.17) 265 0 R (page.18) 273 0 R (page.19) 277 0 R (page.2) 167 0 R (page.20) 287 0 R (page.21) 318 0 R (page.3) 174 0 R (page.4) 185 0 R (page.5) 195 0 R (page.6) 202 0 R (page.7) 208 0 R (page.8) 215 0 R (page.9) 222 0 R (section.1) 5 0 R (section.2) 9 0 R (section.3) 25 0 R (section.4) 41 0 R (section.5) 101 0 R (section.6) 121 0 R (subsection.2.1) 13 0 R (subsection.2.2) 17 0 R (subsection.2.3) 21 0 R (subsection.3.1) 29 0 R ] /Limits [ (Doc-Start) (subsection.3.1) ] >> +<< /Names [ (Doc-Start) 138 0 R (page.1) 137 0 R (page.10) 228 0 R (page.11) 232 0 R (page.12) 237 0 R (page.13) 241 0 R (page.14) 246 0 R (page.15) 252 0 R (page.16) 257 0 R (page.17) 265 0 R (page.18) 273 0 R (page.19) 277 0 R (page.2) 167 0 R (page.20) 284 0 R (page.21) 318 0 R (page.3) 174 0 R (page.4) 185 0 R (page.5) 195 0 R (page.6) 202 0 R (page.7) 208 0 R (page.8) 215 0 R (page.9) 222 0 R (section.1) 5 0 R (section.2) 9 0 R (section.3) 25 0 R (section.4) 41 0 R (section.5) 101 0 R (section.6) 121 0 R (subsection.2.1) 13 0 R (subsection.2.2) 17 0 R (subsection.2.3) 21 0 R (subsection.3.1) 29 0 R ] /Limits [ (Doc-Start) (subsection.3.1) ] >> endobj 510 0 obj << /Names [ (subsection.3.2) 33 0 R (subsection.3.3) 37 0 R (subsection.4.1) 45 0 R (subsection.4.2) 49 0 R (subsection.4.3) 65 0 R (subsection.4.4) 81 0 R (subsection.4.5) 93 0 R (subsection.4.6) 97 0 R (subsection.5.1) 105 0 R (subsection.5.2) 109 0 R (subsection.5.3) 113 0 R (subsection.5.4) 117 0 R (subsection.6.1) 125 0 R (subsection.6.2) 129 0 R (subsubsection.4.2.1) 53 0 R (subsubsection.4.2.2) 57 0 R (subsubsection.4.2.3) 61 0 R (subsubsection.4.3.1) 69 0 R (subsubsection.4.3.2) 73 0 R (subsubsection.4.3.3) 77 0 R (subsubsection.4.4.1) 85 0 R (subsubsection.4.4.2) 89 0 R (table.caption.1) 198 0 R ] /Limits [ (subsection.3.2) (table.caption.1) ] >> @@ -2830,527 +2844,527 @@ endobj << /Type /Catalog /Pages 507 0 R /Outlines 508 0 R /Names 512 0 R /PageMode/UseOutlines /OpenAction 132 0 R >> endobj 514 0 obj -<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y)/Title(\376\377\000L\040\031\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000p\000i\000t\000o\000n)/Subject(\376\377\000U\000n\000e\000\040\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000L\000a\000T\000e\000X)/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.16.0) /CreationDate (D:20230404180411+02'00') /ModDate (D:20230404180411+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.16.0 (MiKTeX 23.1)) >> +<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y)/Title(\376\377\000L\040\031\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000p\000i\000t\000o\000n)/Subject(\376\377\000U\000n\000e\000\040\000e\000x\000t\000e\000n\000s\000i\000o\000n\000\040\000L\000a\000T\000e\000X)/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.16.0) /CreationDate (D:20230411101241+02'00') /ModDate (D:20230411101241+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.16.0 (MiKTeX 23.1)) >> endobj xref 0 515 0000000000 65535 f -0000097843 00000 n -0000097888 00000 n -0000097908 00000 n +0000098293 00000 n +0000098338 00000 n +0000098358 00000 n 0000000020 00000 n -0000012032 00000 n -0000296461 00000 n +0000012036 00000 n +0000297235 00000 n 0000000065 00000 n 0000000155 00000 n -0000016827 00000 n -0000296338 00000 n +0000016831 00000 n +0000297112 00000 n 0000000200 00000 n 0000000364 00000 n -0000016887 00000 n -0000296264 00000 n +0000016891 00000 n +0000297038 00000 n 0000000415 00000 n 0000000574 00000 n -0000016948 00000 n -0000296177 00000 n +0000016952 00000 n +0000296951 00000 n 0000000625 00000 n 0000001005 00000 n -0000017009 00000 n -0000296103 00000 n +0000017013 00000 n +0000296877 00000 n 0000001056 00000 n 0000001262 00000 n -0000021872 00000 n -0000295978 00000 n +0000021876 00000 n +0000296752 00000 n 0000001308 00000 n 0000001416 00000 n -0000021933 00000 n -0000295904 00000 n +0000021937 00000 n +0000296678 00000 n 0000001467 00000 n 0000001629 00000 n -0000033461 00000 n -0000295817 00000 n +0000033462 00000 n +0000296591 00000 n 0000001680 00000 n 0000001761 00000 n -0000037481 00000 n -0000295743 00000 n +0000037482 00000 n +0000296517 00000 n 0000001812 00000 n 0000002037 00000 n -0000040725 00000 n -0000295617 00000 n +0000040726 00000 n +0000296391 00000 n 0000002083 00000 n 0000002240 00000 n -0000040786 00000 n -0000295543 00000 n +0000040787 00000 n +0000296317 00000 n 0000002291 00000 n 0000002501 00000 n -0000044856 00000 n -0000295419 00000 n +0000044857 00000 n +0000296193 00000 n 0000002552 00000 n 0000002727 00000 n -0000044917 00000 n -0000295345 00000 n +0000044918 00000 n +0000296119 00000 n 0000002783 00000 n 0000002943 00000 n -0000049381 00000 n -0000295258 00000 n +0000049382 00000 n +0000296032 00000 n 0000002999 00000 n 0000003152 00000 n -0000049442 00000 n -0000295184 00000 n +0000049443 00000 n +0000295958 00000 n 0000003208 00000 n 0000003391 00000 n -0000053332 00000 n -0000295060 00000 n +0000053333 00000 n +0000295834 00000 n 0000003442 00000 n 0000003652 00000 n -0000053393 00000 n -0000294986 00000 n +0000053394 00000 n +0000295760 00000 n 0000003708 00000 n 0000004002 00000 n -0000057029 00000 n -0000294899 00000 n +0000057118 00000 n +0000295673 00000 n 0000004058 00000 n 0000004421 00000 n -0000057090 00000 n -0000294825 00000 n +0000057179 00000 n +0000295599 00000 n 0000004477 00000 n 0000004860 00000 n -0000061535 00000 n -0000294701 00000 n +0000061162 00000 n +0000295475 00000 n 0000004911 00000 n 0000005109 00000 n -0000061596 00000 n -0000294627 00000 n +0000061223 00000 n +0000295401 00000 n 0000005165 00000 n 0000005284 00000 n -0000061657 00000 n -0000294553 00000 n +0000061284 00000 n +0000295327 00000 n 0000005340 00000 n 0000005464 00000 n -0000066493 00000 n -0000294466 00000 n +0000066320 00000 n +0000295240 00000 n 0000005515 00000 n 0000005840 00000 n -0000066554 00000 n -0000294392 00000 n +0000070233 00000 n +0000295166 00000 n 0000005891 00000 n 0000005974 00000 n -0000070045 00000 n -0000294261 00000 n +0000070294 00000 n +0000295035 00000 n 0000006021 00000 n 0000006090 00000 n -0000070107 00000 n -0000294182 00000 n +0000070356 00000 n +0000294956 00000 n 0000006142 00000 n 0000006295 00000 n -0000070169 00000 n -0000294089 00000 n +0000070418 00000 n +0000294863 00000 n 0000006347 00000 n 0000006545 00000 n -0000074343 00000 n -0000293996 00000 n +0000074605 00000 n +0000294770 00000 n 0000006597 00000 n 0000006750 00000 n -0000081880 00000 n -0000293917 00000 n +0000082142 00000 n +0000294691 00000 n 0000006802 00000 n 0000007009 00000 n -0000084981 00000 n -0000293799 00000 n +0000085243 00000 n +0000294573 00000 n 0000007056 00000 n 0000007216 00000 n -0000085043 00000 n -0000293720 00000 n +0000085305 00000 n +0000294494 00000 n 0000007268 00000 n 0000007466 00000 n -0000085105 00000 n -0000293641 00000 n +0000085367 00000 n +0000294415 00000 n 0000007518 00000 n 0000007843 00000 n -0000011551 00000 n -0000011717 00000 n -0000012092 00000 n +0000011555 00000 n +0000011721 00000 n +0000012096 00000 n 0000007895 00000 n -0000011908 00000 n -0000011970 00000 n -0000260846 00000 n -0000257555 00000 n -0000255451 00000 n -0000251528 00000 n -0000248194 00000 n -0000245763 00000 n -0000240642 00000 n -0000238541 00000 n -0000231659 00000 n -0000221018 00000 n -0000217668 00000 n -0000214577 00000 n -0000204575 00000 n -0000201239 00000 n -0000292676 00000 n -0000292532 00000 n -0000195578 00000 n -0000193684 00000 n -0000184867 00000 n -0000181639 00000 n -0000177887 00000 n -0000293102 00000 n -0000011688 00000 n -0000016448 00000 n -0000016607 00000 n -0000017070 00000 n -0000016274 00000 n -0000012476 00000 n -0000016765 00000 n -0000016411 00000 n -0000026733 00000 n -0000026892 00000 n -0000021994 00000 n -0000021689 00000 n -0000017285 00000 n -0000021810 00000 n -0000170673 00000 n -0000164410 00000 n -0000161610 00000 n -0000027051 00000 n -0000027209 00000 n -0000027368 00000 n -0000027529 00000 n -0000027753 00000 n -0000026527 00000 n -0000022274 00000 n -0000027691 00000 n -0000154213 00000 n -0000150941 00000 n -0000026664 00000 n -0000032902 00000 n -0000033061 00000 n -0000033220 00000 n -0000033521 00000 n -0000032720 00000 n -0000028033 00000 n -0000033399 00000 n -0000143048 00000 n -0000032857 00000 n -0000037419 00000 n -0000037542 00000 n -0000037236 00000 n -0000033840 00000 n -0000037357 00000 n -0000040345 00000 n -0000040504 00000 n -0000040847 00000 n -0000040171 00000 n -0000037731 00000 n -0000040663 00000 n -0000040308 00000 n -0000044476 00000 n -0000044635 00000 n -0000044978 00000 n -0000044302 00000 n -0000041062 00000 n -0000044794 00000 n -0000044439 00000 n -0000049001 00000 n -0000049160 00000 n -0000049503 00000 n -0000048827 00000 n -0000045167 00000 n -0000049319 00000 n -0000292818 00000 n -0000048964 00000 n -0000053454 00000 n -0000053149 00000 n -0000049783 00000 n -0000053270 00000 n -0000057151 00000 n -0000056846 00000 n -0000053708 00000 n -0000056967 00000 n -0000293254 00000 n -0000061718 00000 n -0000061352 00000 n -0000057379 00000 n -0000061473 00000 n -0000066615 00000 n -0000066310 00000 n -0000061972 00000 n -0000066431 00000 n -0000292959 00000 n -0000070231 00000 n -0000069862 00000 n -0000066843 00000 n -0000069983 00000 n -0000073963 00000 n -0000074122 00000 n -0000074405 00000 n -0000073789 00000 n -0000070433 00000 n -0000074281 00000 n -0000073926 00000 n -0000077766 00000 n -0000077583 00000 n -0000074607 00000 n -0000077704 00000 n -0000139695 00000 n -0000081324 00000 n -0000081482 00000 n -0000081640 00000 n -0000081942 00000 n -0000081142 00000 n -0000077994 00000 n -0000081818 00000 n -0000137629 00000 n -0000125468 00000 n -0000110741 00000 n -0000081279 00000 n -0000085167 00000 n -0000084798 00000 n -0000082235 00000 n -0000084919 00000 n -0000087920 00000 n -0000087737 00000 n -0000085369 00000 n -0000087858 00000 n -0000090502 00000 n -0000090654 00000 n -0000090805 00000 n -0000090962 00000 n -0000091120 00000 n -0000093359 00000 n -0000091340 00000 n -0000090304 00000 n -0000088083 00000 n -0000091278 00000 n -0000090441 00000 n -0000093512 00000 n -0000093670 00000 n -0000093828 00000 n -0000093985 00000 n -0000094138 00000 n -0000094296 00000 n -0000094453 00000 n -0000094617 00000 n -0000094780 00000 n -0000094943 00000 n -0000095099 00000 n -0000095262 00000 n -0000095426 00000 n -0000095590 00000 n -0000095748 00000 n -0000095912 00000 n -0000096076 00000 n -0000096234 00000 n -0000096391 00000 n -0000096544 00000 n -0000096702 00000 n -0000096860 00000 n -0000097018 00000 n -0000097176 00000 n -0000097328 00000 n -0000097486 00000 n -0000097706 00000 n -0000092985 00000 n -0000091568 00000 n -0000097644 00000 n -0000293406 00000 n -0000093122 00000 n -0000097961 00000 n -0000109943 00000 n -0000098188 00000 n -0000098290 00000 n -0000110182 00000 n -0000110903 00000 n -0000111134 00000 n -0000124643 00000 n -0000111456 00000 n -0000111562 00000 n -0000124874 00000 n -0000125622 00000 n -0000125845 00000 n -0000136876 00000 n -0000125991 00000 n -0000126088 00000 n -0000137113 00000 n -0000137788 00000 n -0000138016 00000 n -0000139008 00000 n -0000138059 00000 n -0000138154 00000 n -0000139248 00000 n -0000139850 00000 n -0000140051 00000 n -0000140076 00000 n -0000140102 00000 n -0000142291 00000 n -0000140270 00000 n -0000140373 00000 n -0000142536 00000 n -0000143209 00000 n -0000143416 00000 n -0000149968 00000 n -0000143896 00000 n -0000144012 00000 n -0000150205 00000 n -0000151096 00000 n -0000151297 00000 n -0000153458 00000 n -0000151456 00000 n -0000151561 00000 n -0000153702 00000 n -0000154374 00000 n -0000154581 00000 n -0000160693 00000 n -0000155017 00000 n -0000155137 00000 n -0000160930 00000 n -0000161764 00000 n -0000161964 00000 n -0000163670 00000 n -0000162087 00000 n -0000162193 00000 n -0000163916 00000 n -0000164572 00000 n -0000164780 00000 n -0000169820 00000 n -0000165148 00000 n -0000165268 00000 n -0000170061 00000 n -0000170829 00000 n -0000171031 00000 n -0000176941 00000 n -0000171466 00000 n -0000171576 00000 n -0000177178 00000 n -0000178042 00000 n -0000178243 00000 n -0000180878 00000 n -0000178435 00000 n -0000178540 00000 n -0000181118 00000 n -0000181794 00000 n -0000181995 00000 n -0000184100 00000 n -0000182229 00000 n -0000182334 00000 n -0000184337 00000 n -0000185022 00000 n -0000185223 00000 n -0000192691 00000 n -0000185768 00000 n -0000185899 00000 n -0000192929 00000 n -0000193840 00000 n -0000194042 00000 n -0000194895 00000 n -0000194075 00000 n -0000194169 00000 n -0000195134 00000 n -0000195734 00000 n -0000195936 00000 n -0000196166 00000 n -0000196254 00000 n -0000200408 00000 n -0000196584 00000 n -0000196693 00000 n -0000200647 00000 n -0000201394 00000 n -0000201595 00000 n -0000203824 00000 n -0000201783 00000 n -0000201887 00000 n -0000204061 00000 n -0000204730 00000 n -0000204931 00000 n -0000213517 00000 n -0000205408 00000 n -0000205528 00000 n -0000213755 00000 n -0000214733 00000 n -0000214935 00000 n -0000216942 00000 n -0000215048 00000 n -0000215151 00000 n -0000217181 00000 n -0000217824 00000 n -0000218026 00000 n -0000220245 00000 n -0000218250 00000 n -0000218355 00000 n -0000220483 00000 n -0000221174 00000 n -0000221376 00000 n -0000230576 00000 n -0000222005 00000 n -0000222141 00000 n -0000230815 00000 n -0000231816 00000 n -0000232019 00000 n -0000237640 00000 n -0000232436 00000 n -0000232556 00000 n -0000237877 00000 n -0000238695 00000 n -0000238895 00000 n -0000239941 00000 n -0000238972 00000 n -0000239071 00000 n -0000240178 00000 n -0000240797 00000 n -0000240998 00000 n -0000244938 00000 n -0000241326 00000 n -0000241442 00000 n -0000245176 00000 n -0000245919 00000 n -0000246121 00000 n -0000247495 00000 n -0000246199 00000 n -0000246301 00000 n -0000247731 00000 n -0000248347 00000 n -0000248546 00000 n -0000250780 00000 n -0000248724 00000 n -0000248829 00000 n -0000251018 00000 n -0000251684 00000 n -0000251886 00000 n -0000254681 00000 n -0000252085 00000 n -0000252194 00000 n -0000254920 00000 n -0000255608 00000 n -0000255811 00000 n -0000256852 00000 n -0000255888 00000 n -0000255987 00000 n -0000257090 00000 n -0000257711 00000 n -0000257913 00000 n -0000260100 00000 n -0000258055 00000 n -0000258164 00000 n -0000260339 00000 n -0000261003 00000 n -0000269006 00000 n -0000261206 00000 n -0000277730 00000 n -0000269261 00000 n -0000285016 00000 n -0000278007 00000 n -0000292299 00000 n -0000285238 00000 n -0000293485 00000 n -0000293566 00000 n -0000296533 00000 n -0000297207 00000 n -0000297888 00000 n -0000297979 00000 n -0000298017 00000 n -0000298145 00000 n +0000011912 00000 n +0000011974 00000 n +0000261620 00000 n +0000258329 00000 n +0000256225 00000 n +0000252313 00000 n +0000248979 00000 n +0000246548 00000 n +0000241427 00000 n +0000239326 00000 n +0000232444 00000 n +0000221803 00000 n +0000218453 00000 n +0000215362 00000 n +0000205360 00000 n +0000202024 00000 n +0000293450 00000 n +0000293306 00000 n +0000196363 00000 n +0000194469 00000 n +0000185652 00000 n +0000182424 00000 n +0000178672 00000 n +0000293876 00000 n +0000011692 00000 n +0000016452 00000 n +0000016611 00000 n +0000017074 00000 n +0000016278 00000 n +0000012480 00000 n +0000016769 00000 n +0000016415 00000 n +0000026734 00000 n +0000026893 00000 n +0000021998 00000 n +0000021693 00000 n +0000017289 00000 n +0000021814 00000 n +0000171458 00000 n +0000165195 00000 n +0000162395 00000 n +0000027052 00000 n +0000027210 00000 n +0000027369 00000 n +0000027530 00000 n +0000027754 00000 n +0000026528 00000 n +0000022278 00000 n +0000027692 00000 n +0000154998 00000 n +0000151391 00000 n +0000026665 00000 n +0000032903 00000 n +0000033062 00000 n +0000033221 00000 n +0000033522 00000 n +0000032721 00000 n +0000028034 00000 n +0000033400 00000 n +0000143498 00000 n +0000032858 00000 n +0000037420 00000 n +0000037543 00000 n +0000037237 00000 n +0000033841 00000 n +0000037358 00000 n +0000040346 00000 n +0000040505 00000 n +0000040848 00000 n +0000040172 00000 n +0000037732 00000 n +0000040664 00000 n +0000040309 00000 n +0000044477 00000 n +0000044636 00000 n +0000044979 00000 n +0000044303 00000 n +0000041063 00000 n +0000044795 00000 n +0000044440 00000 n +0000049002 00000 n +0000049161 00000 n +0000049504 00000 n +0000048828 00000 n +0000045168 00000 n +0000049320 00000 n +0000293592 00000 n +0000048965 00000 n +0000053455 00000 n +0000053150 00000 n +0000049784 00000 n +0000053271 00000 n +0000057240 00000 n +0000056935 00000 n +0000053709 00000 n +0000057056 00000 n +0000294028 00000 n +0000061345 00000 n +0000060979 00000 n +0000057468 00000 n +0000061100 00000 n +0000066381 00000 n +0000066137 00000 n +0000061612 00000 n +0000066258 00000 n +0000293733 00000 n +0000070480 00000 n +0000070050 00000 n +0000066609 00000 n +0000070171 00000 n +0000074225 00000 n +0000074384 00000 n +0000074667 00000 n +0000074051 00000 n +0000070695 00000 n +0000074543 00000 n +0000074188 00000 n +0000078028 00000 n +0000077845 00000 n +0000074869 00000 n +0000077966 00000 n +0000140145 00000 n +0000081586 00000 n +0000081744 00000 n +0000081902 00000 n +0000082204 00000 n +0000081404 00000 n +0000078256 00000 n +0000082080 00000 n +0000138079 00000 n +0000125918 00000 n +0000111191 00000 n +0000081541 00000 n +0000085429 00000 n +0000085060 00000 n +0000082497 00000 n +0000085181 00000 n +0000088182 00000 n +0000087999 00000 n +0000085631 00000 n +0000088120 00000 n +0000090774 00000 n +0000093185 00000 n +0000093336 00000 n +0000090989 00000 n +0000090608 00000 n +0000088345 00000 n +0000090927 00000 n +0000090745 00000 n +0000093493 00000 n +0000093651 00000 n +0000093809 00000 n +0000093962 00000 n +0000094120 00000 n +0000094278 00000 n +0000094436 00000 n +0000094589 00000 n +0000094747 00000 n +0000094904 00000 n +0000095067 00000 n +0000095230 00000 n +0000095393 00000 n +0000095549 00000 n +0000095713 00000 n +0000095877 00000 n +0000096041 00000 n +0000096199 00000 n +0000096363 00000 n +0000096527 00000 n +0000096685 00000 n +0000096843 00000 n +0000096996 00000 n +0000097152 00000 n +0000097310 00000 n +0000097467 00000 n +0000097625 00000 n +0000097778 00000 n +0000097936 00000 n +0000098156 00000 n +0000092779 00000 n +0000091243 00000 n +0000098094 00000 n +0000294180 00000 n +0000092916 00000 n +0000098411 00000 n +0000110393 00000 n +0000098638 00000 n +0000098740 00000 n +0000110632 00000 n +0000111353 00000 n +0000111584 00000 n +0000125093 00000 n +0000111906 00000 n +0000112012 00000 n +0000125324 00000 n +0000126072 00000 n +0000126295 00000 n +0000137326 00000 n +0000126441 00000 n +0000126538 00000 n +0000137563 00000 n +0000138238 00000 n +0000138466 00000 n +0000139458 00000 n +0000138509 00000 n +0000138604 00000 n +0000139698 00000 n +0000140300 00000 n +0000140501 00000 n +0000140526 00000 n +0000140552 00000 n +0000142741 00000 n +0000140720 00000 n +0000140823 00000 n +0000142986 00000 n +0000143659 00000 n +0000143866 00000 n +0000150418 00000 n +0000144346 00000 n +0000144462 00000 n +0000150655 00000 n +0000151546 00000 n +0000151747 00000 n +0000154235 00000 n +0000151929 00000 n +0000152034 00000 n +0000154479 00000 n +0000155159 00000 n +0000155366 00000 n +0000161478 00000 n +0000155802 00000 n +0000155922 00000 n +0000161715 00000 n +0000162549 00000 n +0000162749 00000 n +0000164455 00000 n +0000162872 00000 n +0000162978 00000 n +0000164701 00000 n +0000165357 00000 n +0000165565 00000 n +0000170605 00000 n +0000165933 00000 n +0000166053 00000 n +0000170846 00000 n +0000171614 00000 n +0000171816 00000 n +0000177726 00000 n +0000172251 00000 n +0000172361 00000 n +0000177963 00000 n +0000178827 00000 n +0000179028 00000 n +0000181663 00000 n +0000179220 00000 n +0000179325 00000 n +0000181903 00000 n +0000182579 00000 n +0000182780 00000 n +0000184885 00000 n +0000183014 00000 n +0000183119 00000 n +0000185122 00000 n +0000185807 00000 n +0000186008 00000 n +0000193476 00000 n +0000186553 00000 n +0000186684 00000 n +0000193714 00000 n +0000194625 00000 n +0000194827 00000 n +0000195680 00000 n +0000194860 00000 n +0000194954 00000 n +0000195919 00000 n +0000196519 00000 n +0000196721 00000 n +0000196951 00000 n +0000197039 00000 n +0000201193 00000 n +0000197369 00000 n +0000197478 00000 n +0000201432 00000 n +0000202179 00000 n +0000202380 00000 n +0000204609 00000 n +0000202568 00000 n +0000202672 00000 n +0000204846 00000 n +0000205515 00000 n +0000205716 00000 n +0000214302 00000 n +0000206193 00000 n +0000206313 00000 n +0000214540 00000 n +0000215518 00000 n +0000215720 00000 n +0000217727 00000 n +0000215833 00000 n +0000215936 00000 n +0000217966 00000 n +0000218609 00000 n +0000218811 00000 n +0000221030 00000 n +0000219035 00000 n +0000219140 00000 n +0000221268 00000 n +0000221959 00000 n +0000222161 00000 n +0000231361 00000 n +0000222790 00000 n +0000222926 00000 n +0000231600 00000 n +0000232601 00000 n +0000232804 00000 n +0000238425 00000 n +0000233221 00000 n +0000233341 00000 n +0000238662 00000 n +0000239480 00000 n +0000239680 00000 n +0000240726 00000 n +0000239757 00000 n +0000239856 00000 n +0000240963 00000 n +0000241582 00000 n +0000241783 00000 n +0000245723 00000 n +0000242111 00000 n +0000242227 00000 n +0000245961 00000 n +0000246704 00000 n +0000246906 00000 n +0000248280 00000 n +0000246984 00000 n +0000247086 00000 n +0000248516 00000 n +0000249132 00000 n +0000249331 00000 n +0000251565 00000 n +0000249509 00000 n +0000249614 00000 n +0000251803 00000 n +0000252469 00000 n +0000252671 00000 n +0000255455 00000 n +0000252863 00000 n +0000252972 00000 n +0000255694 00000 n +0000256382 00000 n +0000256585 00000 n +0000257626 00000 n +0000256662 00000 n +0000256761 00000 n +0000257864 00000 n +0000258485 00000 n +0000258687 00000 n +0000260874 00000 n +0000258829 00000 n +0000258938 00000 n +0000261113 00000 n +0000261777 00000 n +0000269780 00000 n +0000261980 00000 n +0000278504 00000 n +0000270035 00000 n +0000285790 00000 n +0000278781 00000 n +0000293073 00000 n +0000286012 00000 n +0000294259 00000 n +0000294340 00000 n +0000297307 00000 n +0000297981 00000 n +0000298662 00000 n +0000298753 00000 n +0000298791 00000 n +0000298919 00000 n trailer -<< /Size 515 /Root 513 0 R /Info 514 0 R /ID [ <5D1DE3161FCB9626A289358A417330C7> <5D1DE3161FCB9626A289358A417330C7> ] >> +<< /Size 515 /Root 513 0 R /Info 514 0 R /ID [ <68798E2E477CE3B48821B97DA5E2E1DD> <68798E2E477CE3B48821B97DA5E2E1DD> ] >> startxref -298693 +299467 %%EOF diff --git a/macros/luatex/latex/piton/piton-french.tex b/macros/luatex/latex/piton/piton-french.tex index 5c7debb147..bb193283a5 100644 --- a/macros/luatex/latex/piton/piton-french.tex +++ b/macros/luatex/latex/piton/piton-french.tex @@ -1,1735 +1,1750 @@ -% -*- coding: utf-8 ; -*- -\documentclass[dvipsnames]{article} - -\usepackage{fontspec} - -\usepackage[french]{babel} -\frenchsetup{og = « , fg = »} - -\usepackage[footnotehyper,escape-inside=$$,math-comments]{piton} - -\usepackage[executable=python.exe]{pyluatex} - -\usepackage{xcolor} - -\usepackage{geometry} -\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}} - -\usepackage{enumitem} -\usepackage{verbatim} -\usepackage{amsmath} -\usepackage{tabularx} -\usepackage{booktabs} -\usepackage{tcolorbox} -\usepackage{luacolor,lua-ul} - -\usepackage{caption} - -% We use \MakeShortVerb of shortvrb and not \DefineShortVerb of fancyvrb -% because we don't want the contents of short verbatim colored in gray -\usepackage{shortvrb} -\MakeShortVerb{\|} - -\usepackage{varwidth} - -\skip\footins = 2\bigskipamount - -\usepackage{fancyvrb} -\fvset{commandchars=\~\#\@,formatcom=\color{gray}} -\def\emphase{\bgroup\color{RoyalPurple}\let\next=} - - -\usepackage{titlesec} -\titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex} -\titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex} - -\def\interitem{\vspace{7mm plus 2 mm minus 3mm}} - - -\usepackage[hyperfootnotes = false]{hyperref} - -\hypersetup - { - pdfinfo = - { - Title = L’extension piton , - Subject = Une extension LaTeX , - Author = F. Pantigny - } - } - - - - -\NewDocumentCommand {\pkg} {m} {\textsf{#1}} -\NewDocumentCommand {\cls} {m} {\textsf{#1}} - -\setlength{\parindent}{0pt} - - -\begin{document} - -\PitonOptions{splittable = 4} - -\VerbatimFootnotes - - -\title{L'extension LaTeX \pkg{piton}\thanks{Ce document correspond à la -version~\myfileversion\space de \pkg{piton}, à la date du~\myfiledate.}} -\author{F. Pantigny \\ \texttt{fpantigny@wanadoo.fr}} - -\maketitle - -\begin{abstract} -L'extension \pkg{piton} propose des outils pour composer du code Python avec une coloration syntaxique -en utilisant la bibliothèque Lua LPEG. L'extension \pkg{piton} nécessite l'emploi de LuaLaTeX. -\end{abstract} - - - -\section{Présentation} - -L'extension \pkg{piton} utilise la librairie Lua nommée LPEG\footnote{LPEG est une librairie de capture de motifs - (\emph{pattern-matching} en anglais) pour Lua, écrite en C, fondée sur les PEG (\emph{parsing expression - grammars}): \url{http://www.inf.puc-rio.br/~roberto/lpeg/}} pour «parser» le code Python et le composer avec un -coloriage syntaxique. Comme elle utilise du code Lua, elle fonctionne uniquement avec |lualatex| (et ne va pas -fonctionner avec les autres moteurs de compilation LaTeX, que ce soit |latex|, |pdflatex| ou |xelatex|). Elle -n'utilise aucun programme extérieur et la compilation ne requiert donc pas |--shell-escape|. La compilation est -très rapide puisque tout le travail du parseur est fait par la librairie LPEG, écrite en C. - -\bigskip -Voici un exemple de code Python composé avec l'environnement |{Piton}| proposé par \pkg{piton}. - - -\bigskip -\begin{Piton} -from math import pi - -def arctan(x,n=10): - """Calcule la valeur mathématique de arctan(x) - - n est le nombre de termes de la somme - """ - if x < 0: - return -arctan(-x) # appel récursif - elif x > 1: - return pi/2 - arctan(1/x) - #> (on a utilisé le fait que $\arctan(x)+\arctan(1/x)=\pi/2$ pour $x>0$)\footnote{Cet échappement vers LaTeX a été obtenu en débutant par \ttfamily\#>.} - else: - s = 0 - for k in range(n): - s += (-1)**k/(2*k+1)*x**(2*k+1) - return s -\end{Piton} - - -\bigskip - -L'extension LaTeX \pkg{piton} est entièrement contenue dans le fichier |piton.sty|. Ce -fichier peut être placé dans le répertoire courant ou dans une arborescence |texmf|. Le mieux reste néanmoins -d'installer \pkg{piton} avec une distribution TeX comme MiKTeX, TeX~Live ou MacTeX. - - -\section{Utilisation de l'extension} - -\subsection{Chargement de l'extension} - -L'extension \pkg{piton} se charge simplement avec la commande |\usepackage| : |\usepackage{piton}|. - -On a cependant deux remarques à formuler : -\begin{itemize} -\item l'extension \pkg{piton} utilise l'extension \pkg{xcolor} (mais \pkg{piton} ne charge pas \pkg{xcolor} : si -\pkg{xcolor} n'est pas chargée avant le |\begin{document}|, une erreur fatale sera levée) ; - -\item l'extension \pkg{piton} n'est utilisable qu'avec LuaLaTeX : si un autre moteur de compilation (comme |latex|, -|pdflatex| ou |xelatex|) est utilisé, une erreur fatale sera levée. -\end{itemize} - -\subsection{Les commandes et environnements à la disposition de l'utilisateur} - -L'extension \pkg{piton} fournit plusieurs outils pour composer du code Python: les commandes |\piton|, -l'environnement |{Piton}| et la commande |\PitonInputFile|. - -\begin{itemize} \setlength{\fboxsep}{1pt} -\item La commande \colorbox{gray!20}{\ttfamily \textbackslash piton} doit être utilisée pour composer de petits éléments de code à l'intérieur d'un -paragraphe. Par exemple : - -{\color{gray}\verb|\piton{def carré(x): return x*x}|}\qquad -\piton{def carré(x): return x*x} - -La syntaxe et les particularités de la commande sont détaillées ci-après. - - -\item L'environnement \colorbox{gray!20}{\ttfamily \{Piton\}} doit être utilisé pour composer des codes de -plusieurs lignes. Comme cet environnement prend son argument selon un mode verbatim, il ne peut pas être utilisé -dans l'argument d'une commande LaTeX. Pour les besoins de personnalisation, il est possible de définir de nouveaux -environnements similaires à |{Piton}| en utilisant la commande |\NewPitonEnvironment| : cf. partie -\ref{NewPitonEnvironment} p.~\pageref{NewPitonEnvironment}. - -\item La commande \colorbox{gray!20}{\ttfamily \textbackslash PitonInputFile} doit être utilisée pour insérer et -composer un fichier extérieur. - -Cette commande prend en argument optionnel entre crochets deux clés |first-line| et |last-line| qui permettent de -n'insérer que la partie du fichier comprise entre les lignes correspondantes. -\end{itemize} - - -\subsection{La syntaxe de la commande \textbackslash piton} - - -La commande |\piton| possède en fait une syntaxe double. Elle est peut être utilisée comme une commande standard de -LaTeX prenant son argument entre accolades (|\piton{...}|), ou bien selon la syntaxe de la commande |\verb| où l'argument est -délimité entre deux caractères identiques (par ex. : \verb!\piton|...|!). On détaille maintenant ces deux syntaxes. - -\bigskip -\begin{itemize} -\item {\color{blue} \textsf{Syntaxe} \verb|\piton{...}|}\par\nobreak - -Quant son argument est donné entre accolades, la commande |\piton| ne prend pas son argument en mode verbatim. Les -points suivants doivent être remarqués : - -\begin{itemize} -\item plusieurs espaces successives sont remplacées par une unique espace, - -{\color{cyan} mais la commande |\|⣠est fournie pour forcer l'insertion d'une espace} ; - -\item il n'est pas possible d'utiliser le caractère |%| à l'intérieur, - -{\color{cyan} mais la commande |\%| est fournie pour insérer un |%|} ; - -\item les accolades doivent apparaître par paires correctement imbriquées, - -{\color{cyan} mais les commandes |\{| et |\}| sont aussi fournies pour insérer des accolades individuelles} ; - -\item les commandes LaTeX\footnote{Cela s'applique aux commandes commençant par une contre-oblique |\| mais également aux caractères actifs.} sont -complètement développées sans être exécutées - -{\color{cyan} et on peut donc utiliser |\\| pour insérer une contre-oblique}. -\end{itemize} - -Les autres caractères (y compris |#|, |^|, |_|, |&|, |$| % $ -et |@|) doivent être insérés sans contre-oblique. - -\bigskip -\begin{tabular}{>{\color{gray}}w{l}{75mm}@{\hspace*{1cm}}l} -\omit Exemples : \hfil \\ -\noalign{\vskip1mm} -\verb|\piton{ma_chaîne = '\\n'}| & -\piton{ma_chaîne = '\\n' } \\ -\verb|\piton{def pair(n): return n\%2==0}| & -\piton{def pair(n): return n\%2==0 } \\ -\verb|\piton{c="#" # une affectation }| & -\piton{c="#" # une affectation } \\ -\verb|\piton{c="#" \ \ \ # une affectation }| & -\piton{c="#" \ \ \ # une affectation } \\ -\verb|\piton{my_dict = {'a': 3, 'b': 4}}| & -\piton{my_dict = {'a': 3, 'b': 4}} -\end{tabular} - -\bigskip -La commande |\piton| avec son argument entre accolades peut être utilisée dans les arguments des autres commandes LaTeX.\footnote{La commande - |\piton| peut par exemple être - utilisée dans une note de bas de page. Exemple : \piton{s = 'Une chaîne'}.} - -\bigskip -\item {\color{blue} \textsf{Syntaxe} \verb!\piton|...|!}\par\nobreak - -Quand la commande |\piton| prend son argument entre deux caractères identiques, cet argument est pris \emph{en mode - verbatim}. De ce fait, avec cette syntaxe, la commande |\piton| ne peut \emph{pas} être utilisée dans l'argument d'une -autre fonction. - -\medskip -\begin{tabular}{>{\color{gray}}w{l}{75mm}@{\hspace*{1cm}}l} -\omit Exemples : \hfil \\ -\noalign{\vskip1mm} -\verb!\piton|ma_chaîne = '\n'|! & -\piton|ma_chaîne = '\n'| \\ -\verb|\piton!def pair(n): return n%2==0!| & -\piton!def pair(n): return n%2==0! \\ -\verb|\piton+c="#" # une affectation +| & -\piton+c="#" # une affectation + \\ -\verb|\piton?my_dict = {'a': 3, 'b': 4}?| & -\piton!my_dict = {'a': 3, 'b': 4}! -\end{tabular} - -\end{itemize} - - - -\section{Personnalisation} - -\subsection{La commande \textbackslash PitonOptions} - -\NewDocumentCommand{\Definition}{m} - {{\setlength{\fboxsep}{1pt}\colorbox{gray!20}{\ttfamily \vphantom{gl}#1}}} - - -La commande |\PitonOptions| prend en argument une liste de couples \textsl{clé=valeur}. La portée des réglages -effectués par cette commande est le groupe TeX courant.\footnote{On rappelle que tout environnement LaTeX est, en particulier, un groupe.} - -\begin{itemize} -\item La clé \Definition{gobble} prend comme valeur un entier positif $n$ : les $n$ premiers caractères de chaque -ligne sont alors retirés (avant formatage du code) dans les environnements |{Piton}|. Ces $n$ caractères ne sont -pas nécessairement des espaces. - -\item Quand la clé \Definition{auto-gobble} est activée, l'extension \pkg{piton} détermine la valeur minimale $n$ -du nombre d'espaces successifs débutant chaque ligne (non vide) de l'environnement |{Piton}| et applique |gobble| -avec cette valeur de~$n$. - -\item Quand la clé \Definition{env-gobble} est activée, \pkg{piton} analyse la dernière ligne de l'environnement, -c'est-à-dire celle qui contient le |\end{Piton}| et détermine si cette ligne ne comporte que des espaces suivis par -|\end{Piton}|. Si c'est le cas, \pkg{piton} calcule le nombre $n$ de ces espaces et applique |gobble| avec cette -valeur de~$n$. Le nom de cette clé vient de \emph{environment gobble}: le nombre d'espaces à retirer ne dépend que -de la position des délimiteurs |\begin{Piton}| et |\end{Piton}| de l'environnement. - -\item Avec la clé \Definition{line-numbers}, les lignes \emph{non vides} (et toutes les lignes des -\emph{docstrings}, y compris celles qui sont vides) sont numérotées dans les environnements \verb|{Piton}| et dans -les listings produits par la commande |\PitonInputFile|. - -\item Avec la clé \Definition{all-line-numbers}, \emph{toutes} les lignes sont numérotées, y compris les lignes vides. - -\item \colorbox{yellow!50}{\textbf{Nouveau 1.5}}\par\nobreak - -La clé \Definition{numbers-sep} est la distance horizontale entre les numéros de lignes (insérés par |line-numbers| -ou |all-line-numbers|) et les lignes du code informatique. La valeur initiale est 0.7~em. - -\item La clé \Definition{left-margin} fixe une marge sur la gauche. Cette clé peut être utile, en particulier, en -conjonction avec l'une des clés |line-numbers| et |all-line-numbers| si on ne souhaite pas que les numéros de ligne -soient dans une position en débordement sur la gauche. - -Il est possible de donner à la clé |left-margin| la valeur spéciale~|auto|. Avec cette valeur, une marge est -insérée automatiquement pour les numéros de ligne quand l'une des clés |line-numbers| ou |all-line-numbers| est -utilisée. Voir un exemple à la partie \ref{example-numbering} p.~\pageref{example-numbering}. - -\item Avec la clé \Definition{resume}, le compteur de lignes n'est pas remis à zéro comme il l'est normalement au -début d'un environnement |{Piton}| ou bien au début d'un listing produit par |\PitonInputFile|. Cela permet de -poursuivre la numérotation d'un environnement à l'autre. - -\item La clé \Definition{background-color} fixe la couleur de fond des environnements |{Piton}| et des listings -produits par |\PitonInputFile| (ce fond a une largeur égale à la valeur courante de |\linewidth|). La clé -|background-color| accepte une couleur définie «à la volée», c'est-à-dire que l'on peut écrire par exemple -|background-color = [cmyk]{0.1,0.05,0,0}| - -\smallskip -\colorbox{yellow!50}{\textbf{Nouveau 1.4}}\enskip La clé |background-color| accepte aussi en argument une -\emph{liste} de couleurs. Les lignes sont alors coloriées de manière cyclique avec ces couleurs. - -\emph{Exemple} : |\PitonOptions{background-color = {gray!5,white}}| - -\item Avec la clé \Definition{prompt-background-color}, \pkg{piton} ajoute un fond coloré aux lignes débutant par -le prompt «|>>>|» (et sa continuation «|...|») caractéristique des consoles Python avec boucle \textsc{repl} -(\emph{read-only-eval loop}). Pour un exemple d'utilisation de cette clé, voir la partie \ref{pythonrepl} -p.~\pageref{pythonrepl}. - -\item En activant la clé \Definition{show-spaces-in-strings}, les espaces dans les chaînes courtes (c'est-à-dire -celles délimitées par |'| ou |"|) sont matérialisés par le caractère ⣠(U+2423 : \textsc{open box}). Bien sûr, le -caractère U+2423 doit être présent dans la fonte mono-chasse utilisée.\footnote{L'extension \pkg{piton} utilise - simplement la fonte mono-chasse courante. Pour la changer, le mieux est d'utiliser |\setmonofont| de - \pkg{fontspec}.}\par\nobreak -% -\begingroup -\PitonOptions{show-spaces-in-strings} -Exemple : \piton{my_string = 'Très bonne réponse'} -\endgroup - -\smallskip -Avec la clé \Definition{show-spaces}, tous les espaces sont matérialisés (et aucune coupure de ligne ne peut plus -intervenir sur ces espaces matérialisés, même si la clé |break-lines|\footnote{cf. \ref{line-breaks} p.~\pageref{line-breaks}.} est active). -\end{itemize} - -\bigskip - -\begingroup -\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -\begin{Verbatim} -~emphase&\PitonOptions{line-numbers,auto-gobble,background-color = gray!15}@ -\begin{Piton} - from math import pi - - def arctan(x,n=10): - """Calcule la valeur mathématique de arctan(x) - - n est le nombre de termes de la somme - """ - if x < 0: - return -arctan(-x) # appel récursif - elif x > 1: - return pi/2 - arctan(1/x) - #> (on a utilisé le fait que $\arctan(x)+\arctan(1/x)=\pi/2$ pour $x>0$) - else: - s = 0 - for k in range(n): - s += (-1)**k/(2*k+1)*x**(2*k+1) - return s -\end{Piton} -\end{Verbatim} -\endgroup - - -\begingroup -\PitonOptions{line-numbers,auto-gobble,background-color = gray!15} -\begin{Piton} - from math import pi - - def arctan(x,n=10): - """Compute the value of arctan(x) - - n is the number of terms in the sum - """ - if x < 0: - return -arctan(-x) # appel récursif - elif x > 1: - return pi/2 - arctan(1/x) - #> (on a utilisé le fait que $\arctan(x)+\arctan(1/x)=\pi/2$ pour $x>0$) - else: - s = 0 - for k in range(n): - s += (-1)**k/(2*k+1)*x**(2*k+1) - return s -\end{Piton} -\endgroup - - - -\bigskip -La commande |\PitonOptions| propose d'autres clés qui seront décrites plus loin (voir en particulier la coupure des -pages et des lignes p.~\pageref{breakable}). - - -\subsection{Les styles} - -\label{styles} - -L'extension \pkg{piton} fournit la commande |\SetPitonStyle| pour personnaliser les différents styles utilisés pour -formater les éléments syntaxiques des listings Python. Ces personnalisations ont une portée qui correspond au -groupe TeX courant.\footnote{On rappelle que tout environnement LaTeX est, en particulier, un groupe.} - -\bigskip -La commande |\SetPitonStyle| prend en argument une liste de couples \textsl{clé=valeur}. Les clés sont les noms des -styles et les valeurs sont les instructions LaTeX de formatage correspondantes. - -\bigskip -Ces instructions LaTeX doivent être des instructions de formatage du type de |\bfseries|, |\slshape|, -|\color{...}|, etc. (les commandes de ce type sont parfois qualifiées de \emph{semi-globales}). Il est aussi -possible de mettre, \emph{à la fin de la liste d'instructions}, une commande LaTeX prenant exactement un argument. - -\bigskip -Voici un exemple qui change le style utilisé pour le nom d'une fonction Python, au moment de sa définition -(c'est-à-dire après le mot-clé |def|). Elle utilise la commande |\highLight| de \pkg{lua-ul} (qui nécessite -lui-même le chargement de \pkg{luacolor}). - -\begin{Verbatim} -\SetPitonStyle - { Name.Function = \bfseries \hightLight[red!50] } -\end{Verbatim} - -Ici, |\highLight[red!50]| doit être considéré comme le nom d'une fonction LaTeX qui prend exactement un argument, -puisque, habituellement, elle est utilisée avec |\highLight[red!50]{|\texttt{\slshape text}|}|. - -\medskip -\begingroup -\SetPitonStyle - { Name.Function = \bfseries \highLight[red!50] } -Avec ce réglage, on obtient : \piton{def cube(x) : return x * x * x } -\endgroup - - -\bigskip -Les différents styles sont décrits dans la table \ref{Semantic}. Les réglages initiaux effectués par \pkg{piton} -dans |piton.sty| sont inspirés par le style \pkg{manni} de Pygments.\footnote{Voir - \url{https://pygments.org/styles/}. À remarquer que, par défaut, Pygments propose pour le style \pkg{manni} un - fond coloré dont la couleur est la couleur HTML |#F0F3F3|. Il est possible d'avoir la même couleur dans |{Piton}| - avec l'instruction : |\PitonOptions{background-color = [HTML]{F0F3F3}}|} - -\begin{table}[htb] -\centering -\caption{Les styles proposés par \pkg{piton}} -\label{Semantic} -\begin{tabularx}{0.9\textwidth}{@{}>{\ttfamily}l>{\raggedright\arraybackslash}X@{}} -\toprule -\normalfont Style & Usage \\ -\midrule -Number & les nombres \\ -String.Short & les chaînes de caractères courtes (entre \texttt{'} ou \texttt{"}) \\ -String.Long & les chaînes de caractères longues (entre \texttt{'''} ou \texttt{"""}) sauf les chaînes de - documentation \\ -String & cette clé fixe à la fois |String.Short| et |String.Long| \\ -String.Doc & les chaînes de documentation (seulement entre |"""| suivant PEP~257) \\ -String.Interpol & les éléments syntaxiques des champs des f-strings (c'est-à-dire les caractères \texttt{\{}et \texttt{\}}) \\ -Operator & les opérateurs suivants : \texttt{!= == << >> - \~{} + / * \% = < > \& .} \verb+|+ \verb|@| \\ -Operator.Word & les opérateurs suivants : |in|, |is|, |and|, |or| et |not| \\ -Name.Builtin & la plupart des fonctions prédéfinies par Python \\ -Name.Function & le nom des fonctions définies par l'utilisateur \emph{au moment de leur définition}, c'est-à-dire - après le mot-clé \verb|def| \\ -Name.Decorator & les décorateurs (instructions débutant par \verb|@|) \\ -Name.Namespace & le nom des modules (= bibliothèques extérieures) \\ -Name.Class & le nom des classes au moment de leur définition, c'est-à-dire après le mot-clé \verb|class| \\ -Exception & le nom des exceptions prédéfinies (ex.: SyntaxError) \\ -Comment & les commentaires commençant par \texttt{\#} \\ -Comment.LaTeX & les commentaires commençant par \texttt{\#>} qui sont composés en LaTeX par \pkg{piton} (et - appelés simplement «commentaires LaTeX» dans ce document) \\ -Keyword.Constant & |True|, |False| et |None| \\ -Keyword & les mots-clés suivants : - \ttfamily assert, break, case, continue, del, - elif, else, except, exec, finally, for, from, - global, if, import, lambda, non local, - pass, raise, return, try, while, - with, yield, yield from.\\ -\bottomrule -\end{tabularx} -\end{table} - -\bigskip -\colorbox{yellow!50}{\textbf{Nouveau 1.4}}\enskip La commande |\PitonStyle| prend en argument le nom d'un style -et permet de récupérer la valeur (en tant que liste d'instructions LaTeX) de ce style. - -\smallskip -Par exemple, on peut écrire, dans le texte courant, |{\PitonStyle{Keyword}{function}}| et on aura -le mot {\PitonStyle{Keyword}{function}} formaté comme un mot-clé. - -\smallskip -La syntaxe |{\PitonStyle{|\textsl{\texttt{style}}|}{...}}| est nécessaire pour pouvoir tenir compte à la fois des commandes -semi-globales et des commandes à argument présentes dans la valeur courante du style \texttt{\textsl{style}}. - - -\subsection{Définition de nouveaux environnements} - -\label{NewPitonEnvironment} - -Comme l'environnement |{Piton}| a besoin d'absorber son contenu d'une manière spéciale (à peu près comme du texte -verbatim), il n'est pas possible de définir de nouveaux environnements directement au-dessus de l'environnement -|{Piton}| avec les commandes classiques |\newenvironment| et |\NewDocumentEnvironment|. - -C'est pourquoi \pkg{piton} propose une commande |\NewPitonEnvironment|. Cette commande a la même syntaxe que la -commande classique |\NewDocumentEnvironment|. - -\bigskip -Par exemple, avec l'instruction suivante, un nouvel environnement |{Python}| sera défini avec le même comportement -que l'environnement |{Piton}|: - -{\color{gray}\verb|\NewPitonEnvironment{Python}{}{}{}|} - - -\bigskip -Si on souhaite un environnement |{Python}| qui prenne en argument optionnel entre crochets les clés de -|\PitonOptions|, on peut écrire : - -{\color{gray}\verb|\NewPitonEnvironment{Python}{O{}}{\PitonOptions{#1}}{}|} - -\bigskip -Si on souhaite un environnement |{Python}| qui compose le code inclus dans une boîte de \pkg{tcolorbox}, on peut -écrire (à condition, bien entendu, d'avoir chargé l'extension \pkg{tcolorbox}): - -\begin{Verbatim} -\NewPitonEnvironment{Python}{} - {\begin{tcolorbox}} - {\end{tcolorbox}} -\end{Verbatim} - -\bigskip -Avec ce nouvel environnement |{Python}|, on peut écrire : - -\begin{Verbatim} -~emphase#\begin{Python}@ -def carré(x): - """Calcule le carré d'un nombre""" - return x*x -~emphase#\end{Python}@ -\end{Verbatim} - -\NewPitonEnvironment{Python}{} - {\begin{tcolorbox}} - {\end{tcolorbox}} - -\begin{Python} -def carré(x): - """Calcule le carré d'un nombre""" - return x*x -\end{Python} - - -\section{Fonctionnalités avancées} - - -\subsection{Mise en évidence d'identificateurs} - -\colorbox{yellow!50}{\textbf{Nouveau 1.4}} - -On peut demander le changement de formatage de certains identificateurs avec la clé |identifiers| de -|\PitonOptions|. - -\smallskip -Cette clé prend en argument une valeur au format suivant : - -\quad |{ names = |\textsl{\ttfamily noms}|, style = |\textsl{\ttfamily instructions}| }| - -\begin{itemize} -\item \textsl{\ttfamily noms} est une liste de noms d'identificateurs (séparés par des virgules) ; - -\item \textsl{\ttfamily instructions} est une liste d'instructions LaTeX de formatage du même type que pour les -styles précédemment définis (cf.~\ref{styles} p.~\pageref{styles}). -\end{itemize} - -\emph{Attention} : Seuls les identifiants peuvent voir leur formatage affecté. Les mots-clés et les noms de -fonctions prédéfinies ne seront pas affectés, même s'ils figurent dans la liste \textsl{\ttfamily noms}. - -\begin{Verbatim} -\PitonOptions - { - ~emphase#identifiers@ = - { - ~emphase#names@ = { l1 , l2 } , - ~emphase#style@ = \color{red} - } - } - -\begin{Piton} -def tri(l): - """Tri par segmentation""" - if len(l) <= 1: - return l - else: - a = l[0] - l1 = [ x for x in l[1:] if x < a ] - l2 = [ x for x in l[1:] if x >= a ] - return tri(l1) + [a] + tri(l2) -\end{Piton} -\end{Verbatim} - - -\bigskip - -\begingroup - -\PitonOptions - { - identifiers = - { - names = { l1 , l2 } , - style = \color{red} - } - } - -\begin{Piton} -def tri(l): - """Tri par segmentation""" - if len(l) <= 1: - return l - else: - a = l[0] - l1 = [ x for x in l[1:] if x < a ] - l2 = [ x for x in l[1:] if x >= a ] - return tri(l1) + [a] + tri(l2) -\end{Piton} - -\endgroup - -\bigskip -En utilisant la clé |identifiers|, on peut ajouter de nouvelles fonctions prédéfinies (ou de nouveaux mots-clés, -etc.) qui seront détectées par \pkg{piton}. - - -\begin{Verbatim} -\PitonOptions - { - ~emphase#identifiers@ = - { - names = { cos, sin, tan, floor, ceil, trunc, pow, exp, ln, factorial } , - style = \PitonStyle{Name.Builtin} - } - } - -\begin{Piton} -from math import * -cos(pi/2) -factorial(5) -ceil(-2.3) -floor(5.4) -\end{Piton} -\end{Verbatim} - -\begingroup - -\PitonOptions - { - identifiers = - { - names = { cos, sin, tan, floor, ceil, trunc, pow, exp, ln, factorial } , - style = \PitonStyle{Name.Builtin} - } - } - -\begin{Piton} -from math import * -cos(pi/2) -factorial(5) -ceil(-2.3) -floor(5.4) -\end{Piton} - - -\endgroup - -\subsection{Les échappements vers LaTeX} - -L'extension \pkg{piton} propose plusieurs mécanismes d'échappement vers LaTeX : -\begin{itemize} -\item Il est possible d'avoir des commentaires entièrement composés en LaTeX. -\item Il est possible d'avoir, dans les commentaires Python, les éléments entre \texttt{\$} composés en mode -mathématique de LaTeX. -\item Il est possible d'insérer du code LaTeX à n'importe quel endroit d'un listing Python. -\end{itemize} -Ces mécanismes vont être détaillés dans les sous-parties de cette partie. - -\smallskip -À remarquer également que, dans le cas où \pkg{piton} est utilisée dans la classe \cls{beamer}, \pkg{piton} détecte -la plupart des commandes et environnements de Beamer : voir la sous-section \ref{beamer}, p.~\pageref{beamer}. - - -\subsubsection{Les «commentaires LaTeX»} - -Dans ce document, on appelle «commentaire LaTeX» des commentaires qui débutent par |#>|. Tout ce qui suit ces deux -caractères, et jusqu'à la fin de la ligne, sera composé comme du code LaTeX standard. - -Il y a deux outils pour personnaliser ces commentaires. - -\begin{itemize} -\item Il est possible de changer le marquage syntaxique utilisé (qui vaut initialement~|#>|). Pour ce faire, il -existe une clé |comment-latex|, disponible seulement au chargement de \pkg{piton} (c'est-à-dire au moment du -|\usepackage|), qui permet de choisir les caractères qui (précédés par~|#|) serviront de marqueur syntaxique. - -Par exemple, avec le chargement suivant : - -\quad \verb|\usepackage[comment-latex = LaTeX]{piton}| - -les commentaires LaTeX commenceront par~|#LaTeX|. - -Si on donne la valeur nulle à la clé |comment-latex|, tous les commentaires Python (débutant par~|#|) seront en -fait des «commentaires LaTeX». - -\smallskip -\item Il est possible de changer le formatage du commentaire LaTeX lui-même en changeant le style \pkg{piton} -|Comment.LaTeX|. - -Par exemple, avec |\SetPitonStyle{Comment.LaTeX = \normalfont\color{blue}}|, les commentaires LaTeX seront composés -en bleu. - -Si on souhaite qu'un croisillon (|#|) soit affiché en début de commentaire dans le \textsc{pdf}, on peut régler -|Comment.LaTeX| de la manière suivante : - -\begin{Verbatim} -\SetPitonStyle{Comment.LaTeX = \color{gray}\~#\normalfont\space } -\end{Verbatim} - -Pour d'autres exemples de personnalisation des commentaires LaTeX, voir la partie \ref{example-comments} -p.~\pageref{example-comments}. -\end{itemize} - - -\bigskip -Si l'utilisateur a demandé l'affichage des numéros de ligne (avec |line-numbers| ou |all-line-numbers|), il est -possible de faire référence à ce numéro de ligne avec la commande |\label| placée dans un commentaire -LaTeX.\footnote{Cette fonctionnalité est implémentée en redéfinissant, dans les environnements |{Piton}|, la - commande |\label|. Il peut donc y avoir des incompatibilités avec les extensions qui redéfinissent (globalement) - cette commande |\label| (comme \pkg{varioref}, \pkg{refcheck}, \pkg{showlabels}, etc.)} - - - - -\subsubsection{La clé «math-comments»} - -Il est possible de demander que, dans les commentaires Python normaux, c'est-à-dire débutant par~|#| (et non par -|#>|), les éléments placés entre symboles \texttt{\$} soient composés en mode mathématique de LaTeX (le reste du -commentaire restant composé en verbatim). - -La clé |math-comments|, qui n'est disponible qu'au chargement de \pkg{piton} (c'est-à-dire au moment du -|\usepackage|), active ce comportement. - -\bigskip -Dans l'exemple suivant, on suppose que la clé |math-comments| a été utilisée au chargement de \pkg{piton}. - -\begin{Verbatim} -\begin{Piton} -def carré(x): - return x*x ~# renvoie $x^2$ -\end{Piton} -\end{Verbatim} - -\begin{Piton} -def carré(x): - return x*x # renvoie $x^2$ -\end{Piton} - - -\subsubsection{Le mécanisme «espace-inside»} - -Il est aussi possible de surcharger les listings Python pour y insérer du code LaTeX à peu près n'importe où (mais -entre deux lexèmes, bien entendu). Cette fonctionnalité n'est pas activée par défaut par \pkg{piton}. Pour -l'utiliser, il faut spécifier les deux caractères marquant l'échappement (le premier le commençant et le deuxième -le terminant) en utilisant la clé |escape-inside| au chargement de \pkg{piton} (c'est-à-dire au moment du -|\usepackage|). Les deux caractères peuvent être identiques. - - -\bigskip -Dans l'exemple suivant, on suppose que l'extension \pkg{piton} a été chargée de la manière suivante : - -\begin{Verbatim} -\usepackage[~emphase#escape-inside=$$@]{piton} -\end{Verbatim} - -\medskip -Dans le code suivant, qui est une programmation récursive de la factorielle, on décide de surligner en jaune -l'instruction qui contient l'appel récursif. Cet exemple utilise la commande |\highLight| de \pkg{lua-ul} (cette -extension requiert aussi l'extension \pkg{luacolor}). -\begin{Verbatim} -\begin{Piton} -def fact(n): - if n==0: - return 1 - else: - ~emphase#$\highLight{$@return n*fact(n-1)~emphase#$}$@ -\end{Piton} -\end{Verbatim} - -\begin{Piton} -def fact(n): - if n==0: - return 1 - else: - $\highLight{$return n*fact(n-1)$}$ -\end{Piton} - -\bigskip -En fait, dans le cas présent, il serait sans doute plus habile d'utiliser la commande |\@highLight| de -\pkg{lua-ul}: cette commande bascule vers un fond jaune jusqu'à la fin du groupe TeX courant. Comme le nom de cette -commande contient le caractère |@|, il convient de lui donner un synonyme sans caractère |@| pour pouvoir -l'utiliser directement dans |{Piton}|. - -\begingroup -\fvset{commandchars=\~\#\+,formatcom=\color{gray}} -\begin{Verbatim} -\makeatletter -~emphase#\let\Jaune\@highLight+ -\makeatother -\end{Verbatim} -\endgroup - -\begin{Verbatim} -\begin{Piton} -def fact(n): - if n==0: - return 1 - else: - ~emphase#$\Jaune$@return n*fact(n-1) -\end{Piton} -\end{Verbatim} - -\makeatletter -\let\Jaune\@highLight -\makeatother - - -\begin{Piton} -def fact(n): - if n==0: - return 1 - else: - $\Jaune$return n*fact(n-1) -\end{Piton} - - - -\bigskip -\emph{Attention} : L'échappement vers LaTeX permis par les caractères de |escape-inside| n'est pas actif dans les -chaînes de caractères ni dans les commentaires (pour avoir un commentaire entièrement en échappement vers LaTeX, -c'est-à-dire ce qui est -appelé dans ce document «commentaire LaTeX», il suffit de le faire débuter par |#>|). - - - - -\subsection{Comportement dans la classe Beamer} - -\label{beamer} - -\emph{Première remarque}\par\nobreak -Remarquons que, comme l'environnement |{Piton}| prend son argument selon un mode verbatim, il convient, ce qui -n'est pas surprenant, de l'utiliser dans des environnements |{frame}| de Beamer protégés par la clé |fragile|.\footnote{On - rappelle que pour un environnement |{frame}| de Beamer qui utilise la clé |fragile|, l'instruction |\end{frame}| - doit être seule sur une ligne (à l'exception d'éventuels espaces en début de ligne).} - - -\medskip -Quand l'extension \pkg{piton} est utilisée dans la classe \cls{beamer}\footnote{L'extension \pkg{piton} détecte la - classe \cls{beamer} mais il est aussi possible, si le besoin s'en faisait sentir, d'activer ce comportement avec - la clé |beamer| au chargement de \pkg{piton} : |\usepackage[beamer]{piton}|}, le comportement de \pkg{piton} est -légèrement modifié, comme décrit maintenant. - -\subsubsection{\{Piton\} et \textbackslash PitonInputFile sont ``overlay-aware''} - -Quand \pkg{piton} est utilisé avec Beamer, l'environnement |{Piton}| et la commande |\PitonInputFile| acceptent -l'argument optionnel |<...>| de Beamer pour indiquer les «\emph{overlays}» concernés. - -On peut par exemple écrire : - -\begin{Verbatim} -\begin{Piton}~emphase#<2-5>@ -... -\end{Piton} -\end{Verbatim} - -ou aussi - -\begin{Verbatim} -\PitonInputFile~emphase#<2-5>@{mon_fichier.py} -\end{Verbatim} - - -\subsubsection{Commandes de Beamer reconnues dans \{Piton\} et \textbackslash PitonInputFile} - -Quand \pkg{piton} est utilisé dans la classe \cls{beamer}, les commandes suivantes de \cls{beamer} (classées selon -leur nombre d'arguments obligatoires) sont directement reconnues dans les environnements |{Piton}| (ainsi que dans -les listings composés par la commande |\PitonInputFile|, même si c'est sans doute moins utile). -% -\begin{itemize} -\item aucun argument obligatoire : |\pause|\footnote{On remarquera que, bien sûr, on peut aussi utiliser |\pause| - dans un «commentaire LaTeX», c'est-à-dire en écrivant |#> \pause|. Ainsi, si le code Python est copié, il est - interprétable par Python.} ; -\item un argument obligatoire : |\action|, |\alert|, |\invisible|, |\only|, |\uncover| et |\visible| ; -\item deux arguments obligatoire : |\alt| ; -\item trois arguments obligatoires : |\temporal|. -\end{itemize} - -\medskip -Les accolades dans les arguments obligatoires de ces commandes doivent être équilibrées (cependant, les accolades -présentes dans des chaînes courtes\footnote{Les chaînes courtes de Python sont les chaînes (string) délimitées par - les caractères \texttt{'} ou \texttt{"} non triplés. En Python, les chaînes de caractères courtes ne peuvent pas - s'étendre sur plusieurs lignes de code.} de Python ne sont pas prises en compte). - - -\medskip -Voici un exemple complet de fichier : - -\begin{Verbatim}[formatcom = \small\color{gray}] -\documentclass{beamer} -\usepackage{piton} -\begin{document} -\begin{frame}[fragile] -\begin{Piton} -def string_of_list(l): - """Convertit une liste de nombres en chaîne""" -~emphase# \only<2->{s = "{" + str(l[0])}@ -~emphase# \only<3->{for x in l[1:]: s = s + "," + str(x)}@ -~emphase# \only<4->{s = s + "}"}@ - return s -\end{Piton} -\end{frame} -\end{document} -\end{Verbatim} - -Dans l'exemple précédent, les accolades des deux chaînes de caractères Python |"{"| et |"}"| sont correctement -interprétées (sans aucun caractère d'échappement). - - - -\bigskip -\subsubsection{Environnements de Beamer reconnus dans \{Piton\} et \textbackslash PitonInputFile} - -Quand \pkg{piton} est utilisé dans la classe \pkg{beamer}, les environnements suivants de Beamer sont directement -reconnus dans les environnements |{Piton}| (ainsi que dans les listings composés par la commande |\PitonInputFile| -même si c'est sans doute moins utile) : |{actionenv}|, |{alertenv}|, |{invisibleenv}|, |{onlyenv}|, |{uncoverenv}| -et |{visibleenv}|. - - -\medskip -Il y a néanmoins une restriction : ces environnements doivent englober des \emph{lignes entières de code Python}. - - -\medskip -On peut par exemple écrire : - -\begin{Verbatim}[formatcom = \small\color{gray}] -\documentclass{beamer} -\usepackage{piton} -\begin{document} -\begin{frame}[fragile] -\begin{Piton} -def carré(x): - """Calcule le carré de l'argument""" - ~emphase#\begin{uncoverenv}<2>@ - return x*x - ~emphase#\end{uncoverenv}@ -\end{Piton} -\end{frame} -\end{document} -\end{Verbatim} - - - -\vspace{1cm} -\textbf{Remarque à propos de la commande \textbackslash alert et de l'environnement \{alertenv\} de Beamer}\par\nobreak - -\smallskip -Beamer propose un moyen aisé de changer la couleur utilisée par l'environnement |{alertenv}| (et par la commande -|\alert| qui s'appuie dessus). Par exemple, on peut écrire: - -\begin{Verbatim} -\setbeamercolor{~emphase#alerted text@}{fg=blue} -\end{Verbatim} - -Néanmoins, dans le cas d'une utilisation à l'intérieur d'un environnement |{Piton}| un tel réglage n'est sans doute -pas pertinent, puisque, justement, \pkg{piton} va (le plus souvent) changer la couleur des élements selon leur -valeur lexicale. On préfèrera sans doute un environnement |{alertenv}| qui change la couleur de fond des -éléments à mettre en évidence. - -\smallskip -Voici un code qui effectuera ce travail en mettant un fond jaune. Ce code utilise la commande |\@highLight| de -l'extension \pkg{lua-ul} (cette extension nécessite elle-même l'extension \pkg{luacolor}). - -\begingroup -\fvset{commandchars=\~\#\+,formatcom=\color{gray}} -\begin{Verbatim} -\setbeamercolor{alerted text}{bg=yellow!50} -\makeatletter -\AddToHook{env/Piton/begin} - {\renewenvironment<>{alertenv}{\only~#1{~emphase#\@highLight+[alerted text.bg]}}{}} -\makeatother -\end{Verbatim} -\endgroup - -Ce code redéfinit localement l'environnement |{alertenv}| à l'intérieur de l'environnement |{Piton}| (on rappelle -que la commande |\alert| s'appuie sur cet environnement |{alertenv}|). - - - -\bigskip -\subsection{Coupure des pages et des lignes} - -\label{breakable} - -\subsubsection{Coupure des pages} - -Par défaut les listings produits par l'environnement |{Piton}| et par la commande |\PitonInputFile| sont -insécables. - -Néanmoins, la commande |\PitonOptions| propose la clé |splittable| pour autoriser de telles coupures. - -\begin{itemize} -\item Si la clé |splittable| est utilisée sans valeur, les listings sont sécables n'importe où. - -\item Si la clé |splittable| est utilisée avec une valeur numérique $n$ (qui doit être un entier naturel non nul), -alors les listings seront sécables mais aucune coupure ne pourra avoir lieu entre les $n$~premières lignes, ni -entre les $n$~dernières. De ce fait, |splittable=1| est équivalent à |splittable|. -\end{itemize} - -\medskip -\emph{Remarque}\par\nobreak - -Même avec une couleur de fond (fixée avec |background-color|), les sauts de page sont possibles, à partir du moment -où la clé |splittable| est utilisée.\footnote{Avec la clé |splittable|, un environnement |{Piton}| est sécable même dans un environnement de - \pkg{tcolorbox} (à partir du moment où la clé |breakable| de \pkg{tcolorbox} est utilisée). On précise cela parce - que, en revanche, un environnement de \pkg{tcolorbox} inclus dans un autre environnement de \pkg{tcolorbox} n'est - pas sécable, même quand les deux utilisent la clé |breakable|.} - -\subsubsection{Coupure des lignes} - -\label{line-breaks} - -Par défaut, les éléments produits par \pkg{piton} ne peuvent pas être coupés par une fin de ligne. Il existe -néanmoins des clés pour autoriser de telles coupures (les points de coupure possibles sont les espaces, y compris -les espaces dans les chaînes Python). -\begin{itemize} -\item Avec la clé |break-lines-in-piton|, les coupures de ligne sont autorisées dans la commande |\piton{...}| -(mais pas dans la commande \verb+\piton|...|+, c'est-à-dire avec la syntaxe verbatim). - -\item Avec la clé |break-lines-in-Piton|, les coupures de ligne sont autorisées dans l'environnement |{Piton}| -(d'où la lettre |P| capitale dans le nom) et dans les listings produits par |\PitonInputFile|. - -\item La clé |break-lines| est la conjonction des deux clés précédentes. -\end{itemize} - -\medskip -L'extension \pkg{piton} fournit aussi plusieurs clés pour contrôler l'apparence des coupures de ligne autorisées par |break-lines-in-Piton|. - -\begin{itemize} -\item Avec la clé |indent-broken-lines|, l'indentation de la ligne coupée est respectée à chaque retour à la ligne. - -\item La clé |end-of-broken-line| correspond au symbole placé à la fin d'une ligne coupée. Sa valeur initiale est : -|\hspace*{0.5em}\textbackslash|. - -\item La clé |continuation-symbol| correspond au symbole placé à chaque retour de ligne dans la marge gauche. Sa -valeur initiale est : |+\;|. - -\item La clé |continuation-symbol-on-indentation| correspond au symbole placé à chaque retour de ligne au niveau de -l'indentation (uniquement dans le cas où la clé |indent-broken-lines| est active). Sa valeur initiale est : -|$\hookrightarrow\;$|. -\end{itemize} - -\bigskip -Le code suivant a été composé dans une |{minipage}| standard de LaTeX de largeur 12~cm avec le réglage suivant : - -\begin{Verbatim} -\PitonOptions{break-lines,indent-broken-lines,background-color=gray!15} -\end{Verbatim} - -\begin{center} -\PitonOptions{break-lines,indent-broken-lines,background-color=gray!15} -\begin{minipage}{12cm} -\begin{Piton} -def dict_of_liste(liste): - """Convertit une liste de subrs et de descriptions de glyphes en dictionnaire""" - dict = {} - for liste_lettre in liste: - if (liste_lettre[0][0:3] == 'dup'): # si c'est un subr - nom = liste_lettre[0][4:-3] - print("On traite le subr de numéro " + nom) - else: - nom = liste_lettre[0][1:-3] # si c'est un glyphe - print("On traite le glyphe du caractère " + nom) - dict[nom] = [traite_ligne_Postscript(k) for k in liste_lettre[1:-1]] - return dict -\end{Piton} -\end{minipage} -\end{center} - - - -\bigskip -\subsection{Notes de pied de page dans les environnements de piton} - -\label{footnote} - -Si vous voulez mettre des notes de pied de page dans un environnement de \pkg{piton} (ou bien dans un listing -produit par |\PitonInputFile|, bien que cela paraisse moins pertinent dans ce cas-là) vous pouvez utiliser une -paire |\footnotemark|--|\footnotetext|. - -\smallskip -Néanmoins, il est également possible d'extraire les notes de pieds de page avec l'extension \pkg{footnote} ou bien -l'extension \pkg{footnotehyper}. - -\smallskip -Si \pkg{piton} est chargée avec l'option |footnote| (avec |\usepackage[footnote]{piton}|) l'extension -\pkg{footnote} est chargée (si elle ne l'est pas déjà) et elle est utilisée pour extraire les notes de pied de -page. - -\smallskip -Si \pkg{piton} est chargée avec l'option |footnotehyper|, l'extension \pkg{footnotehyper} est chargée (si -elle ne l'est pas déjà) et elle est utilisée pour extraire les notes de pied de page. - -\smallskip -Attention : Les extensions \pkg{footnote} et \pkg{footnotehyper} sont incompatibles. -L'extension \pkg{footnotehyper} est le successeur de l'extension \pkg{footnote} -et devrait être utilisée préférentiellement. L'extension \pkg{footnote} a quelques défauts ; -en particulier, elle doit être chargée après l'extension \pkg{xcolor} et elle n'est pas parfaitement -compatible avec \pkg{hyperref}. - -\medskip -Dans ce document, l'extension \pkg{piton} a été chargée avec l'option |footnotehyper| et c'est pourquoi des notes -peuvent être mises dans les environnements |{Piton}| : voir un exemple sur la première page de ce document. - -\subsection{Tabulations} - -\smallskip -Même s'il est recommandé d'indenter les listings Python avec des espaces (cf. PEP~8), \pkg{piton} accepte les -caractères de tabulations (U+0009) en début de ligne. Chaque caractère U+0009 est remplacé par $n$ espaces. La -valeur initiale de~$n$ est~4 mais on peut la changer avec la clé |tab-size| de |\PitonOptions|. - -\smallskip -Il existe aussi une clé |tabs-auto-gobble| qui détermine le nombre minimal de caractères U+0009 débutant chaque -ligne (non vide) de l'environnement |{Piton}| et applique |gobble| avec cette valeur (avant le remplacement des -caractères U+0009 par des espaces, bien entendu). Cette clé est donc similaire à la clé |auto-gobble| mais agit sur -des caractères U+0009 au lieu de caractères U+0020 (espaces). - -\section{Exemples} - - -\subsection{Numérotation des lignes} - -\label{example-numbering} - -On rappelle que l'on peut demander la numérotation des lignes des listings avec la clé |line-numbers| ou la clé |all-line-numbers|. - -Par défaut, les numéros de ligne sont composés par \pkg{piton} en débordement à gauche (en utilisant en interne la commande |\llap| de LaTeX). - -Si on ne veut pas de débordement, on peut utiliser l'option |left-margin=auto| qui va insérer une marge adaptée aux -numéros qui seront insérés (elle est plus large quand les numéros dépassent 10). - - -\begingroup -\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -\begin{Verbatim} -~emphase&\PitonOptions{background-color=gray!10, left-margin = auto, line-numbers}@ -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x) #> (appel récursif) - elif x > 1: - return pi/2 - arctan(1/x) #> (autre appel récursif) - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\end{Verbatim} -\endgroup - - - -\begingroup -\PitonOptions{background-color=gray!10,left-margin = auto, line-numbers} -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x) #> (appel récursif) - elif x > 1: - return pi/2 - arctan(1/x) #> (autre appel récursif) - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\endgroup - - -\bigskip - -\subsection{Formatage des commentaires LaTeX} - -\label{example-comments} - -On peut modifier le style |Comment.LaTeX| (avec |\SetPitonStyle|) pour faire afficher les commentaires -LaTeX (qui débutent par |#>|) en butée à droite. - -\begingroup -\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -\begin{Verbatim} -\PitonOptions{background-color=gray!10} -~emphase&\SetPitonStyle{Comment.LaTeX = \hfill \normalfont\color{gray}}@ -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x) #> appel récursif - elif x > 1: - return pi/2 - arctan(1/x) #> autre appel récursif - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\end{Verbatim} -\endgroup - -\begingroup -\PitonOptions{background-color=gray!10} -\SetPitonStyle{Comment.LaTeX = \hfill \normalfont\color{gray}} -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x) #> appel récursif - elif x > 1: - return pi/2 - arctan(1/x) #> autre appel récursif - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\endgroup - - -\vspace{1cm} -On peut aussi faire afficher les commentaires dans une deuxième colonne à droite si on limite la largeur du code -proprement dit avec un environnement |{minipage}| de LaTeX. - - -\begingroup -\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -\begin{Verbatim} -\PitonOptions{background-color=gray!10} -~emphase&\NewDocumentCommand{\MyLaTeXCommand}{m}{\hfill \normalfont\itshape\rlap{\quad #1}}@ -~emphase&\SetPitonStyle{Comment.LaTeX = \MyLaTeXCommand}@ -~emphase&\begin{minipage}{12cm}@ -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x) #> appel récursif - elif x > 1: - return pi/2 - arctan(1/x) #> autre appel récursif - else: - s = 0 - for k in range(n): - s += (-1)**k/(2*k+1)*x**(2*k+1) - return s -\end{Piton} -~emphase&\end{minipage}@ -\end{Verbatim} -\endgroup - - - -\begingroup -\PitonOptions{background-color=gray!10} -\NewDocumentCommand{\MyLaTeXCommand}{m}{\hfill \normalfont\itshape\rlap{\quad #1}} -\SetPitonStyle{Comment.LaTeX = \MyLaTeXCommand} -\begin{minipage}{12cm} -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x) #> appel récursif - elif x > 1: - return pi/2 - arctan(1/x) #> autre appel récursif - else: - s = 0 - for k in range(n): - s += (-1)**k/(2*k+1)*x**(2*k+1) - return s -\end{Piton} -\end{minipage} -\endgroup - -\bigskip - -\subsection{Notes dans les listings} - -Pour pouvoir extraire les notes (introduites par |\footnote|), l'extension |piton| doit être chargée, soit avec la -clé |footnote|, soit avec la clé |footnotehyper|, comme expliqué à la section \ref{footnote} p.~\pageref{footnote}. -Dans le présent document, l'extension \pkg{piton} a été chargée par la clé |footnotehyper|. - -Bien entendu, une commande |\footnote| ne peut apparaître que dans un commentaire LaTeX (qui débute par |#>|). Un -tel commentaire peut se limiter à cette unique commande |\footnote|, comme dans l'exemple suivant. - -\begingroup -\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -\begin{Verbatim} -\PitonOptions{background-color=gray!10} -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x)~emphase&#>\footnote{Un premier appel récursif.}]@ - elif x > 1: - return pi/2 - arctan(1/x)~emphase&#>\footnote{Un deuxième appel récursif.}@ - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\end{Verbatim} -\endgroup - -\begingroup -\PitonOptions{background-color=gray!10} -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x)#>\footnote{Un premier appel récursif.} - elif x > 1: - return pi/2 - arctan(1/x)#>\footnote{Un deuxième appel récursif.} - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\endgroup - - -\vspace{1cm} - -Si on utilise l'environnement |{Piton}| dans un environnement |{minipage}| de LaTeX, les notes sont, bien entendu, -composées au bas de l'environnement |{minipage}|. Rappelons qu'une telle |{minipage}| ne peut être coupée par un -saut de page. - - -\begingroup -\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -\begin{Verbatim} -\PitonOptions{background-color=gray!10} -\emphase\begin{minipage}{\linewidth} -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x)~emphase&#>\footnote{Un premier appel récursif.}@ - elif x > 1: - return pi/2 - arctan(1/x)~emphase&#>\footnote{Un deuxième appel récursif.}@ - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\end{minipage} -\end{Verbatim} -\endgroup - -\begingroup -\PitonOptions{background-color=gray!10} -\begin{minipage}{\linewidth} -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x)#>\footnote{Un premier appel récursif.} - elif x > 1: - return pi/2 - arctan(1/x)#>\footnote{Un deuxième appel récursif.} - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\end{minipage} -\endgroup - - -\vspace{1cm} -Si on encapsule l'environnement |{Piton}| dans un environnement |{minipage}| pour, typiquement, limiter la largeur -d'un fond coloré, il faut encadrer l'ensemble dans un environnement |{savenotes}| (de \pkg{footnote} ou -\pkg{footnotehyper}) si on veut avoir les notes reportées en pied de page. - -\begingroup -\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -\begin{Verbatim} -\PitonOptions{background-color=gray!10} -~emphase&\begin{savenotes}@ -\begin{minipage}{13cm} -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x)~emphase&#>\footnote{Un premier appel récursif.}@ - elif x > 1: - return pi/2 - arctan(1/x)~emphase&#>\footnote{Un deuxième appel récursif.}@ - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\end{minipage} -~emphase&\end{savenotes}@ -\end{Verbatim} -\endgroup - - - -\begin{savenotes} -\PitonOptions{background-color=gray!10} -\begin{minipage}{13cm} -\begin{Piton} -def arctan(x,n=10): - if x < 0: - return -arctan(-x)#>\footnote{Un premier appel récursif.} - elif x > 1: - return pi/2 - arctan(1/x)#>\footnote{Un deuxième appel récursif.} - else: - return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -\end{Piton} -\end{minipage} -\end{savenotes} - -\bigskip - -\subsection{Un exemple de réglage des styles} - -Les styles graphiques ont été présentés à la partie \ref{styles}, p.~\pageref{styles}. - -\smallskip -On présente ici un réglage de ces styles adapté pour les documents en noir et blanc. On l'utilise avec la fonte -\emph{DejaVu Sans Mono}\footnote{Voir: \url{https://dejavu-fonts.github.io}} spécifiée avec la commande - |\setmonofont| de \pkg{fontspec}. - -Ce réglage utilise la commande |\highLight| de \pkg{lua-ul} (cette extension nécessite elle-même l'extension \pkg{luacolor}). - - -\begin{Verbatim} -\setmonofont[Scale=0.85]{DejaVu Sans Mono} - -\SetPitonStyle - { - Number = , - String = \itshape , - String.Doc = \color{gray} \itshape , - Operator = , - Operator.Word = \bfseries , - Name.Builtin = , - Name.Function = \bfseries \highLight[gray!20] , - Comment = \color{gray} , - Comment.LaTeX = \normalfont \color{gray}, - Keyword = \bfseries , - Name.Namespace = , - Name.Class = , - Name.Type = , - InitialValues = \color{gray} - } -\end{Verbatim} - - -\begingroup - - -\setmonofont[Scale=0.85]{DejaVu Sans Mono} - -\SetPitonStyle - { - Number = , - String = \itshape , - String.Doc = \color{gray} \itshape , - Operator = , - Operator.Word = \bfseries , - Name.Builtin = , - Name.Function = \bfseries \highLight[gray!20] , - Comment = \color{gray} , - Comment.LaTeX = \normalfont \color{gray}, - Keyword = \bfseries , - Name.Namespace = , - Name.Class = , - Name.Type = , - InitialValues = \color{gray} - } - - -\bigskip - -\begin{Piton} -from math import pi - -def arctan(x,n=10): - """Compute the mathematical value of arctan(x) - - n is the number of terms in the sum - """ - if x < 0: - return -arctan(-x) # appel récursif - elif x > 1: - return pi/2 - arctan(1/x) - #> (on a utilisé le fait que $\arctan(x)+\arctan(1/x)=\pi/2$ pour $x>0$) - else: - s = 0 - for k in range(n): - s += (-1)**k/(2*k+1)*x**(2*k+1) - return s -\end{Piton} - - -\endgroup - -\section{Utilisation avec pyluatex} - -\subsection{Utilisation standard de pyluatex} - -L'extension \pkg{pyluatex} est une extension qui permet l'exécution de code Python à partir de |lualatex| (pourvu -que Python soit installé sur la machine et que la compilation soit effectuée avec |lualatex| et |--shell-escape|). - -Voici, à titre d'exemple, un environnement |{PitonExecute}| qui formate un listing Python (avec \pkg{piton}) et qui -affiche également dessous le résultat de l'exécution de ce code avec Python. - - -\begin{Verbatim} -\ExplSyntaxOn -\NewDocumentEnvironment { ~emphase#PitonExecute@ } { ! O { } } % le ! est obligatoire - { - \PyLTVerbatimEnv - \begin{pythonq} - } - { - \end{pythonq} - \directlua - { - tex.print("\\PitonOptions{~#1}") - tex.print("\\begin{Piton}") - tex.print(pyluatex.get_last_code()) - tex.print("\\end{Piton}") - tex.print("") - } - \begin{center} - \directlua{tex.print(pyluatex.get_last_output())} - \end{center} - } -\ExplSyntaxOff -\end{Verbatim} - -\ExplSyntaxOn -\NewDocumentEnvironment { PitonExecute } { ! O { } } - { - \PyLTVerbatimEnv - \begin{pythonq} - } - { - \end{pythonq} - \directlua - { - tex.print("\\PitonOptions{#1}") - tex.print("\\begin{Piton}") - tex.print(pyluatex.get_last_code()) - tex.print("\\end{Piton}") - tex.print("") - } - \begin{center} - \directlua{tex.print(pyluatex.get_last_output())} - \end{center} - } -\ExplSyntaxOff - -Cet environnement |{PitonExecute}| prend en argument optionnel (entre crochets) les options proposées par la -commande |\PitonOptions|. - -\bigskip -Voici un exemple d'utilisation de cet environnement |{PitonExecute}| : - -\begin{Verbatim} -\begin{~emphase#PitonExecute@}[background-color=gray!15] -def square(x): - return x*x -print(f'Le carré de 12 est {square(12)}.') -\end{~emphase#PitonExecute@} -\end{Verbatim} - - -\medskip -\begin{PitonExecute}[background-color=gray!15] -def square(x): - return x*x -print(f'Le carré de 12 est {square(12)}.') -\end{PitonExecute} - -\bigskip - -\subsection{Utilisation de l'environnement \{pythonrepl\} de pyluatex} - -\label{pythonrepl} - -L'environnement |{pythonrepl}| de \pkg{pyluatex} passe son contenu à Python et renvoie ce que l'on obtient quand on -fournit ce code à une boucle \textsc{repl} (\emph{read-eval-print loop}) de Python. On obtient un entrelacement -d'instructions précédées par le prompt |>>>| de Python et des valeurs renvoyées par Python (et de ce qui a été -demandé d'être affiché avec des \piton{print} de Python). - -\medskip -Il est ensuite possible de passer cela à un environnement |{Piton}| qui va faire un coloriage syntaxique -et mettre sur fond grisé les lignes correspondant aux instructions fournies à l'interpréteur Python (gràce à la clé -|prompt-background-color| de |\PitonOptions|). - - -\medskip -Voici la programmation d'un environnement |{PitonREPL}| qui effectue ce travail (pour des raisons techniques, le -|!| est ici obligatoire dans la signature de l'environnement). - -\begin{Verbatim} -\NewDocumentEnvironment { PitonREPL } { ! O { } } % le ! est obligatoire - { - \PitonOptions - { background-color=white, - ~emphase#prompt-background-color = gray!10@, - ~#1 - } - \PyLTVerbatimEnv - \begin{pythonrepl} - } - { - \directlua - { - tex.print("\\begin{Piton}") - tex.print(pyluatex.get_last_output()) - tex.print("\\end{Piton}") - tex.print("") - } - \end{pythonrepl} - } -\end{Verbatim} - -\medskip -Voici un exemple d'utilisation de ce nouvel environnement |{PitonREPL}|. - -\medskip -\begin{Verbatim} -~emphase#\begin{PitonREPL}@ - def valeur_absolue(x): - "Renvoie la valeur absolue de x" - if x > 0: - return x - else: - return -x - - valeur_absolue(-3) - valeur_absolue(0) - valeur_absolue(5) -~emphase#\end{PitonREPL}@ -\end{Verbatim} - -\bigskip - - -\NewDocumentEnvironment { PitonREPL } { } - { - \PitonOptions{background-color=white,prompt-background-color = gray!10} - \PyLTVerbatimEnv - \begin{pythonrepl} - } - { - \directlua - { - tex.print("\\begin{Piton}") - tex.print(pyluatex.get_last_output()) - tex.print("\\end{Piton}") - tex.print("") - } - \end{pythonrepl} - } - - -\begin{PitonREPL} - def valeur_absolue(x): - "Renvoie la valeur absolue de x" - if x > 0: - return x - else: - return -x - - valeur_absolue(-3) - valeur_absolue(0) - valeur_absolue(5) -\end{PitonREPL} - - -\bigskip -En fait, il est possible de ne pas faire afficher les prompts eux-mêmes (c'est-à-dire les chaînes de caractères -|>>>| et |...|). En effet, \pkg{piton} propose un style pour ces éléments, qui est appelé |Prompt|. Par défaut, la -valeur de ce style est vide, ce qui fait qu'aucune action n'est exécutée sur ces éléments qui sont donc affichés -tels quels. En fournissant comme valeur une fonction qui se contente de gober son argument, on peut demander à ce -qu'ils ne soient pas affichés. - -\bigskip -\begin{savenotes} -\begin{Verbatim} -\NewDocumentCommand{\Gobe}{m}{}#~color#black@~footnote#On a défini ici une fonction ~texttt#~string~Gobe@ mais, en fait, elle existe déjà en L3 sous le nom ~texttt#~string~use~_none:n@.@@ -\SetPitonStyle{ ~emphase#Prompt = \Gobe@ } -\end{Verbatim} -\end{savenotes} - - - - -\NewDocumentCommand{\Gobe}{m}{} -\ExplSyntaxOn -\SetPitonStyle{ Prompt = \use_none:n } -\ExplSyntaxOff - -\bigskip -L'exemple précédent donne alors : - -\medskip -\begin{Verbatim} -~emphase#\begin{PitonREPL}@ - def valeur_absolue(x): - "Renvoie la valeur absolue de x" - if x > 0: - return x - else: - return -x - - valeur_absolue(-3) - valeur_absolue(0) - valeur_absolue(5) -~emphase#\end{PitonREPL}@ -\end{Verbatim} - - - -\begin{PitonREPL} - def valeur_absolue(x): - "Renvoie la valeur absolue de x" - if x > 0: - return x - else: - return -x - - valeur_absolue(-3) - valeur_absolue(0) - valeur_absolue(5) -\end{PitonREPL} - - - -\section*{Autre documentation} - -Le document |piton.pdf| (fourni avec l'extension \pkg{piton}) contient une traduction anglaise de la -documentation ici présente, ainsi que le code source commenté et un historique des versions. - - -\tableofcontents - +% -*- coding: utf-8 ; -*- +\documentclass[dvipsnames]{article} + +\usepackage{fontspec} + +\usepackage[french]{babel} +\frenchsetup{og = « , fg = »} + +\usepackage[footnotehyper,escape-inside=$$,math-comments]{piton} + +\usepackage[executable=python.exe]{pyluatex} + +\usepackage{xcolor} + +\usepackage{geometry} +\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}} + +\usepackage{enumitem} +\usepackage{verbatim} +\usepackage{amsmath} +\usepackage{tabularx} +\usepackage{booktabs} +\usepackage{tcolorbox} +\usepackage{luacolor,lua-ul} + +\usepackage{caption} + +% We use \MakeShortVerb of shortvrb and not \DefineShortVerb of fancyvrb +% because we don't want the contents of short verbatim colored in gray +\usepackage{shortvrb} +\MakeShortVerb{\|} + +\usepackage{varwidth} + +\skip\footins = 2\bigskipamount + +\usepackage{fancyvrb} +\fvset{commandchars=\~\#\@,formatcom=\color{gray}} +\def\emphase{\bgroup\color{RoyalPurple}\let\next=} + + +\usepackage{titlesec} +\titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex} +\titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex} + +\def\interitem{\vspace{7mm plus 2 mm minus 3mm}} + + +\usepackage[hyperfootnotes = false]{hyperref} + +\hypersetup + { + pdfinfo = + { + Title = L’extension piton , + Subject = Une extension LaTeX , + Author = F. Pantigny + } + } + + + + +\NewDocumentCommand {\pkg} {m} {\textsf{#1}} +\NewDocumentCommand {\cls} {m} {\textsf{#1}} + +\setlength{\parindent}{0pt} + + +\begin{document} + +\PitonOptions{splittable = 4} + +\VerbatimFootnotes + + +\title{L'extension LaTeX \pkg{piton}\thanks{Ce document correspond à la +version~\myfileversion\space de \pkg{piton}, à la date du~\myfiledate.}} +\author{F. Pantigny \\ \texttt{fpantigny@wanadoo.fr}} + +\maketitle + +\begin{abstract} +L'extension \pkg{piton} propose des outils pour composer du code Python avec une coloration syntaxique +en utilisant la bibliothèque Lua LPEG. L'extension \pkg{piton} nécessite l'emploi de LuaLaTeX. +\end{abstract} + + + +\section{Présentation} + +L'extension \pkg{piton} utilise la librairie Lua nommée LPEG\footnote{LPEG est une librairie de capture de motifs + (\emph{pattern-matching} en anglais) pour Lua, écrite en C, fondée sur les PEG (\emph{parsing expression + grammars}): \url{http://www.inf.puc-rio.br/~roberto/lpeg/}} pour «parser» le code Python et le composer avec un +coloriage syntaxique. Comme elle utilise du code Lua, elle fonctionne uniquement avec |lualatex| (et ne va pas +fonctionner avec les autres moteurs de compilation LaTeX, que ce soit |latex|, |pdflatex| ou |xelatex|). Elle +n'utilise aucun programme extérieur et la compilation ne requiert donc pas |--shell-escape|. La compilation est +très rapide puisque tout le travail du parseur est fait par la librairie LPEG, écrite en C. + +\bigskip +Voici un exemple de code Python composé avec l'environnement |{Piton}| proposé par \pkg{piton}. + + +\bigskip +\begin{Piton} +from math import pi + +def arctan(x,n=10): + """Calcule la valeur mathématique de arctan(x) + + n est le nombre de termes de la somme + """ + if x < 0: + return -arctan(-x) # appel récursif + elif x > 1: + return pi/2 - arctan(1/x) + #> (on a utilisé le fait que $\arctan(x)+\arctan(1/x)=\pi/2$ pour $x>0$)\footnote{Cet échappement vers LaTeX a été obtenu en débutant par \ttfamily\#>.} + else: + s = 0 + for k in range(n): + s += (-1)**k/(2*k+1)*x**(2*k+1) + return s +\end{Piton} + + +\bigskip + +L'extension LaTeX \pkg{piton} est entièrement contenue dans le fichier |piton.sty|. Ce +fichier peut être placé dans le répertoire courant ou dans une arborescence |texmf|. Le mieux reste néanmoins +d'installer \pkg{piton} avec une distribution TeX comme MiKTeX, TeX~Live ou MacTeX. + + +\section{Utilisation de l'extension} + +\subsection{Chargement de l'extension} + +L'extension \pkg{piton} se charge simplement avec la commande |\usepackage| : |\usepackage{piton}|. + +On a cependant deux remarques à formuler : +\begin{itemize} +\item l'extension \pkg{piton} utilise l'extension \pkg{xcolor} (mais \pkg{piton} ne charge pas \pkg{xcolor} : si +\pkg{xcolor} n'est pas chargée avant le |\begin{document}|, une erreur fatale sera levée) ; + +\item l'extension \pkg{piton} n'est utilisable qu'avec LuaLaTeX : si un autre moteur de compilation (comme |latex|, +|pdflatex| ou |xelatex|) est utilisé, une erreur fatale sera levée. +\end{itemize} + +\subsection{Les commandes et environnements à la disposition de l'utilisateur} + +L'extension \pkg{piton} fournit plusieurs outils pour composer du code Python: les commandes |\piton|, +l'environnement |{Piton}| et la commande |\PitonInputFile|. + +\begin{itemize} \setlength{\fboxsep}{1pt} +\item La commande \colorbox{gray!20}{\ttfamily \textbackslash piton} doit être utilisée pour composer de petits éléments de code à l'intérieur d'un +paragraphe. Par exemple : + +{\color{gray}\verb|\piton{def carré(x): return x*x}|}\qquad +\piton{def carré(x): return x*x} + +La syntaxe et les particularités de la commande sont détaillées ci-après. + + +\item L'environnement \colorbox{gray!20}{\ttfamily \{Piton\}} doit être utilisé pour composer des codes de +plusieurs lignes. Comme cet environnement prend son argument selon un mode verbatim, il ne peut pas être utilisé +dans l'argument d'une commande LaTeX. Pour les besoins de personnalisation, il est possible de définir de nouveaux +environnements similaires à |{Piton}| en utilisant la commande |\NewPitonEnvironment| : cf. partie +\ref{NewPitonEnvironment} p.~\pageref{NewPitonEnvironment}. + +\item La commande \colorbox{gray!20}{\ttfamily \textbackslash PitonInputFile} doit être utilisée pour insérer et +composer un fichier extérieur. + +Cette commande prend en argument optionnel entre crochets deux clés |first-line| et |last-line| qui permettent de +n'insérer que la partie du fichier comprise entre les lignes correspondantes. +\end{itemize} + + +\subsection{La syntaxe de la commande \textbackslash piton} + + +La commande |\piton| possède en fait une syntaxe double. Elle est peut être utilisée comme une commande standard de +LaTeX prenant son argument entre accolades (|\piton{...}|), ou bien selon la syntaxe de la commande |\verb| où l'argument est +délimité entre deux caractères identiques (par ex. : \verb!\piton|...|!). On détaille maintenant ces deux syntaxes. + +\bigskip +\begin{itemize} +\item {\color{blue} \textsf{Syntaxe} \verb|\piton{...}|}\par\nobreak + +Quant son argument est donné entre accolades, la commande |\piton| ne prend pas son argument en mode verbatim. Les +points suivants doivent être remarqués : + +\begin{itemize} +\item plusieurs espaces successives sont remplacées par une unique espace, + +{\color{cyan} mais la commande |\|⣠est fournie pour forcer l'insertion d'une espace} ; + +\item il n'est pas possible d'utiliser le caractère |%| à l'intérieur, + +{\color{cyan} mais la commande |\%| est fournie pour insérer un |%|} ; + +\item les accolades doivent apparaître par paires correctement imbriquées, + +{\color{cyan} mais les commandes |\{| et |\}| sont aussi fournies pour insérer des accolades individuelles} ; + +\item les commandes LaTeX\footnote{Cela s'applique aux commandes commençant par une contre-oblique |\| mais également aux caractères actifs.} sont +complètement développées sans être exécutées + +{\color{cyan} et on peut donc utiliser |\\| pour insérer une contre-oblique}. +\end{itemize} + +Les autres caractères (y compris |#|, |^|, |_|, |&|, |$| % $ +et |@|) doivent être insérés sans contre-oblique. + +\bigskip +\begin{tabular}{>{\color{gray}}w{l}{75mm}@{\hspace*{1cm}}l} +\omit Exemples : \hfil \\ +\noalign{\vskip1mm} +\verb|\piton{ma_chaîne = '\\n'}| & +\piton{ma_chaîne = '\\n' } \\ +\verb|\piton{def pair(n): return n\%2==0}| & +\piton{def pair(n): return n\%2==0 } \\ +\verb|\piton{c="#" # une affectation }| & +\piton{c="#" # une affectation } \\ +\verb|\piton{c="#" \ \ \ # une affectation }| & +\piton{c="#" \ \ \ # une affectation } \\ +\verb|\piton{my_dict = {'a': 3, 'b': 4}}| & +\piton{my_dict = {'a': 3, 'b': 4}} +\end{tabular} + +\bigskip +La commande |\piton| avec son argument entre accolades peut être utilisée dans les arguments des autres commandes LaTeX.\footnote{La commande + |\piton| peut par exemple être + utilisée dans une note de bas de page. Exemple : \piton{s = 'Une chaîne'}.} + +\bigskip +\item {\color{blue} \textsf{Syntaxe} \verb!\piton|...|!}\par\nobreak + +Quand la commande |\piton| prend son argument entre deux caractères identiques, cet argument est pris \emph{en mode + verbatim}. De ce fait, avec cette syntaxe, la commande |\piton| ne peut \emph{pas} être utilisée dans l'argument d'une +autre fonction. + +\medskip +\begin{tabular}{>{\color{gray}}w{l}{75mm}@{\hspace*{1cm}}l} +\omit Exemples : \hfil \\ +\noalign{\vskip1mm} +\verb!\piton|ma_chaîne = '\n'|! & +\piton|ma_chaîne = '\n'| \\ +\verb|\piton!def pair(n): return n%2==0!| & +\piton!def pair(n): return n%2==0! \\ +\verb|\piton+c="#" # une affectation +| & +\piton+c="#" # une affectation + \\ +\verb|\piton?my_dict = {'a': 3, 'b': 4}?| & +\piton!my_dict = {'a': 3, 'b': 4}! +\end{tabular} + +\end{itemize} + + + +\section{Personnalisation} + +\subsection{La commande \textbackslash PitonOptions} + +\NewDocumentCommand{\Definition}{m} + {{\setlength{\fboxsep}{1pt}\colorbox{gray!20}{\ttfamily \vphantom{gl}#1}}} + + +La commande |\PitonOptions| prend en argument une liste de couples \textsl{clé=valeur}. La portée des réglages +effectués par cette commande est le groupe TeX courant.\footnote{On rappelle que tout environnement LaTeX est, en particulier, un groupe.} + +\begin{itemize} +\item La clé \Definition{gobble} prend comme valeur un entier positif $n$ : les $n$ premiers caractères de chaque +ligne sont alors retirés (avant formatage du code) dans les environnements |{Piton}|. Ces $n$ caractères ne sont +pas nécessairement des espaces. + +\item Quand la clé \Definition{auto-gobble} est activée, l'extension \pkg{piton} détermine la valeur minimale $n$ +du nombre d'espaces successifs débutant chaque ligne (non vide) de l'environnement |{Piton}| et applique |gobble| +avec cette valeur de~$n$. + +\item Quand la clé \Definition{env-gobble} est activée, \pkg{piton} analyse la dernière ligne de l'environnement, +c'est-à-dire celle qui contient le |\end{Piton}| et détermine si cette ligne ne comporte que des espaces suivis par +|\end{Piton}|. Si c'est le cas, \pkg{piton} calcule le nombre $n$ de ces espaces et applique |gobble| avec cette +valeur de~$n$. Le nom de cette clé vient de \emph{environment gobble}: le nombre d'espaces à retirer ne dépend que +de la position des délimiteurs |\begin{Piton}| et |\end{Piton}| de l'environnement. + +\item Avec la clé \Definition{line-numbers}, les lignes \emph{non vides} (et toutes les lignes des +\emph{docstrings}, y compris celles qui sont vides) sont numérotées dans les environnements \verb|{Piton}| et dans +les listings produits par la commande |\PitonInputFile|. + +\item Avec la clé \Definition{all-line-numbers}, \emph{toutes} les lignes sont numérotées, y compris les lignes vides. + +\item \colorbox{yellow!50}{\textbf{Nouveau 1.5}}\par\nobreak + +La clé \Definition{numbers-sep} est la distance horizontale entre les numéros de lignes (insérés par |line-numbers| +ou |all-line-numbers|) et les lignes du code informatique. La valeur initiale est 0.7~em. + +\item La clé \Definition{left-margin} fixe une marge sur la gauche. Cette clé peut être utile, en particulier, en +conjonction avec l'une des clés |line-numbers| et |all-line-numbers| si on ne souhaite pas que les numéros de ligne +soient dans une position en débordement sur la gauche. + +Il est possible de donner à la clé |left-margin| la valeur spéciale~|auto|. Avec cette valeur, une marge est +insérée automatiquement pour les numéros de ligne quand l'une des clés |line-numbers| ou |all-line-numbers| est +utilisée. Voir un exemple à la partie \ref{example-numbering} p.~\pageref{example-numbering}. + +\item Avec la clé \Definition{resume}, le compteur de lignes n'est pas remis à zéro comme il l'est normalement au +début d'un environnement |{Piton}| ou bien au début d'un listing produit par |\PitonInputFile|. Cela permet de +poursuivre la numérotation d'un environnement à l'autre. + +\item La clé \Definition{background-color} fixe la couleur de fond des environnements |{Piton}| et des listings +produits par |\PitonInputFile| (ce fond a une largeur égale à la valeur courante de |\linewidth|). La clé +|background-color| accepte une couleur définie «à la volée», c'est-à-dire que l'on peut écrire par exemple +|background-color = [cmyk]{0.1,0.05,0,0}| + +\smallskip +\colorbox{yellow!50}{\textbf{Nouveau 1.4}}\enskip La clé |background-color| accepte aussi en argument une +\emph{liste} de couleurs. Les lignes sont alors coloriées de manière cyclique avec ces couleurs. + +\emph{Exemple} : |\PitonOptions{background-color = {gray!5,white}}| + +\item Avec la clé \Definition{prompt-background-color}, \pkg{piton} ajoute un fond coloré aux lignes débutant par +le prompt «|>>>|» (et sa continuation «|...|») caractéristique des consoles Python avec boucle \textsc{repl} +(\emph{read-only-eval loop}). Pour un exemple d'utilisation de cette clé, voir la partie \ref{pythonrepl} +p.~\pageref{pythonrepl}. + +\item En activant la clé \Definition{show-spaces-in-strings}, les espaces dans les chaînes courtes (c'est-à-dire +celles délimitées par |'| ou |"|) sont matérialisés par le caractère ⣠(U+2423 : \textsc{open box}). Bien sûr, le +caractère U+2423 doit être présent dans la fonte mono-chasse utilisée.\footnote{L'extension \pkg{piton} utilise + simplement la fonte mono-chasse courante. Pour la changer, le mieux est d'utiliser |\setmonofont| de + \pkg{fontspec}.}\par\nobreak +% +\begingroup +\PitonOptions{show-spaces-in-strings} +Exemple : \piton{my_string = 'Très bonne réponse'} +\endgroup + +\smallskip +Avec la clé \Definition{show-spaces}, tous les espaces sont matérialisés (et aucune coupure de ligne ne peut plus +intervenir sur ces espaces matérialisés, même si la clé |break-lines|\footnote{cf. \ref{line-breaks} p.~\pageref{line-breaks}.} est active). +\end{itemize} + +\bigskip + +\begingroup +\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +\begin{Verbatim} +~emphase&\PitonOptions{line-numbers,auto-gobble,background-color = gray!15}@ +\begin{Piton} + from math import pi + + def arctan(x,n=10): + """Calcule la valeur mathématique de arctan(x) + + n est le nombre de termes de la somme + """ + if x < 0: + return -arctan(-x) # appel récursif + elif x > 1: + return pi/2 - arctan(1/x) + #> (on a utilisé le fait que $\arctan(x)+\arctan(1/x)=\pi/2$ pour $x>0$) + else: + s = 0 + for k in range(n): + s += (-1)**k/(2*k+1)*x**(2*k+1) + return s +\end{Piton} +\end{Verbatim} +\endgroup + + +\begingroup +\PitonOptions{line-numbers,auto-gobble,background-color = gray!15} +\begin{Piton} + from math import pi + + def arctan(x,n=10): + """Compute the value of arctan(x) + + n is the number of terms in the sum + """ + if x < 0: + return -arctan(-x) # appel récursif + elif x > 1: + return pi/2 - arctan(1/x) + #> (on a utilisé le fait que $\arctan(x)+\arctan(1/x)=\pi/2$ pour $x>0$) + else: + s = 0 + for k in range(n): + s += (-1)**k/(2*k+1)*x**(2*k+1) + return s +\end{Piton} +\endgroup + + + +\bigskip +La commande |\PitonOptions| propose d'autres clés qui seront décrites plus loin (voir en particulier la coupure des +pages et des lignes p.~\pageref{breakable}). + + +\subsection{Les styles} + +\label{styles} + +L'extension \pkg{piton} fournit la commande |\SetPitonStyle| pour personnaliser les différents styles utilisés pour +formater les éléments syntaxiques des listings Python. Ces personnalisations ont une portée qui correspond au +groupe TeX courant.\footnote{On rappelle que tout environnement LaTeX est, en particulier, un groupe.} + +\bigskip +La commande |\SetPitonStyle| prend en argument une liste de couples \textsl{clé=valeur}. Les clés sont les noms des +styles et les valeurs sont les instructions LaTeX de formatage correspondantes. + +\bigskip +Ces instructions LaTeX doivent être des instructions de formatage du type de |\bfseries|, |\slshape|, +|\color{...}|, etc. (les commandes de ce type sont parfois qualifiées de \emph{semi-globales}). Il est aussi +possible de mettre, \emph{à la fin de la liste d'instructions}, une commande LaTeX prenant exactement un argument. + +\bigskip +Voici un exemple qui change le style utilisé pour le nom d'une fonction Python, au moment de sa définition +(c'est-à-dire après le mot-clé |def|). Elle utilise la commande |\highLight| de \pkg{lua-ul} (qui nécessite +lui-même le chargement de \pkg{luacolor}). + +\begin{Verbatim} +\SetPitonStyle + { Name.Function = \bfseries \hightLight[red!50] } +\end{Verbatim} + +Ici, |\highLight[red!50]| doit être considéré comme le nom d'une fonction LaTeX qui prend exactement un argument, +puisque, habituellement, elle est utilisée avec |\highLight[red!50]{|\texttt{\slshape text}|}|. + +\medskip +\begingroup +\SetPitonStyle + { Name.Function = \bfseries \highLight[red!50] } +Avec ce réglage, on obtient : \piton{def cube(x) : return x * x * x } +\endgroup + + +\bigskip +Les différents styles sont décrits dans la table \ref{Semantic}. Les réglages initiaux effectués par \pkg{piton} +dans |piton.sty| sont inspirés par le style \pkg{manni} de Pygments.\footnote{Voir + \url{https://pygments.org/styles/}. À remarquer que, par défaut, Pygments propose pour le style \pkg{manni} un + fond coloré dont la couleur est la couleur HTML |#F0F3F3|. Il est possible d'avoir la même couleur dans |{Piton}| + avec l'instruction : |\PitonOptions{background-color = [HTML]{F0F3F3}}|} + +\begin{table}[htb] +\centering +\caption{Les styles proposés par \pkg{piton}} +\label{Semantic} +\begin{tabularx}{0.9\textwidth}{@{}>{\ttfamily}l>{\raggedright\arraybackslash}X@{}} +\toprule +\normalfont Style & Usage \\ +\midrule +Number & les nombres \\ +String.Short & les chaînes de caractères courtes (entre \texttt{'} ou \texttt{"}) \\ +String.Long & les chaînes de caractères longues (entre \texttt{'''} ou \texttt{"""}) sauf les chaînes de + documentation \\ +String & cette clé fixe à la fois |String.Short| et |String.Long| \\ +String.Doc & les chaînes de documentation (seulement entre |"""| suivant PEP~257) \\ +String.Interpol & les éléments syntaxiques des champs des f-strings (c'est-à-dire les caractères \texttt{\{}et \texttt{\}}) \\ +Operator & les opérateurs suivants : \texttt{!= == << >> - \~{} + / * \% = < > \& .} \verb+|+ \verb|@| \\ +Operator.Word & les opérateurs suivants : |in|, |is|, |and|, |or| et |not| \\ +Name.Builtin & la plupart des fonctions prédéfinies par Python \\ +Name.Function & le nom des fonctions définies par l'utilisateur \emph{au moment de leur définition}, c'est-à-dire + après le mot-clé \verb|def| \\ +Name.Decorator & les décorateurs (instructions débutant par \verb|@|) \\ +Name.Namespace & le nom des modules (= bibliothèques extérieures) \\ +Name.Class & le nom des classes au moment de leur définition, c'est-à-dire après le mot-clé \verb|class| \\ +Exception & le nom des exceptions prédéfinies (ex.: SyntaxError) \\ +Comment & les commentaires commençant par \texttt{\#} \\ +Comment.LaTeX & les commentaires commençant par \texttt{\#>} qui sont composés en LaTeX par \pkg{piton} (et + appelés simplement «commentaires LaTeX» dans ce document) \\ +Keyword.Constant & |True|, |False| et |None| \\ +Keyword & les mots-clés suivants : + \ttfamily assert, break, case, continue, del, + elif, else, except, exec, finally, for, from, + global, if, import, lambda, non local, + pass, raise, return, try, while, + with, yield, yield from.\\ +\bottomrule +\end{tabularx} +\end{table} + +\bigskip +\colorbox{yellow!50}{\textbf{Nouveau 1.4}}\enskip La commande |\PitonStyle| prend en argument le nom d'un style +et permet de récupérer la valeur (en tant que liste d'instructions LaTeX) de ce style. + +\smallskip +Par exemple, on peut écrire, dans le texte courant, |{\PitonStyle{Keyword}{function}}| et on aura +le mot {\PitonStyle{Keyword}{function}} formaté comme un mot-clé. + +\smallskip +La syntaxe |{\PitonStyle{|\textsl{\texttt{style}}|}{...}}| est nécessaire pour pouvoir tenir compte à la fois des commandes +semi-globales et des commandes à argument présentes dans la valeur courante du style \texttt{\textsl{style}}. + + +\subsection{Définition de nouveaux environnements} + +\label{NewPitonEnvironment} + +Comme l'environnement |{Piton}| a besoin d'absorber son contenu d'une manière spéciale (à peu près comme du texte +verbatim), il n'est pas possible de définir de nouveaux environnements directement au-dessus de l'environnement +|{Piton}| avec les commandes classiques |\newenvironment| et |\NewDocumentEnvironment|. + +C'est pourquoi \pkg{piton} propose une commande |\NewPitonEnvironment|. Cette commande a la même syntaxe que la +commande classique |\NewDocumentEnvironment|. + +\bigskip +Par exemple, avec l'instruction suivante, un nouvel environnement |{Python}| sera défini avec le même comportement +que l'environnement |{Piton}|: + +{\color{gray}\verb|\NewPitonEnvironment{Python}{}{}{}|} + + +\bigskip +Si on souhaite un environnement |{Python}| qui prenne en argument optionnel entre crochets les clés de +|\PitonOptions|, on peut écrire : + +{\color{gray}\verb|\NewPitonEnvironment{Python}{O{}}{\PitonOptions{#1}}{}|} + +\bigskip +Si on souhaite un environnement |{Python}| qui compose le code inclus dans une boîte de \pkg{tcolorbox}, on peut +écrire (à condition, bien entendu, d'avoir chargé l'extension \pkg{tcolorbox}): + +\begin{Verbatim} +\NewPitonEnvironment{Python}{} + {\begin{tcolorbox}} + {\end{tcolorbox}} +\end{Verbatim} + +\bigskip +Avec ce nouvel environnement |{Python}|, on peut écrire : + +\begin{Verbatim} +~emphase#\begin{Python}@ +def carré(x): + """Calcule le carré d'un nombre""" + return x*x +~emphase#\end{Python}@ +\end{Verbatim} + +\NewPitonEnvironment{Python}{} + {\begin{tcolorbox}} + {\end{tcolorbox}} + +\begin{Python} +def carré(x): + """Calcule le carré d'un nombre""" + return x*x +\end{Python} + + +\section{Fonctionnalités avancées} + + +\subsection{Mise en évidence d'identificateurs} + +\colorbox{yellow!50}{\textbf{Nouveau 1.4}} + +On peut demander le changement de formatage de certains identificateurs avec la clé |identifiers| de +|\PitonOptions|. + +\smallskip +Cette clé prend en argument une valeur au format suivant : + +\quad |{ names = |\textsl{\ttfamily noms}|, style = |\textsl{\ttfamily instructions}| }| + +\begin{itemize} +\item \textsl{\ttfamily noms} est une liste de noms d'identificateurs (séparés par des virgules) ; + +\item \textsl{\ttfamily instructions} est une liste d'instructions LaTeX de formatage du même type que pour les +styles précédemment définis (cf.~\ref{styles} p.~\pageref{styles}). +\end{itemize} + +\emph{Attention} : Seuls les identifiants peuvent voir leur formatage affecté. Les mots-clés et les noms de +fonctions prédéfinies ne seront pas affectés, même s'ils figurent dans la liste \textsl{\ttfamily noms}. + +\begin{Verbatim} +\PitonOptions + { + ~emphase#identifiers@ = + { + ~emphase#names@ = { l1 , l2 } , + ~emphase#style@ = \color{red} + } + } + +\begin{Piton} +def tri(l): + """Tri par segmentation""" + if len(l) <= 1: + return l + else: + a = l[0] + l1 = [ x for x in l[1:] if x < a ] + l2 = [ x for x in l[1:] if x >= a ] + return tri(l1) + [a] + tri(l2) +\end{Piton} +\end{Verbatim} + + +\bigskip + +\begingroup + +\PitonOptions + { + identifiers = + { + names = { l1 , l2 } , + style = \color{red} + } + } + +\begin{Piton} +def tri(l): + """Tri par segmentation""" + if len(l) <= 1: + return l + else: + a = l[0] + l1 = [ x for x in l[1:] if x < a ] + l2 = [ x for x in l[1:] if x >= a ] + return tri(l1) + [a] + tri(l2) +\end{Piton} + +\endgroup + +\bigskip +En utilisant la clé |identifiers|, on peut ajouter de nouvelles fonctions prédéfinies (ou de nouveaux mots-clés, +etc.) qui seront détectées par \pkg{piton}. + + +\begin{Verbatim} +\PitonOptions + { + ~emphase#identifiers@ = + { + names = { cos, sin, tan, floor, ceil, trunc, pow, exp, ln, factorial } , + style = \PitonStyle{Name.Builtin} + } + } + +\begin{Piton} +from math import * +cos(pi/2) +factorial(5) +ceil(-2.3) +floor(5.4) +\end{Piton} +\end{Verbatim} + +\begingroup + +\PitonOptions + { + identifiers = + { + names = { cos, sin, tan, floor, ceil, trunc, pow, exp, ln, factorial } , + style = \PitonStyle{Name.Builtin} + } + } + +\begin{Piton} +from math import * +cos(pi/2) +factorial(5) +ceil(-2.3) +floor(5.4) +\end{Piton} + + +\endgroup + +\subsection{Les échappements vers LaTeX} + +L'extension \pkg{piton} propose plusieurs mécanismes d'échappement vers LaTeX : +\begin{itemize} +\item Il est possible d'avoir des commentaires entièrement composés en LaTeX. +\item Il est possible d'avoir, dans les commentaires Python, les éléments entre \texttt{\$} composés en mode +mathématique de LaTeX. +\item Il est possible d'insérer du code LaTeX à n'importe quel endroit d'un listing Python. +\end{itemize} +Ces mécanismes vont être détaillés dans les sous-parties de cette partie. + +\smallskip +À remarquer également que, dans le cas où \pkg{piton} est utilisée dans la classe \cls{beamer}, \pkg{piton} détecte +la plupart des commandes et environnements de Beamer : voir la sous-section \ref{beamer}, p.~\pageref{beamer}. + + +\subsubsection{Les «commentaires LaTeX»} + +Dans ce document, on appelle «commentaire LaTeX» des commentaires qui débutent par |#>|. Tout ce qui suit ces deux +caractères, et jusqu'à la fin de la ligne, sera composé comme du code LaTeX standard. + +Il y a deux outils pour personnaliser ces commentaires. + +\begin{itemize} +\item Il est possible de changer le marquage syntaxique utilisé (qui vaut initialement~|#>|). Pour ce faire, il +existe une clé |comment-latex|, disponible seulement au chargement de \pkg{piton} (c'est-à-dire au moment du +|\usepackage|), qui permet de choisir les caractères qui (précédés par~|#|) serviront de marqueur syntaxique. + +Par exemple, avec le chargement suivant : + +\quad \verb|\usepackage[comment-latex = LaTeX]{piton}| + +les commentaires LaTeX commenceront par~|#LaTeX|. + +Si on donne la valeur nulle à la clé |comment-latex|, tous les commentaires Python (débutant par~|#|) seront en +fait des «commentaires LaTeX». + +\smallskip +\item Il est possible de changer le formatage du commentaire LaTeX lui-même en changeant le style \pkg{piton} +|Comment.LaTeX|. + +Par exemple, avec |\SetPitonStyle{Comment.LaTeX = \normalfont\color{blue}}|, les commentaires LaTeX seront composés +en bleu. + +Si on souhaite qu'un croisillon (|#|) soit affiché en début de commentaire dans le \textsc{pdf}, on peut régler +|Comment.LaTeX| de la manière suivante : + +\begin{Verbatim} +\SetPitonStyle{Comment.LaTeX = \color{gray}\~#\normalfont\space } +\end{Verbatim} + +Pour d'autres exemples de personnalisation des commentaires LaTeX, voir la partie \ref{example-comments} +p.~\pageref{example-comments}. +\end{itemize} + + +\bigskip +Si l'utilisateur a demandé l'affichage des numéros de ligne (avec |line-numbers| ou |all-line-numbers|), il est +possible de faire référence à ce numéro de ligne avec la commande |\label| placée dans un commentaire +LaTeX.\footnote{Cette fonctionnalité est implémentée en redéfinissant, dans les environnements |{Piton}|, la + commande |\label|. Il peut donc y avoir des incompatibilités avec les extensions qui redéfinissent (globalement) + cette commande |\label| (comme \pkg{varioref}, \pkg{refcheck}, \pkg{showlabels}, etc.)} + + + + +\subsubsection{La clé «math-comments»} + +Il est possible de demander que, dans les commentaires Python normaux, c'est-à-dire débutant par~|#| (et non par +|#>|), les éléments placés entre symboles \texttt{\$} soient composés en mode mathématique de LaTeX (le reste du +commentaire restant composé en verbatim). + +La clé |math-comments|, qui n'est disponible qu'au chargement de \pkg{piton} (c'est-à-dire au moment du +|\usepackage|), active ce comportement. + +\bigskip +Dans l'exemple suivant, on suppose que la clé |math-comments| a été utilisée au chargement de \pkg{piton}. + +\begin{Verbatim} +\begin{Piton} +def carré(x): + return x*x ~# renvoie $x^2$ +\end{Piton} +\end{Verbatim} + +\begin{Piton} +def carré(x): + return x*x # renvoie $x^2$ +\end{Piton} + + +\subsubsection{Le mécanisme «espace-inside»} + +Il est aussi possible de surcharger les listings Python pour y insérer du code LaTeX à peu près n'importe où (mais +entre deux lexèmes, bien entendu). Cette fonctionnalité n'est pas activée par défaut par \pkg{piton}. Pour +l'utiliser, il faut spécifier les deux caractères marquant l'échappement (le premier le commençant et le deuxième +le terminant) en utilisant la clé |escape-inside| au chargement de \pkg{piton} (c'est-à-dire au moment du +|\usepackage|). Les deux caractères peuvent être identiques. + + +\bigskip +Dans l'exemple suivant, on suppose que l'extension \pkg{piton} a été chargée de la manière suivante : + +\begin{Verbatim} +\usepackage[~emphase#escape-inside=$$@]{piton} +\end{Verbatim} + +\medskip +Dans le code suivant, qui est une programmation récursive de la factorielle, on décide de surligner en jaune +l'instruction qui contient l'appel récursif. Cet exemple utilise la commande |\highLight| de \pkg{lua-ul} (cette +extension requiert aussi l'extension \pkg{luacolor}). +\begin{Verbatim} +\begin{Piton} +def fact(n): + if n==0: + return 1 + else: + ~emphase#$\highLight{$@return n*fact(n-1)~emphase#$}$@ +\end{Piton} +\end{Verbatim} + +\begin{Piton} +def fact(n): + if n==0: + return 1 + else: + $\highLight{$return n*fact(n-1)$}$ +\end{Piton} + +\bigskip +En fait, dans le cas présent, il serait sans doute plus habile d'utiliser la commande |\@highLight| de +\pkg{lua-ul}: cette commande bascule vers un fond jaune jusqu'à la fin du groupe TeX courant. Comme le nom de cette +commande contient le caractère |@|, il convient de lui donner un synonyme sans caractère |@| pour pouvoir +l'utiliser directement dans |{Piton}|. + +\begingroup +\fvset{commandchars=\~\#\+,formatcom=\color{gray}} +\begin{Verbatim} +\makeatletter +~emphase#\let\Jaune\@highLight+ +\makeatother +\end{Verbatim} +\endgroup + +\begin{Verbatim} +\begin{Piton} +def fact(n): + if n==0: + return 1 + else: + ~emphase#$\Jaune$@return n*fact(n-1) +\end{Piton} +\end{Verbatim} + +\makeatletter +\let\Jaune\@highLight +\makeatother + + +\begin{Piton} +def fact(n): + if n==0: + return 1 + else: + $\Jaune$return n*fact(n-1) +\end{Piton} + + + +\bigskip +\emph{Attention} : L'échappement vers LaTeX permis par les caractères de |escape-inside| n'est pas actif dans les +chaînes de caractères ni dans les commentaires (pour avoir un commentaire entièrement en échappement vers LaTeX, +c'est-à-dire ce qui est +appelé dans ce document «commentaire LaTeX», il suffit de le faire débuter par |#>|). + + + + +\subsection{Comportement dans la classe Beamer} + +\label{beamer} + +\emph{Première remarque}\par\nobreak +Remarquons que, comme l'environnement |{Piton}| prend son argument selon un mode verbatim, il convient, ce qui +n'est pas surprenant, de l'utiliser dans des environnements |{frame}| de Beamer protégés par la clé |fragile|.\footnote{On + rappelle que pour un environnement |{frame}| de Beamer qui utilise la clé |fragile|, l'instruction |\end{frame}| + doit être seule sur une ligne (à l'exception d'éventuels espaces en début de ligne).} + + +\medskip +Quand l'extension \pkg{piton} est utilisée dans la classe \cls{beamer}\footnote{L'extension \pkg{piton} détecte la + classe \cls{beamer} mais il est aussi possible, si le besoin s'en faisait sentir, d'activer ce comportement avec + la clé |beamer| au chargement de \pkg{piton} : |\usepackage[beamer]{piton}|}, le comportement de \pkg{piton} est +légèrement modifié, comme décrit maintenant. + +\subsubsection{\{Piton\} et \textbackslash PitonInputFile sont ``overlay-aware''} + +Quand \pkg{piton} est utilisé avec Beamer, l'environnement |{Piton}| et la commande |\PitonInputFile| acceptent +l'argument optionnel |<...>| de Beamer pour indiquer les «\emph{overlays}» concernés. + +On peut par exemple écrire : + +\begin{Verbatim} +\begin{Piton}~emphase#<2-5>@ +... +\end{Piton} +\end{Verbatim} + +ou aussi + +\begin{Verbatim} +\PitonInputFile~emphase#<2-5>@{mon_fichier.py} +\end{Verbatim} + + +\subsubsection{Commandes de Beamer reconnues dans \{Piton\} et \textbackslash PitonInputFile} + +Quand \pkg{piton} est utilisé dans la classe \cls{beamer}, les commandes suivantes de \cls{beamer} (classées selon +leur nombre d'arguments obligatoires) sont directement reconnues dans les environnements |{Piton}| (ainsi que dans +les listings composés par la commande |\PitonInputFile|, même si c'est sans doute moins utile). +% +\begin{itemize} +\item aucun argument obligatoire : |\pause|\footnote{On remarquera que, bien sûr, on peut aussi utiliser |\pause| + dans un «commentaire LaTeX», c'est-à-dire en écrivant |#> \pause|. Ainsi, si le code Python est copié, il est + interprétable par Python.} ; +\item un argument obligatoire : |\action|, |\alert|, |\invisible|, |\only|, |\uncover| et |\visible| ; +\item deux arguments obligatoire : |\alt| ; +\item trois arguments obligatoires : |\temporal|. +\end{itemize} + +\medskip +Les accolades dans les arguments obligatoires de ces commandes doivent être équilibrées (cependant, les accolades +présentes dans des chaînes courtes\footnote{Les chaînes courtes de Python sont les chaînes (string) délimitées par + les caractères \texttt{'} ou \texttt{"} non triplés. En Python, les chaînes de caractères courtes ne peuvent pas + s'étendre sur plusieurs lignes de code.} de Python ne sont pas prises en compte). + +\medskip +Concernant les fonctions |\alt| et |\temporal|, aucun retour à la ligne ne doit se trouver dans les arguments de ces fonctions. + + +\medskip +Voici un exemple complet de fichier : + +\begin{Verbatim}[formatcom = \small\color{gray}] +\documentclass{beamer} +\usepackage{piton} +\begin{document} +\begin{frame}[fragile] +\begin{Piton} +def string_of_list(l): + """Convertit une liste de nombres en chaîne""" +~emphase# \only<2->{s = "{" + str(l[0])}@ +~emphase# \only<3->{for x in l[1:]: s = s + "," + str(x)}@ +~emphase# \only<4->{s = s + "}"}@ + return s +\end{Piton} +\end{frame} +\end{document} +\end{Verbatim} + +Dans l'exemple précédent, les accolades des deux chaînes de caractères Python |"{"| et |"}"| sont correctement +interprétées (sans aucun caractère d'échappement). + + + +\bigskip +\subsubsection{Environnements de Beamer reconnus dans \{Piton\} et \textbackslash PitonInputFile} + +Quand \pkg{piton} est utilisé dans la classe \pkg{beamer}, les environnements suivants de Beamer sont directement +reconnus dans les environnements |{Piton}| (ainsi que dans les listings composés par la commande |\PitonInputFile| +même si c'est sans doute moins utile) : |{actionenv}|, |{alertenv}|, |{invisibleenv}|, |{onlyenv}|, |{uncoverenv}| +et |{visibleenv}|. + + +\medskip +Il y a néanmoins une restriction : ces environnements doivent englober des \emph{lignes entières de code Python}. + + +\medskip +On peut par exemple écrire : + +\begin{Verbatim}[formatcom = \small\color{gray}] +\documentclass{beamer} +\usepackage{piton} +\begin{document} +\begin{frame}[fragile] +\begin{Piton} +def carré(x): + """Calcule le carré de l'argument""" + ~emphase#\begin{uncoverenv}<2>@ + return x*x + ~emphase#\end{uncoverenv}@ +\end{Piton} +\end{frame} +\end{document} +\end{Verbatim} + + + +\vspace{1cm} +\textbf{Remarque à propos de la commande \textbackslash alert et de l'environnement \{alertenv\} de Beamer}\par\nobreak + +\smallskip +Beamer propose un moyen aisé de changer la couleur utilisée par l'environnement |{alertenv}| (et par la commande +|\alert| qui s'appuie dessus). Par exemple, on peut écrire: + +\begin{Verbatim} +\setbeamercolor{~emphase#alerted text@}{fg=blue} +\end{Verbatim} + +Néanmoins, dans le cas d'une utilisation à l'intérieur d'un environnement |{Piton}| un tel réglage n'est sans doute +pas pertinent, puisque, justement, \pkg{piton} va (le plus souvent) changer la couleur des élements selon leur +valeur lexicale. On préfèrera sans doute un environnement |{alertenv}| qui change la couleur de fond des +éléments à mettre en évidence. + +\smallskip +Voici un code qui effectuera ce travail en mettant un fond jaune. Ce code utilise la commande |\@highLight| de +l'extension \pkg{lua-ul} (cette extension nécessite elle-même l'extension \pkg{luacolor}). + +\begingroup +\fvset{commandchars=\~\#\+,formatcom=\color{gray}} +\begin{Verbatim} +\setbeamercolor{alerted text}{bg=yellow!50} +\makeatletter +\AddToHook{env/Piton/begin} + {\renewenvironment<>{alertenv}{\only~#1{~emphase#\@highLight+[alerted text.bg]}}{}} +\makeatother +\end{Verbatim} +\endgroup + +Ce code redéfinit localement l'environnement |{alertenv}| à l'intérieur de l'environnement |{Piton}| (on rappelle +que la commande |\alert| s'appuie sur cet environnement |{alertenv}|). + + + +\bigskip +\subsection{Coupure des pages et des lignes} + +\label{breakable} + +\subsubsection{Coupure des pages} + +Par défaut les listings produits par l'environnement |{Piton}| et par la commande |\PitonInputFile| sont +insécables. + +Néanmoins, la commande |\PitonOptions| propose la clé |splittable| pour autoriser de telles coupures. + +\begin{itemize} +\item Si la clé |splittable| est utilisée sans valeur, les listings sont sécables n'importe où. + +\item Si la clé |splittable| est utilisée avec une valeur numérique $n$ (qui doit être un entier naturel non nul), +alors les listings seront sécables mais aucune coupure ne pourra avoir lieu entre les $n$~premières lignes, ni +entre les $n$~dernières. De ce fait, |splittable=1| est équivalent à |splittable|. +\end{itemize} + +\medskip +\emph{Remarque}\par\nobreak + +Même avec une couleur de fond (fixée avec |background-color|), les sauts de page sont possibles, à partir du moment +où la clé |splittable| est utilisée.\footnote{Avec la clé |splittable|, un environnement |{Piton}| est sécable même dans un environnement de + \pkg{tcolorbox} (à partir du moment où la clé |breakable| de \pkg{tcolorbox} est utilisée). On précise cela parce + que, en revanche, un environnement de \pkg{tcolorbox} inclus dans un autre environnement de \pkg{tcolorbox} n'est + pas sécable, même quand les deux utilisent la clé |breakable|.} + +\subsubsection{Coupure des lignes} + +\label{line-breaks} + +Par défaut, les éléments produits par \pkg{piton} ne peuvent pas être coupés par une fin de ligne. Il existe +néanmoins des clés pour autoriser de telles coupures (les points de coupure possibles sont les espaces, y compris +les espaces dans les chaînes Python). +\begin{itemize} +\item Avec la clé |break-lines-in-piton|, les coupures de ligne sont autorisées dans la commande |\piton{...}| +(mais pas dans la commande \verb+\piton|...|+, c'est-à-dire avec la syntaxe verbatim). + +\item Avec la clé |break-lines-in-Piton|, les coupures de ligne sont autorisées dans l'environnement |{Piton}| +(d'où la lettre |P| capitale dans le nom) et dans les listings produits par |\PitonInputFile|. + +\item La clé |break-lines| est la conjonction des deux clés précédentes. +\end{itemize} + +\medskip +L'extension \pkg{piton} fournit aussi plusieurs clés pour contrôler l'apparence des coupures de ligne autorisées par |break-lines-in-Piton|. + +\begin{itemize} +\item Avec la clé |indent-broken-lines|, l'indentation de la ligne coupée est respectée à chaque retour à la ligne. + +\item La clé |end-of-broken-line| correspond au symbole placé à la fin d'une ligne coupée. Sa valeur initiale est : +|\hspace*{0.5em}\textbackslash|. + +\item La clé |continuation-symbol| correspond au symbole placé à chaque retour de ligne dans la marge gauche. Sa +valeur initiale est : |+\;|. + +\item La clé |continuation-symbol-on-indentation| correspond au symbole placé à chaque retour de ligne au niveau de +l'indentation (uniquement dans le cas où la clé |indent-broken-lines| est active). Sa valeur initiale est : +|$\hookrightarrow\;$|. +\end{itemize} + +\bigskip +Le code suivant a été composé dans une |{minipage}| standard de LaTeX de largeur 12~cm avec le réglage suivant : + +\begin{Verbatim} +\PitonOptions{break-lines,indent-broken-lines,background-color=gray!15} +\end{Verbatim} + +\begin{center} +\PitonOptions{break-lines,indent-broken-lines,background-color=gray!15} +\begin{minipage}{12cm} +\begin{Piton} +def dict_of_liste(liste): + """Convertit une liste de subrs et de descriptions de glyphes en dictionnaire""" + dict = {} + for liste_lettre in liste: + if (liste_lettre[0][0:3] == 'dup'): # si c'est un subr + nom = liste_lettre[0][4:-3] + print("On traite le subr de numéro " + nom) + else: + nom = liste_lettre[0][1:-3] # si c'est un glyphe + print("On traite le glyphe du caractère " + nom) + dict[nom] = [traite_ligne_Postscript(k) for k in liste_lettre[1:-1]] + return dict +\end{Piton} +\end{minipage} +\end{center} + + + +\bigskip +\subsection{Notes de pied de page dans les environnements de piton} + +\label{footnote} + +Si vous voulez mettre des notes de pied de page dans un environnement de \pkg{piton} (ou bien dans un listing +produit par |\PitonInputFile|, bien que cela paraisse moins pertinent dans ce cas-là) vous pouvez utiliser une +paire |\footnotemark|--|\footnotetext|. + +\smallskip +Néanmoins, il est également possible d'extraire les notes de pieds de page avec l'extension \pkg{footnote} ou bien +l'extension \pkg{footnotehyper}. + +\smallskip +Si \pkg{piton} est chargée avec l'option |footnote| (avec |\usepackage[footnote]{piton}|) l'extension +\pkg{footnote} est chargée (si elle ne l'est pas déjà) et elle est utilisée pour extraire les notes de pied de +page. + +\smallskip +Si \pkg{piton} est chargée avec l'option |footnotehyper|, l'extension \pkg{footnotehyper} est chargée (si +elle ne l'est pas déjà) et elle est utilisée pour extraire les notes de pied de page. + +\smallskip +Attention : Les extensions \pkg{footnote} et \pkg{footnotehyper} sont incompatibles. +L'extension \pkg{footnotehyper} est le successeur de l'extension \pkg{footnote} +et devrait être utilisée préférentiellement. L'extension \pkg{footnote} a quelques défauts ; +en particulier, elle doit être chargée après l'extension \pkg{xcolor} et elle n'est pas parfaitement +compatible avec \pkg{hyperref}. + +\medskip +Dans ce document, l'extension \pkg{piton} a été chargée avec l'option |footnotehyper| et c'est pourquoi des notes +peuvent être mises dans les environnements |{Piton}| : voir un exemple sur la première page de ce document. + +\subsection{Tabulations} + +\smallskip +Même s'il est recommandé d'indenter les listings Python avec des espaces (cf. PEP~8), \pkg{piton} accepte les +caractères de tabulations (U+0009) en début de ligne. Chaque caractère U+0009 est remplacé par $n$ espaces. La +valeur initiale de~$n$ est~4 mais on peut la changer avec la clé |tab-size| de |\PitonOptions|. + +\smallskip +Il existe aussi une clé |tabs-auto-gobble| qui détermine le nombre minimal de caractères U+0009 débutant chaque +ligne (non vide) de l'environnement |{Piton}| et applique |gobble| avec cette valeur (avant le remplacement des +caractères U+0009 par des espaces, bien entendu). Cette clé est donc similaire à la clé |auto-gobble| mais agit sur +des caractères U+0009 au lieu de caractères U+0020 (espaces). + +\section{Exemples} + + +\subsection{Numérotation des lignes} + +\label{example-numbering} + +On rappelle que l'on peut demander la numérotation des lignes des listings avec la clé |line-numbers| ou la clé |all-line-numbers|. + +Par défaut, les numéros de ligne sont composés par \pkg{piton} en débordement à gauche (en utilisant en interne la commande |\llap| de LaTeX). + +Si on ne veut pas de débordement, on peut utiliser l'option |left-margin=auto| qui va insérer une marge adaptée aux +numéros qui seront insérés (elle est plus large quand les numéros dépassent 10). + + +\begingroup +\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +\begin{Verbatim} +~emphase&\PitonOptions{background-color=gray!10, left-margin = auto, line-numbers}@ +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x) #> (appel récursif) + elif x > 1: + return pi/2 - arctan(1/x) #> (autre appel récursif) + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\end{Verbatim} +\endgroup + + + +\begingroup +\PitonOptions{background-color=gray!10,left-margin = auto, line-numbers} +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x) #> (appel récursif) + elif x > 1: + return pi/2 - arctan(1/x) #> (autre appel récursif) + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\endgroup + + +\bigskip + +\subsection{Formatage des commentaires LaTeX} + +\label{example-comments} + +On peut modifier le style |Comment.LaTeX| (avec |\SetPitonStyle|) pour faire afficher les commentaires +LaTeX (qui débutent par |#>|) en butée à droite. + +\begingroup +\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +\begin{Verbatim} +\PitonOptions{background-color=gray!10} +~emphase&\SetPitonStyle{Comment.LaTeX = \hfill \normalfont\color{gray}}@ +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x) #> appel récursif + elif x > 1: + return pi/2 - arctan(1/x) #> autre appel récursif + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\end{Verbatim} +\endgroup + +\begingroup +\PitonOptions{background-color=gray!10} +\SetPitonStyle{Comment.LaTeX = \hfill \normalfont\color{gray}} +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x) #> appel récursif + elif x > 1: + return pi/2 - arctan(1/x) #> autre appel récursif + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\endgroup + + +\vspace{1cm} +On peut aussi faire afficher les commentaires dans une deuxième colonne à droite si on limite la largeur du code +proprement dit avec un environnement |{minipage}| de LaTeX. + + +\begingroup +\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +\begin{Verbatim} +\PitonOptions{background-color=gray!10} +~emphase&\NewDocumentCommand{\MyLaTeXCommand}{m}{\hfill \normalfont\itshape\rlap{\quad #1}}@ +~emphase&\SetPitonStyle{Comment.LaTeX = \MyLaTeXCommand}@ +~emphase&\begin{minipage}{12cm}@ +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x) #> appel récursif + elif x > 1: + return pi/2 - arctan(1/x) #> autre appel récursif + else: + s = 0 + for k in range(n): + s += (-1)**k/(2*k+1)*x**(2*k+1) + return s +\end{Piton} +~emphase&\end{minipage}@ +\end{Verbatim} +\endgroup + + + +\begingroup +\PitonOptions{background-color=gray!10} +\NewDocumentCommand{\MyLaTeXCommand}{m}{\hfill \normalfont\itshape\rlap{\quad #1}} +\SetPitonStyle{Comment.LaTeX = \MyLaTeXCommand} +\begin{minipage}{12cm} +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x) #> appel récursif + elif x > 1: + return pi/2 - arctan(1/x) #> autre appel récursif + else: + s = 0 + for k in range(n): + s += (-1)**k/(2*k+1)*x**(2*k+1) + return s +\end{Piton} +\end{minipage} +\endgroup + +\bigskip + +\subsection{Notes dans les listings} + +Pour pouvoir extraire les notes (introduites par |\footnote|), l'extension |piton| doit être chargée, soit avec la +clé |footnote|, soit avec la clé |footnotehyper|, comme expliqué à la section \ref{footnote} p.~\pageref{footnote}. +Dans le présent document, l'extension \pkg{piton} a été chargée par la clé |footnotehyper|. + +Bien entendu, une commande |\footnote| ne peut apparaître que dans un commentaire LaTeX (qui débute par |#>|). Un +tel commentaire peut se limiter à cette unique commande |\footnote|, comme dans l'exemple suivant. + +\begingroup +\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +\begin{Verbatim} +\PitonOptions{background-color=gray!10} +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x)~emphase&#>\footnote{Un premier appel récursif.}]@ + elif x > 1: + return pi/2 - arctan(1/x)~emphase&#>\footnote{Un deuxième appel récursif.}@ + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\end{Verbatim} +\endgroup + +\begingroup +\PitonOptions{background-color=gray!10} +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x)#>\footnote{Un premier appel récursif.} + elif x > 1: + return pi/2 - arctan(1/x)#>\footnote{Un deuxième appel récursif.} + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\endgroup + + +\vspace{1cm} + +Si on utilise l'environnement |{Piton}| dans un environnement |{minipage}| de LaTeX, les notes sont, bien entendu, +composées au bas de l'environnement |{minipage}|. Rappelons qu'une telle |{minipage}| ne peut être coupée par un +saut de page. + + +\begingroup +\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +\begin{Verbatim} +\PitonOptions{background-color=gray!10} +\emphase\begin{minipage}{\linewidth} +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x)~emphase&#>\footnote{Un premier appel récursif.}@ + elif x > 1: + return pi/2 - arctan(1/x)~emphase&#>\footnote{Un deuxième appel récursif.}@ + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\end{minipage} +\end{Verbatim} +\endgroup + +\begingroup +\PitonOptions{background-color=gray!10} +\begin{minipage}{\linewidth} +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x)#>\footnote{Un premier appel récursif.} + elif x > 1: + return pi/2 - arctan(1/x)#>\footnote{Un deuxième appel récursif.} + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\end{minipage} +\endgroup + + +\vspace{1cm} +Si on encapsule l'environnement |{Piton}| dans un environnement |{minipage}| pour, typiquement, limiter la largeur +d'un fond coloré, il faut encadrer l'ensemble dans un environnement |{savenotes}| (de \pkg{footnote} ou +\pkg{footnotehyper}) si on veut avoir les notes reportées en pied de page. + +\begingroup +\fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +\begin{Verbatim} +\PitonOptions{background-color=gray!10} +~emphase&\begin{savenotes}@ +\begin{minipage}{13cm} +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x)~emphase&#>\footnote{Un premier appel récursif.}@ + elif x > 1: + return pi/2 - arctan(1/x)~emphase&#>\footnote{Un deuxième appel récursif.}@ + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\end{minipage} +~emphase&\end{savenotes}@ +\end{Verbatim} +\endgroup + + + +\begin{savenotes} +\PitonOptions{background-color=gray!10} +\begin{minipage}{13cm} +\begin{Piton} +def arctan(x,n=10): + if x < 0: + return -arctan(-x)#>\footnote{Un premier appel récursif.} + elif x > 1: + return pi/2 - arctan(1/x)#>\footnote{Un deuxième appel récursif.} + else: + return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +\end{Piton} +\end{minipage} +\end{savenotes} + +\bigskip + +\subsection{Un exemple de réglage des styles} + +Les styles graphiques ont été présentés à la partie \ref{styles}, p.~\pageref{styles}. + +\smallskip +On présente ici un réglage de ces styles adapté pour les documents en noir et blanc. On l'utilise avec la fonte +\emph{DejaVu Sans Mono}\footnote{Voir: \url{https://dejavu-fonts.github.io}} spécifiée avec la commande + |\setmonofont| de \pkg{fontspec}. + +Ce réglage utilise la commande |\highLight| de \pkg{lua-ul} (cette extension nécessite elle-même l'extension \pkg{luacolor}). + + +\begin{Verbatim} +\setmonofont[Scale=0.85]{DejaVu Sans Mono} + +\SetPitonStyle + { + Number = , + String = \itshape , + String.Doc = \color{gray} \itshape , + Operator = , + Operator.Word = \bfseries , + Name.Builtin = , + Name.Function = \bfseries \highLight[gray!20] , + Comment = \color{gray} , + Comment.LaTeX = \normalfont \color{gray}, + Keyword = \bfseries , + Name.Namespace = , + Name.Class = , + Name.Type = , + InitialValues = \color{gray} + } +\end{Verbatim} + + +\begingroup + + +\setmonofont[Scale=0.85]{DejaVu Sans Mono} + +\SetPitonStyle + { + Number = , + String = \itshape , + String.Doc = \color{gray} \itshape , + Operator = , + Operator.Word = \bfseries , + Name.Builtin = , + Name.Function = \bfseries \highLight[gray!20] , + Comment = \color{gray} , + Comment.LaTeX = \normalfont \color{gray}, + Keyword = \bfseries , + Name.Namespace = , + Name.Class = , + Name.Type = , + InitialValues = \color{gray} + } + + +\bigskip + +\begin{Piton} +from math import pi + +def arctan(x,n=10): + """Compute the mathematical value of arctan(x) + + n is the number of terms in the sum + """ + if x < 0: + return -arctan(-x) # appel récursif + elif x > 1: + return pi/2 - arctan(1/x) + #> (on a utilisé le fait que $\arctan(x)+\arctan(1/x)=\pi/2$ pour $x>0$) + else: + s = 0 + for k in range(n): + s += (-1)**k/(2*k+1)*x**(2*k+1) + return s +\end{Piton} + + +\endgroup + +\section{Utilisation avec pyluatex} + +\subsection{Utilisation standard de pyluatex} + +L'extension \pkg{pyluatex} est une extension qui permet l'exécution de code Python à partir de |lualatex| (pourvu +que Python soit installé sur la machine et que la compilation soit effectuée avec |lualatex| et |--shell-escape|). + +Voici, à titre d'exemple, un environnement |{PitonExecute}| qui formate un listing Python (avec \pkg{piton}) et qui +affiche également dessous le résultat de l'exécution de ce code avec Python. + + +\begin{Verbatim} +\ExplSyntaxOn +\NewDocumentEnvironment { ~emphase#PitonExecute@ } { ! O { } } % le ! est obligatoire + { + \PyLTVerbatimEnv + \begin{pythonq} + } + { + \end{pythonq} + \directlua + { + tex.print("\\PitonOptions{~#1}") + tex.print("\\begin{Piton}") + tex.print(pyluatex.get_last_code()) + tex.print("\\end{Piton}") + tex.print("") + } + \begin{center} + \directlua{tex.print(pyluatex.get_last_output())} + \end{center} + } +\ExplSyntaxOff +\end{Verbatim} + +\ExplSyntaxOn +\NewDocumentEnvironment { PitonExecute } { ! O { } } + { + \PyLTVerbatimEnv + \begin{pythonq} + } + { + \end{pythonq} + \directlua + { + tex.print("\\PitonOptions{#1}") + tex.print("\\begin{Piton}") + tex.print(pyluatex.get_last_code()) + tex.print("\\end{Piton}") + tex.print("") + } + \begin{center} + \directlua{tex.print(pyluatex.get_last_output())} + \end{center} + } +\ExplSyntaxOff + +Cet environnement |{PitonExecute}| prend en argument optionnel (entre crochets) les options proposées par la +commande |\PitonOptions|. + +\bigskip +Voici un exemple d'utilisation de cet environnement |{PitonExecute}| : + +\begin{Verbatim} +\begin{~emphase#PitonExecute@}[background-color=gray!15] +def square(x): + return x*x +print(f'Le carré de 12 est {square(12)}.') +\end{~emphase#PitonExecute@} +\end{Verbatim} + + +\medskip +\begin{PitonExecute}[background-color=gray!15] +def square(x): + return x*x +print(f'Le carré de 12 est {square(12)}.') +\end{PitonExecute} + +\bigskip + +\subsection{Utilisation de l'environnement \{pythonrepl\} de pyluatex} + +\label{pythonrepl} + +L'environnement |{pythonrepl}| de \pkg{pyluatex} passe son contenu à Python et renvoie ce que l'on obtient quand on +fournit ce code à une boucle \textsc{repl} (\emph{read-eval-print loop}) de Python. On obtient un entrelacement +d'instructions précédées par le prompt |>>>| de Python et des valeurs renvoyées par Python (et de ce qui a été +demandé d'être affiché avec des \piton{print} de Python). + +\medskip +Il est ensuite possible de passer cela à un environnement |{Piton}| qui va faire un coloriage syntaxique +et mettre sur fond grisé les lignes correspondant aux instructions fournies à l'interpréteur Python (gràce à la clé +|prompt-background-color| de |\PitonOptions|). + + +\medskip +Voici la programmation d'un environnement |{PitonREPL}| qui effectue ce travail (pour des raisons techniques, le +|!| est ici obligatoire dans la signature de l'environnement). + +\begin{Verbatim} +\NewDocumentEnvironment { PitonREPL } { ! O { } } % le ! est obligatoire + { + \PitonOptions + { background-color=white, + ~emphase#prompt-background-color = gray!10@, + ~#1 + } + \PyLTVerbatimEnv + \begin{pythonrepl} + } + { + \directlua + { + tex.print("\\begin{Piton}") + tex.print(pyluatex.get_last_output()) + tex.print("\\end{Piton}") + tex.print("") + } + \end{pythonrepl} + } +\end{Verbatim} + +\medskip +Voici un exemple d'utilisation de ce nouvel environnement |{PitonREPL}|. + +\medskip +\begin{Verbatim} +~emphase#\begin{PitonREPL}@ + def valeur_absolue(x): + "Renvoie la valeur absolue de x" + if x > 0: + return x + else: + return -x + + valeur_absolue(-3) + valeur_absolue(0) + valeur_absolue(5) +~emphase#\end{PitonREPL}@ +\end{Verbatim} + +\bigskip + + +\NewDocumentEnvironment { PitonREPL } { } + { + \PitonOptions{background-color=white,prompt-background-color = gray!10} + \PyLTVerbatimEnv + \begin{pythonrepl} + } + { + \directlua + { + tex.print("\\begin{Piton}") + tex.print(pyluatex.get_last_output()) + tex.print("\\end{Piton}") + tex.print("") + } + \end{pythonrepl} + } + + +\begin{PitonREPL} + def valeur_absolue(x): + "Renvoie la valeur absolue de x" + if x > 0: + return x + else: + return -x + + valeur_absolue(-3) + valeur_absolue(0) + valeur_absolue(5) +\end{PitonREPL} + + +\bigskip +En fait, il est possible de ne pas faire afficher les prompts eux-mêmes (c'est-à-dire les chaînes de caractères +|>>>| et |...|). En effet, \pkg{piton} propose un style pour ces éléments, qui est appelé |Prompt|. Par défaut, la +valeur de ce style est vide, ce qui fait qu'aucune action n'est exécutée sur ces éléments qui sont donc affichés +tels quels. En fournissant comme valeur une fonction qui se contente de gober son argument, on peut demander à ce +qu'ils ne soient pas affichés. + +\bigskip +\begin{savenotes} +\begin{Verbatim} +\NewDocumentCommand{\Gobe}{m}{}#~color#black@~footnote#On a défini ici une fonction ~texttt#~string~Gobe@ mais, en fait, elle existe déjà en L3 sous le nom ~texttt#~string~use~_none:n@.@@ +\SetPitonStyle{ ~emphase#Prompt = \Gobe@ } +\end{Verbatim} +\end{savenotes} + + + + +\NewDocumentCommand{\Gobe}{m}{} +\ExplSyntaxOn +\SetPitonStyle{ Prompt = \use_none:n } +\ExplSyntaxOff + +\bigskip +L'exemple précédent donne alors : + +\medskip +\begin{Verbatim} +~emphase#\begin{PitonREPL}@ + def valeur_absolue(x): + "Renvoie la valeur absolue de x" + if x > 0: + return x + else: + return -x + + valeur_absolue(-3) + valeur_absolue(0) + valeur_absolue(5) +~emphase#\end{PitonREPL}@ +\end{Verbatim} + + + +\begin{PitonREPL} + def valeur_absolue(x): + "Renvoie la valeur absolue de x" + if x > 0: + return x + else: + return -x + + valeur_absolue(-3) + valeur_absolue(0) + valeur_absolue(5) +\end{PitonREPL} + + + +\section*{Autre documentation} + +Le document |piton.pdf| (fourni avec l'extension \pkg{piton}) contient une traduction anglaise de la +documentation ici présente, ainsi que le code source commenté et un historique des versions. + + +\medskip +Les versions successives du fichier |piton.sty| fournies par +TeXLive sont disponibles sur le serveur \textsc{svn} de TeXLive : + +\smallskip +{ +\small +\nolinkurl{https://tug.org/svn/texlive/trunk/Master/texmf-dist/tex/lualatex/piton/piton.sty} +} + + + +\tableofcontents + \end{document} \ No newline at end of file diff --git a/macros/luatex/latex/piton/piton.dtx b/macros/luatex/latex/piton/piton.dtx index 8d8caee54f..4f1d4290a1 100644 --- a/macros/luatex/latex/piton/piton.dtx +++ b/macros/luatex/latex/piton/piton.dtx @@ -1,5161 +1,5174 @@ -% \iffalse -*- coding: utf-8 ; -*- \fi \iffalse meta-comment -% -% Copyright (C) 2023 by F. Pantigny -% ----------------------------------- -% -% This file may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3 -% of this license or (at your option) any later version. -% The latest version of this license is in: -% -% http://www.latex-project.org/lppl.txt -% -% and version 1.3 or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% \fi -% \iffalse -\def\myfileversion{1.5} -\def\myfiledate{2023/04/04} -% -% -%<*batchfile> -\begingroup -\input l3docstrip.tex -\keepsilent -\usedir{tex/latex/cascade} -\preamble - -Copyright (C) 2022-2023 by F. Pantigny ------------------------------------ - -This file may be distributed and/or modified under the -conditions of the LaTeX Project Public License, either version 1.3 -of this license or (at your option) any later version. -The latest version of this license is in: - -http://www.latex-project.org/lppl.txt - -and version 1.3 or later is part of all distributions of LaTeX -version 2005/12/01 or later. - -\endpreamble -\askforoverwritefalse -\endgroup -% -% -%<@@=piton> -%<*driver> -\documentclass{l3doc} -\usepackage{geometry} -\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}} -\usepackage{fontspec} -\usepackage[dvipsnames]{xcolor} -\usepackage{caption,tabularx,tcolorbox,luacolor,lua-ul} -\def\emphase{\bgroup\color{RoyalPurple}\let\next=} -\fvset{commandchars=\~\#\@,formatcom=\color{gray}} -\captionsetup{labelfont = bf} -\usepackage{ragged2e} -\usepackage[footnotehyper,escape-inside=$$,math-comments]{piton} % $$ - -\parindent 0pt -\skip\footins = 2\bigskipamount - -\PitonOptions{gobble=2} - -\EnableCrossrefs - -\begin{document} -\DocInput{piton.dtx} -\end{document} -% -% \fi -% -% \catcode`\" = 11 -% -% \title{The package \pkg{piton}\thanks{This document corresponds to the -% version~\myfileversion\space of \pkg{piton}, at the date of~\myfiledate.}} -% \author{F. Pantigny \\ \texttt{fpantigny@wanadoo.fr}} -% -% \maketitle -% -% \begin{abstract} -% The package \pkg{piton} provides tools to typeset Python listings with -% syntactic highlighting by using the Lua library LPEG. It requires LuaLaTeX. -% \end{abstract} -% -% -% -% \section{Presentation} -% -% -% The package \pkg{piton} uses the Lua library LPEG\footnote{LPEG is a -% pattern-matching library for Lua, written in C, based on \emph{parsing -% expression grammars}: \url{http://www.inf.puc-rio.br/~roberto/lpeg/}} for -% parsing Python listings and typeset them with syntactic highlighting. Since it -% uses Lua code, it works with |lualatex| only (and won't work with the other -% engines: |latex|, |pdflatex| and |xelatex|). It does not use external program -% and the compilation does not require |--shell-escape|. The compilation is very -% fast since all the parsing is done by the library LPEG, written in C. -% -% \bigskip -% Here is an example of code typeset by \pkg{piton}, with the environment |{Piton}|. -% -% \bigskip -% -% \begin{Piton} -% from math import pi -% -% def arctan(x,n=10): -% """Compute the mathematical value of arctan(x) -% -% n is the number of terms in the sum -% """ -% if x < 0: -% return -arctan(-x) # recursive call -% elif x > 1: -% return pi/2 - arctan(1/x) -% #> (we have used that $\arctan(x)+\arctan(1/x)=\frac{\pi}{2}$ for $x>0$)\footnote{This LaTeX escape has been done by beginning the comment by \ttfamily\#>.} -% else: -% s = 0 -% for k in range(n): -% s += (-1)**k/(2*k+1)*x**(2*k+1) -% return s -% \end{Piton} -% -% -% \bigskip -% The package \pkg{piton} is entirely contained in the file -% |piton.sty|. This file may be put in the current directory or in a -% |texmf| tree. However, the best is to install \pkg{piton} with a TeX -% distribution such as MiKTeX, TeX Live or MacTeX. -% -% -% \section{Use of the package} -% -% -% \subsection{Loading the package} -% -% The package \pkg{piton} should be loaded with the classical command -% |\usepackage|: |\usepackage{piton}|. -% -% \smallskip -% Nevertheless, we have two remarks: -% \begin{itemize} -% \item the package \pkg{piton} uses the package \pkg{xcolor} (but \pkg{piton} -% does \emph{not} load \pkg{xcolor}: if \pkg{xcolor} is not loaded before the -% |\begin{document}|, a fatal error will be raised). -% \item the package \pkg{piton} must be used with LuaLaTeX exclusively: if -% another LaTeX engine (|latex|, |pdflatex|, |xelatex|,\dots ) is used, a -% fatal error will be raised. -% \end{itemize} -% -% \subsection{The tools provided to the user} -% -% The package \pkg{piton} provides several tools to typeset Python code: the -% command |\piton|, the environment |{Piton}| and the command |\PitonInputFile|. -% -% \begin{itemize}\setlength{\fboxsep}{1pt} -% \item The command \colorbox{gray!20}{\texttt\textbackslash piton} should be -% used to typeset small pieces of code inside a paragraph. For example: -% -% {\color{gray}\verb|\piton{def square(x): return x*x}|}\qquad -% \piton{def square(x): return x*x} -% -% The syntax and particularities of the command |\piton| are detailed below. -% -% \item The environment \colorbox{gray!20}{\ttfamily\{Piton\}} should be used to -% typeset multi-lines code. Since it takes its argument in a verbatim mode, it -% can't be used within the argument of a LaTeX command. For sake of -% customization, it's possible to define new environments similar to the -% environment |{Piton}| with the command |\NewPitonEnvironment|: -% cf.~\ref{NewPitonEnvironment} p.~\pageref{NewPitonEnvironment}. -% -% \item The command \colorbox{gray!20}{\ttfamily\textbackslash PitonInputFile} -% is used to insert and typeset a whole external file. -% -% That command takes in as optional argument (between square brackets) two keys -% |first-line| and |last-line|: only the part between the corresponding lines -% will be inserted. -% \end{itemize} -% -% \subsection{The syntax of the command \textbackslash piton} -% -% In fact, the command |\piton| is provided with a double syntax. It may be used -% as a standard command of LaTeX taking its argument between curly braces -% (|\piton{...}|) but it may also be used with a syntax similar to the syntax of -% the command -% |\verb|, that is to say with the argument delimited by two identical characters (e.g.: \verb!\piton|...|!). -% -% \begin{itemize} -% \item {\color{blue} \textsf{Syntax} \verb|\piton{...}|}\par\nobreak -% When its argument is given between curly braces, the command |\piton| does not -% take its argument in verbatim mode. In particular: -% \begin{itemize} -% \item several consecutive spaces will be replaced by only one space, -% -% {\color{cyan} but the command |\|⣠is provided to force the insertion of a space}; -% -% \item it's not possible to use |%| inside the argument, -% -% {\color{cyan} but the command |\%| is provided to insert a |%|}; -% -% \item the braces must be appear by pairs correctly nested -% -% {\color{cyan} but the commands |\{| and |\}| are also provided for individual braces}; -% -% \item the LaTeX commands\footnote{That concerns the commands beginning with a -% backslash but also the active characters.} are fully expanded and not -% executed, -% -% {\color{cyan} so it's possible to use |\\| to insert a backslash}. -% \end{itemize} -% -% -% The other characters (including |#|, |^|, |_|, |&|, |$| and |@|) -% must be inserted without backslash. -% -% \bigskip -%\begin{tabular}{>{\color{gray}}w{l}{75mm}@{\hspace*{1cm}}l} -% \omit Examples : \hfil \\ -% \noalign{\vskip1mm} -% \verb|\piton{MyString = '\\n'}| & -% \piton{MyString = '\\n'} \\ -% \verb|\piton{def even(n): return n\%2==0}| & -% \piton{def even(n): return n\%2==0} \\ -% \verb|\piton{c="#" # an affectation }| & -% \piton{c="#" # an affectation } \\ -% \verb|\piton{c="#" \ \ \ # an affectation }| & -% \piton{c="#" \ \ \ # an affectation } \\ -% \verb|\piton{MyDict = {'a': 3, 'b': 4 }}| & -% \piton{MyDict = {'a': 3, 'b': 4 }} -% \end{tabular} -% -% \bigskip -% It's possible to use the command |\piton| in the arguments of a -% LaTeX command.\footnote{For example, it's possible to use the command -% \texttt{\textbackslash piton} in a footnote. Example : -% \piton{s = 'A string'}.} -% -% \bigskip -% \item {\color{blue} \textsf{Syntaxe} \verb!\piton|...|!}\par\nobreak -% -% When the argument of the command |\piton| is provided between two identical -% characters, that argument is taken in a \emph{verbatim mode}. Therefore, with -% that syntax, the command |\piton| can't be used within the argument of another -% command. -% -% \medskip -% -% \begin{tabular}{>{\color{gray}}w{l}{75mm}@{\hspace*{1cm}}l} -% \omit Examples : \hfil \\ -% \noalign{\vskip1mm} -% \verb!\piton|MyString = '\n'|! & -% \piton|MyString = '\n'| \\ -% \verb|\piton!def even(n): return n%2==0!| & -% \piton!def even(n): return n%2==0! \\ -% \verb|\piton+c="#" # an affectation +| & -% \piton+c="#" # an affectation + \\ -% \verb|\piton?MyDict = {'a': 3, 'b': 4}?| & -% \piton!MyDict = {'a': 3, 'b': 4}! -% \end{tabular} -% -% \end{itemize} -% -% \section{Customization} -% -% \subsection{The command \textbackslash PitonOptions} -% -% -% \NewDocumentCommand{\Definition}{m} -% {{\setlength{\fboxsep}{1pt}\colorbox{gray!20}{\ttfamily \vphantom{gl}#1}}} -% -% The command |\PitonOptions| takes in as argument a comma-separated list of -% \textsl{key=value} pairs. The scope of the settings done by that command is -% the current TeX group.\footnote{We remind that a LaTeX environment is, in -% particular, a TeX group.} -% -% \begin{itemize} -% \item The key \Definition{gobble} takes in as value a -% positive integer~$n$: the first $n$ characters are discarded (before the -% process of highlightning of the code) for each line of the environment -% |{Piton}|. These characters are not necessarily spaces. -% -% \item When the key \Definition{auto-gobble} is in force, the -% extension \pkg{piton} computes the minimal value $n$ of the number of -% consecutive spaces beginning each (non empty) line of the environment -% |{Piton}| and applies |gobble| with that value of~$n$. -% -% \item When the key \Definition{env-gobble} is in force, \pkg{piton} analyzes the last -% line of the environment |{Piton}|, that is to say the line which contains -% |\end{Piton}| and determines whether that line contains only spaces followed -% by the |\end{Piton}|. If we are in that situation, \pkg{piton} computes the -% number~$n$ of spaces on that line and applies |gobble| with that value of~$n$. -% The name of that key comes from \emph{environment gobble}: the effect of -% gobble is set by the position of the commands |\begin{Piton}| and -% |\end{Piton}| which delimit the current environment. -% -% \item With the key \Definition{line-numbers}, the \emph{non empty} lines (and -% all the lines of the \emph{docstrings}, even the empty ones) are numbered in -% the environments |{Piton}| and in the listings resulting from the use of -% |\PitonInputFile|. -% -% \item With the key \Definition{all-line-numbers}, \emph{all} the lines are numbered, -% including the empty ones. -% -% \item \colorbox{yellow!50}{\bfseries{New 1.5}}\par\nobreak -% -% The key \Definition{numbers-sep} is the horizontal distance between the -% numbers of lines (inserted by |line-numbers| of |all-line-numbers|) and the -% beginning of the lines of code. The initial value is 0.7~em. -% -% \item With the key \Definition{resume}, the counter of lines is not set to zero -% at the beginning of each environment |{Piton}| or use of |\PitonInputFile| as -% it is otherwise. That allows a numbering of the lines across several -% environments. -% -% \item The key \Definition{left-margin} corresponds to a margin on the left. -% That key may be useful in conjonction with the key |line-numbers| or the key -% |line-all-numbers| if one does not want the numbers in an overlapping position -% on the left. -% -% It's possible to use the key |left-margin| with the value |auto|. With that -% value, if the key |line-numbers| or the key |all-line-numbers| is used, a -% margin will be automatically inserted to fit the numbers of lines. See an -% example part \ref{example-numbering} on page~\pageref{example-numbering}. -% -% \item The key \Definition{background-color} sets the background color of the -% environments |{Piton}| and the listings produced by |\PitonInputFile| (that -% background has a width of |\linewidth|). -% -% \smallskip -% \colorbox{yellow!50}{\textbf{New 1.4}}\enskip The key |background-color| -% supports also as value a \emph{list} of colors. In this case, the successive -% rows are colored by using the colors of the list in a cyclic way. -% -% \emph{Example} : |\PitonOptions{background-color = {gray!5,white}}| -% -% -% The key |background-color| accepts a color defined «on the fly». For example, -% it's possible to write |background-color = [cmyk]{0.1,0.05,0,0}|. -% -% \item With the key \Definition{prompt-background-color}, \pkg{piton} adds a -% color background to the lines beginning with the prompt ``|>>>|'' (and its -% continuation ``|...|'') characteristic of the Python consoles with -% \textsc{repl} (\emph{read-eval-print loop}). -% -% \item When the key \Definition{show-spaces-in-strings} is activated, the -% spaces in the short strings (that is to say those delimited by |'| or |"|) are -% replaced by the character~⣠(U+2423 : \textsc{open box}). Of course, that -% character~U+2423 must be present in the monospaced font which is -% used.\footnote{The package \pkg{piton} simply uses the current monospaced -% font. The best way to change that font is to use the command -% \texttt{\textbackslash setmonofont} of the package \pkg{fontspec}.}\par\nobreak -% \begingroup \PitonOptions{show-spaces-in-strings} Example : -% \piton|my_string = 'Very good answer'| \endgroup -% -% With the key \Definition{show-spaces}, all the spaces are replaced by U+2423 -% (and no line break can occur on those ``visible spaces'', even when the key -% |break-lines|\footnote{cf. \ref{line-breaks} p.~\pageref{line-breaks}} is in -% force). -% \end{itemize} -% -% \bigskip -% -% \begingroup -% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -% \begin{Verbatim} -% ~emphase&\PitonOptions{line-numbers,auto-gobble,background-color = gray!15}@ -% \begin{Piton} -% from math import pi -% def arctan(x,n=10): -% """Compute the mathematical value of arctan(x) -% -% n is the number of terms in the sum -% """ -% if x < 0: -% return -arctan(-x) # recursive call -% elif x > 1: -% return pi/2 - arctan(1/x) -% #> (we have used that $\arctan(x)+\arctan(1/x)=\frac{\pi}{2}$ pour $x>0$) -% else -% s = 0 -% for k in range(n): -% s += (-1)**k/(2*k+1)*x**(2*k+1) -% return s -% \end{Piton} -% \end{Verbatim} -% \endgroup -% -% \begingroup -% \PitonOptions{line-numbers,background-color = gray!15} -% \begin{Piton} -% from math import pi -% -% def arctan(x,n=10): -% """Compute the mathematical value of arctan(x) -% -% n is the number of terms in the sum -% """ -% if x < 0: -% return -arctan(-x) # recursive call -% elif x > 1: -% return pi/2 - arctan(1/x) -% #> (we have used that $\arctan(x)+\arctan(1/x)=\frac{\pi}{2}$ for $x>0$) -% else -% s = 0 -% for k in range(n): -% s += (-1)**k/(2*k+1)*x**(2*k+1) -% return s -% \end{Piton} -% \endgroup -% -% \bigskip -% The command |\PitonOptions| provides in fact several other keys which will be -% described further (see in particular the ``Pages breaks and line breaks'' -% p.~\pageref{breakable}). -% -% \subsection{The styles} -% -% \label{styles} -% -% The package \pkg{piton} provides the command |\SetPitonStyle| to customize the -% different styles used to format the syntactic elements of the Python listings. -% The customizations done by that command are limited to the current TeX -% group.\footnote{We remind that a LaTeX environment is, in particular, a TeX group.} -% -% \bigskip -% The command |\SetPitonStyle| takes in as argument a comma-separated list of -% \textsl{key=value} pairs. The keys are names of styles and the value are LaTeX -% formatting instructions. -% -% \bigskip -% These LaTeX instructions must be formatting instructions such as -% |\color{...}|, |\bfseries|, |\slshape|, etc. (the commands of this kind are -% sometimes called \emph{semi-global} commands). It's also possible to put, -% \emph{at the end of the list of instructions}, a LaTeX command taking exactly -% one argument. -% -% \bigskip -% Here an example which changes the style used to highlight, in the definition -% of a Python function, the name of the function which is defined. That code -% uses the command |\highLight| of \pkg{lua-ul} (that package requires also the -% package \pkg{luacolor}). -% -% \begin{verbatim} -% \SetPitonStyle{ Name.Function = \bfseries \highLight[red!50] } -% \end{verbatim} -% -% In that example, |\highLight[red!50]| must be considered as the name of a -% LaTeX command which takes in exactly one argument, since, usually, it is used -% with |\highLight[red!50]{...}|. -% -% \medskip -% \begingroup -% \SetPitonStyle -% { Name.Function = \bfseries \highLight[red!50] } -% With that setting, we will have : \piton{def cube(x) : return x * x * x } -% \endgroup -% -% \bigskip -% The different styles are described in the table \ref{Semantic}. The initial -% settings done by \pkg{piton} in |piton.sty| are inspired by the style -% \pkg{manni} de Pygments.\footnote{See: -% \url{https://pygments.org/styles/}. Remark that, by default, Pygments provides for its style \pkg{manni} a colored background whose color is the HTML color \texttt{\#F0F3F3}. It's possible to have the same color in \texttt{\{Pion\}} with the instruction \texttt{\textbackslash PitonOptions\{background-color = [HTML]\{F0F3F3\}\}}.} -% -% \bigskip -% \colorbox{yellow!50}{\textbf{New 1.4}}\enskip The command |\PitonStyle| takes -% in as argument the name of a style and allows to retrieve the value (as a list -% of LaTeX instructions) of that style. -% -% \smallskip -% For example, it's possible to write |{\PitonStyle{Keyword}{function}}| and we -% will have the word {\PitonStyle{Keyword}{function}} formatted as a keyword. -% -% \smallskip -% The syntax |{\PitonStyle{|\textsl{\texttt{style}}|}{...}}| is mandatory in -% order to be able to deal both with the semi-global commands and the commands -% with arguments which may be present in the definition of the style -% \texttt{\textsl{style}}. -% -% \begin{table}[b] -% \centering -% \caption{Usage of the different styles} -% \label{Semantic} -% \begin{tabular}{@{}>{\ttfamily}l>{\RaggedRight\arraybackslash}p{9cm}@{}} -% \toprule -% \normalfont Style & Usage \\ -% \midrule -% Number & the numbers \\ -% String.Short & the short strings (between \texttt{'} or \verb|"|) \\ -% String.Long & the long strings (between \texttt{'''} or \verb|"""|) except the -% documentation strings \\ -% String & that keys sets both |String.Short| and |String.Long| \\ -% String.Doc & the documentation strings (only between \texttt{"""} following -% PEP~257) \\ -% String.Interpol & the syntactic elements of the fields of the f-strings (that -% is to say the characters \texttt{\{} and \texttt{\}}) \\ -% Operator & the following operators : \texttt{!= == << >> - \~{} + / * \% = < > \& .} \verb+|+ \verb|@|\\ -% Operator.Word & the following operators : \texttt{in}, \texttt{is}, -% \texttt{and}, \texttt{or} and \texttt{not} \\ -% Name.Builtin & the predefined functions of Python \\ -% Name.Function & the name of the functions defined by the user, at the point of -% their definition (that is to say after the keyword |def|) \\ -% Name.Decorator & the decorators (instructions beginning by \verb|@|) \\ -% Name.Namespace & the name of the modules (= external libraries) \\ -% Name.Class & the name of the classes at the point of their definition (that is -% to say after the keyword |class|) \\ -% Exception & the names of the exceptions (eg: \texttt{SyntaxError}) \\ -% Comment & the comments beginning with \verb|#| \\ -% Comment.LaTeX & the comments beginning by \verb|#>|, which are composed in LaTeX by -% \pkg{piton} (and simply called ``LaTeX comments'' in this document) \\ -% Keyword.Constant & |True|, |False| and |None| \\ -% Keyword & the following keywords : -% \ttfamily as, assert, break, case, continue, def, del, -% elif, else, except, exec, finally, for, from, -% global, if, import, lambda, non local, -% pass, raise, return, try, while, -% with, yield, yield from.\\ -% \bottomrule -% \end{tabular} -% \end{table} -% -% -% -% -% \subsection{Creation of new environments} -% -% \label{NewPitonEnvironment} -% -% Since the environment |{Piton}| has to catch its body in a special way (more -% or less as verbatim text), it's not possible to construct new environments -% directly over the environment |{Piton}| with the classical commands -% |\newenvironment| or |\NewDocumentEnvironment|. -% -% That's why \pkg{piton} provides a command |\NewPitonEnvironment|. That -% command takes in three mandatory arguments. - -% That command has the same syntax as the classical environment -% |\NewDocumentEnvironment|. -% -% \bigskip -% With the following instruction, a new environment |{Python}| will be -% constructed with the same behaviour as |{Piton}|: -% -% {\color{gray}\verb|\NewPitonEnvironment{Python}{}{}{}|} -% -% \bigskip -% If one wishes an environment |{Python}| with takes in as optional argument -% (between square brackets) the keys of the command |\PitonOptions|, it's -% possible to program as follows: -% -% {\color{gray}\verb|\NewPitonEnvironment{Python}{O{}}{\PitonOptions{#1}}{}|} -% -% \bigskip -% If one wishes to format Python code in a box of \pkg{tcolorbox}, it's possible -% to define an environment |{Python}| with the following code (of course, the -% package \pkg{tcolorbox} must be loaded). -% -%\begin{verbatim} -% \NewPitonEnvironment{Python}{} -% {\begin{tcolorbox}} -% {\end{tcolorbox}} -% \end{verbatim} -% -% \bigskip -% With this new environment |{Python}|, it's possible to write: -% -% \begin{Verbatim} -% ~emphase#\begin{Python}@ -% def square(x): -% """Compute the square of a number""" -% return x*x -% ~emphase#\end{Python}@ -% \end{Verbatim} -% -% \NewPitonEnvironment{Python}{} -% {\begin{tcolorbox}} -% {\end{tcolorbox}} -% -% \begin{Python} -% def square(x): -% """Compute the square of a number""" -% return x*x -% \end{Python} -% -% -% \section{Advanced features} -% -% \subsection{Highlighting some identifiers} -% -% \colorbox{yellow!50}{\textbf{New 1.4}} It's possible to require a changement -% of formating for some identifiers with the key |identifiers| of -% |\PitonOptions|. -% -% \smallskip -% That key takes in as argument a value of the following format: -% -% \quad |{ names = |\textsl{\ttfamily names}|, style = |\textsl{\ttfamily -% instructions}| }| -% -% \begin{itemize} -% \item \textsl{\ttfamily names} is a (comma-separated) list of identifiers -% names; -% -% \item \textsl{\ttfamily instructions} is a list of LaTeX instructions of the -% same type that \pkg{piton} ``styles'' previously presented (cf~\ref{styles} -% p.~\pageref{styles}). -% \end{itemize} -% -% \emph{Caution}: Only the identifiers may be concerned by that key. The -% keywords and the built-in functions won't be affected, even if their name is -% in the list |\textsl{\ttfamily names}|. -% -% \begin{Verbatim} -% \PitonOptions -% { -% ~emphase#identifiers@ = -% { -% ~emphase#names@ = { l1 , l2 } , -% ~emphase#style@ = \color{red} -% } -% } -% -% \begin{Piton} -% def tri(l): -% """Segmentation sort""" -% if len(l) <= 1: -% return l -% else: -% a = l[0] -% l1 = [ x for x in l[1:] if x < a ] -% l2 = [ x for x in l[1:] if x >= a ] -% return tri(l1) + [a] + tri(l2) -% \end{Piton} -% \end{Verbatim} -% -% -% \bigskip -% -% \begingroup -% -% \PitonOptions -% { -% identifiers = -% { -% names = { l1 , l2 } , -% style = \color{red} -% } -% } -% -% \begin{Piton} -% def tri(l): -% """Segmentation sort""" -% if len(l) <= 1: -% return l -% else: -% a = l[0] -% l1 = [ x for x in l[1:] if x < a ] -% l2 = [ x for x in l[1:] if x >= a ] -% return tri(l1) + [a] + tri(l2) -% \end{Piton} -% -% \endgroup -% -% \bigskip -% By using the key |identifier|, it's possible to add other built-in functions -% (or other new keywords, etc.) that will be detected by \pkg{piton}. -% -% -% \begin{Verbatim} -% \PitonOptions -% { -% ~emphase#identifiers@ = -% { -% names = { cos, sin, tan, floor, ceil, trunc, pow, exp, ln, factorial } , -% style = \PitonStyle{Name.Builtin} -% } -% } -% -% \begin{Piton} -% from math import * -% cos(pi/2) -% factorial(5) -% ceil(-2.3) -% floor(5.4) -% \end{Piton} -% \end{Verbatim} -% -% \begingroup -% -% \PitonOptions -% { -% identifiers = -% { -% names = { cos, sin, tan, floor, ceil, trunc, pow, exp, ln, factorial } , -% style = \PitonStyle{Name.Builtin} -% } -% } -% -% \begin{Piton} -% from math import * -% cos(pi/2) -% factorial(5) -% ceil(-2.3) -% floor(5.4) -% \end{Piton} -% -% -% \endgroup -% -% -% \subsection{Mechanisms to escape to LaTeX} -% -% The package \pkg{piton} provides several mechanisms for escaping to LaTeX: -% \begin{itemize} -% \item It's possible to compose comments entirely in LaTeX. -% \item It's possible to have the elements between \texttt{\$} in the comments -% composed in LateX mathematical mode. -% \item It's also possible to insert LaTeX code almost everywhere in a Python listing. -% \end{itemize} -% -% One should aslo remark that, when the extension \pkg{piton} is used with the -% class \cls{beamer}, \pkg{piton} detects in |{Piton}| many commands and -% environments of Beamer: cf. \ref{beamer} p.~\pageref{beamer}. -% -% \subsubsection{The ``LaTeX comments''} -% -% In this document, we call ``LaTeX comments'' the comments which begins by -% |#>|. The code following those characters, until the end of the line, will be -% composed as standard LaTeX code. There is two tools to customize those -% comments. -% -% \begin{itemize} -% \item It's possible to change the syntatic mark (which, by default, is |#>|). -% For this purpose, there is a key |comment-latex| available at load-time (that -% is to say at the |\usepackage|) which allows to choice the characters which, -% preceded by |#|, will be the syntatic marker. -% -% For example, with the following loading: -% -% \quad \verb|\usepackage[comment-latex = LaTeX]{piton}| -% -% the LaTeX comments will begin by |#LaTeX|. -% -% If the key |comment-latex| is used with the empty value, all the Python -% comments (which begins by |#|) will, in fact, be ``LaTeX comments''. -% -% \smallskip -% \item It's possible to change the formatting of the LaTeX comment itself by -% changing the \pkg{piton} style |Comment.LaTeX|. -% -% For example, with |\SetPitonStyle{Comment.LaTeX = \normalfont\color{blue}}|, -% the LaTeX comments will be composed in blue. -% -% If you want to have a character |#| at the beginning of the LaTeX comment in -% the \textsc{pdf}, you can use set |Comment.LaTeX| as follows: -% -% \begin{Verbatim} -% \SetPitonStyle{Comment.LaTeX = \color{gray}\~#\normalfont\space } -% \end{Verbatim} -% -% For other examples of customization of the LaTeX comments, see the part -% \ref{example-comments} p.~\pageref{example-comments} -% \end{itemize} -% -% \bigskip -% If the user has required line numbers in the left margin (with the -% key |line-numbers| or the key |all-line-numbers| of |\PitonOptions|), it's -% possible to refer to a number of line with the command |\label| used in a -% LaTeX comment.\footnote{That feature is implemented by using a redefinition of -% the standard command \texttt{\textbackslash label} in the environments -% \texttt{\{Piton\}}. Therefore, incompatibilities may occur with extensions -% which redefine (globally) that command \texttt{\textbackslash label} (for -% example: \pkg{varioref}, \pkg{refcheck}, \pkg{showlabels}, etc.)} -% -% \subsubsection{The key ``math-comments''} -% -% It's possible to request that, in the standard Python comments (that is to say -% those beginning by |#| and not |#>|), the elements between \texttt{\$} be -% composed in LaTeX mathematical mode (the other elements of the comment being -% composed verbatim). -% -% That feature is activated by the key |math-comments| at load-time (that is to -% say with the |\usepackage|). -% -% \medskip -% In the following example, we assume that the key |math-comments| has been used -% when loading \pkg{piton}. -% -% \begin{Verbatim} -% \begin{Piton} -% def square(x): -% return x*x ~# compute $x^2$ -% \end{Piton} -% \end{Verbatim} -% -% \begin{Piton} -% def square(x): -% return x*x # compute $x^2$ -% \end{Piton} -% -% \subsubsection{The mechanism ``escape-inside''} -% -% It's also possible to overwrite the Python listings to insert LaTeX code -% almost everywhere (but between lexical units, of course). By default, -% \pkg{piton} does not fix any character for that kind of escape. -% -% In order to use this mechanism, it's necessary to specify two characters which -% will delimit the escape (one for the beginning and one for the end) by using -% the key |escape-inside| at load-time (that is to say at the -% |\begin{docuemnt}|). -% -% \medskip -% In the following example, we assume that the extension \pkg{piton} has been -% loaded by the following instruction. -% -% \begin{Verbatim} -% \usepackage[~emphase#escape-inside=$$@]{piton} -% \end{Verbatim} -% -% \medskip -% In the following code, which is a recursive programmation of the mathematical -% factorial, we decide to highlight in yellow the instruction which contains the -% recursive call. That example uses the command |\highLight| of \pkg{lua-ul} -% (that package requires itself the package \pkg{luacolor}). -% \begin{Verbatim} -% \begin{Piton} -% def fact(n): -% if n==0: -% return 1 -% else: -% ~emphase#$\highLight{$@return n*fact(n-1)~emphase#$}$@ -% \end{Piton} -% \end{Verbatim} -% -% \begin{Piton} -% def fact(n): -% if n==0: -% return 1 -% else: -% $\highLight{$return n*fact(n-1)$}$ -% \end{Piton} -% -% \bigskip -% In fact, in that case, it's probably easier to use the command |\@highLight| -% of \pkg{lua-ul}: that command sets a yellow background until the end of the -% current TeX group. Since the name of that command contains the character |@|, -% it's necessary to define a synonym without |@| in order to be able to use it -% directly in |{Piton}|. -% \begingroup -% \fvset{commandchars=\~\#\+,formatcom=\color{gray}} -% \begin{Verbatim} -% \makeatletter -% ~emphase#\let\Yellow\@highLight+ -% \makeatother -% \end{Verbatim} -% \endgroup -% -% \begin{Verbatim} -% \begin{Piton} -% def fact(n): -% if n==0: -% return 1 -% else: -% ~emphase#$\Yellow$@return n*fact(n-1) -% \end{Piton} -% \end{Verbatim} -% -% \makeatletter -% \let\Yellow\@highLight -% \makeatother -% -% -% \begin{Piton} -% def fact(n): -% if n==0: -% return 1 -% else: -% $\Yellow$return n*fact(n-1) -% \end{Piton} -% -% -% -% \bigskip -% \emph{Caution} : The escape to LaTeX allowed by the characters of -% |escape-inside| is not active in the strings nor in the Python comments -% (however, it's possible to have a whole Python comment composed in LaTeX by -% beginning it with |#>|; such comments are merely called ``LaTeX comments'' in -% this document). -% -% -% \subsection{Behaviour in the class Beamer} -% -% \label{beamer} -% -% \emph{First remark}\par\nobreak -% Since the environment |{Piton}| catches its body with a verbatim mode, -% it's necessary to use the environments |{Piton}| within environments |{frame}| -% of Beamer protected by the key |fragile|.\footnote{Remind that for an -% environment \texttt{\{frame\}} of Beamer using the key |fragile|, the -% instruction \texttt{\textbackslash end\{frame\}} must be alone on a single -% line (except for any leading whitespace).} -% -% -% \bigskip -% When the package \pkg{piton} is used within the class -% \cls{beamer}\footnote{The extension \pkg{piton} detects the class \cls{beamer} -% but, if needed, it's also possible to activate that mechanism with the key -% |beamer| provided by \pkg{piton} at load-time: |\textbackslash -% usepackage[beamer]\{piton\}|}, the behaviour of \pkg{piton} is slightly -% modified, as described now. -% -% \subsubsection{\{Piton\} et \textbackslash PitonInputFile are -% ``overlay-aware''} -% -% When \pkg{piton} is used in the class \cls{beamer}, the environment |{Piton}| -% and the command |\PitonInputFile| accept the optional argument |<...>| of -% Beamer for the overlays which are involved. -% -% For example, it's possible to write: -% -% \begin{Verbatim} -% \begin{Piton}~emphase#<2-5>@ -% ... -% \end{Piton} -% \end{Verbatim} -% -% and -% -% \begin{Verbatim} -% \PitonInputFile~emphase#<2-5>@{my_file.py} -% \end{Verbatim} -% -% \subsubsection{Commands of Beamer allowed in \{Piton\} and \textbackslash PitonInputFile} -% -% When \pkg{piton} is used in the class \cls{beamer} , the following commands of -% \cls{beamer} (classified upon their number of arguments) are automatically -% detected in the environments |{Piton}| (and in the listings processed by -% |\PitonInputFile|): -% \begin{itemize} -% \item no mandatory argument : |\pause|\footnote{One should remark that it's -% also possible to use the command \texttt{\textbackslash pause} in a ``LaTeX -% comment'', that is to say by writing \texttt{\#> \textbackslash pause}. By -% this way, if the Python code is copied, it's still executable by Python}. ; -% \item one mandatory argument : |\action|, |\alert|, |\invisible|, |\only|, |\uncover| and |\visible| ; -% \item two mandatory arguments : |\alt| ; -% \item three mandatory arguments : |\temporal|. -% \end{itemize} - -% \medskip -% In the mandatory arguments of these commands, the braces must be balanced. -% However, the braces included in short strings\footnote{The short strings of -% Python are the strings delimited by characters \texttt{'} or the characters -% \texttt{"} and not \texttt{'''} nor \texttt{"""}. In Python, the short strings -% can't extend on several lines.} of Python are not considered. -% -% \medskip -% Here is a complete example of file: -% -% \begin{Verbatim}[formatcom = \small\color{gray}] -% \documentclass{beamer} -% \usepackage{piton} -% \begin{document} -% \begin{frame}[fragile] -% \begin{Piton} -% def string_of_list(l): -% """Convert a list of numbers in string""" -% ~emphase# \only<2->{s = "{" + str(l[0])}@ -% ~emphase# \only<3->{for x in l[1:]: s = s + "," + str(x)}@ -% ~emphase# \only<4->{s = s + "}"}@ -% return s -% \end{Piton} -% \end{frame} -% \end{document} -% \end{Verbatim} -% -% In the previous example, the braces in the Python strings |"{"| and |"}"| are -% correctly interpreted (without any escape character). -% -% -% -% -% \bigskip -% \subsubsection{Environments of Beamer allowed in \{Piton\} and \textbackslash PitonInputFile} -% -% When \pkg{piton} is used in the class \pkg{beamer}, the following environments -% of Beamer are directly detected in the environments |{Piton}| (and in the -% listings processed by |\PitonInputFile|): |{actionenv}|, |{alertenv}|, -% |{invisibleenv}|, |{onlyenv}|, |{uncoverenv}| and |{visibleenv}|. -% -% However, there is a restriction: these environments must contain only \emph{whole -% lines of Python code} in their body. -% -%\medskip -% Here is an example: -% -% \begin{Verbatim}[formatcom = \small\color{gray}] -% \documentclass{beamer} -% \usepackage{piton} -% \begin{document} -% \begin{frame}[fragile] -% \begin{Piton} -% def square(x): -% """Compure the square of its argument""" -% ~emphase#\begin{uncoverenv}<2>@ -% return x*x -% ~emphase#\end{uncoverenv}@ -% \end{Piton} -% \end{frame} -% \end{document} -% \end{Verbatim} -% -% -% \vspace{1cm} -% \textbf{Remark concerning the command \textbackslash alert and the environment -% \{alertenv\} of Beamer}\par\nobreak -% -% \smallskip -% Beamer provides an easy way to change the color used by the environment -% |{alertenv}| (and by the command |\alert| which relies upon it) to highlight -% its argument. Here is an example: -% -% \begin{Verbatim} -% \setbeamercolor{~emphase#alerted text@}{fg=blue} -% \end{Verbatim} -% -% However, when used inside an environment |{Piton}|, such tuning will probably -% not be the best choice because \pkg{piton} will, by design, change (most of -% the time) the color the different elements of text. One may prefer an environment -% |{alertenv}| that will change the background color for the elements to be -% hightlighted. -% -% \smallskip -% Here is a code that will do that job and add a yellow background. That code -% uses the command |\@highLight| of \pkg{lua-ul} (that extension requires also -% the package \pkg{luacolor}). -% -% \begingroup -% \fvset{commandchars=\~\#\+,formatcom=\color{gray}} -% \begin{Verbatim} -% \setbeamercolor{alerted text}{bg=yellow!50} -% \makeatletter -% \AddToHook{env/Piton/begin} -% {\renewenvironment<>{alertenv}{\only~#1{~emphase#\@highLight+[alerted text.bg]}}{}} -% \makeatother -% \end{Verbatim} -% \endgroup -% -% That code redefines locally the environment |{alertenv}| within the -% environments |{Piton}| (we recall that the command |\alert| relies upon that -% environment |{alertenv}|). -% -% \subsection{Page breaks and line breaks} -% -% \label{breakable} -% -% \subsubsection{Page breaks} -% -% By default, the listings produced by the environment |{Piton}| and the command -% |\PitonInputFile| are not breakable. -% -% However, the command |\PitonOptions| provides the key |splittable| to allow such -% breaks. -% -% \begin{itemize} -% \item If the key |splittable| is used without any value, the listings are -% breakable everywhere. -% \item If the key |splittable| is used with a numeric value~$n$ (which must be -% a non-negative integer number), the listings are breakable but no break will -% occur within the first $n$ lines and within the last $n$ lines. Therefore, -% |splittable=1| is equivalent to |splittable|. -% \end{itemize} -% -% \medskip -% Even with a background color (set by the key |background-color|), the pages -% breaks are allowed, as soon as the key |splittable| is in force.\footnote{With -% the key |splittable|, the environments \texttt{\{Piton\}} are breakable, even -% within a (breakable) environment of \pkg{tcolorbox}. Remind that an -% environment of \pkg{tcolorbox} included in another environment of -% \pkg{tcolorbox} is \emph{not} breakable, even when both environments use the -% key |breakable| of \pkg{tcolorbox}.} -% -% \subsubsection{Line breaks} -% -% \label{line-breaks} -% -% By default, the elements produced by \pkg{piton} can't be broken by an end on -% line. However, there are keys to allow such breaks (the possible breaking -% points are the spaces, even the spaces in the Python strings). -% \begin{itemize} -% \item With the key |break-lines-in-piton|, the line breaks are allowed in the -% command |\piton{...}| (but not in the command \verb+\piton|...|+, that is to say -% the command |\piton| in verbatim mode). -% \item With the key |break-lines-in-Piton|, the line breaks are allowed in the -% environment |{Piton}| (hence the capital letter |P| in the name) and in the -% listings produced by |\PitonInputFile|. -% \item The key |break-lines| is a conjonction of the two previous keys. -% \end{itemize} -% -% \bigskip -% The package \pkg{piton} provides also several keys to control the appearance -% on the line breaks allowed by |break-lines-in-Piton|. -% -% \begin{itemize} -% \item With the key |indent-broken-lines|, the indentation of a broken line is -% respected at carriage return. -% -% \item The key |end-of-broken-line| corresponds to the symbol placed at the end -% of a broken line. The initial value is: |\hspace*{0.5em}\textbackslash|. -% -% \item The key |continuation-symbol| corresponds to the symbol placed at each -% carriage return. The initial value is: |+\;|. -% -% \item The key |continuation-symbol-on-indentation| coresponds to the symbol -% placed at each carriage return, on the position of the indentation (only when -% the key |indent-broken-line| is in force). The initial value is: -% |$\hookrightarrow\;$|. -% \end{itemize} -% -% -% \bigskip -% The following code has been composed in a standard LaTeX |{minipage}| of width -% 12~cm with the following tuning: -% -% \begin{Verbatim} -% \PitonOptions{break-lines,indent-broken-lines,background-color=gray!15} -% \end{Verbatim} -% -% \begin{center} -% \PitonOptions{break-lines,indent-broken-lines,background-color=gray!15} -% \begin{minipage}{12cm} -% \begin{Piton} -% def dict_of_list(l): -% """Converts a list of subrs and descriptions of glyphs in a dictionary""" -% our_dict = {} -% for list_letter in l: -% if (list_letter[0][0:3] == 'dup'): # if it's a subr -% name = list_letter[0][4:-3] -% print("We treat the subr of number " + name) -% else: -% name = list_letter[0][1:-3] # if it's a glyph -% print("We treat the glyph of number " + name) -% our_dict[name] = [treat_Postscript_line(k) for k in list_letter[1:-1]] -% return dict -% \end{Piton} -% \end{minipage} -% \end{center} -% -% \subsection{Footnotes in the environments of piton} -% -% \label{footnote} -% If you want to put footnotes in an environment |{Piton}| or -% (or, more unlikely, in a listing produced by |\PitonInputFile|), you can use a -% pair |\footnotemark|--|\footnotetext|. -% -% \smallskip -% However, it's also possible to extract the footnotes with the help of the -% package \pkg{footnote} or the package \pkg{footnotehyper}. -% -% \smallskip -% If \pkg{piton} is loaded with the option |footnote| (with -% |\usepackage[footnote]{piton}| or with |\PassOptionsToPackage|), the -% package \pkg{footnote} is loaded (if it is not yet loaded) and it is used to -% extract the footnotes. -% -% \smallskip -% If \pkg{piton} is loaded with the option |footnotehyper|, the package -% \pkg{footnotehyper} is loaded (if it is not yet loaded) ant it is used to -% extract footnotes. -% -% \smallskip -% Caution: The packages \pkg{footnote} and \pkg{footnotehyper} are incompatible. -% The package \pkg{footnotehyper} is the successor of the package \pkg{footnote} -% and should be used preferently. The package \pkg{footnote} has some drawbacks, -% in particular: it must be loaded after the package \pkg{xcolor} and it is not -% perfectly compatible with \pkg{hyperref}. -% -% \medskip -% In this document, the package \pkg{piton} has been loaded with the -% option |footnotehyper|. For examples of notes, cf. \ref{notes-examples}, -% p.~\pageref{notes-examples}. -% -% \subsection{Tabulations} -% -% \smallskip -% Even though it's recommended to indent the Python listings with spaces (see -% PEP~8), \pkg{piton} accepts the characters of tabulation (that is to say the -% characters U+0009) at the beginning of the lines. Each character U+0009 is -% replaced by $n$~spaces. The initial value of $n$ is $4$ but it's possible to -% change it with the key |tab-size| of |\PitonOptions|. -% -% \smallskip -% There exists also a key |tabs-auto-gobble| which computes the minimal value -% $n$ of the number of consecutive characters U+0009 beginning each (non empty) -% line of the environment |{Piton}| and applies |gobble| with that value of~$n$ -% (before replacement of the tabulations by spaces, of course). Hence, that key -% is similar to the key |auto-gobble| but acts on U+0009 instead of U+0020 -% (spaces). -% -% \section{Examples} -% -% \subsection{Line numbering} -% -% \label{example-numbering} -% -% We remind that it's possible to have an automatic numbering of the lines in -% the Python listings by using the key |line-numbers| or the key |all-line-numbers|. -% -% By default, the numbers of the lines are composed by \pkg{piton} in an -% overlapping position on the left (by using internally the command |\llap| of LaTeX). -% -% In order to avoid that overlapping, it's possible to use the option |left-margin=auto| -% which will insert automatically a margin adapted to the numbers of lines that -% will be written (that margin is larger when the numbers are greater than~10). -% -% -% \begingroup -% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -% \begin{Verbatim} -% ~emphase&\PitonOptions{background-color=gray!10, left-margin = auto, line-numbers}@ -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x) #> (appel récursif) -% elif x > 1: -% return pi/2 - arctan(1/x) #> (autre appel récursif) -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \end{Verbatim} -% \endgroup -% -% -% -% \begingroup -% \PitonOptions{background-color=gray!10,left-margin = auto, line-numbers} -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x) #> (appel récursif) -% elif x > 1: -% return pi/2 - arctan(1/x) #> (autre appel récursif) -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \endgroup -% -% -% -% \bigskip -% \subsection{Formatting of the LaTeX comments} -% -% \label{example-comments} -% -% It's possible to modify the style |Comment.LaTeX| (with |\SetPitonStyle|) in -% order to display the LaTeX comments (which begin with |#>|) aligned on the -% right margin. -% -% -% \begingroup -% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -% \begin{Verbatim} -% \PitonOptions{background-color=gray!10} -% ~emphase&\SetPitonStyle{Comment.LaTeX = \hfill \normalfont\color{gray}}@ -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x) #> appel récursif -% elif x > 1: -% return pi/2 - arctan(1/x) #> autre appel récursif -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \end{Verbatim} -% \endgroup -% -% \begingroup -% \PitonOptions{background-color=gray!10} -% \SetPitonStyle{Comment.LaTeX = \hfill \normalfont\color{gray}} -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x) #> appel récursif -% elif x > 1: -% return pi/2 - arctan(1/x) #> autre appel récursif -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \endgroup -% -% -% \vspace{1cm} -% It's also possible to display these LaTeX comments in a kind of second column -% by limiting the width of the Python code by an environment |{minipage}| of LaTeX. -% -% -% \begingroup -% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -% \begin{Verbatim} -% \PitonOptions{background-color=gray!10} -% ~emphase&\NewDocumentCommand{\MyLaTeXCommand}{m}{\hfill \normalfont\itshape\rlap{\quad #1}}@ -% ~emphase&\SetPitonStyle{Comment.LaTeX = \MyLaTeXCommand}@ -% ~emphase&\begin{minipage}{12cm}@ -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x) #> appel récursif -% elif x > 1: -% return pi/2 - arctan(1/x) #> autre appel récursif -% else: -% s = 0 -% for k in range(n): -% s += (-1)**k/(2*k+1)*x**(2*k+1) -% return s -% \end{Piton} -% ~emphase&\end{minipage}@ -% \end{Verbatim} -% \endgroup -% -% -% -% \begingroup -% \PitonOptions{background-color=gray!10} -% \NewDocumentCommand{\MyLaTeXCommand}{m}{\hfill \normalfont\itshape\rlap{\quad #1}} -% \SetPitonStyle{Comment.LaTeX = \MyLaTeXCommand} -% \begin{minipage}{12cm} -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x) #> appel récursif -% elif x > 1: -% return pi/2 - arctan(1/x) #> autre appel récursif -% else: -% s = 0 -% for k in range(n): -% s += (-1)**k/(2*k+1)*x**(2*k+1) -% return s -% \end{Piton} -% \end{minipage} -% \endgroup -% -% -% \bigskip -% \subsection{Notes in the listings} -% -% \label{notes-examples} -% -% In order to be able to extract the notes (which are typeset with the command -% |\footnote|), the extension \pkg{piton} must be loaded with the key |footnote| -% or the key |footenotehyper| as explained in the section \ref{footnote} -% p.~\pageref{footnote}. In this document, the extension \pkg{piton} has been -% loaded with the key |footnotehyper|. -% -% Of course, in an environment |{Piton}|, a command |\footnote| may appear only -% within a LaTeX comment (which begins with |#>|). It's possible to have comments -% which contain only that command |\footnote|. That's the case in the following example. -% -% -% -% \begingroup -% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -% \begin{Verbatim} -% \PitonOptions{background-color=gray!10} -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x)~emphase&#>\footnote{First recursive call.}]@ -% elif x > 1: -% return pi/2 - arctan(1/x)~emphase&#>\footnote{Second recursive call.}@ -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \end{Verbatim} -% \endgroup -% -% \begingroup -% \PitonOptions{background-color=gray!10} -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x)#>\footnote{First recursive call.} -% elif x > 1: -% return pi/2 - arctan(1/x)#>\footnote{Second recursive call.} -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \endgroup -% -% -% \vspace{1cm} -% -% If an environment |{Piton}| is used in an environment |{minipage}| of LaTeX, -% the notes are composed, of course, at the foot of the environment -% |{minipage}|. Recall that such |{minipage}| can't be broken by a page break. -% -% -% \begingroup -% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -% \begin{Verbatim} -% \PitonOptions{background-color=gray!10} -% \emphase\begin{minipage}{\linewidth} -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x)~emphase&#>\footnote{First recursive call.}@ -% elif x > 1: -% return pi/2 - arctan(1/x)~emphase&#>\footnote{Second recursive call.}@ -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \end{minipage} -% \end{Verbatim} -% \endgroup -% -% \begingroup -% \PitonOptions{background-color=gray!10} -% \begin{minipage}{\linewidth} -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x)#>\footnote{First recursive call.} -% elif x > 1: -% return pi/2 - arctan(1/x)#>\footnote{Second recursive call.} -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \end{minipage} -% \endgroup -% -% -% \vspace{1cm} -% If we embed an environment |{Piton}| in an environment |{minipage}| -% (typically in order to limit the width of a colored background), it's -% necessary to embed the whole environment |{minipage}| in an environment -% |{savenotes}| (of \pkg{footnote} or \pkg{footnotehyper}) in order to have the -% footnotes composed at the bottom of the page. -% -% \begingroup -% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} -% \begin{Verbatim} -% \PitonOptions{background-color=gray!10} -% ~emphase&\begin{savenotes}@ -% \begin{minipage}{13cm} -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x)~emphase&#>\footnote{First recursive call.}@ -% elif x > 1: -% return pi/2 - arctan(1/x)~emphase&#>\footnote{Second recursive call.}@ -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \end{minipage} -% ~emphase&\end{savenotes}@ -% \end{Verbatim} -% \endgroup -% -% -% -% \begin{savenotes} -% \PitonOptions{background-color=gray!10} -% \begin{minipage}{13cm} -% \begin{Piton} -% def arctan(x,n=10): -% if x < 0: -% return -arctan(-x)#>\footnote{First recursive call.} -% elif x > 1: -% return pi/2 - arctan(1/x)#>\footnote{Second recursive call.} -% else: -% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) -% \end{Piton} -% \end{minipage} -% \end{savenotes} -% -% \bigskip -% -% \subsection{An example of tuning of the styles} -% -% The graphical styles have been presented in the section \ref{styles}, -% p.~\pageref{styles}. -% -% \smallskip -% We present now an example of tuning of these styles adapted to the documents -% in black and white. We use the font \emph{DejaVu Sans Mono}\footnote{See: -% \url{https://dejavu-fonts.github.io}} specified by the command |\setmonofont| of -% \pkg{fontspec}. -% -% That tuning uses the command |\highLight| of \pkg{lua-ul} (that package -% requires itself the package \pkg{luacolor}). -% -% \begin{Verbatim} -% \setmonofont[Scale=0.85]{DejaVu Sans Mono} -% -% \SetPitonStyle -% { -% Number = , -% String = \itshape , -% String.Doc = \color{gray} \slshape , -% Operator = , -% Operator.Word = \bfseries , -% Name.Builtin = , -% Name.Function = \bfseries \highLight[gray!20] , -% Comment = \color{gray} , -% Comment.LaTeX = \normalfont \color{gray}, -% Keyword = \bfseries , -% Name.Namespace = , -% Name.Class = , -% Name.Type = , -% InitialValues = \color{gray} -% } -% \end{Verbatim} -% -% -% \begingroup -% -% \setmonofont[Scale=0.85]{DejaVu Sans Mono} -% -% \PitonOptions{splittable} -% -% \SetPitonStyle -% { -% Number = , -% String = \itshape , -% String.Doc = \color{gray} \slshape , -% Operator.Word = \bfseries , -% Operator = , -% Name.Builtin = , -% Name.Function = \bfseries \highLight[gray!20] , -% Comment = \color{gray} , -% Comment.LaTeX = \normalfont \color{gray} , -% Keyword = \bfseries , -% Name.Namespace = , -% Name.Class = , -% Name.Type = , -% InitialValues = \color{gray} -% } -% -% -% \bigskip -% -% \begin{Piton} -% from math import pi -% -% def arctan(x,n=10): -% """Compute the mathematical value of arctan(x) -% -% n is the number of terms in the sum -% """ -% if x < 0: -% return -arctan(-x) # appel récursif -% elif x > 1: -% return pi/2 - arctan(1/x) -% #> (we have used that $\arctan(x)+\arctan(1/x)=\pi/2$ for $x>0$) -% else: -% s = 0 -% for k in range(n): -% s += (-1)**k/(2*k+1)*x**(2*k+1) -% return s -% \end{Piton} -% -% \endgroup -% -% \subsection{Use with pyluatex} -% -% The package \pkg{pyluatex} is an extension which allows the execution of some -% Python code from |lualatex| (provided that Python is installed on the machine -% and that the compilation is done with |lualatex| and |--shell-escape|). -% -% Here is, for example, an environment |{PitonExecute}| which formats a Python -% listing (with \pkg{piton}) but display also the output of the execution of the -% code with Python (for technical reasons, the |!| is mandatory in the signature -% of the environment). -% -% -% \begin{Verbatim} -% \ExplSyntaxOn -% \NewDocumentEnvironment { ~emphase#PitonExecute@ } { ! O { } } % the ! is mandatory -% { -% \PyLTVerbatimEnv -% \begin{pythonq} -% } -% { -% \end{pythonq} -% \directlua -% { -% tex.print("\\PitonOptions{~#1}") -% tex.print("\\begin{Piton}") -% tex.print(pyluatex.get_last_code()) -% tex.print("\\end{Piton}") -% tex.print("") -% } -% \begin{center} -% \directlua{tex.print(pyluatex.get_last_output())} -% \end{center} -% } -% \ExplSyntaxOff -% \end{Verbatim} -% -% \ExplSyntaxOn -% \NewDocumentEnvironment { PitonExecute } { ! O { } } -% { -% \PyLTVerbatimEnv -% \begin{pythonq} -% } -% { -% \end{pythonq} -% \directlua -% { -% tex.print("\\PitonOptions{#1}") -% tex.print("\\begin{Piton}") -% tex.print(pyluatex.get_last_code()) -% tex.print("\\end{Piton}") -% tex.print("") -% } -% \begin{center} -% \directlua{tex.print(pyluatex.get_last_output())} -% \end{center} -% } -% \ExplSyntaxOff -% -% This environment |{PitonExecute}| takes in as optional argument (between -% square brackets) the options of the command |\PitonOptions|. -% -% -% \bigskip -% \clearpage -% -% \section{Implementation} -% -% \subsection{Introduction} -% -% The main job of the package \pkg{piton} is to take in as input a Python -% listing and to send back to LaTeX as output that code \emph{with interlaced LaTeX -% instructions of formatting}. -% -% In fact, all that job is done by a \textsc{lpeg} called |python|. That -% \textsc{lpeg}, when matched against the string of a Python listing, -% returns as capture a Lua table containing data to send to LaTeX. -% The only thing to do after will be to apply |tex.tprint| to each element of -% that table.\footnote{Recall that |tex.tprint| takes in as argument a Lua table whose -% first component is a ``catcode table'' and the second element a string. The -% string will be sent to LaTeX with the regime of catcodes specified by the -% catcode table. If no catcode table is provided, the standard catcodes of LaTeX -% will be used.} -% -% \bigskip -% Consider, for example, the following Python code: -% -% \begin{Piton} -% def parity(x): -% return x%2 -% \end{Piton} -% -% The capture returned by the \pkg{lpeg} |python| against that code is the -% Lua table containing the following elements : -% -% \bigskip -% \begin{minipage}{\linewidth} -% \color{gray} -% -% |{ "\\__piton_begin_line:" }|\footnote{Each line of the Python listings will -% be encapsulated in a pair: \texttt{\textbackslash_@@_begin_line:} -- -% \texttt{\textbackslash@@_end_line:}. The token -% \texttt{\textbackslash@@_end_line:} must be explicit because it will be used as -% marker in order to delimit the argument of the command \texttt{\textbackslash -% @@\_begin\_line:}. Both tokens \texttt{\textbackslash_@@_begin_line:} and -% \texttt{\textbackslash@@_end_line:} will be nullified in the command -% \texttt{\textbackslash piton} (since there can't be lines breaks in the -% argument of a command \texttt{\textbackslash piton}).} -% -% \texttt{\{ "\{\textbackslash PitonStyle\{Keyword\}\{" \}}\footnote{The -% lexical elements of Python for which we have a \pkg{piton} style will be -% formatted via the use of the command \texttt{\textbackslash PitonStyle}. -% Such an element is typeset in LaTeX via the syntax \texttt{\{\textbackslash -% PitonStyle\{\textsl{style}\}\{...\}\}} because the instructions inside an \texttt{\textbackslash -% PitonStyle} may be both semi-global declarations like -% \texttt{\textbackslash bfseries} and commands with one argument like -% \texttt{\textbackslash fbox}.} -% -% \texttt{\{ -% luatexbase.catcodetables.CatcodeTableOther\footnote{\texttt{luatexbase.catcodetables.CatcodeTableOther} is a mere number which corresponds to the ``catcode table'' whose all characters have the catcode ``other'' (which means that they will be typeset by LaTeX verbatim).}, "def" \} } -% -% |{ "}}" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, " " }| -% -% |{ "{\PitonStyle{Name.Function}{" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, "parity" }| -% -% |{ "}}" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, "(" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, "x" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, ")" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, ":" }| -% -% |{ "\\__piton_end_line: \\__piton_newline: \\__piton_begin_line:" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, " " }| -% -% |{ "{\PitonStyle{Keyword}{" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, "return" }| -% -% |{ "}}" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, " " }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, "x" }| -% -% |{ "{\PitonStyle{Operator}{" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, "&" }| -% -% |{ "}}" }| -% -% |{ "{\PitonStyle{Number}{" }| -% -% |{ luatexbase.catcodetables.CatcodeTableOther, "2" }| -% -% |{ "}}" }| -% -% |{ "\\__piton_end_line:" }| -% -% \end{minipage} -% -% \bigskip -% We give now the LaTeX code which is sent back by Lua to TeX (we have written -% on several lines for legibility but no character |\r| will be sent to LaTeX). The -% characters which are greyed-out are sent to LaTeX with the catcode ``other'' -% (=12). All the others characters are sent with the regime of catcodes of L3 -% (as set by |\ExplSyntaxOn|) -% -% -% \begingroup -% \def\gbox#1{\colorbox{gray!20}{\strut #1}} -% \setlength{\fboxsep}{1pt} -% -% \begin{Verbatim*}[formatcom = \color{black}] -% \__piton_begin_line:{\PitonStyle{Keyword}{~gbox#def@}} -% ~gbox# @{\PitonStyle{Name.Function}{~gbox#parity@}}~gbox#(x):@\__piton_end_line:\__piton_newline: -% \__piton_begin_line:~gbox# @{\PitonStyle{Keyword}{~gbox#return@}} -% ~gbox# x@{\PitonStyle{Operator}{~gbox#%@}}{\PitonStyle{Number}{~gbox#2@}}\__piton_end_line: -% \end{Verbatim*} -% \endgroup -% -% -% -% -% \subsection{The L3 part of the implementation} -% -% \subsubsection{Declaration of the package} -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e} -\RequirePackage{l3keys2e} -\ProvidesExplPackage - {piton} - {\myfiledate} - {\myfileversion} - {Highlight Python codes with LPEG on LuaLaTeX} -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\msg_new:nnn { piton } { LuaLaTeX~mandatory } - { - LuaLaTeX~is~mandatory.\\ - The~package~'piton'~requires~the~engine~LuaLaTeX.\\ - \str_if_eq:VnT \c_sys_jobname_str { output } - { If~you~use~Overleaf,~you~can~switch~to~LuaLaTeX~in~the~"Menu". \\} - If~you~go~on,~the~package~'piton'~won't~be~loaded. - } -\sys_if_engine_luatex:F { \msg_critical:nn { piton } { LuaLaTeX~mandatory } } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\RequirePackage { luatexbase } -% \end{macrocode} -% -% \bigskip -% The boolean |\c_@@_footnotehyper_bool| will indicate if the option -% |footnotehyper| is used. -% \begin{macrocode} -\bool_new:N \c_@@_footnotehyper_bool -% \end{macrocode} -% -% \medskip -% The boolean |\c_@@_footnote_bool| will indicate if the option |footnote| is -% used, but quicky, it will also be set to |true| if the option |footnotehyper| -% is used. -% \begin{macrocode} -\bool_new:N \c_@@_footnote_bool -% \end{macrocode} -% -% \medskip -% The following boolean corresponds to the key |math-comments| (only at load-time). -% \begin{macrocode} -\bool_new:N \c_@@_math_comments_bool -% \end{macrocode} -% -% \medskip -% The following boolean corresponds to the key |beamer|. -% \begin{macrocode} -\bool_new:N \c_@@_beamer_bool -% \end{macrocode} -% -% \bigskip -% We define a set of keys for the options at load-time. -% \begin{macrocode} -\keys_define:nn { piton / package } - { - footnote .bool_set:N = \c_@@_footnote_bool , - footnotehyper .bool_set:N = \c_@@_footnotehyper_bool , - escape-inside .tl_set:N = \c_@@_escape_inside_tl , - escape-inside .initial:n = , - comment-latex .code:n = { \lua_now:n { comment_latex = "#1" } } , - comment-latex .value_required:n = true , - math-comments .bool_set:N = \c_@@_math_comments_bool , - math-comments .default:n = true , - beamer .bool_set:N = \c_@@_beamer_bool , - beamer .default:n = true , - unknown .code:n = \msg_error:nn { piton } { unknown~key~for~package } - } -% \end{macrocode} -% -% \begin{macrocode} -\msg_new:nnn { piton } { unknown~key~for~package } - { - Unknown~key.\\ - You~have~used~the~key~'\l_keys_key_str'~but~the~only~keys~available~here~ - are~'beamer',~'comment-latex',~'escape-inside',~'footnote',~'footnotehyper'~and~ - 'math-comments'.~Other~keys~are~available~in~\token_to_str:N \PitonOptions.\\ - That~key~will~be~ignored. - } -% \end{macrocode} -% -% \bigskip -% We process the options provided by the user at load-time. -% \begin{macrocode} -\ProcessKeysOptions { piton / package } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\begingroup -\cs_new_protected:Npn \@@_set_escape_char:nn #1 #2 - { - \lua_now:n { piton_begin_escape = "#1" } - \lua_now:n { piton_end_escape = "#2" } - } -\cs_generate_variant:Nn \@@_set_escape_char:nn { x x } -\@@_set_escape_char:xx - { \tl_head:V \c_@@_escape_inside_tl } - { \tl_tail:V \c_@@_escape_inside_tl } -\endgroup -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\@ifclassloaded { beamer } { \bool_set_true:N \c_@@_beamer_bool } { } -\bool_if:NT \c_@@_beamer_bool { \lua_now:n { piton_beamer = true } } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\hook_gput_code:nnn { begindocument } { . } - { - \@ifpackageloaded { xcolor } - { } - { \msg_fatal:nn { piton } { xcolor~not~loaded } } - } -% \end{macrocode} -% -% \begin{macrocode} -\msg_new:nnn { piton } { xcolor~not~loaded } - { - xcolor~not~loaded \\ - The~package~'xcolor'~is~required~by~'piton'.\\ - This~error~is~fatal. - } -% \end{macrocode} -% -% -% \begin{macrocode} -\msg_new:nnn { piton } { footnote~with~footnotehyper~package } - { - Footnote~forbidden.\\ - You~can't~use~the~option~'footnote'~because~the~package~ - footnotehyper~has~already~been~loaded.~ - If~you~want,~you~can~use~the~option~'footnotehyper'~and~the~footnotes~ - within~the~environments~of~piton~will~be~extracted~with~the~tools~ - of~the~package~footnotehyper.\\ - If~you~go~on,~the~package~footnote~won't~be~loaded. - } -% \end{macrocode} -% -% \begin{macrocode} -\msg_new:nnn { piton } { footnotehyper~with~footnote~package } - { - You~can't~use~the~option~'footnotehyper'~because~the~package~ - footnote~has~already~been~loaded.~ - If~you~want,~you~can~use~the~option~'footnote'~and~the~footnotes~ - within~the~environments~of~piton~will~be~extracted~with~the~tools~ - of~the~package~footnote.\\ - If~you~go~on,~the~package~footnotehyper~won't~be~loaded. - } -% \end{macrocode} -% -% \medskip -% \begin{macrocode} -\bool_if:NT \c_@@_footnote_bool - { -% \end{macrocode} -% The class \cls{beamer} has its own system to extract footnotes and that's why -% we have nothing to do if \cls{beamer} is used. -% \begin{macrocode} - \@ifclassloaded { beamer } - { \bool_set_false:N \c_@@_footnote_bool } - { - \@ifpackageloaded { footnotehyper } - { \@@_error:n { footnote~with~footnotehyper~package } } - { \usepackage { footnote } } - } - } -% \end{macrocode} -% -% \begin{macrocode} -\bool_if:NT \c_@@_footnotehyper_bool - { -% \end{macrocode} -% The class \cls{beamer} has its own system to extract footnotes and that's why -% we have nothing to do if \cls{beamer} is used. -% \begin{macrocode} - \@ifclassloaded { beamer } - { \bool_set_false:N \c_@@_footnote_bool } - { - \@ifpackageloaded { footnote } - { \@@_error:n { footnotehyper~with~footnote~package } } - { \usepackage { footnotehyper } } - \bool_set_true:N \c_@@_footnote_bool - } - } -% \end{macrocode} -% The flag |\c_@@_footnote_bool| is raised and so, we will only have to test -% |\c_@@_footnote_bool| in order to know if we have to insert an environment -% |{savenotes}|. -% -% \bigskip -% \subsubsection{Parameters and technical definitions} -% -% The following string will contain the name of the informatic language -% considered (the initial value is |python|). -% -% \begin{macrocode} -\str_new:N \l_@@_language_str -\str_set:Nn \l_@@_language_str { python } -% \end{macrocode} -% -% We will compute (with Lua) the numbers of lines of the Python code and store -% it in the following counter. -% \begin{macrocode} -\int_new:N \l_@@_nb_lines_int -% \end{macrocode} -% -% The same for the number of non-empty lines of the Python codes. -% \begin{macrocode} -\int_new:N \l_@@_nb_non_empty_lines_int -% \end{macrocode} -% -% The following counter will be used to count the lines during the composition. -% It will count all the lines, empty or not empty. It won't be used to print the -% numbers of the lines. -% \begin{macrocode} -\int_new:N \g_@@_line_int -% \end{macrocode} -% -% \medskip -% The following token list will contains the (potential) informations to write -% on the |aux| (to be used in the next compilation). -% \begin{macrocode} -\tl_new:N \g_@@_aux_tl -% \end{macrocode} -% -% \medskip -% The following counter corresponds to the key |splittable| of |\PitonOptions|. -% If the value of |\l_@@_splittable_int| is equal to $n$, then no line break can -% occur within the first $n$~lines or the last $n$~lines of the listings. -% \begin{macrocode} -\int_new:N \l_@@_splittable_int -% \end{macrocode} -% -% \medskip -% An initial value of |splittable| equal to 100 is equivalent to say that the -% environments |{Piton}| are unbreakable. -% \begin{macrocode} -\int_set:Nn \l_@@_splittable_int { 100 } -% \end{macrocode} -% -% \medskip -% The following string corresponds to the key |background-color| of |\PitonOptions|. -% \begin{macrocode} -\clist_new:N \l_@@_bg_color_clist -% \end{macrocode} -% -% \medskip -% The package \pkg{piton} will also detect the lines of code which correspond to -% the user input in a Python console, that is to say the lines of code beginning -% with |>>>| and |...|. It's possible, with the key |prompt-background-color|, -% to require a background for these lines of code (and the other lines of code -% will have the standard background color specified by |background-color|). -% \begin{macrocode} -\tl_new:N \l_@@_prompt_bg_color_tl -% \end{macrocode} -% -% \medskip -% We will compute the maximal width of the lines of an environment |{Piton}| in -% |\g_@@_width_dim|. We need a global variable because, when the key |footnote| -% is in force, each line when be composed in an environment |{savenotes}| and -% (when |slim| is in force) we need to exit |\g_@@_width_dim| from that -% environment. -% \begin{macrocode} -\dim_new:N \g_@@_width_dim -% \end{macrocode} -% The value of that dimension as written on the |aux| file will be stored in -% |\l_@@_width_on_aux_dim|. -% \begin{macrocode} -\dim_new:N \l_@@_width_on_aux_dim -% \end{macrocode} -% -% \medskip -% We will count the environments |{Piton}| (and, in fact, also the commands -% |\PitonInputFile|, despite the name |\g_@@_env_int|). -% \begin{macrocode} -\int_new:N \g_@@_env_int -% \end{macrocode} -% -% \medskip -% The following boolean corresponds to the key |show-spaces|. -% \begin{macrocode} -\bool_new:N \l_@@_show_spaces_bool -% \end{macrocode} -% -% \medskip -% The following booleans correspond to the keys |break-lines| and -% |indent-broken-lines|. -% \begin{macrocode} -\bool_new:N \l_@@_break_lines_in_Piton_bool -\bool_new:N \l_@@_indent_broken_lines_bool -% \end{macrocode} -% -% \medskip -% The following token list corresponds to the key |continuation-symbol|. -% \begin{macrocode} -\tl_new:N \l_@@_continuation_symbol_tl -\tl_set:Nn \l_@@_continuation_symbol_tl { + } -% \end{macrocode} -% -% \medskip -% \begin{macrocode} -% The following token list corresponds to the key -% |continuation-symbol-on-indentation|. The name has been shorten to |csoi|. -\tl_new:N \l_@@_csoi_tl -\tl_set:Nn \l_@@_csoi_tl { $ \hookrightarrow \; $ } -% \end{macrocode} -% -% \medskip -% The following token list corresponds to the key |end-of-broken-line|. -% \begin{macrocode} -\tl_new:N \l_@@_end_of_broken_line_tl -\tl_set:Nn \l_@@_end_of_broken_line_tl { \hspace*{0.5em} \textbackslash } -% \end{macrocode} -% -% \medskip -% The following boolean corresponds to the key |break-lines-in-piton|. -% \begin{macrocode} -\bool_new:N \l_@@_break_lines_in_piton_bool -% \end{macrocode} -% -% \medskip -% The following boolean corresponds to the key |slim| of |\PitonOptions|. -% \begin{macrocode} -\bool_new:N \l_@@_slim_bool -% \end{macrocode} -% -% \medskip -% The following dimension corresponds to the key |left-margin| of |\PitonOptions|. -% \begin{macrocode} -\dim_new:N \l_@@_left_margin_dim -% \end{macrocode} -% -% \medskip -% The following boolean will be set when the key |left-margin=auto| -% is used. -% \begin{macrocode} -\bool_new:N \l_@@_left_margin_auto_bool -% \end{macrocode} -% -% \medskip -% The following dimension corresponds to the key |numbers-sep| of -% |\PitonOptions|. -% \begin{macrocode} -\dim_new:N \l_@@_numbers_sep_dim -\dim_set:Nn \l_@@_numbers_sep_dim { 0.7 em } -% \end{macrocode} -% -% \medskip -% The tabulators will be replaced by the content of the following token list. -% \begin{macrocode} -\tl_new:N \l_@@_tab_tl -% \end{macrocode} -% -% \medskip -% \begin{macrocode} -\cs_new_protected:Npn \@@_set_tab_tl:n #1 - { - \tl_clear:N \l_@@_tab_tl - \prg_replicate:nn { #1 } - { \tl_put_right:Nn \l_@@_tab_tl { ~ } } - } -\@@_set_tab_tl:n { 4 } -% \end{macrocode} -% -% \medskip -% The following integer corresponds to the key |gobble|. -% \begin{macrocode} -\int_new:N \l_@@_gobble_int -% \end{macrocode} -% -% \medskip -% \begin{macrocode} -\tl_new:N \l_@@_space_tl -\tl_set:Nn \l_@@_space_tl { ~ } -% \end{macrocode} -% -% -% \medskip -% At each line, the following counter will count the spaces at the beginning. -% \begin{macrocode} -\int_new:N \g_@@_indentation_int -% \end{macrocode} -% -% \medskip -% \begin{macrocode} -\cs_new_protected:Npn \@@_an_indentation_space: - { \int_gincr:N \g_@@_indentation_int } -% \end{macrocode} -% -% \medskip -% The following command |\@@_beamer_command:n| executes the argument -% corresponding to its argument but also stores it in |\l_@@_beamer_command_str|. -% That string is used only in the error message ``|cr~not~allowed|'' raised when -% there is a carriage return in the mandatory argument of that command. -% \begin{macrocode} -\cs_new_protected:Npn \@@_beamer_command:n #1 - { - \str_set:Nn \l_@@_beamer_command_str { #1 } - \use:c { #1 } - } -% \end{macrocode} -% -% \bigskip -% In the environment |{Piton}|, the command |\label| will be linked to the -% following command. -% \begin{macrocode} -\cs_new_protected:Npn \@@_label:n #1 - { - \bool_if:NTF \l_@@_line_numbers_bool - { - \@bsphack - \protected@write \@auxout { } - { - \string \newlabel { #1 } - { -% \end{macrocode} -% Remember that the content of a line is typeset in a box \emph{before} the -% composition of the potential number of line. -% \begin{macrocode} - { \int_eval:n { \g_@@_visual_line_int + 1 } } - { \thepage } - } - } - \@esphack - } - { \msg_error:nn { piton } { label~with~lines~numbers } } - } -% \end{macrocode} -% -% -% \bigskip -% The following commands are a easy way to insert safely braces (|{| and |}|) in -% the TeX flow. -% \begin{macrocode} -\cs_new_protected:Npn \@@_open_brace: - { \directlua { piton.open_brace() } } -\cs_new_protected:Npn \@@_close_brace: - { \directlua { piton.close_brace() } } -% \end{macrocode} -% -% \bigskip -% The following token list will be evaluated at the beginning of -% |\@@_begin_line:|... |\@@_end_line:| and cleared at the end. It will be used -% by LPEG acting between the lines of the Python code in order to add -% instructions to be executed at the beginning of the line. -% \begin{macrocode} -\tl_new:N \g_@@_begin_line_hook_tl -% \end{macrocode} -% -% \smallskip -% For example, the LPEG |Prompt| will trigger the following command which will -% insert an instruction in the hook |\g_@@_begin_line_hook| to specify that a -% background must be inserted to the current line of code. -% \begin{macrocode} -\cs_new_protected:Npn \@@_prompt: - { - \tl_gset:Nn \g_@@_begin_line_hook_tl - { \clist_set:NV \l_@@_bg_color_clist \l_@@_prompt_bg_color_tl } - } -% \end{macrocode} -% -% -% \bigskip -% You will keep track of the current style for the treatment of EOL (for the -% multi-line syntactic elements). -% \begin{macrocode} -\clist_new:N \g_@@_current_style_clist -\clist_set:Nn \g_@@_current_style_clist { __end } -% \end{macrocode} -% The element |__end| is an arbitrary syntactic marker. -% -% \medskip -% \begin{macrocode} -\cs_new_protected:Npn \@@_close_current_styles: - { - \int_set:Nn \l_tmpa_int { \clist_count:N \g_@@_current_style_clist - 1 } - \exp_args:NV \@@_close_n_styles:n \l_tmpa_int - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_close_n_styles:n #1 - { - \int_compare:nNnT { #1 } > 0 - { - \@@_close_brace: - \@@_close_brace: - \@@_close_n_styles:n { #1 - 1 } - } - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_open_current_styles: - { \exp_last_unbraced:NV \@@_open_styles:w \g_@@_current_style_clist , } -% \end{macrocode} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_open_styles:w #1 , - { - \tl_if_eq:nnF { #1 } { __end } - { \@@_open_brace: #1 \@@_open_brace: \@@_open_styles:w } - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_pop_style: - { - \clist_greverse:N \g_@@_current_style_clist - \clist_gpop:NN \g_@@_current_style_clist \l_tmpa_tl - \clist_gpop:NN \g_@@_current_style_clist \l_tmpa_tl - \clist_gpush:Nn \g_@@_current_style_clist { __end } - \clist_greverse:N \g_@@_current_style_clist - } -% \end{macrocode} -% -% \medskip -% \begin{macrocode} -\cs_new_protected:Npn \@@_push_style:n #1 - { - \clist_greverse:N \g_@@_current_style_clist - \clist_gpop:NN \g_@@_current_style_clist \l_tmpa_tl - \clist_gpush:Nn \g_@@_current_style_clist { #1 } - \clist_gpush:Nn \g_@@_current_style_clist { __end } - \clist_greverse:N \g_@@_current_style_clist - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_push_and_exec:n #1 - { - \@@_push_style:n { #1 } - \@@_open_brace: #1 \@@_open_brace: - } -% \end{macrocode} -% -% \bigskip -% \subsubsection{Treatment of a line of code} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_replace_spaces:n #1 - { - \tl_set:Nn \l_tmpa_tl { #1 } - \bool_if:NTF \l_@@_show_spaces_bool - { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 - { -% \end{macrocode} -% If the key |break-lines-in-Piton| is in force, we replace all the characters -% U+0020 (that is to say the spaces) by |\@@_breakable_space:|. Remark that, -% except the spaces inserted in the LaTeX comments (and maybe in the math -% comments), all these spaces are of catcode ``other'' (=12) and are -% unbreakable. -% \begin{macrocode} - \bool_if:NT \l_@@_break_lines_in_Piton_bool - { - \regex_replace_all:nnN - { \x20 } - { \c { @@_breakable_space: } } - \l_tmpa_tl - } - } - \l_tmpa_tl - } -\cs_generate_variant:Nn \@@_replace_spaces:n { x } -% \end{macrocode} -% -% \bigskip -% In the contents provided by Lua, each line of the Python code will be -% surrounded by |\@@_begin_line:| and |\@@_end_line:|. |\@@_begin_line:| is a -% LaTeX command that we will define now but |\@@_end_line:| is only a syntactic -% marker that has no definition. -% -% \begin{macrocode} -\cs_set_protected:Npn \@@_begin_line: #1 \@@_end_line: - { - \group_begin: - \g_@@_begin_line_hook_tl - \int_gzero:N \g_@@_indentation_int -% \end{macrocode} -% -% -% Be careful: there is curryfication in the following lines. -% \begin{macrocode} - \bool_if:NTF \l_@@_slim_bool - { \hcoffin_set:Nn \l_tmpa_coffin } - { - \clist_if_empty:NTF \l_@@_bg_color_clist - { - \vcoffin_set:Nnn \l_tmpa_coffin - { \dim_eval:n { \linewidth - \l_@@_left_margin_dim } } - } - { - \vcoffin_set:Nnn \l_tmpa_coffin - { \dim_eval:n { \linewidth - \l_@@_left_margin_dim - 0.5 em } } - } - } - { - \language = -1 - \raggedright - \strut - \@@_replace_spaces:n { #1 } - \strut \hfil - } - \hbox_set:Nn \l_tmpa_box - { - \skip_horizontal:N \l_@@_left_margin_dim - \bool_if:NT \l_@@_line_numbers_bool - { - \bool_if:NF \l_@@_all_line_numbers_bool - { \tl_if_empty:nF { #1 } } - \@@_print_number: - } - \clist_if_empty:NF \l_@@_bg_color_clist - { - \dim_compare:nNnT \l_@@_left_margin_dim = \c_zero_dim - { - \bool_if:NF \l_@@_left_margin_auto_bool - { \skip_horizontal:n { 0.5 em } } - } - } - \coffin_typeset:Nnnnn \l_tmpa_coffin T l \c_zero_dim \c_zero_dim - } -% \end{macrocode} -% We compute in |\g_@@_width_dim| the maximal width of the lines of the -% environment. -% \begin{macrocode} - \dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \g_@@_width_dim - { \dim_gset:Nn \g_@@_width_dim { \box_wd:N \l_tmpa_box } } - \box_set_dp:Nn \l_tmpa_box { \box_dp:N \l_tmpa_box + 1.25 pt } - \box_set_ht:Nn \l_tmpa_box { \box_ht:N \l_tmpa_box + 1.25 pt } - \clist_if_empty:NTF \l_@@_bg_color_clist - { \box_use_drop:N \l_tmpa_box } - { - \vbox_top:n - { - \hbox:n - { - \@@_color:N \l_@@_bg_color_clist - \vrule height \box_ht:N \l_tmpa_box - depth \box_dp:N \l_tmpa_box - width \l_@@_width_on_aux_dim - } - \skip_vertical:n { - \box_ht_plus_dp:N \l_tmpa_box } - \box_set_wd:Nn \l_tmpa_box \l_@@_width_on_aux_dim - \box_use_drop:N \l_tmpa_box - } - } - \vspace { - 2.5 pt } - \group_end: - \tl_gclear:N \g_@@_begin_line_hook_tl - } -% \end{macrocode} -% -% \bigskip -% The command |\@@_color:N| will take in as argument a reference to a -% comma-separated list of colors. A color will be picked by using the value of -% |\g_@@_line_int| (modulo the number of colors in the list). -% \begin{macrocode} -\cs_set_protected:Npn \@@_color:N #1 - { - \int_set:Nn \l_tmpa_int { \clist_count:N #1 } - \int_set:Nn \l_tmpb_int { \int_mod:nn \g_@@_line_int \l_tmpa_int + 1 } - \tl_set:Nx \l_tmpa_tl { \clist_item:Nn #1 \l_tmpb_int } - \tl_if_eq:NnTF \l_tmpa_tl { none } -% \end{macrocode} -% By setting |\l_@@_width_on_aux_dim| to zero, the colored rectangle will be -% drawn with zero width and, thus, it will be a mere strut (and we need that strut). -% \begin{macrocode} - { \dim_zero:N \l_@@_width_on_aux_dim } - { \exp_args:NV \@@_color_i:n \l_tmpa_tl } - } -% \end{macrocode} -% -% The following command |\@@_color:n| will accept both the instruction -% |\@@_color:n { red!15 }| and the instruction |\@@_color:n { [rgb]{0.9,0.9,0} }|. -% \begin{macrocode} -\cs_set_protected:Npn \@@_color_i:n #1 - { - \tl_if_head_eq_meaning:nNTF { #1 } [ - { - \tl_set:Nn \l_tmpa_tl { #1 } - \tl_set_rescan:Nno \l_tmpa_tl { } \l_tmpa_tl - \exp_last_unbraced:NV \color \l_tmpa_tl - } - { \color { #1 } } - } -\cs_generate_variant:Nn \@@_color:n { V } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\cs_new_protected:Npn \@@_newline: - { - \int_gincr:N \g_@@_line_int - \int_compare:nNnT \g_@@_line_int > { \l_@@_splittable_int - 1 } - { - \int_compare:nNnT - { \l_@@_nb_lines_int - \g_@@_line_int } > \l_@@_splittable_int - { - \egroup - \bool_if:NT \c_@@_footnote_bool { \end { savenotes } } - \newline - \bool_if:NT \c_@@_footnote_bool { \begin { savenotes } } - \vtop \bgroup - } - } - } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\cs_set_protected:Npn \@@_breakable_space: - { - \discretionary - { \hbox:n { \color { gray } \l_@@_end_of_broken_line_tl } } - { - \hbox_overlap_left:n - { - { - \normalfont \footnotesize \color { gray } - \l_@@_continuation_symbol_tl - } - \skip_horizontal:n { 0.3 em } - \clist_if_empty:NF \l_@@_bg_color_clist - { \skip_horizontal:n { 0.5 em } } - } - \bool_if:NT \l_@@_indent_broken_lines_bool - { - \hbox:n - { - \prg_replicate:nn { \g_@@_indentation_int } { ~ } - { \color { gray } \l_@@_csoi_tl } - } - } - } - { \hbox { ~ } } - } -% \end{macrocode} -% -% \bigskip -% \subsubsection{PitonOptions} -% -% \medskip -% The following parameters correspond to the keys |line-numbers| and -% |all-line-numbers|. -% \begin{macrocode} -\bool_new:N \l_@@_line_numbers_bool -\bool_new:N \l_@@_all_line_numbers_bool -% \end{macrocode} -% -% \medskip -% The following flag corresponds to the key |resume|. -% \begin{macrocode} -\bool_new:N \l_@@_resume_bool -% \end{macrocode} -% -% \bigskip -% Be careful! The name of the following set of keys must be considered as -% public! Hence, it should \emph{not} be changed. -% -% \begin{macrocode} -\keys_define:nn { PitonOptions } - { - language .str_set:N = \l_@@_language_str , - language .value_required:n = true , - gobble .int_set:N = \l_@@_gobble_int , - gobble .value_required:n = true , - auto-gobble .code:n = \int_set:Nn \l_@@_gobble_int { -1 } , - auto-gobble .value_forbidden:n = true , - env-gobble .code:n = \int_set:Nn \l_@@_gobble_int { -2 } , - env-gobble .value_forbidden:n = true , - tabs-auto-gobble .code:n = \int_set:Nn \l_@@_gobble_int { -3 } , - tabs-auto-gobble .value_forbidden:n = true , - line-numbers .bool_set:N = \l_@@_line_numbers_bool , - line-numbers .default:n = true , - all-line-numbers .code:n = - \bool_set_true:N \l_@@_line_numbers_bool - \bool_set_true:N \l_@@_all_line_numbers_bool , - all-line-numbers .value_forbidden:n = true , - resume .bool_set:N = \l_@@_resume_bool , - resume .value_forbidden:n = true , - splittable .int_set:N = \l_@@_splittable_int , - splittable .default:n = 1 , - background-color .clist_set:N = \l_@@_bg_color_clist , - background-color .value_required:n = true , - prompt-background-color .tl_set:N = \l_@@_prompt_bg_color_tl , - prompt-background-color .value_required:n = true , - slim .bool_set:N = \l_@@_slim_bool , - slim .default:n = true , - left-margin .code:n = - \str_if_eq:nnTF { #1 } { auto } - { - \dim_zero:N \l_@@_left_margin_dim - \bool_set_true:N \l_@@_left_margin_auto_bool - } - { \dim_set:Nn \l_@@_left_margin_dim { #1 } } , - left-margin .value_required:n = true , - numbers-sep .dim_set:N = \l_@@_numbers_sep_dim , - numbers-sep .value_required:n = true , - tab-size .code:n = \@@_set_tab_tl:n { #1 } , - tab-size .value_required:n = true , - show-spaces .bool_set:N = \l_@@_show_spaces_bool , - show-spaces .default:n = true , - show-spaces-in-strings .code:n = \tl_set:Nn \l_@@_space_tl { ⣠} , % U+2423 - show-spaces-in-strings .value_forbidden:n = true , - break-lines-in-Piton .bool_set:N = \l_@@_break_lines_in_Piton_bool , - break-lines-in-Piton .default:n = true , - break-lines-in-piton .bool_set:N = \l_@@_break_lines_in_piton_bool , - break-lines-in-piton .default:n = true , - break-lines .meta:n = { break-lines-in-piton , break-lines-in-Piton } , - break-lines .value_forbidden:n = true , - indent-broken-lines .bool_set:N = \l_@@_indent_broken_lines_bool , - indent-broken-lines .default:n = true , - end-of-broken-line .tl_set:N = \l_@@_end_of_broken_line_tl , - end-of-broken-line .value_required:n = true , - continuation-symbol .tl_set:N = \l_@@_continuation_symbol_tl , - continuation-symbol .value_required:n = true , - continuation-symbol-on-indentation .tl_set:N = \l_@@_csoi_tl , - continuation-symbol-on-indentation .value_required:n = true , - unknown .code:n = - \msg_error:nn { piton } { Unknown~key~for~PitonOptions } - } -% \end{macrocode} -% -% -% \bigskip -% -% \bigskip -% The argument of |\PitonOptions| is provided by curryfication. -% \begin{macrocode} -\NewDocumentCommand \PitonOptions { } { \keys_set:nn { PitonOptions } } -% \end{macrocode} -% -% \bigskip -% \subsubsection{The numbers of the lines} -% -% \medskip -% The following counter will be used to count the lines in the code when the -% user requires the numbers of the lines to be printed (with |line-numbers| or -% |all-line-numbers|). -% -% \begin{macrocode} -\int_new:N \g_@@_visual_line_int -% \end{macrocode} -% -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_print_number: - { - \int_gincr:N \g_@@_visual_line_int - \hbox_overlap_left:n - { - { \color { gray } \footnotesize \int_to_arabic:n \g_@@_visual_line_int } - \skip_horizontal:N \l_@@_numbers_sep_dim - } - } -% \end{macrocode} -% -% -% \bigskip -% \subsubsection{The command to write on the aux file} -% -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_write_aux: - { - \tl_if_empty:NF \g_@@_aux_tl - { - \iow_now:Nn \@mainaux { \ExplSyntaxOn } - \iow_now:Nx \@mainaux - { - \tl_gset:cn { c_@@_ \int_use:N \g_@@_env_int _ tl } - { \exp_not:V \g_@@_aux_tl } - } - \iow_now:Nn \@mainaux { \ExplSyntaxOff } - } - \tl_gclear:N \g_@@_aux_tl - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_width_to_aux: - { - \bool_if:NT \l_@@_slim_bool - { - \clist_if_empty:NF \l_@@_bg_color_clist - { - \tl_gput_right:Nx \g_@@_aux_tl - { - \dim_set:Nn \l_@@_width_on_aux_dim - { \dim_eval:n { \g_@@_width_dim + 0.5 em } } - } - } - } - } -% \end{macrocode} -% -% \bigskip -% \subsubsection{The main commands and environments for the final user} -% -% \bigskip -% \begin{macrocode} -\NewDocumentCommand { \piton } { } - { \peek_meaning:NTF \bgroup \@@_piton_standard \@@_piton_verbatim } -% \end{macrocode} -% -% \begin{macrocode} -\NewDocumentCommand { \@@_piton_standard } { m } - { - \group_begin: - \ttfamily -% \end{macrocode} -% The following tuning of LuaTeX in order to avoid all break of lines on the -% hyphens. -% \begin{macrocode} - \automatichyphenmode = 1 - \cs_set_eq:NN \\ \c_backslash_str - \cs_set_eq:NN \% \c_percent_str - \cs_set_eq:NN \{ \c_left_brace_str - \cs_set_eq:NN \} \c_right_brace_str - \cs_set_eq:NN \$ \c_dollar_str - \cs_set_eq:cN { ~ } \space - \cs_set_protected:Npn \@@_begin_line: { } - \cs_set_protected:Npn \@@_end_line: { } - \tl_set:Nx \l_tmpa_tl - { - \lua_now:e - { piton.ParseBis('\l_@@_language_str',token.scan_string()) } - { #1 } - } - \bool_if:NTF \l_@@_show_spaces_bool - { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 -% \end{macrocode} -% The following code replaces the characters U+0020 (spaces) by characters -% U+0020 of catcode~10: thus, they become breakable by an end of line. -% \begin{macrocode} - { - \bool_if:NT \l_@@_break_lines_in_piton_bool - { \regex_replace_all:nnN { \x20 } { \x20 } \l_tmpa_tl } - } - \l_tmpa_tl - \group_end: - } -% \end{macrocode} -% -% -% \begin{macrocode} -\NewDocumentCommand { \@@_piton_verbatim } { v } - { - \group_begin: - \ttfamily - \automatichyphenmode = 1 - \cs_set_protected:Npn \@@_begin_line: { } - \cs_set_protected:Npn \@@_end_line: { } - \tl_set:Nx \l_tmpa_tl - { - \lua_now:e - { piton.Parse('\l_@@_language_str',token.scan_string()) } - { #1 } - } - \bool_if:NT \l_@@_show_spaces_bool - { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 - \l_tmpa_tl - \group_end: - } -% \end{macrocode} -% - -% \bigskip -% -% -% \bigskip -% The following command is not a user command. It will be used when we will -% have to ``rescan'' some chunks of Python code. For example, it will be the -% initial value of the Piton style |InitialValues| (the default values of the -% arguments of a Python function). -% \begin{macrocode} -\cs_new_protected:Npn \@@_piton:n #1 - { - \group_begin: - \cs_set_protected:Npn \@@_begin_line: { } - \cs_set_protected:Npn \@@_end_line: { } - \bool_lazy_or:nnTF - \l_@@_break_lines_in_piton_bool - \l_@@_break_lines_in_Piton_bool - { - \tl_set:Nx \l_tmpa_tl - { - \lua_now:e - { piton.ParseTer('\l_@@_language_str',token.scan_string()) } - { #1 } - } - } - { - \tl_set:Nx \l_tmpa_tl - { - \lua_now:e - { piton.Parse('\l_@@_language_str',token.scan_string()) } - { #1 } - } - } - \bool_if:NT \l_@@_show_spaces_bool - { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 - \l_tmpa_tl - \group_end: - } -% \end{macrocode} -% -% \bigskip -% The following command is similar to the previous one but raise a fatal error if -% its argument contains a carriage return. -% \begin{macrocode} -\cs_new_protected:Npn \@@_piton_no_cr:n #1 - { - \group_begin: - \cs_set_protected:Npn \@@_begin_line: { } - \cs_set_protected:Npn \@@_end_line: { } - \cs_set_protected:Npn \@@_newline: - { \msg_fatal:nn { piton } { cr~not~allowed } } - \bool_lazy_or:nnTF - \l_@@_break_lines_in_piton_bool - \l_@@_break_lines_in_Piton_bool - { - \tl_set:Nx \l_tmpa_tl - { - \lua_now:e - { piton.ParseTer('\l_@@_language_str',token.scan_string()) } - { #1 } - } - } - { - \tl_set:Nx \l_tmpa_tl - { - \lua_now:e - { piton.Parse('\l_@@_language_str',token.scan_string()) } - { #1 } - } - } - \bool_if:NT \l_@@_show_spaces_bool - { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 - \l_tmpa_tl - \group_end: - } -% \end{macrocode} -% -% \bigskip -% Despite its name, |\@@_pre_env:| will be used both in |\PitonInputFile| and -% in the environments such as |{Piton}|. -% \begin{macrocode} -\cs_new:Npn \@@_pre_env: - { - \automatichyphenmode = 1 - \int_gincr:N \g_@@_env_int - \tl_gclear:N \g_@@_aux_tl - \cs_if_exist_use:c { c_@@ _ \int_use:N \g_@@_env_int _ tl } - \dim_compare:nNnT \l_@@_width_on_aux_dim = \c_zero_dim - { \dim_set_eq:NN \l_@@_width_on_aux_dim \linewidth } - \bool_if:NF \l_@@_resume_bool { \int_gzero:N \g_@@_visual_line_int } - \dim_gzero:N \g_@@_width_dim - \int_gzero:N \g_@@_line_int - \dim_zero:N \parindent - \dim_zero:N \lineskip - \dim_zero:N \parindent - \cs_set_eq:NN \label \@@_label:n - } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\keys_define:nn { PitonInputFile } - { - first-line .int_set:N = \l_@@_first_line_int , - first-line .value_required:n = true , - last-line .int_set:N = \l_@@_last_line_int , - last-line .value_required:n = true , - } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\NewDocumentCommand { \PitonInputFile } { d < > O { } m } - { - \tl_if_novalue:nF { #1 } - { - \bool_if:NTF \c_@@_beamer_bool - { \begin { uncoverenv } < #1 > } - { \msg_error:nn { piton } { overlay~without~beamer } } - } - \group_begin: - \int_zero_new:N \l_@@_first_line_int - \int_zero_new:N \l_@@_last_line_int - \int_set_eq:NN \l_@@_last_line_int \c_max_int - \keys_set:nn { PitonInputFile } { #2 } - \@@_pre_env: - \mode_if_vertical:TF \mode_leave_vertical: \newline -% \end{macrocode} -% We count with Lua the number of lines of the argument. The result will be -% stored by Lua in |\l_@@_nb_lines_int|. That information will be used to allow -% or disallow page breaks. -% \begin{macrocode} - \lua_now:n { piton.CountLinesFile(token.scan_argument()) } { #3 } -% \end{macrocode} -% If the final user has used both |left-margin=auto| and |line-numbers| or -% |all-line-numbers|, we have to compute the width of the maximal number of -% lines at the end of the composition of the listing to fix the correct value to -% |left-margin|. -% \begin{macrocode} - \bool_lazy_and:nnT \l_@@_left_margin_auto_bool \l_@@_line_numbers_bool - { - \hbox_set:Nn \l_tmpa_box - { - \footnotesize - \bool_if:NTF \l_@@_all_line_numbers_bool - { - \int_to_arabic:n - { \g_@@_visual_line_int + \l_@@_nb_lines_int } - } - { - \lua_now:n - { piton.CountNonEmptyLinesFile(token.scan_argument()) } - { #3 } - \int_to_arabic:n - { \g_@@_visual_line_int + \l_@@_nb_non_empty_lines_int } - } - } - \dim_set:Nn \l_@@_left_margin_dim - { \box_wd:N \l_tmpa_box + \l_@@_numbers_sep_dim + 0.1 em } - } -% \end{macrocode} -% Now, the main job. -% \begin{macrocode} - \ttfamily - \bool_if:NT \c_@@_footnote_bool { \begin { savenotes } } - \vtop \bgroup - \lua_now:e - { - piton.ParseFile('\l_@@_language_str',token.scan_argument() , - \int_use:N \l_@@_first_line_int , - \int_use:N \l_@@_last_line_int ) - } - { #3 } - \egroup - \bool_if:NT \c_@@_footnote_bool { \end { savenotes } } - \@@_width_to_aux: - \group_end: - \tl_if_novalue:nF { #1 } - { \bool_if:NT \c_@@_beamer_bool { \end { uncoverenv } } } - \@@_write_aux: - } -% \end{macrocode} -% -% -% \bigskip -% \begin{macrocode} -\NewDocumentCommand { \NewPitonEnvironment } { m m m m } - { -% \end{macrocode} -% We construct a TeX macro which will catch as argument all the tokens until -% |\end{|\texttt{\textsl{name_env}}|}| with, in that -% |\end{|\texttt{\textsl{name_env}}|}|, the catcodes of |\|, |{| and |}| equal to -% 12 (``\texttt{other}''). The latter explains why the definition of that -% function is a bit complicated. -% \begin{macrocode} - \use:x - { - \cs_set_protected:Npn - \use:c { _@@_collect_ #1 :w } - ####1 - \c_backslash_str end \c_left_brace_str #1 \c_right_brace_str - } - { - \group_end: - \mode_if_vertical:TF \mode_leave_vertical: \newline -% \end{macrocode} -% We count with Lua the number of lines of the argument. The result will be -% stored by Lua in |\l_@@_nb_lines_int|. That information will be used to allow -% or disallow page breaks. -% \begin{macrocode} - \lua_now:n { piton.CountLines(token.scan_argument()) } { ##1 } -% \end{macrocode} -% If the final user has used both |left-margin=auto| and |line-numbers|, we have -% to compute the width of the maximal number of lines at the end of the -% environment to fix the correct value to |left-margin|. -% \begin{macrocode} - \bool_lazy_and:nnT \l_@@_left_margin_auto_bool \l_@@_line_numbers_bool - { - \bool_if:NTF \l_@@_all_line_numbers_bool - { - \hbox_set:Nn \l_tmpa_box - { - \footnotesize - \int_to_arabic:n - { \g_@@_visual_line_int + \l_@@_nb_lines_int } - } - } - { - \lua_now:n - { piton.CountNonEmptyLines(token.scan_argument()) } - { ##1 } - \hbox_set:Nn \l_tmpa_box - { - \footnotesize - \int_to_arabic:n - { \g_@@_visual_line_int + \l_@@_nb_non_empty_lines_int } - } - } - \dim_set:Nn \l_@@_left_margin_dim - { \box_wd:N \l_tmpa_box + \l_@@_numbers_sep_dim + 0.1 em } - } -% \end{macrocode} -% Now, the main job. -% \begin{macrocode} - \ttfamily - \bool_if:NT \c_@@_footnote_bool { \begin { savenotes } } - \vtop \bgroup - \lua_now:e - { - piton.GobbleParse - ( - '\l_@@_language_str' , - \int_use:N \l_@@_gobble_int , - token.scan_argument() - ) - } - { ##1 } - \vspace { 2.5 pt } - \egroup - \bool_if:NT \c_@@_footnote_bool { \end { savenotes } } - \@@_width_to_aux: -% \end{macrocode} -% The following |\end{#1}| is only for the groups and the stack of environments -% of LaTeX. -% \begin{macrocode} - \end { #1 } - \@@_write_aux: - } -% \end{macrocode} -% -% -% \bigskip -% We can now define the new environment. -% -% We are still in the definition of the command |\NewPitonEnvironment|... -% \begin{macrocode} - \NewDocumentEnvironment { #1 } { #2 } - { - #3 - \@@_pre_env: - \group_begin: - \tl_map_function:nN - { \ \\ \{ \} \$ \& \# \^ \_ \% \~ \^^I } - \char_set_catcode_other:N - \use:c { _@@_collect_ #1 :w } - } - { #4 } -% \end{macrocode} -% -% \medskip -% The following code is for technical reasons. We want to change the catcode of -% |^^M| before catching the arguments of the new environment we are defining. -% Indeed, if not, we will have problems if there is a final optional argument in -% our environment (if that final argument is not used by the user in an -% instance of the environment, a spurious space is inserted, probably because -% the |^^M| is converted to space). -% \begin{macrocode} - \AddToHook { env / #1 / begin } { \char_set_catcode_other:N \^^M } - } -% \end{macrocode} -% This is the end of the definition of the command |\NewPitonEnvironment|. -% -% \bigskip -% Now, we define the environment |{Piton}|, which is the main environment -% provided by the package \pkg{piton}. Of course, you use -% |\NewPitonEnvironment|. -% \begin{macrocode} -\bool_if:NTF \c_@@_beamer_bool - { - \NewPitonEnvironment { Piton } { d < > } - { - \IfValueTF { #1 } - { \begin { uncoverenv } < #1 > } - { \begin { uncoverenv } } - } - { \end { uncoverenv } } - } - { \NewPitonEnvironment { Piton } { } { } { } } -% \end{macrocode} -% -% -% -% \bigskip -% \subsubsection{The styles} -% -% \medskip -% The following command is fundamental: it will be used by the Lua code. -% \begin{macrocode} -\NewDocumentCommand { \PitonStyle } { m } { \use:c { pitonStyle #1 } } -% \end{macrocode} -% -% \medskip -% The following command takes in its argument by curryfication. -% \begin{macrocode} -\NewDocumentCommand { \SetPitonStyle } { } { \keys_set:nn { piton / Styles } } -% \end{macrocode} -% -% \medskip -% \begin{macrocode} -\cs_new_protected:Npn \@@_math_scantokens:n #1 - { \normalfont \scantextokens { $#1$ } } -% \end{macrocode} -% -% \medskip -% \begin{macrocode} -\keys_define:nn { piton / Styles } - { - String.Interpol .tl_set:c = pitonStyle String.Interpol , - String.Interpol .value_required:n = true , - FormattingType .tl_set:c = pitonStyle FormattingType , - FormattingType .value_required:n = true , - Dict.Value .tl_set:c = pitonStyle Dict.Value , - Dict.Value .value_required:n = true , - Name.Decorator .tl_set:c = pitonStyle Name.Decorator , - Name.Decorator .value_required:n = true , - Name.Function .tl_set:c = pitonStyle Name.Function , - Name.Function .value_required:n = true , - Name.UserFunction .tl_set:c = pitonStyle Name.UserFunction , - Name.UserFunction .value_required:n = true , - Keyword .tl_set:c = pitonStyle Keyword , - Keyword .value_required:n = true , - Keyword.Constant .tl_set:c = pitonStyle Keyword.Constant , - Keyword.constant .value_required:n = true , - String.Doc .tl_set:c = pitonStyle String.Doc , - String.Doc .value_required:n = true , - Interpol.Inside .tl_set:c = pitonStyle Interpol.Inside , - Interpol.Inside .value_required:n = true , - String.Long .tl_set:c = pitonStyle String.Long , - String.Long .value_required:n = true , - String.Short .tl_set:c = pitonStyle String.Short , - String.Short .value_required:n = true , - String .meta:n = { String.Long = #1 , String.Short = #1 } , - Comment.Math .tl_set:c = pitonStyle Comment.Math , - Comment.Math .default:n = \@@_math_scantokens:n , - Comment.Math .initial:n = , - Comment .tl_set:c = pitonStyle Comment , - Comment .value_required:n = true , - InitialValues .tl_set:c = pitonStyle InitialValues , - InitialValues .value_required:n = true , - Number .tl_set:c = pitonStyle Number , - Number .value_required:n = true , - Name.Namespace .tl_set:c = pitonStyle Name.Namespace , - Name.Namespace .value_required:n = true , - Name.Class .tl_set:c = pitonStyle Name.Class , - Name.Class .value_required:n = true , - Name.Builtin .tl_set:c = pitonStyle Name.Builtin , - Name.Builtin .value_required:n = true , - TypeParameter .tl_set:c = pitonStyle TypeParameter , - TypeParameter .value_required:n = true , - Name.Type .tl_set:c = pitonStyle Name.Type , - Name.Type .value_required:n = true , - Operator .tl_set:c = pitonStyle Operator , - Operator .value_required:n = true , - Operator.Word .tl_set:c = pitonStyle Operator.Word , - Operator.Word .value_required:n = true , - Exception .tl_set:c = pitonStyle Exception , - Exception .value_required:n = true , - Comment.LaTeX .tl_set:c = pitonStyle Comment.LaTeX , - Comment.LaTeX .value_required:n = true , - Identifier .tl_set:c = pitonStyle Identifier , - Comment.LaTeX .value_required:n = true , - ParseAgain.noCR .tl_set:c = pitonStyle ParseAgain.noCR , - ParseAgain.noCR .value_required:n = true , - ParseAgain .tl_set:c = pitonStyle ParseAgain , - ParseAgain .value_required:n = true , - Prompt .tl_set:c = pitonStyle Prompt , - Prompt .value_required:n = true , - unknown .code:n = - \msg_error:nn { piton } { Unknown~key~for~SetPitonStyle } - } -% \end{macrocode} -% -% -% \bigskip -% \begin{macrocode} -\msg_new:nnn { piton } { Unknown~key~for~SetPitonStyle } - { - The~style~'\l_keys_key_str'~is~unknown.\\ - This~key~will~be~ignored.\\ - The~available~styles~are~(in~alphabetic~order):~ - Comment,~ - Comment.LaTeX,~ - Dict.Value,~ - Exception,~ - Identifier,~ - InitialValues,~ - Keyword,~ - Keyword.Constant,~ - Name.Builtin,~ - Name.Class,~ - Name.Decorator,~ - Name.Function,~ - Name.Namespace,~ - Number,~ - Operator,~ - Operator.Word,~ - Prompt,~ - String,~ - String.Doc,~ - String.Long,~ - String.Short,~and~ - String.Interpol. - } -% \end{macrocode} -% -% \bigskip -% \subsubsection{The initial style} -% -% The initial style is inspired by the style ``manni'' of Pygments. -% -% \medskip -% \begin{macrocode} -\SetPitonStyle - { - Comment = \color[HTML]{0099FF} \itshape , - Exception = \color[HTML]{CC0000} , - Keyword = \color[HTML]{006699} \bfseries , - Keyword.Constant = \color[HTML]{006699} \bfseries , - Name.Builtin = \color[HTML]{336666} , - Name.Decorator = \color[HTML]{9999FF}, - Name.Class = \color[HTML]{00AA88} \bfseries , - Name.Function = \color[HTML]{CC00FF} , - Name.Namespace = \color[HTML]{00CCFF} , - Number = \color[HTML]{FF6600} , - Operator = \color[HTML]{555555} , - Operator.Word = \bfseries , - String = \color[HTML]{CC3300} , - String.Doc = \color[HTML]{CC3300} \itshape , - String.Interpol = \color[HTML]{AA0000} , - Comment.LaTeX = \normalfont \color[rgb]{.468,.532,.6} , - Name.Type = \color[HTML]{336666} , - InitialValues = \@@_piton:n , - Dict.Value = \@@_piton:n , - Interpol.Inside = \color{black}\@@_piton:n , - TypeParameter = \color[HTML]{008800} \itshape , - Identifier = \@@_identifier:n , - Name.UserFunction = , - Prompt = , - ParseAgain.noCR = \@@_piton_no_cr:n , - ParseAgain = \@@_piton:n , - } -% \end{macrocode} -% The last styles |ParseAgain.noCR| and |ParseAgain| should be considered as -% ``internal style'' (not available for the final user). However, maybe we will -% change that and document these styles for the final user (why not?). -% -% \medskip -% If the key |math-comments| has been used at load-time, we change the style -% |Comment.Math| which should be considered only at an ``internal style''. -% However, maybe we will document in a future version the possibility to write -% change the style \emph{locally} in a document)]. -% \begin{macrocode} -\bool_if:NT \c_@@_math_comments_bool { \SetPitonStyle { Comment.Math } } -% \end{macrocode} -% -% \bigskip -% -% \bigskip -% \subsubsection{Highlighting some identifiers} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_identifier:n #1 - { \cs_if_exist_use:c { PitonIdentifier _ \l_@@_language_str _ #1 } { #1 } } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\keys_define:nn { PitonOptions } - { identifiers .code:n = \@@_set_identifiers:n { #1 } } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\keys_define:nn { Piton / identifiers } - { - names .clist_set:N = \l_@@_identifiers_names_tl , - style .tl_set:N = \l_@@_style_tl , - } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\cs_new_protected:Npn \@@_set_identifiers:n #1 - { - \clist_clear_new:N \l_@@_identifiers_names_tl - \tl_clear_new:N \l_@@_style_tl - \keys_set:nn { Piton / identifiers } { #1 } - \clist_map_inline:Nn \l_@@_identifiers_names_tl - { - \tl_set_eq:cN - { PitonIdentifier _ \l_@@_language_str _ ##1 } - \l_@@_style_tl - } - } -% \end{macrocode} -% -% -% \bigskip -% In particular, we have an hightlighting of the indentifiers which are the -% names of Python functions previously defined by the user. Indeed, when a -% Python function is defined, the style |Name.Function.Internal| is applied to -% that name. We define now that style (you define it directly and you short-cut -% the function |\SetPitonStyle|). -% \begin{macrocode} -\cs_new_protected:cpn { pitonStyle Name.Function.Internal } #1 - { -% \end{macrocode} -% First, the element is composed in the TeX flow with the style |Name.Function| -% which is provided to the final user. -% \begin{macrocode} - { \PitonStyle { Name.Function } { #1 } } -% \end{macrocode} -% Now, we specify that the name of the new Python function is a known identifier -% that will be formated with the Piton style |Name.UserFunction|. Of course, -% here the affectation is global because we have to exit many groups and even -% the environments |{Piton}|). -% \begin{macrocode} - \cs_gset_protected:cpn { PitonIdentifier _ \l_@@_language_str _ #1 } - { \PitonStyle{ Name.UserFunction } } -% \end{macrocode} -% Now, we put the name of that new user function in the dedicated sequence -% (specific of the current language). That sequence will be used only by -% |\PitonClearUserFunctions|. -% \begin{macrocode} - \seq_if_exist:cF { g_@@_functions _ \l_@@_language_str _ seq } - { \seq_new:c { g_@@_functions _ \l_@@_language_str _ seq } } - \seq_gput_right:cn { g_@@_functions _ \l_@@_language_str _ seq } { #1 } - } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\NewDocumentCommand \PitonClearUserFunctions { ! O { \l_@@_language_str } } - { - \seq_if_exist:cT { g_@@_functions _ #1 _ seq } - { - \seq_map_inline:cn { g_@@_functions _ #1 _ seq } - { \cs_undefine:c { PitonIdentifier _ #1 _ ##1} } - \seq_gclear:c { g_@@_functions _ #1 _ seq } - } - } -% \end{macrocode} -% -% \bigskip -% \subsubsection{Security} -% -% \begin{macrocode} -\AddToHook { env / piton / begin } - { \msg_fatal:nn { piton } { No~environment~piton } } - -\msg_new:nnn { piton } { No~environment~piton } - { - There~is~no~environment~piton!\\ - There~is~an~environment~{Piton}~and~a~command~ - \token_to_str:N \piton\ but~there~is~no~environment~ - {piton}.~This~error~is~fatal. - } -% \end{macrocode} -% -% \bigskip -% \subsubsection{The error messages of the package} -% -% \begin{macrocode} -\msg_new:nnnn { piton } { Unknown~key~for~PitonOptions } - { - Unknown~key. \\ - The~key~'\l_keys_key_str'~is~unknown~for~\token_to_str:N \PitonOptions.~ - It~will~be~ignored.\\ - For~a~list~of~the~available~keys,~type~H~. - } - { - The~available~keys~are~(in~alphabetic~order):~ - all-line-numbers,~ - auto-gobble,~ - background-color,~ - break-lines,~ - break-lines-in-piton,~ - break-lines-in-Piton,~ - continuation-symbol,~ - continuation-symbol-on-indentation,~ - end-of-broken-line,~ - env-gobble,~ - gobble,~ - identifiers,~ - indent-broken-lines,~ - language,~ - left-margin,~ - line-numbers,~ - prompt-background-color,~ - resume,~ - show-spaces,~ - show-spaces-in-strings,~ - slim,~ - splittable,~ - tabs-auto-gobble~ - and~tab-size. - } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\msg_new:nnn { piton } { label~with~lines~numbers } - { - You~can't~use~the~command~\token_to_str:N \label\ - because~the~key~'line-numbers'~(or~'all-line-numbers')~ - is~not~active.\\ - If~you~go~on,~that~command~will~ignored. - } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\msg_new:nnn { piton } { cr~not~allowed } - { - You~can't~put~any~carriage~return~in~the~argument~ - of~a~command~\c_backslash_str - \l_@@_beamer_command_str\ within~an~ - environment~of~'piton'.~You~should~consider~using~the~ - corresponding~environment.\\ - That~error~is~fatal. - } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\msg_new:nnn { piton } { overlay~without~beamer } - { - You~can't~use~an~argument~<...>~for~your~command~ - \token_to_str:N \PitonInputFile\ because~you~are~not~ - in~Beamer.\\ - If~you~go~on,~that~argument~will~be~ignored. - } -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -\msg_new:nnn { Piton } { Python~error } - { A~Python~error~has~been~detected. } -% \end{macrocode} -% -% \bigskip -% \subsection{The Lua part of the implementation} -% -% \bigskip -% \begin{macrocode} -\ExplSyntaxOff -\RequirePackage{luacode} -% \end{macrocode} -% -% -% \bigskip -% The Lua code will be loaded via a |{luacode*}| environment. The environment -% is by itself a Lua block and the local declarations will be local to that -% block. All the global functions (used by the L3 parts of the implementation) -% will be put in a Lua table |piton|. -% -% \medskip -% \begin{macrocode} -\begin{luacode*} -piton = piton or { } -% \end{macrocode} -% -% \begin{macrocode} -if piton.comment_latex == nil then piton.comment_latex = ">" end -piton.comment_latex = "#" .. piton.comment_latex -% \end{macrocode} -% -% -% \bigskip -% The following functions are an easy way to safely insert braces (|{| and |}|) -% in the TeX flow. -% \begin{macrocode} -function piton.open_brace () - tex.sprint("{") -end -function piton.close_brace () - tex.sprint("}") -end -% \end{macrocode} -% -% \bigskip -% \subsubsection{Special functions dealing with LPEG} -% -% \medskip -% We will use the Lua library \pkg{lpeg} which is built in LuaTeX. That's why we -% define first aliases for several functions of that library. -% \begin{macrocode} -local P, S, V, C, Ct, Cc = lpeg.P, lpeg.S, lpeg.V, lpeg.C, lpeg.Ct, lpeg.Cc -local Cf, Cs , Cg , Cmt , Cb = lpeg.Cf, lpeg.Cs, lpeg.Cg , lpeg.Cmt , lpeg.Cb -local R = lpeg.R -% \end{macrocode} -% -% -% -% \bigskip -% The function |Q| takes in as argument a pattern and returns a \textsc{lpeg} -% \emph{which does a capture} of the pattern. That capture will be sent to LaTeX -% with the catcode ``other'' for all the characters: it's suitable for elements -% of the Python listings that \pkg{piton} will typeset verbatim (thanks to the -% catcode ``other''). -% \begin{macrocode} -local function Q(pattern) - return Ct ( Cc ( luatexbase.catcodetables.CatcodeTableOther ) * C ( pattern ) ) -end -% \end{macrocode} -% -% -% \bigskip -% The function |L| takes in as argument a pattern and returns a \textsc{lpeg} -% \emph{which does a capture} of the pattern. That capture will be sent to LaTeX -% with standard LaTeX catcodes for all the characters: the elements captured -% will be formatted as normal LaTeX codes. It's suitable for the ``LaTeX -% comments'' in the environments |{Piton}| and the elements beetween -% ``|escape-inside|''. That function won't be much used. -% \begin{macrocode} -local function L(pattern) - return Ct ( C ( pattern ) ) -end -% \end{macrocode} -% -% \bigskip -% The function |Lc| (the c is for \emph{constant}) takes in as argument a string -% and returns a \textsc{lpeg} \emph{with does a constant capture} which returns -% that string. The elements captured will be formatted as L3 code. It will be -% used to send to LaTeX all the formatting LaTeX instructions we have to insert -% in order to do the syntactic highlighting (that's the main job of -% \pkg{piton}). That function will be widely used. -% \begin{macrocode} -local function Lc(string) - return Cc ( { luatexbase.catcodetables.expl , string } ) -end -% \end{macrocode} -% -% \bigskip -% The function |K| creates a \textsc{lpeg} which will return as capture the -% whole LaTeX code corresponding to a Python chunk (that is to say with the -% LaTeX formatting instructions corresponding to the syntactic nature of that -% Python chunk). The first argument is a Lua string corresponding to the name of -% a \pkg{piton} style and the second element is a pattern (that is to say a -% \textsc{lpeg} without capture) -% \begin{macrocode} -local function K(style, pattern) - return - Lc ( "{\\PitonStyle{" .. style .. "}{" ) - * Q ( pattern ) - * Lc ( "}}" ) -end -% \end{macrocode} -% The formatting commands in a given \pkg{piton} style (eg. the style |Keyword|) -% may be semi-global declarations (such as |\bfseries| or |\slshape|) or LaTeX -% macros with an argument (such as |\fbox| or |\colorbox{yellow}|). In order to -% deal with both syntaxes, we have used two pairs of braces: -% |{\PitonStyle{Keyword}{|\texttt{\slshape text to format}|}}|. -% -% -% \bigskip -% \begin{macrocode} -local function WithStyle(style,pattern) - return - Ct ( Cc "Open" * Cc ( "{\\PitonStyle{" .. style .. "}{" ) * Cc "}}" ) - * pattern - * Ct ( Cc "Close" ) -end -% \end{macrocode} -% -% \bigskip -% The following \textsc{lpeg} catches the Python chunks which are in LaTeX -% escapes (and that chunks will be considered as normal LaTeX constructions). We -% recall that |piton.begin_espace| and |piton_end_escape| are Lua strings -% corresponding to the key |escape-inside|\footnote{The \pkg{piton} key -% |escape-inside| is available at load-time only.}. Since the elements that will -% be catched must be sent to LaTeX with standard LaTeX catcodes, we put the -% capture (done by the function |C|) in a table (by using |Ct|, which is an -% alias for |lpeg.Ct|) without number of catcode table at the first component of -% the table. -% \begin{macrocode} -local Escape = - P(piton_begin_escape) - * L ( ( 1 - P(piton_end_escape) ) ^ 1 ) - * P(piton_end_escape) -% \end{macrocode} -% -% \vspace{1cm} -% The following line is mandatory. -% \begin{macrocode} -lpeg.locale(lpeg) -% \end{macrocode} -% -% \bigskip -% \paragraph{The basic syntactic LPEG} -% -% \begin{macrocode} -local alpha, digit = lpeg.alpha, lpeg.digit -local space = P " " -% \end{macrocode} -% -% Remember that, for \textsc{lpeg}, the Unicode characters such as |à|, |â|, -% |ç|, etc. are in fact strings of length 2 (2 bytes) because \pkg{lpeg} is not -% Unicode-aware. -% \begin{macrocode} -local letter = alpha + P "_" - + P "â" + P "à" + P "ç" + P "é" + P "è" + P "ê" + P "ë" + P "ï" + P "î" - + P "ô" + P "û" + P "ü" + P "Â" + P "À" + P "Ç" + P "É" + P "È" + P "Ê" - + P "Ë" + P "Ã" + P "ÃŽ" + P "Ô" + P "Û" + P "Ãœ" - -local alphanum = letter + digit -% \end{macrocode} -% -% \bigskip -% The following \textsc{lpeg} |identifier| is a mere pattern (that is to say -% more or less a regular expression) which matches the Python identifiers (hence -% the name). -% \begin{macrocode} -local identifier = letter * alphanum ^ 0 -% \end{macrocode} -% -% \medskip -% On the other hand, the \textsc{lpeg} |Identifier| (with a capital) also returns -% a \emph{capture}. -% \begin{macrocode} -local Identifier = K ( 'Identifier' , identifier) -% \end{macrocode} -% -% \bigskip -% By convention, we will use names with an initial capital for \textsc{lpeg} -% which return captures. -% -% -% \bigskip -% Here is the first use of our function~|K|. That function will be used to -% construct \textsc{lpeg} which capture Python chunks for which we have a -% dedicated \pkg{piton} style. For example, for the numbers, \pkg{piton} -% provides a style which is called |Number|. The name of the style is provided -% as a Lua string in the second argument of the function~|K|. By convention, we -% use single quotes for delimiting the Lua strings which are names of -% \pkg{piton} styles (but this is only a convention). -% \begin{macrocode} -local Number = - K ( 'Number' , - ( digit^1 * P "." * digit^0 + digit^0 * P "." * digit^1 + digit^1 ) - * ( S "eE" * S "+-" ^ -1 * digit^1 ) ^ -1 - + digit^1 - ) -% \end{macrocode} -% -% \bigskip -% We recall that |piton.begin_espace| and |piton_end_escape| are Lua strings -% corresponding to the key |escape-inside|\footnote{The \pkg{piton} key -% |escape-inside| is available at load-time only.}. Of course, if the final user -% has not used the key |escape-inside|, these strings are empty. -% \begin{macrocode} -local Word -if piton_begin_escape ~= '' -then Word = Q ( ( ( 1 - space - P(piton_begin_escape) - P(piton_end_escape) ) - - S "'\"\r[()]" - digit ) ^ 1 ) -else Word = Q ( ( ( 1 - space ) - S "'\"\r[()]" - digit ) ^ 1 ) -end -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -local Space = ( Q " " ) ^ 1 - -local SkipSpace = ( Q " " ) ^ 0 - -local Punct = Q ( S ".,:;!" ) - -local Tab = P "\t" * Lc ( '\\l_@@_tab_tl' ) -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -local SpaceIndentation = Lc ( '\\@@_an_indentation_space:' ) * ( Q " " ) -% \end{macrocode} -% -% -% \bigskip -% \begin{macrocode} -local Delim = Q ( S "[()]" ) -% \end{macrocode} -% -% \bigskip -% The following \textsc{lpeg} catches a space (U+0020) and replace it by -% |\l_@@_space_tl|. It will be used in the strings. Usually, -% |\l_@@_space_tl| will contain a space and therefore there won't be difference. -% However, when the key |show-spaces-in-strings| is in force, |\\l_@@_space_tl| will -% contain ⣠(U+2423) in order to visualize the spaces. -% \begin{macrocode} -local VisualSpace = space * Lc "\\l_@@_space_tl" -% \end{macrocode} -% -% -% \bigskip -% \subsubsection{The LPEG python} -% -% \bigskip -% Some strings of length 2 are explicit because we want the corresponding -% ligatures available in some fonts such as \emph{Fira Code} to be active. -% \begin{macrocode} -local Operator = - K ( 'Operator' , - P "!=" + P "<>" + P "==" + P "<<" + P ">>" + P "<=" + P ">=" + P ":=" - + P "//" + P "**" + S "-~+/*%=<>&.@|" - ) - -local OperatorWord = - K ( 'Operator.Word' ,P "in" + P "is" + P "and" + P "or" + P "not" ) - -local Keyword = - K ( 'Keyword' , - P "as" + P "assert" + P "break" + P "case" + P "class" + P "continue" - + P "def" + P "del" + P "elif" + P "else" + P "except" + P "exec" - + P "finally" + P "for" + P "from" + P "global" + P "if" + P "import" - + P "lambda" + P "non local" + P "pass" + P "return" + P "try" - + P "while" + P "with" + P "yield" + P "yield from" ) - + K ( 'Keyword.Constant' ,P "True" + P "False" + P "None" ) - -local Builtin = - K ( 'Name.Builtin' , - P "__import__" + P "abs" + P "all" + P "any" + P "bin" + P "bool" - + P "bytearray" + P "bytes" + P "chr" + P "classmethod" + P "compile" - + P "complex" + P "delattr" + P "dict" + P "dir" + P "divmod" - + P "enumerate" + P "eval" + P "filter" + P "float" + P "format" - + P "frozenset" + P "getattr" + P "globals" + P "hasattr" + P "hash" - + P "hex" + P "id" + P "input" + P "int" + P "isinstance" + P "issubclass" - + P "iter" + P "len" + P "list" + P "locals" + P "map" + P "max" - + P "memoryview" + P "min" + P "next" + P "object" + P "oct" + P "open" - + P "ord" + P "pow" + P "print" + P "property" + P "range" + P "repr" - + P "reversed" + P "round" + P "set" + P "setattr" + P "slice" + P "sorted" - + P "staticmethod" + P "str" + P "sum" + P "super" + P "tuple" + P "type" - + P "vars" + P "zip" ) - - -local Exception = - K ( 'Exception' , - P "ArithmeticError" + P "AssertionError" + P "AttributeError" - + P "BaseException" + P "BufferError" + P "BytesWarning" + P "DeprecationWarning" - + P "EOFError" + P "EnvironmentError" + P "Exception" + P "FloatingPointError" - + P "FutureWarning" + P "GeneratorExit" + P "IOError" + P "ImportError" - + P "ImportWarning" + P "IndentationError" + P "IndexError" + P "KeyError" - + P "KeyboardInterrupt" + P "LookupError" + P "MemoryError" + P "NameError" - + P "NotImplementedError" + P "OSError" + P "OverflowError" - + P "PendingDeprecationWarning" + P "ReferenceError" + P "ResourceWarning" - + P "RuntimeError" + P "RuntimeWarning" + P "StopIteration" - + P "SyntaxError" + P "SyntaxWarning" + P "SystemError" + P "SystemExit" - + P "TabError" + P "TypeError" + P "UnboundLocalError" + P "UnicodeDecodeError" - + P "UnicodeEncodeError" + P "UnicodeError" + P "UnicodeTranslateError" - + P "UnicodeWarning" + P "UserWarning" + P "ValueError" + P "VMSError" - + P "Warning" + P "WindowsError" + P "ZeroDivisionError" - + P "BlockingIOError" + P "ChildProcessError" + P "ConnectionError" - + P "BrokenPipeError" + P "ConnectionAbortedError" + P "ConnectionRefusedError" - + P "ConnectionResetError" + P "FileExistsError" + P "FileNotFoundError" - + P "InterruptedError" + P "IsADirectoryError" + P "NotADirectoryError" - + P "PermissionError" + P "ProcessLookupError" + P "TimeoutError" - + P "StopAsyncIteration" + P "ModuleNotFoundError" + P "RecursionError" ) - - -local RaiseException = K ( 'Keyword' , P "raise" ) * SkipSpace * Exception * Q ( P "(" ) - -% \end{macrocode} -% -% \bigskip -% In Python, a ``decorator'' is a statement whose begins by |@| which patches -% the function defined in the following statement. -% \begin{macrocode} -local Decorator = K ( 'Name.Decorator' , P "@" * letter^1 ) -% \end{macrocode} -% -% \bigskip -% The following \textsc{lpeg} |DefClass| will be used to detect the definition of a -% new class (the name of that new class will be formatted with the \pkg{piton} -% style |Name.Class|). -% -% \smallskip -% Example:\enskip \piton{class myclass:} -% \begin{macrocode} -local DefClass = - K ( 'Keyword' , P "class" ) * Space * K ( 'Name.Class' , identifier ) -% \end{macrocode} -% -% If the word |class| is not followed by a identifier, it will be catched as -% keyword by the \textsc{lpeg} |Keyword| (useful if we want to type a -% list of keywords). -% -% -% \bigskip -% The following \textsc{lpeg} |ImportAs| is used for the lines beginning by |import|. -% % We have to detect the potential keyword |as| because both the name of the -% module and its alias must be formatted with the \pkg{piton} style |Name.Namespace|. -% -% \smallskip -% Example:\enskip \piton{import numpy as np} -% -% \smallskip -% Moreover, after the keyword |import|, it's possible to have a comma-separated -% list of modules (if the keyword |as| is not used). -% -% \smallskip -% Example:\enskip \piton{import math, numpy} -% \begin{macrocode} -local ImportAs = - K ( 'Keyword' , P "import" ) - * Space - * K ( 'Name.Namespace' , - identifier * ( P "." * identifier ) ^ 0 ) - * ( - ( Space * K ( 'Keyword' , P "as" ) * Space - * K ( 'Name.Namespace' , identifier ) ) - + - ( SkipSpace * Q ( P "," ) * SkipSpace - * K ( 'Name.Namespace' , identifier ) ) ^ 0 - ) -% \end{macrocode} -% Be careful: there is no commutativity of |+| in the previous expression. -% -% \bigskip -% The \textsc{lpeg} |FromImport| is used for the lines beginning by |from|. We -% need a special treatment because the identifier following the keyword |from| -% must be formatted with the \pkg{piton} style |Name.Namespace| and the -% following keyword |import| must be formatted with the \pkg{piton} style -% |Keyword| and must \emph{not} be catched by the \textsc{lpeg} |ImportAs|. -% -% \smallskip -% Example:\enskip \piton{from math import pi} -% -% \smallskip -% \begin{macrocode} -local FromImport = - K ( 'Keyword' , P "from" ) - * Space * K ( 'Name.Namespace' , identifier ) - * Space * K ( 'Keyword' , P "import" ) -% \end{macrocode} -% -% \bigskip -% \paragraph{The strings of Python} -% -% For the strings in Python, there are four categories of delimiters (without -% counting the prefixes for f-strings and raw strings). We will use, in the -% names of our \textsc{lpeg}, prefixes to distinguish the \textsc{lpeg} dealing -% with that categories of strings, as presented in the following tabular. -% \begin{center} -% \begin{tabular}{ccc} -% \toprule -% & |Single| & |Double| \\ -% \midrule -% |Short| & |'text'| & |"text"| \\ -% |Long| & |'''test'''| & |"""text"""| \\ -% \bottomrule -% \end{tabular} -% \end{center} -% -% -% \bigskip -% We have also to deal with the interpolations in the f-strings. Here -% is an example of a f-string with an interpolation and a format -% instruction\footnote{There is no special \pkg{piton} style for the formatting -% instruction (after the colon): the style which will be applied will be the -% style of the encompassing string, that is to say |String.Short| or -% |String.Long|.} in that interpolation: -% -% \piton{f'Total price: {total+1:.2f} €'} -% -% -% \bigskip -% The interpolations beginning by |%| (even though there is more modern -% technics now in Python). -% \begin{macrocode} -local PercentInterpol = - K ( 'String.Interpol' , - P "%" - * ( P "(" * alphanum ^ 1 * P ")" ) ^ -1 - * ( S "-#0 +" ) ^ 0 - * ( digit ^ 1 + P "*" ) ^ -1 - * ( P "." * ( digit ^ 1 + P "*" ) ) ^ -1 - * ( S "HlL" ) ^ -1 - * S "sdfFeExXorgiGauc%" - ) -% \end{macrocode} -% -% \bigskip -% We can now define the \textsc{lpeg} for the four kinds of strings. It's not -% possible to use our function~|K| because of the interpolations which must be -% formatted with another \pkg{piton} style that the rest of the -% string.\footnote{The interpolations are formatted with the \pkg{piton} style -% |Interpol.Inside|. The initial value of that style is \texttt{\textbackslash -% @@\_piton:n} wich means that the interpolations are parsed once again by \pkg{piton}.} -% \begin{macrocode} -local SingleShortString = - WithStyle ( 'String.Short' , -% \end{macrocode} -% First, we deal with the f-strings of Python, which are prefixed by |f| or |F|. -% \begin{macrocode} - Q ( P "f'" + P "F'" ) - * ( - K ( 'String.Interpol' , P "{" ) - * K ( 'Interpol.Inside' , ( 1 - S "}':" ) ^ 0 ) - * Q ( P ":" * (1 - S "}:'") ^ 0 ) ^ -1 - * K ( 'String.Interpol' , P "}" ) - + - VisualSpace - + - Q ( ( P "\\'" + P "{{" + P "}}" + 1 - S " {}'" ) ^ 1 ) - ) ^ 0 - * Q ( P "'" ) - + -% \end{macrocode} -% Now, we deal with the standard strings of Python, but also the ``raw strings''. -% \begin{macrocode} - Q ( P "'" + P "r'" + P "R'" ) - * ( Q ( ( P "\\'" + 1 - S " '\r%" ) ^ 1 ) - + VisualSpace - + PercentInterpol - + Q ( P "%" ) - ) ^ 0 - * Q ( P "'" ) ) - - -local DoubleShortString = - WithStyle ( 'String.Short' , - Q ( P "f\"" + P "F\"" ) - * ( - K ( 'String.Interpol' , P "{" ) - * Q ( ( 1 - S "}\":" ) ^ 0 , 'Interpol.Inside' ) - * ( K ( 'String.Interpol' , P ":" ) * Q ( (1 - S "}:\"") ^ 0 ) ) ^ -1 - * K ( 'String.Interpol' , P "}" ) - + - VisualSpace - + - Q ( ( P "\\\"" + P "{{" + P "}}" + 1 - S " {}\"" ) ^ 1 ) - ) ^ 0 - * Q ( P "\"" ) - + - Q ( P "\"" + P "r\"" + P "R\"" ) - * ( Q ( ( P "\\\"" + 1 - S " \"\r%" ) ^ 1 ) - + VisualSpace - + PercentInterpol - + Q ( P "%" ) - ) ^ 0 - * Q ( P "\"" ) ) - -local ShortString = SingleShortString + DoubleShortString -% \end{macrocode} -% -% \bigskip -% \paragraph{Beamer} -% -% The following \textsc{lpeg} |BalancedBraces| will be used for the (mandatory) -% argument of the commands |\only| and \emph{al.} of Beamer. It's necessary to -% use a \emph{grammar} because that pattern mainly checks the correct nesting of -% the delimiters (and it's known in the theory of formal languages that this -% can't be done with regular expressions \emph{stricto sensu} only). -% \begin{macrocode} -local BalancedBraces = - P { "E" , - E = - ( - P "{" * V "E" * P "}" - + - ShortString - + - ( 1 - S "{}" ) - ) ^ 0 - } -% \end{macrocode} -% -% -% \bigskip -% If Beamer is used (or if the key |beamer| is used at load-time), the following -% LPEG will be redefined. -% \begin{macrocode} -local Beamer = P ( false ) -local BeamerBeginEnvironments = P ( true ) -local BeamerEndEnvironments = P ( true ) -local BeamerNamesEnvironments = - P "uncoverenv" + P "onlyenv" + P "visibleenv" + P "invisibleenv" - + P "alertenv" + P "actionenv" - -% \end{macrocode} -% -% \begin{macrocode} -UserCommands = - Ct ( Cc "Open" * C ( "\\emph{" ) * Cc "}" ) - * ( C ( BalancedBraces ) / (function (s) return MainLoopPython:match(s) end ) ) - * P "}" * Ct ( Cc "Close" ) -% \end{macrocode} -% -% \begin{macrocode} -function OneBeamerEnvironment(name) - return - Ct ( Cc "Open" - * C ( - P ( "\\begin{" .. name .. "}" ) - * ( P "<" * (1 - P ">") ^ 0 * P ">" ) ^ -1 - ) - * Cc ( "\\end{" .. name .. "}" ) - ) - * ( - C ( ( 1 - P ( "\\end{" .. name .. "}" ) ) ^ 0 ) - / (function (s) return MainLoopPython:match(s) end ) - ) - * P ( "\\end{" .. name .. "}" ) * Ct ( Cc "Close" ) -end -% \end{macrocode} -% -% -% \bigskip -% \begin{macrocode} -if piton_beamer -then - Beamer = - L ( P "\\pause" * ( P "[" * (1 - P "]") ^ 0 * P "]" ) ^ -1 ) - + - Ct ( Cc "Open" - * C ( - ( - P "\\uncover" + P "\\only" + P "\\alert" + P "\\visible" - + P "\\invisible" + P "\\action" - ) - * ( P "<" * (1 - P ">") ^ 0 * P ">" ) ^ -1 - * P "{" - ) - * Cc "}" - ) - * ( C ( BalancedBraces ) / (function (s) return MainLoopPython:match(s) end ) ) - * P "}" * Ct ( Cc "Close" ) - + - OneBeamerEnvironment "uncoverenv" - + OneBeamerEnvironment "onlyenv" - + OneBeamerEnvironment "visibleenv" - + OneBeamerEnvironment "invisibleenv" - + OneBeamerEnvironment "alertenv" - + OneBeamerEnvironment "actionenv" - + - L ( -% \end{macrocode} -% For |\\alt|, the specification of the overlays (between angular brackets) is mandatory. -% \begin{macrocode} - ( P "\\alt" ) - * P "<" * (1 - P ">") ^ 0 * P ">" - * P "{" - ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}{" ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}" ) - + - L ( -% \end{macrocode} -% For |\\alt|, the specification of the overlays (between angular brackets) is mandatory. -% \begin{macrocode} - ( P "\\temporal" ) - * P "<" * (1 - P ">") ^ 0 * P ">" - * P "{" - ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}{" ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}{" ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}" ) -% \end{macrocode} -% Now for the environemnts. -% \begin{macrocode} - BeamerBeginEnvironments = - ( space ^ 0 * - L - ( - P "\\begin{" * BeamerNamesEnvironments * "}" - * ( P "<" * ( 1 - P ">") ^ 0 * P ">" ) ^ -1 - ) - * P "\r" - ) ^ 0 - BeamerEndEnvironments = - ( space ^ 0 * - L ( P "\\end{" * BeamerNamesEnvironments * P "}" ) - * P "\r" - ) ^ 0 -end -% \end{macrocode} -% -% \bigskip -% \paragraph{EOL} -% -% \bigskip -% The following LPEG will detect the Python prompts when the user is typesetting -% an interactive session of Python (directly or through |{pyconsole}| of -% \pkg{pyluatex}). We have to detect that prompt twice. The first detection -% (called \emph{hasty detection}) will be before the |\@@_begin_line:| because -% you want to trigger a special background color for that row (and, after the -% |\@@_begin_line:|, it's too late to change de background). -% \begin{macrocode} -local PromptHastyDetection = ( # ( P ">>>" + P "..." ) * Lc ( '\\@@_prompt:' ) ) ^ -1 -% \end{macrocode} -% We remind that the marker |#| of \textsc{lpeg} specifies that the pattern will be -% detected but won't consume any character. -% -% \medskip -% With the following \textsc{lpeg}, a style will actually be applied to the -% prompt (for instance, it's possible to decide to discard these prompts). -% \begin{macrocode} -local Prompt = K ( 'Prompt' , ( ( P ">>>" + P "..." ) * P " " ^ -1 ) ^ -1 ) -% \end{macrocode} -% -% -% -% \bigskip -% The following \textsc{lpeg} |EOL| is for the end of lines. -% \begin{macrocode} -local EOL = - P "\r" - * - ( - ( space^0 * -1 ) - + -% \end{macrocode} -% We recall that each line in the Python code we have to parse will be sent -% back to LaTeX between a pair |\@@_begin_line:| -- -% |\@@_end_line:|\footnote{Remember that the \texttt{\textbackslash -% @@\_end\_line:} must be explicit because it will be used as marker in order to -% delimit the argument of the command \texttt{\textbackslash @@\_begin\_line:}}. -% \begin{macrocode} - Ct ( - Cc "EOL" - * - Ct ( - Lc "\\@@_end_line:" - * BeamerEndEnvironments - * BeamerBeginEnvironments - * PromptHastyDetection - * Lc "\\@@_newline: \\@@_begin_line:" - * Prompt - ) - ) - ) - * - SpaceIndentation ^ 0 -% \end{macrocode} -% -% -% \bigskip -% \paragraph{The long strings} -% -% -% \begin{macrocode} -local SingleLongString = - WithStyle ( 'String.Long' , - ( Q ( S "fF" * P "'''" ) - * ( - K ( 'String.Interpol' , P "{" ) - * K ( 'Interpol.Inside' , ( 1 - S "}:\r" - P "'''" ) ^ 0 ) - * Q ( P ":" * (1 - S "}:\r" - P "'''" ) ^ 0 ) ^ -1 - * K ( 'String.Interpol' , P "}" ) - + - Q ( ( 1 - P "'''" - S "{}'\r" ) ^ 1 ) - + - EOL - ) ^ 0 - + - Q ( ( S "rR" ) ^ -1 * P "'''" ) - * ( - Q ( ( 1 - P "'''" - S "\r%" ) ^ 1 ) - + - PercentInterpol - + - P "%" - + - EOL - ) ^ 0 - ) - * Q ( P "'''" ) ) - - -local DoubleLongString = - WithStyle ( 'String.Long' , - ( - Q ( S "fF" * P "\"\"\"" ) - * ( - K ( 'String.Interpol', P "{" ) - * K ( 'Interpol.Inside' , ( 1 - S "}:\r" - P "\"\"\"" ) ^ 0 ) - * Q ( P ":" * (1 - S "}:\r" - P "\"\"\"" ) ^ 0 ) ^ -1 - * K ( 'String.Interpol' , P "}" ) - + - Q ( ( 1 - P "\"\"\"" - S "{}\"\r" ) ^ 1 ) - + - EOL - ) ^ 0 - + - Q ( ( S "rR" ) ^ -1 * P "\"\"\"" ) - * ( - Q ( ( 1 - P "\"\"\"" - S "%\r" ) ^ 1 ) - + - PercentInterpol - + - P "%" - + - EOL - ) ^ 0 - ) - * Q ( P "\"\"\"" ) - ) -% \end{macrocode} -% -% \begin{macrocode} -local LongString = SingleLongString + DoubleLongString -% \end{macrocode} -% -% \bigskip -% We have a \textsc{lpeg} for the Python docstrings. That \textsc{lpeg} will -% be used in the \textsc{lpeg} |DefFunction| which deals with the whole preamble -% of a function definition (which begins with |def|). -% \begin{macrocode} -local StringDoc = - K ( 'String.Doc' , P "\"\"\"" ) - * ( K ( 'String.Doc' , (1 - P "\"\"\"" - P "\r" ) ^ 0 ) * EOL - * Tab ^ 0 - ) ^ 0 - * K ( 'String.Doc' , ( 1 - P "\"\"\"" - P "\r" ) ^ 0 * P "\"\"\"" ) -% \end{macrocode} -% -% \bigskip -% \paragraph{The comments in the Python listings} -% -% We define different \textsc{lpeg} dealing with comments in the Python -% listings. -% \begin{macrocode} -local CommentMath = - P "$" * K ( 'Comment.Math' , ( 1 - S "$\r" ) ^ 1 ) * P "$" - -local Comment = - WithStyle ( 'Comment' , - Q ( P "#" ) - * ( CommentMath + Q ( ( 1 - S "$\r" ) ^ 1 ) ) ^ 0 ) - * ( EOL + -1 ) -% \end{macrocode} -% -% -% -% \bigskip -% The following \textsc{lpeg} |CommentLaTeX| is for what is called in that -% document the ``LaTeX comments''. Since the elements that will be catched must -% be sent to LaTeX with standard LaTeX catcodes, we put the capture (done by -% the function~|C|) in a table (by using~|Ct|, which is an alias for |lpeg.Ct|). -% \begin{macrocode} -local CommentLaTeX = - P(piton.comment_latex) - * Lc "{\\PitonStyle{Comment.LaTeX}{\\ignorespaces" - * L ( ( 1 - P "\r" ) ^ 0 ) - * Lc "}}" - * ( EOL + -1 ) -- you could put EOL instead of EOL -% \end{macrocode} -% -% \bigskip -% \paragraph{DefFunction} -% -% The following \textsc{lpeg} |Expression| will be used for the parameters in -% the \emph{argspec} of a Python function. It's necessary to use a \emph{grammar} -% because that pattern mainly checks the correct nesting of the delimiters -% (and it's known in the theory of formal languages that this can't be done with -% regular expressions \emph{stricto sensu} only). -% \begin{macrocode} -local Expression = - P { "E" , - E = ( 1 - S "{}()[]\r," ) ^ 0 - * ( - ( P "{" * V "F" * P "}" - + P "(" * V "F" * P ")" - + P "[" * V "F" * P "]" ) * ( 1 - S "{}()[]\r," ) ^ 0 - ) ^ 0 , - F = ( 1 - S "{}()[]\r\"'" ) ^ 0 - * ( ( - P "'" * (P "\\'" + 1 - S"'\r" )^0 * P "'" - + P "\"" * (P "\\\"" + 1 - S"\"\r" )^0 * P "\"" - + P "{" * V "F" * P "}" - + P "(" * V "F" * P ")" - + P "[" * V "F" * P "]" - ) * ( 1 - S "{}()[]\r\"'" ) ^ 0 ) ^ 0 , - } -% \end{macrocode} -% -% \bigskip -% We will now define a \textsc{lpeg} |Params| that will catch the list of -% parameters (that is to say the \emph{argspec}) in the definition of a Python -% function. For example, in the line of code -% \begin{center} -% \piton{def MyFunction(a,b,x=10,n:int): return n} -% \end{center} -% the \textsc{lpeg} |Params| will be used to catch the chunk\enskip |a,b,x=10,n:int|. -% -% Or course, a |Params| is simply a comma-separated list of |Param|, and that's -% why we define first the \textsc{lpeg} |Param|. -% -% \medskip -% \begin{macrocode} -local Param = - SkipSpace * Identifier * SkipSpace - * ( - K ( 'InitialValues' , P "=" * Expression ) - + Q ( P ":" ) * SkipSpace * K ( 'Name.Type' , letter^1 ) - ) ^ -1 -% \end{macrocode} -% -% \medskip -% \begin{macrocode} -local Params = ( Param * ( Q "," * Param ) ^ 0 ) ^ -1 -% \end{macrocode} -% -% \bigskip -% The following \textsc{lpeg} |DefFunction| catches a keyword |def| and the -% following name of function \emph{but also everything else until a potential -% docstring}. That's why this definition of \textsc{lpeg} must occur (in the file -% |piton.sty|) after the definition of several other \textsc{lpeg} such as -% |Comment|, |CommentLaTeX|, |Params|, |StringDoc|... -% \begin{macrocode} -local DefFunction = - K ( 'Keyword' , P "def" ) - * Space - * K ( 'Name.Function.Internal' , identifier ) - * SkipSpace - * Q ( P "(" ) * Params * Q ( P ")" ) - * SkipSpace - * ( Q ( P "->" ) * SkipSpace * K ( 'Name.Type' , identifier ) ) ^ -1 -% \end{macrocode} -% Here, we need a \pkg{piton} style |ParseAgain| which will be linked to -% |\@@_piton:n| (that means that the capture will be parsed once again by -% \pkg{piton}). We could avoid that kind of trick by using a non-terminal of a -% grammar but we have probably here a better legibility. -% \begin{macrocode} - * K ( 'ParseAgain' , ( 1 - S ":\r" )^0 ) - * Q ( P ":" ) - * ( SkipSpace - * ( EOL + CommentLaTeX + Comment ) -- in all cases, that contains an EOL - * Tab ^ 0 - * SkipSpace - * StringDoc ^ 0 -- there may be additionnal docstrings - ) ^ -1 -% \end{macrocode} -% Remark that, in the previous code, |CommentLaTeX| \emph{must} appear -% before |Comment|: there is no commutativity of the addition for the -% \emph{parsing expression grammars} (\textsc{peg}). -% -% \smallskip -% If the word |def| is not followed by an identifier and parenthesis, it will be -% catched as keyword by the \textsc{lpeg} |Keyword| (useful if, for example, the -% final user wants to speak of the keyword \piton{def}). -% -% \bigskip -% \paragraph{The dictionaries of Python} -% -% We have \textsc{lpeg} dealing with dictionaries of Python because, in -% typesettings of explicit Python dictionaries, one may prefer to have all the -% values formatted in black (in order to see more clearly the keys which are -% usually Python strings). That's why we have a \pkg{piton} style |Dict.Value|. -% -% The initial value of that \pkg{piton} style is |\@@_piton:n|, which means that -% the value of the entry of the dictionary is parsed once again by \pkg{piton} -% (and nothing special is done for the dictionary). In the following example, we -% have set the \pkg{piton} style |Dict.Value| to |\color{black}|: -% -% \medskip -% \begingroup -% \SetPitonStyle{Dict.Value = \color{black}} -% \piton{mydict = { 'name' : 'Paul', 'sex' : 'male', 'age' : 31 } } -% \endgroup -% -% \medskip -% At this time, this mechanism works only for explicit dictionaries on a single line! -% -% \begin{macrocode} -local ItemDict = - ShortString * SkipSpace * Q ( P ":" ) * K ( 'Dict.Value' , Expression ) - -local ItemOfSet = SkipSpace * ( ItemDict + ShortString ) * SkipSpace - -local Set = - Q ( P "{" ) - * ItemOfSet * ( Q ( P "," ) * ItemOfSet ) ^ 0 - * Q ( P "}" ) -% \end{macrocode} -% -% \paragraph{Miscellaneous} -% -% \begin{macrocode} -local ExceptionInConsole = Exception * Q ( ( 1 - P "\r" ) ^ 0 ) * EOL -% \end{macrocode} -% -% -% \bigskip -% \paragraph{The main LPEG} -% -% First, the main loop : -% \begin{macrocode} -MainLoopPython = - ( ( space^1 * -1 ) - + EOL - + Space - + Tab - + Escape - + CommentLaTeX - + Beamer - + UserCommands - + LongString - + Comment - + ExceptionInConsole - + Set - + Delim -% \end{macrocode} -% |Operator| must be before |Punct|. -% \begin{macrocode} - + Operator - + ShortString - + Punct - + FromImport - + RaiseException - + DefFunction - + DefClass - + Keyword * ( Space + Punct + Delim + EOL+ -1 ) - + Decorator - + OperatorWord * ( Space + Punct + Delim + EOL+ -1 ) - + Builtin * ( Space + Punct + Delim + EOL+ -1 ) - + Identifier - + Number - + Word - ) ^ 0 -% \end{macrocode} -% -% \bigskip -% We recall that each line in the Python code to parse will be sent back to -% LaTeX between a pair |\@@_begin_line:| -- |\@@_end_line:|\footnote{Remember -% that the \texttt{\textbackslash @@\_end\_line:} must be explicit because it -% will be used as marker in order to delimit the argument of the command -% \texttt{\textbackslash @@\_begin\_line:}}. -% \begin{macrocode} -local python = P ( true ) - -python = - Ct ( - ( ( space - P "\r" ) ^0 * P "\r" ) ^ -1 - * BeamerBeginEnvironments - * PromptHastyDetection - * Lc '\\@@_begin_line:' - * Prompt - * SpaceIndentation ^ 0 - * MainLoopPython - * -1 - * Lc '\\@@_end_line:' - ) -% \end{macrocode} -% -% \begin{macrocode} -local languages = { } -languages['python'] = python -% \end{macrocode} -% -% % \bigskip -% \subsubsection{The LPEG ocaml} -% -% \begin{macrocode} -local Delim = Q ( P "[|" + P "|]" + S "[()]" ) -% \end{macrocode} -% -% \begin{macrocode} -local Punct = Q ( S ",:;!" ) -% \end{macrocode} -% -% \begin{macrocode} -local identifier = - ( R "az" + R "AZ" + P "_") * ( R "az" + R "AZ" + S "_'" + digit ) ^ 0 - -local Identifier = K ( 'Identifier' , identifier ) - -local Operator = - K ( 'Operator' , - P "!=" + P "<>" + P "==" + P "<<" + P ">>" + P "<=" + P ">=" + P ":=" - + P "||" + P "&&" + P "//" + P "**" + P ";;" + P "::" + P "->" - + P "+." + P "-." + P "*." + P "/." - + S "-~+/*%=<>&@|" - ) - -local OperatorWord = - K ( 'Operator.Word' , - P "and" + P "asr" + P "land" + P "lor" + P "lsl" + P "lxor" - + P "mod" + P "or" ) - -local Keyword = - K ( 'Keyword' , - P "as" + P "assert" + P "begin" + P "class" + P "constraint" + P "done" - + P "do" + P "downto" + P "else" + P "end" + P "exception" + P "external" - + P "false" + P "for" + P "function" + P "fun" + P "functor" + P "if" - + P "in" + P "include" + P "inherit" + P "initializer" + P "lazy" + P "let" - + P "match" + P "method" + P "module" + P "mutable" + P "new" + P "object" - + P "of" + P "open" + P "private" + P "raise" + P "rec" + P "sig" - + P "struct" + P "then" + P "to" + P "true" + P "try" + P "type" - + P "value" + P "val" + P "virtual" + P "when" + P "while" + P "with" ) - + K ( 'Keyword.Constant' , P "true" + P "false" ) - - -local Builtin = - K ( 'Name.Builtin' , - P "not" + P "incr" + P "decr" + P "fst" + P "snd" - + P "String.length" - + P "List.tl" + P "List.hd" + P "List.mem" + P "List.exists" - + P "List.for_all" + P "List.filter" + P "List.length" + P "List.map" - + P "List.iter" - + P "Array.length" + P "Array.make" + P "Array.make_matrix" - + P "Array.init" + P "Array.copy" + P "Array.copy" + P "Array.mem" - + P "Array.exists" + P "Array.for_all" + P "Array.map" + P "Array.iter" - + P "Queue.create" + P "Queue.is_empty" + P "Queue.push" + P "Queue.pop" - + P "Stack.create" + P "Stack.is_empty" + P "Stack.push" + P "Stack.pop" - + P "Hashtbl.create" + P "Hashtbl.add" + P "Hashtbl.remove" - + P "Hashtbl.mem" + P "Hashtbl.find" + P "Hashtbl.find_opt" - + P "Hashtbl.iter" ) -% \end{macrocode} -% -% \bigskip -% The following exceptions are exceptions in the standard library of OCaml (Stdlib). -% \begin{macrocode} -local Exception = - K ( 'Exception' , - P "Division_by_zero" + P "End_of_File" + P "Failure" - + P "Invalid_argument" + P "Match_failure" + P "Not_found" - + P "Out_of_memory" + P "Stack_overflow" + P "Sys_blocked_io" - + P "Sys_error" + P "Undefined_recursive_module" ) -% \end{macrocode} -% -% \bigskip -% \paragraph{The characters in OCaml} -% -% \begin{macrocode} -local Char = - K ( 'String.Short' , P "'" * ( ( 1 - P "'" ) ^ 0 + P "\\'" ) * P "'" ) -% \end{macrocode} -% -% -% \bigskip -% \paragraph{Beamer} -% -% \begin{macrocode} -local BalancedBraces = - P { "E" , - E = - ( - P "{" * V "E" * P "}" - + - P "\"" * ( 1 - S "\"" ) ^ 0 * P "\"" -- OCaml strings - + - ( 1 - S "{}" ) - ) ^ 0 - } -% \end{macrocode} -% -% -% \begin{macrocode} -if piton_beamer -then - Beamer = - L ( P "\\pause" * ( P "[" * (1 - P "]") ^ 0 * P "]" ) ^ -1 ) - + - ( P "\\uncover" * Lc ( '\\@@_beamer_command:n{uncover}' ) - + P "\\only" * Lc ( '\\@@_beamer_command:n{only}' ) - + P "\\alert" * Lc ( '\\@@_beamer_command:n{alert}' ) - + P "\\visible" * Lc ( '\\@@_beamer_command:n{visible}' ) - + P "\\invisible" * Lc ( '\\@@_beamer_command:n{invisible}' ) - + P "\\action" * Lc ( '\\@@_beamer_command:n{action}' ) - ) - * - L ( ( P "<" * (1 - P ">") ^ 0 * P ">" ) ^ -1 * P "{" ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}" ) - + - L ( - ( P "\\alt" ) - * P "<" * (1 - P ">") ^ 0 * P ">" - * P "{" - ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}{" ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}" ) - + - L ( - ( P "\\temporal" ) - * P "<" * (1 - P ">") ^ 0 * P ">" - * P "{" - ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}{" ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}{" ) - * K ( 'ParseAgain.noCR' , BalancedBraces ) - * L ( P "}" ) - BeamerBeginEnvironments = - ( space ^ 0 * - L - ( - P "\\begin{" * BeamerNamesEnvironments * "}" - * ( P "<" * ( 1 - P ">") ^ 0 * P ">" ) ^ -1 - ) - * P "\r" - ) ^ 0 - BeamerEndEnvironments = - ( space ^ 0 * - L ( P "\\end{" * BeamerNamesEnvironments * P "}" ) - * P "\r" - ) ^ 0 -end -% \end{macrocode} -% -% \bigskip -% \paragraph{EOL} -% \begin{macrocode} -local EOL = - P "\r" - * - ( - ( space^0 * -1 ) - + - Ct ( - Cc "EOL" - * - Ct ( - Lc "\\@@_end_line:" - * BeamerEndEnvironments - * BeamerBeginEnvironments - * PromptHastyDetection - * Lc "\\@@_newline: \\@@_begin_line:" - * Prompt - ) - ) - ) - * - SpaceIndentation ^ 0 -% \end{macrocode} -% -% -% \begin{macrocode} -% -% \paragraph{The strings} -% -% We need a pattern |string| without captures because it will be used within the -% comments of OCaml. -% \begin{macrocode} -local string = - Q ( P "\"" ) - * ( - VisualSpace - + - Q ( ( 1 - S " \"\r" ) ^ 1 ) - + - EOL - ) ^ 0 - * Q ( P "\"" ) -% \end{macrocode} -% -% \begin{macrocode} -local String = WithStyle ( 'String.Long' , string ) -% \end{macrocode} -% -% -% \bigskip -% Now, the ``quoted strings'' of OCaml (for example \verb+{ext|Essai|ext}+). -% -% For those strings, we will do two consecutive analysis. First an analysis to -% determine the whole string and, then, an analysis for the potential visual -% spaces and the EOL in the string. -% -% The first analysis require a match-time capture. For explanations about that -% programmation, see the paragraphe \emph{Lua's long % strings} in -% |www.inf.puc-rio.br/~roberto/lpeg|. -% \begin{macrocode} -local ext = ( R "az" + P "_" ) ^ 0 -local open = "{" * Cg(ext, 'init') * "|" -local close = "|" * C(ext) * "}" -local closeeq = - Cmt ( close * Cb('init'), - function (s, i, a, b) return a==b end ) -% \end{macrocode} -% -% \medskip -% The \textsc{lpeg} |QuotedStringBis| will do the second analysis. -% \begin{macrocode} -local QuotedStringBis = - WithStyle ( 'String.Long' , - ( - VisualSpace - + - Q ( ( 1 - S " \r" ) ^ 1 ) - + - EOL - ) ^ 0 ) - -% \end{macrocode} -% -% \medskip -% We use a ``function capture'' (as called in the official documentation of the -% \textsc{lpeg}) in order to do the second analysis on the result of the first one. -% \begin{macrocode} -local QuotedString = - C ( open * ( 1 - closeeq ) ^ 0 * close ) / - ( function (s) return QuotedStringBis : match(s) end ) -% \end{macrocode} -% -% -% \bigskip -% \paragraph{The comments in the OCaml listings} -% -% In OCaml, the delimiters for the comments are |(*| and |*)|. There are -% unsymmetrical and, therefore, the comments may be nested. That's why we need a -% grammar. -% -% In these comments, we embed the math comments (between |$| and |$|) and we -% embed also a treatment for the end of lines (since the comments may be multi-lines). -% -% \begin{macrocode} -local Comment = - WithStyle ( 'Comment' , - P { - "A" , - A = Q "(*" - * ( V "A" - + Q ( ( 1 - P "(*" - P "*)" - S "\r$\"" ) ^ 1 ) -- $ - + string - + P "$" * K ( 'Comment.Math' , ( 1 - S "$\r" ) ^ 1 ) * P "$" -- $ - + EOL - ) ^ 0 - * Q "*)" - } ) -% \end{macrocode} -% -% \bigskip -% \paragraph{The DefFunction} -% -% \begin{macrocode} -local DefFunction = - K ( 'Keyword' , P "let rec" + P "let" + P "and" ) - * Space - * K ( 'Name.Function.Internal' , identifier ) - * Space - * # ( P "=" * space * P "function" + ( 1 - P "=" ) ) -% \end{macrocode} -% -% \bigskip -% \paragraph{The parameters of the types} -% -% \begin{macrocode} -local TypeParameter = K ( 'TypeParameter' , P "'" * alpha * # ( 1 - P "'" ) ) -% \end{macrocode} -% -% \bigskip -% \paragraph{The main LPEG} -% -% First, the main loop : -% \begin{macrocode} -MainLoopOCaml = - ( ( space^1 * -1 ) - + EOL - + Space - + Tab - + Escape - + Beamer - + TypeParameter - + String + QuotedString + Char - + Comment - + Delim - + Operator - + Punct - + FromImport - + ImportAs - + Exception - + DefFunction - + Keyword * ( Space + Punct + Delim + EOL + -1 ) - + OperatorWord * ( Space + Punct + Delim + EOL + -1 ) - + Builtin * ( Space + Punct + Delim + EOL + -1 ) - + Identifier - + Number - + Word - ) ^ 0 -% \end{macrocode} -% -% \bigskip -% We recall that each line in the Python code to parse will be sent back to -% LaTeX between a pair |\@@_begin_line:| -- |\@@_end_line:|\footnote{Remember -% that the \texttt{\textbackslash @@\_end\_line:} must be explicit because it -% will be used as marker in order to delimit the argument of the command -% \texttt{\textbackslash @@\_begin\_line:}}. -% \begin{macrocode} -local ocaml = P ( true ) - -ocaml = - Ct ( - ( ( space - P "\r" ) ^0 * P "\r" ) ^ -1 - * BeamerBeginEnvironments - * Lc ( '\\@@_begin_line:' ) - * SpaceIndentation ^ 0 - * MainLoopOCaml - * -1 - * Lc ( '\\@@_end_line:' ) - ) -% \end{macrocode} -% -% \begin{macrocode} -languages['ocaml'] = ocaml -% \end{macrocode} -% -% \bigskip -% \subsubsection{The function Parse} -% -% -% The function |Parse| is the main function of the package \pkg{piton}. -% It parses its argument and sends back to LaTeX the code with interlaced -% formatting LaTeX instructions. In fact, everything is done by the -% \textsc{lpeg} |python| which returns as capture a Lua table containing -% data to send to LaTeX. -% -% \bigskip -% \begin{macrocode} -function piton.Parse(language,code) - local t = languages[language] : match ( code ) - local left_stack = {} - local right_stack = {} - for _ , one_item in ipairs(t) - do - if one_item[1] == "EOL" - then - for _ , s in ipairs(right_stack) - do tex.sprint( s ) - end - for _ , s in ipairs(one_item[2]) - do tex.tprint(s) - end - for _ , s in ipairs(left_stack) - do tex.sprint( s ) - end - else - if one_item[1] == "Open" - then - tex.sprint( one_item[2] ) - table.insert(left_stack,one_item[2]) - table.insert(right_stack,one_item[3]) - else - if one_item[1] == "Close" - then - tex.sprint( right_stack[#right_stack] ) - left_stack[#left_stack] = nil - right_stack[#right_stack] = nil - else - tex.tprint(one_item) - end - end - end - end -end -% \end{macrocode} -% -% -% -% \bigskip -% The function |ParseFile| will be used by the LaTeX command |\PitonInputFile|. -% That function merely reads the whole file (that is to say all its lines) and -% then apply the function~|Parse| to the resulting Lua string. -% \begin{macrocode} -function piton.ParseFile(language,name,first_line,last_line) - s = '' - local i = 0 - for line in io.lines(name) - do i = i + 1 - if i >= first_line - then s = s .. '\r' .. line - end - if i >= last_line then break end - end - piton.Parse(language,s) -end -% \end{macrocode} -% -% \bigskip -% \subsubsection{Two variants of the function Parse with integrated preprocessors} -% -% The following command will be used by the user command |\piton|. -% For that command, we have to undo the duplication of the symbols |#|. -% \begin{macrocode} -function piton.ParseBis(language,code) - local s = ( Cs ( ( P '##' / '#' + 1 ) ^ 0 ) ) : match ( code ) - return piton.Parse(language,s) -end -% \end{macrocode} -% -% \bigskip -% The following command will be used when we have to parse some small chunks of -% code that have yet been parsed. They are re-scanned by LaTeX because it has -% been required by |\@@_piton:n| in the \pkg{piton} style of the syntaxic -% element. In that case, you have to remove the potential |\@@_breakable_space:| -% that have been inserted when the key |break-lines| is in force. -% \begin{macrocode} -function piton.ParseTer(language,code) - local s = ( Cs ( ( P '\\@@_breakable_space:' / ' ' + 1 ) ^ 0 ) ) - : match ( code ) - return piton.Parse(language,s) -end -% \end{macrocode} -% -% -% \bigskip -% \subsubsection{Preprocessors of the function Parse for gobble} -% -% We deal now with preprocessors of the function |Parse| which are needed when -% the ``gobble mechanism'' is used. -% -% -% \bigskip -% The function |gobble| gobbles $n$ characters on the left of the code. It uses -% a \textsc{lpeg} that we have to compute dynamically because if depends on the -% value of~$n$. -% \begin{macrocode} -local function gobble(n,code) - function concat(acc,new_value) - return acc .. new_value - end - if n==0 - then return code - else - return Cf ( - Cc ( "" ) * - ( 1 - P "\r" ) ^ (-n) * C ( ( 1 - P "\r" ) ^ 0 ) - * ( C ( P "\r" ) - * ( 1 - P "\r" ) ^ (-n) - * C ( ( 1 - P "\r" ) ^ 0 ) - ) ^ 0 , - concat - ) : match ( code ) - end -end -% \end{macrocode} -% -% -% -% \bigskip -% The following function |add| will be used in the following \textsc{lpeg} -% |AutoGobbleLPEG|, |TabsAutoGobbleLPEG| and |EnvGobbleLPEG|. -% \begin{macrocode} -local function add(acc,new_value) - return acc + new_value -end -% \end{macrocode} -% -% \bigskip -% The following \textsc{lpeg} returns as capture the minimal number of spaces at -% the beginning of the lines of code. The main work is done by two \emph{fold -% captures} (|lpeg.Cf|), one using |add| and the other (encompassing the -% previous one) using |math.min| as folding operator. -% \begin{macrocode} -local AutoGobbleLPEG = - ( space ^ 0 * P "\r" ) ^ -1 - * Cf ( - ( -% \end{macrocode} -% We don't take into account the empty lines (with only spaces). -% \begin{macrocode} - ( P " " ) ^ 0 * P "\r" - + - Cf ( Cc(0) * ( P " " * Cc(1) ) ^ 0 , add ) - * ( 1 - P " " ) * ( 1 - P "\r" ) ^ 0 * P "\r" - ) ^ 0 -% \end{macrocode} -% Now for the last line of the Python code... -% \begin{macrocode} - * - ( Cf ( Cc(0) * ( P " " * Cc(1) ) ^ 0 , add ) - * ( 1 - P " " ) * ( 1 - P "\r" ) ^ 0 ) ^ -1 , - math.min - ) -% \end{macrocode} -% -% \bigskip -% The following \textsc{lpeg} is similar but works with the indentations. -% \begin{macrocode} -local TabsAutoGobbleLPEG = - ( space ^ 0 * P "\r" ) ^ -1 - * Cf ( - ( - ( P "\t" ) ^ 0 * P "\r" - + - Cf ( Cc(0) * ( P "\t" * Cc(1) ) ^ 0 , add ) - * ( 1 - P "\t" ) * ( 1 - P "\r" ) ^ 0 * P "\r" - ) ^ 0 - * - ( Cf ( Cc(0) * ( P "\t" * Cc(1) ) ^ 0 , add ) - * ( 1 - P "\t" ) * ( 1 - P "\r" ) ^ 0 ) ^ -1 , - math.min - ) -% \end{macrocode} -% -% -% -% \bigskip -% The following \textsc{lpeg} returns as capture the number of spaces at the -% last line, that is to say before the |\end{Piton}| (and usually it's also the -% number of spaces before the corresponding |\begin{Piton}| because that's the -% traditionnal way to indent in LaTeX). The main work is done by a \emph{fold -% capture} (|lpeg.Cf|) using the function |add| as folding operator. -% \begin{macrocode} -local EnvGobbleLPEG = - ( ( 1 - P "\r" ) ^ 0 * P "\r" ) ^ 0 - * Cf ( Cc(0) * ( P " " * Cc(1) ) ^ 0 , add ) * -1 -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -function piton.GobbleParse(language,n,code) - if n==-1 - then n = AutoGobbleLPEG : match(code) - else if n==-2 - then n = EnvGobbleLPEG : match(code) - else if n==-3 - then n = TabsAutoGobbleLPEG : match(code) - end - end - end - piton.Parse(language,gobble(n,code)) -end -% \end{macrocode} -% -% \bigskip -% \subsubsection{To count the number of lines} -% -% \medskip -% \begin{macrocode} -function piton.CountLines(code) - local count = 0 - for i in code : gmatch ( "\r" ) do count = count + 1 end - tex.sprint( - luatexbase.catcodetables.expl , - '\\int_set:Nn \\l_@@_nb_lines_int {' .. count .. '}' ) -end -% \end{macrocode} -% -% \begin{macrocode} -function piton.CountNonEmptyLines(code) - local count = 0 - count = - ( Cf ( Cc(0) * - ( - ( P " " ) ^ 0 * P "\r" - + ( 1 - P "\r" ) ^ 0 * P "\r" * Cc(1) - ) ^ 0 - * (1 - P "\r" ) ^ 0 , - add - ) * -1 ) : match (code) - tex.sprint( - luatexbase.catcodetables.expl , - '\\int_set:Nn \\l_@@_nb_non_empty_lines_int {' .. count .. '}' ) -end -% \end{macrocode} -% -% \bigskip -% \begin{macrocode} -function piton.CountLinesFile(name) - local count = 0 - for line in io.lines(name) do count = count + 1 end - tex.sprint( - luatexbase.catcodetables.expl , - '\\int_set:Nn \\l_@@_nb_lines_int {' .. count .. '}' ) -end -% \end{macrocode} -% -% -% \bigskip -% \begin{macrocode} -function piton.CountNonEmptyLinesFile(name) - local count = 0 - for line in io.lines(name) - do if not ( ( ( P " " ) ^ 0 * -1 ) : match ( line ) ) - then count = count + 1 - end - end - tex.sprint( - luatexbase.catcodetables.expl , - '\\int_set:Nn \\l_@@_nb_non_empty_lines_int {' .. count .. '}' ) -end -% \end{macrocode} -% -% \begin{macrocode} -\end{luacode*} -% \end{macrocode} -% -% -% \vspace{1cm} -% \section{History} -% -% % \subsection*{Changes between versions 1.4 and 1.5} -% -% New key |numbers-sep|. -% -% -% \subsection*{Changes between versions 1.3 and 1.4} -% -% New key |identifiers| in |\PitonOptions|. -% -% New command |\PitonStyle|. -% -% |background-color| now accepts as value a \emph{list} of colors. -% -% \subsection*{Changes between versions 1.2 and 1.3} -% -% When the class Beamer is used, the environment |{Piton}| and the command -% |\PitonInputFile| are ``overlay-aware'' (that is to say, they accept a -% specification of overlays between angular brackets). -% -% New key |prompt-background-color| -% -% It's now possible to use the command |\label| to reference a line of code in -% an environment |{Piton}|. -% -% A new command |\|⣠is available in the argument of the command |\piton{...}| to -% insert a space (otherwise, several spaces are replaced by a single space). -% -% \subsection*{Changes between versions 1.1 and 1.2} -% -% New keys |break-lines-in-piton| and |break-lines-in-Piton|. -% -% New key |show-spaces-in-string| and modification of the key |show-spaces|. -% -% When the class \cls{beamer} is used, the environements |{uncoverenv}|, -% |{onlyenv}|, |{visibleenv}| and |{invisibleenv}| -% -% -% \subsection*{Changes between versions 1.0 and 1.1} -% -% The extension \pkg{piton} detects the class \cls{beamer} and activates the -% commands |\action|, |\alert|, |\invisible|, |\only|, |\uncover| and |\visible| -% in the environments |{Piton}| when the class \cls{beamer} is used. -% -% \subsection*{Changes between versions 0.99 and 1.0} -% -% New key |tabs-auto-gobble|. -% -% \subsection*{Changes between versions 0.95 and 0.99} -% -% New key |break-lines| to allow breaks of the lines of code (and other keys to -% customize the appearance). -% -% \subsection*{Changes between versions 0.9 and 0.95} -% -% New key |show-spaces|. -% -% The key |left-margin| now accepts the special value |auto|. -% -% New key |latex-comment| at load-time and replacement of |##| by |#>| -% -% New key |math-comments| at load-time. -% -% New keys |first-line| and |last-line| for the command |\InputPitonFile|. -% -% \subsection*{Changes between versions 0.8 and 0.9} -% -% New key |tab-size|. -% -% Integer value for the key |splittable|. -% -% \subsection*{Changes between versions 0.7 and 0.8} -% -% New keys |footnote| and |footnotehyper| at load-time. -% -% New key |left-margin|. -% -% \subsection*{Changes between versions 0.6 and 0.7} -% -% New keys |resume|, |splittable| and |background-color| in |\PitonOptions|. -% -% The file |piton.lua| has been embedded in the file |piton.sty|. That means -% that the extension \pkg{piton} is now entirely contained in the file |piton.sty|. -% -% -% -% \tableofcontents -% -% \end{document} -% -% -% Local Variables: -% TeX-fold-mode: t -% TeX-fold-preserve-comments: nil -% flyspell-mode: nil -% fill-column: 80 -% End: - - - - - - +% \iffalse -*- coding: utf-8 ; -*- \fi \iffalse meta-comment +% +% Copyright (C) 2023 by F. Pantigny +% ----------------------------------- +% +% This file may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in: +% +% http://www.latex-project.org/lppl.txt +% +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% \fi +% \iffalse +\def\myfileversion{1.5a} +\def\myfiledate{2023/04/11} +% +% +%<*batchfile> +\begingroup +\input l3docstrip.tex +\keepsilent +\usedir{tex/latex/cascade} +\preamble + +Copyright (C) 2022-2023 by F. Pantigny +----------------------------------- + +This file may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in: + +http://www.latex-project.org/lppl.txt + +and version 1.3 or later is part of all distributions of LaTeX +version 2005/12/01 or later. + +\endpreamble +\askforoverwritefalse +\endgroup +% +% +%<@@=piton> +%<*driver> +\documentclass{l3doc} +\usepackage{geometry} +\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}} +\usepackage{fontspec} +\usepackage[dvipsnames]{xcolor} +\usepackage{caption,tabularx,tcolorbox,luacolor,lua-ul} +\def\emphase{\bgroup\color{RoyalPurple}\let\next=} +\fvset{commandchars=\~\#\@,formatcom=\color{gray}} +\captionsetup{labelfont = bf} +\usepackage{ragged2e} +\usepackage[footnotehyper,escape-inside=$$,math-comments]{piton} % $$ + +\parindent 0pt +\skip\footins = 2\bigskipamount + +\PitonOptions{gobble=2} + +\EnableCrossrefs + +\begin{document} +\DocInput{piton.dtx} +\end{document} +% +% \fi +% +% \catcode`\" = 11 +% +% \title{The package \pkg{piton}\thanks{This document corresponds to the +% version~\myfileversion\space of \pkg{piton}, at the date of~\myfiledate.}} +% \author{F. Pantigny \\ \texttt{fpantigny@wanadoo.fr}} +% +% \maketitle +% +% \begin{abstract} +% The package \pkg{piton} provides tools to typeset Python listings with +% syntactic highlighting by using the Lua library LPEG. It requires LuaLaTeX. +% \end{abstract} +% +% +% +% \section{Presentation} +% +% +% The package \pkg{piton} uses the Lua library LPEG\footnote{LPEG is a +% pattern-matching library for Lua, written in C, based on \emph{parsing +% expression grammars}: \url{http://www.inf.puc-rio.br/~roberto/lpeg/}} for +% parsing Python listings and typeset them with syntactic highlighting. Since it +% uses Lua code, it works with |lualatex| only (and won't work with the other +% engines: |latex|, |pdflatex| and |xelatex|). It does not use external program +% and the compilation does not require |--shell-escape|. The compilation is very +% fast since all the parsing is done by the library LPEG, written in C. +% +% \bigskip +% Here is an example of code typeset by \pkg{piton}, with the environment |{Piton}|. +% +% \bigskip +% +% \begin{Piton} +% from math import pi +% +% def arctan(x,n=10): +% """Compute the mathematical value of arctan(x) +% +% n is the number of terms in the sum +% """ +% if x < 0: +% return -arctan(-x) # recursive call +% elif x > 1: +% return pi/2 - arctan(1/x) +% #> (we have used that $\arctan(x)+\arctan(1/x)=\frac{\pi}{2}$ for $x>0$)\footnote{This LaTeX escape has been done by beginning the comment by \ttfamily\#>.} +% else: +% s = 0 +% for k in range(n): +% s += (-1)**k/(2*k+1)*x**(2*k+1) +% return s +% \end{Piton} +% +% +% \bigskip +% The package \pkg{piton} is entirely contained in the file +% |piton.sty|. This file may be put in the current directory or in a +% |texmf| tree. However, the best is to install \pkg{piton} with a TeX +% distribution such as MiKTeX, TeX Live or MacTeX. +% +% +% \section{Use of the package} +% +% +% \subsection{Loading the package} +% +% The package \pkg{piton} should be loaded with the classical command +% |\usepackage|: |\usepackage{piton}|. +% +% \smallskip +% Nevertheless, we have two remarks: +% \begin{itemize} +% \item the package \pkg{piton} uses the package \pkg{xcolor} (but \pkg{piton} +% does \emph{not} load \pkg{xcolor}: if \pkg{xcolor} is not loaded before the +% |\begin{document}|, a fatal error will be raised). +% \item the package \pkg{piton} must be used with LuaLaTeX exclusively: if +% another LaTeX engine (|latex|, |pdflatex|, |xelatex|,\dots ) is used, a +% fatal error will be raised. +% \end{itemize} +% +% \subsection{The tools provided to the user} +% +% The package \pkg{piton} provides several tools to typeset Python code: the +% command |\piton|, the environment |{Piton}| and the command |\PitonInputFile|. +% +% \begin{itemize}\setlength{\fboxsep}{1pt} +% \item The command \colorbox{gray!20}{\texttt\textbackslash piton} should be +% used to typeset small pieces of code inside a paragraph. For example: +% +% {\color{gray}\verb|\piton{def square(x): return x*x}|}\qquad +% \piton{def square(x): return x*x} +% +% The syntax and particularities of the command |\piton| are detailed below. +% +% \item The environment \colorbox{gray!20}{\ttfamily\{Piton\}} should be used to +% typeset multi-lines code. Since it takes its argument in a verbatim mode, it +% can't be used within the argument of a LaTeX command. For sake of +% customization, it's possible to define new environments similar to the +% environment |{Piton}| with the command |\NewPitonEnvironment|: +% cf.~\ref{NewPitonEnvironment} p.~\pageref{NewPitonEnvironment}. +% +% \item The command \colorbox{gray!20}{\ttfamily\textbackslash PitonInputFile} +% is used to insert and typeset a whole external file. +% +% That command takes in as optional argument (between square brackets) two keys +% |first-line| and |last-line|: only the part between the corresponding lines +% will be inserted. +% \end{itemize} +% +% \subsection{The syntax of the command \textbackslash piton} +% +% In fact, the command |\piton| is provided with a double syntax. It may be used +% as a standard command of LaTeX taking its argument between curly braces +% (|\piton{...}|) but it may also be used with a syntax similar to the syntax of +% the command +% |\verb|, that is to say with the argument delimited by two identical characters (e.g.: \verb!\piton|...|!). +% +% \begin{itemize} +% \item {\color{blue} \textsf{Syntax} \verb|\piton{...}|}\par\nobreak +% When its argument is given between curly braces, the command |\piton| does not +% take its argument in verbatim mode. In particular: +% \begin{itemize} +% \item several consecutive spaces will be replaced by only one space, +% +% {\color{cyan} but the command |\|⣠is provided to force the insertion of a space}; +% +% \item it's not possible to use |%| inside the argument, +% +% {\color{cyan} but the command |\%| is provided to insert a |%|}; +% +% \item the braces must be appear by pairs correctly nested +% +% {\color{cyan} but the commands |\{| and |\}| are also provided for individual braces}; +% +% \item the LaTeX commands\footnote{That concerns the commands beginning with a +% backslash but also the active characters.} are fully expanded and not +% executed, +% +% {\color{cyan} so it's possible to use |\\| to insert a backslash}. +% \end{itemize} +% +% +% The other characters (including |#|, |^|, |_|, |&|, |$| and |@|) +% must be inserted without backslash. +% +% \bigskip +%\begin{tabular}{>{\color{gray}}w{l}{75mm}@{\hspace*{1cm}}l} +% \omit Examples : \hfil \\ +% \noalign{\vskip1mm} +% \verb|\piton{MyString = '\\n'}| & +% \piton{MyString = '\\n'} \\ +% \verb|\piton{def even(n): return n\%2==0}| & +% \piton{def even(n): return n\%2==0} \\ +% \verb|\piton{c="#" # an affectation }| & +% \piton{c="#" # an affectation } \\ +% \verb|\piton{c="#" \ \ \ # an affectation }| & +% \piton{c="#" \ \ \ # an affectation } \\ +% \verb|\piton{MyDict = {'a': 3, 'b': 4 }}| & +% \piton{MyDict = {'a': 3, 'b': 4 }} +% \end{tabular} +% +% \bigskip +% It's possible to use the command |\piton| in the arguments of a +% LaTeX command.\footnote{For example, it's possible to use the command +% \texttt{\textbackslash piton} in a footnote. Example : +% \piton{s = 'A string'}.} +% +% \bigskip +% \item {\color{blue} \textsf{Syntaxe} \verb!\piton|...|!}\par\nobreak +% +% When the argument of the command |\piton| is provided between two identical +% characters, that argument is taken in a \emph{verbatim mode}. Therefore, with +% that syntax, the command |\piton| can't be used within the argument of another +% command. +% +% \medskip +% +% \begin{tabular}{>{\color{gray}}w{l}{75mm}@{\hspace*{1cm}}l} +% \omit Examples : \hfil \\ +% \noalign{\vskip1mm} +% \verb!\piton|MyString = '\n'|! & +% \piton|MyString = '\n'| \\ +% \verb|\piton!def even(n): return n%2==0!| & +% \piton!def even(n): return n%2==0! \\ +% \verb|\piton+c="#" # an affectation +| & +% \piton+c="#" # an affectation + \\ +% \verb|\piton?MyDict = {'a': 3, 'b': 4}?| & +% \piton!MyDict = {'a': 3, 'b': 4}! +% \end{tabular} +% +% \end{itemize} +% +% \section{Customization} +% +% \subsection{The command \textbackslash PitonOptions} +% +% +% \NewDocumentCommand{\Definition}{m} +% {{\setlength{\fboxsep}{1pt}\colorbox{gray!20}{\ttfamily \vphantom{gl}#1}}} +% +% The command |\PitonOptions| takes in as argument a comma-separated list of +% \textsl{key=value} pairs. The scope of the settings done by that command is +% the current TeX group.\footnote{We remind that a LaTeX environment is, in +% particular, a TeX group.} +% +% \begin{itemize} +% \item The key \Definition{gobble} takes in as value a +% positive integer~$n$: the first $n$ characters are discarded (before the +% process of highlightning of the code) for each line of the environment +% |{Piton}|. These characters are not necessarily spaces. +% +% \item When the key \Definition{auto-gobble} is in force, the +% extension \pkg{piton} computes the minimal value $n$ of the number of +% consecutive spaces beginning each (non empty) line of the environment +% |{Piton}| and applies |gobble| with that value of~$n$. +% +% \item When the key \Definition{env-gobble} is in force, \pkg{piton} analyzes the last +% line of the environment |{Piton}|, that is to say the line which contains +% |\end{Piton}| and determines whether that line contains only spaces followed +% by the |\end{Piton}|. If we are in that situation, \pkg{piton} computes the +% number~$n$ of spaces on that line and applies |gobble| with that value of~$n$. +% The name of that key comes from \emph{environment gobble}: the effect of +% gobble is set by the position of the commands |\begin{Piton}| and +% |\end{Piton}| which delimit the current environment. +% +% \item With the key \Definition{line-numbers}, the \emph{non empty} lines (and +% all the lines of the \emph{docstrings}, even the empty ones) are numbered in +% the environments |{Piton}| and in the listings resulting from the use of +% |\PitonInputFile|. +% +% \item With the key \Definition{all-line-numbers}, \emph{all} the lines are numbered, +% including the empty ones. +% +% \item \colorbox{yellow!50}{\bfseries{New 1.5}}\par\nobreak +% +% The key \Definition{numbers-sep} is the horizontal distance between the +% numbers of lines (inserted by |line-numbers| of |all-line-numbers|) and the +% beginning of the lines of code. The initial value is 0.7~em. +% +% \item With the key \Definition{resume}, the counter of lines is not set to zero +% at the beginning of each environment |{Piton}| or use of |\PitonInputFile| as +% it is otherwise. That allows a numbering of the lines across several +% environments. +% +% \item The key \Definition{left-margin} corresponds to a margin on the left. +% That key may be useful in conjonction with the key |line-numbers| or the key +% |line-all-numbers| if one does not want the numbers in an overlapping position +% on the left. +% +% It's possible to use the key |left-margin| with the value |auto|. With that +% value, if the key |line-numbers| or the key |all-line-numbers| is used, a +% margin will be automatically inserted to fit the numbers of lines. See an +% example part \ref{example-numbering} on page~\pageref{example-numbering}. +% +% \item The key \Definition{background-color} sets the background color of the +% environments |{Piton}| and the listings produced by |\PitonInputFile| (that +% background has a width of |\linewidth|). +% +% \smallskip +% \colorbox{yellow!50}{\textbf{New 1.4}}\enskip The key |background-color| +% supports also as value a \emph{list} of colors. In this case, the successive +% rows are colored by using the colors of the list in a cyclic way. +% +% \emph{Example} : |\PitonOptions{background-color = {gray!5,white}}| +% +% +% The key |background-color| accepts a color defined «on the fly». For example, +% it's possible to write |background-color = [cmyk]{0.1,0.05,0,0}|. +% +% \item With the key \Definition{prompt-background-color}, \pkg{piton} adds a +% color background to the lines beginning with the prompt ``|>>>|'' (and its +% continuation ``|...|'') characteristic of the Python consoles with +% \textsc{repl} (\emph{read-eval-print loop}). +% +% \item When the key \Definition{show-spaces-in-strings} is activated, the +% spaces in the short strings (that is to say those delimited by |'| or |"|) are +% replaced by the character~⣠(U+2423 : \textsc{open box}). Of course, that +% character~U+2423 must be present in the monospaced font which is +% used.\footnote{The package \pkg{piton} simply uses the current monospaced +% font. The best way to change that font is to use the command +% \texttt{\textbackslash setmonofont} of the package \pkg{fontspec}.}\par\nobreak +% \begingroup \PitonOptions{show-spaces-in-strings} Example : +% \piton|my_string = 'Very good answer'| \endgroup +% +% With the key \Definition{show-spaces}, all the spaces are replaced by U+2423 +% (and no line break can occur on those ``visible spaces'', even when the key +% |break-lines|\footnote{cf. \ref{line-breaks} p.~\pageref{line-breaks}} is in +% force). +% \end{itemize} +% +% \bigskip +% +% \begingroup +% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +% \begin{Verbatim} +% ~emphase&\PitonOptions{line-numbers,auto-gobble,background-color = gray!15}@ +% \begin{Piton} +% from math import pi +% def arctan(x,n=10): +% """Compute the mathematical value of arctan(x) +% +% n is the number of terms in the sum +% """ +% if x < 0: +% return -arctan(-x) # recursive call +% elif x > 1: +% return pi/2 - arctan(1/x) +% #> (we have used that $\arctan(x)+\arctan(1/x)=\frac{\pi}{2}$ pour $x>0$) +% else +% s = 0 +% for k in range(n): +% s += (-1)**k/(2*k+1)*x**(2*k+1) +% return s +% \end{Piton} +% \end{Verbatim} +% \endgroup +% +% \begingroup +% \PitonOptions{line-numbers,background-color = gray!15} +% \begin{Piton} +% from math import pi +% +% def arctan(x,n=10): +% """Compute the mathematical value of arctan(x) +% +% n is the number of terms in the sum +% """ +% if x < 0: +% return -arctan(-x) # recursive call +% elif x > 1: +% return pi/2 - arctan(1/x) +% #> (we have used that $\arctan(x)+\arctan(1/x)=\frac{\pi}{2}$ for $x>0$) +% else +% s = 0 +% for k in range(n): +% s += (-1)**k/(2*k+1)*x**(2*k+1) +% return s +% \end{Piton} +% \endgroup +% +% \bigskip +% The command |\PitonOptions| provides in fact several other keys which will be +% described further (see in particular the ``Pages breaks and line breaks'' +% p.~\pageref{breakable}). +% +% \subsection{The styles} +% +% \label{styles} +% +% The package \pkg{piton} provides the command |\SetPitonStyle| to customize the +% different styles used to format the syntactic elements of the Python listings. +% The customizations done by that command are limited to the current TeX +% group.\footnote{We remind that a LaTeX environment is, in particular, a TeX group.} +% +% \bigskip +% The command |\SetPitonStyle| takes in as argument a comma-separated list of +% \textsl{key=value} pairs. The keys are names of styles and the value are LaTeX +% formatting instructions. +% +% \bigskip +% These LaTeX instructions must be formatting instructions such as +% |\color{...}|, |\bfseries|, |\slshape|, etc. (the commands of this kind are +% sometimes called \emph{semi-global} commands). It's also possible to put, +% \emph{at the end of the list of instructions}, a LaTeX command taking exactly +% one argument. +% +% \bigskip +% Here an example which changes the style used to highlight, in the definition +% of a Python function, the name of the function which is defined. That code +% uses the command |\highLight| of \pkg{lua-ul} (that package requires also the +% package \pkg{luacolor}). +% +% \begin{verbatim} +% \SetPitonStyle{ Name.Function = \bfseries \highLight[red!50] } +% \end{verbatim} +% +% In that example, |\highLight[red!50]| must be considered as the name of a +% LaTeX command which takes in exactly one argument, since, usually, it is used +% with |\highLight[red!50]{...}|. +% +% \medskip +% \begingroup +% \SetPitonStyle +% { Name.Function = \bfseries \highLight[red!50] } +% With that setting, we will have : \piton{def cube(x) : return x * x * x } +% \endgroup +% +% \bigskip +% The different styles are described in the table \ref{Semantic}. The initial +% settings done by \pkg{piton} in |piton.sty| are inspired by the style +% \pkg{manni} de Pygments.\footnote{See: +% \url{https://pygments.org/styles/}. Remark that, by default, Pygments provides for its style \pkg{manni} a colored background whose color is the HTML color \texttt{\#F0F3F3}. It's possible to have the same color in \texttt{\{Pion\}} with the instruction \texttt{\textbackslash PitonOptions\{background-color = [HTML]\{F0F3F3\}\}}.} +% +% \bigskip +% \colorbox{yellow!50}{\textbf{New 1.4}}\enskip The command |\PitonStyle| takes +% in as argument the name of a style and allows to retrieve the value (as a list +% of LaTeX instructions) of that style. +% +% \smallskip +% For example, it's possible to write |{\PitonStyle{Keyword}{function}}| and we +% will have the word {\PitonStyle{Keyword}{function}} formatted as a keyword. +% +% \smallskip +% The syntax |{\PitonStyle{|\textsl{\texttt{style}}|}{...}}| is mandatory in +% order to be able to deal both with the semi-global commands and the commands +% with arguments which may be present in the definition of the style +% \texttt{\textsl{style}}. +% +% \begin{table}[b] +% \centering +% \caption{Usage of the different styles} +% \label{Semantic} +% \begin{tabular}{@{}>{\ttfamily}l>{\RaggedRight\arraybackslash}p{9cm}@{}} +% \toprule +% \normalfont Style & Usage \\ +% \midrule +% Number & the numbers \\ +% String.Short & the short strings (between \texttt{'} or \verb|"|) \\ +% String.Long & the long strings (between \texttt{'''} or \verb|"""|) except the +% documentation strings \\ +% String & that keys sets both |String.Short| and |String.Long| \\ +% String.Doc & the documentation strings (only between \texttt{"""} following +% PEP~257) \\ +% String.Interpol & the syntactic elements of the fields of the f-strings (that +% is to say the characters \texttt{\{} and \texttt{\}}) \\ +% Operator & the following operators : \texttt{!= == << >> - \~{} + / * \% = < > \& .} \verb+|+ \verb|@|\\ +% Operator.Word & the following operators : \texttt{in}, \texttt{is}, +% \texttt{and}, \texttt{or} and \texttt{not} \\ +% Name.Builtin & the predefined functions of Python \\ +% Name.Function & the name of the functions defined by the user, at the point of +% their definition (that is to say after the keyword |def|) \\ +% Name.Decorator & the decorators (instructions beginning by \verb|@|) \\ +% Name.Namespace & the name of the modules (= external libraries) \\ +% Name.Class & the name of the classes at the point of their definition (that is +% to say after the keyword |class|) \\ +% Exception & the names of the exceptions (eg: \texttt{SyntaxError}) \\ +% Comment & the comments beginning with \verb|#| \\ +% Comment.LaTeX & the comments beginning by \verb|#>|, which are composed in LaTeX by +% \pkg{piton} (and simply called ``LaTeX comments'' in this document) \\ +% Keyword.Constant & |True|, |False| and |None| \\ +% Keyword & the following keywords : +% \ttfamily as, assert, break, case, continue, def, del, +% elif, else, except, exec, finally, for, from, +% global, if, import, lambda, non local, +% pass, raise, return, try, while, +% with, yield, yield from.\\ +% \bottomrule +% \end{tabular} +% \end{table} +% +% +% +% +% \subsection{Creation of new environments} +% +% \label{NewPitonEnvironment} +% +% Since the environment |{Piton}| has to catch its body in a special way (more +% or less as verbatim text), it's not possible to construct new environments +% directly over the environment |{Piton}| with the classical commands +% |\newenvironment| or |\NewDocumentEnvironment|. +% +% That's why \pkg{piton} provides a command |\NewPitonEnvironment|. That +% command takes in three mandatory arguments. + +% That command has the same syntax as the classical environment +% |\NewDocumentEnvironment|. +% +% \bigskip +% With the following instruction, a new environment |{Python}| will be +% constructed with the same behaviour as |{Piton}|: +% +% {\color{gray}\verb|\NewPitonEnvironment{Python}{}{}{}|} +% +% \bigskip +% If one wishes an environment |{Python}| with takes in as optional argument +% (between square brackets) the keys of the command |\PitonOptions|, it's +% possible to program as follows: +% +% {\color{gray}\verb|\NewPitonEnvironment{Python}{O{}}{\PitonOptions{#1}}{}|} +% +% \bigskip +% If one wishes to format Python code in a box of \pkg{tcolorbox}, it's possible +% to define an environment |{Python}| with the following code (of course, the +% package \pkg{tcolorbox} must be loaded). +% +%\begin{verbatim} +% \NewPitonEnvironment{Python}{} +% {\begin{tcolorbox}} +% {\end{tcolorbox}} +% \end{verbatim} +% +% \bigskip +% With this new environment |{Python}|, it's possible to write: +% +% \begin{Verbatim} +% ~emphase#\begin{Python}@ +% def square(x): +% """Compute the square of a number""" +% return x*x +% ~emphase#\end{Python}@ +% \end{Verbatim} +% +% \NewPitonEnvironment{Python}{} +% {\begin{tcolorbox}} +% {\end{tcolorbox}} +% +% \begin{Python} +% def square(x): +% """Compute the square of a number""" +% return x*x +% \end{Python} +% +% +% \section{Advanced features} +% +% \subsection{Highlighting some identifiers} +% +% \colorbox{yellow!50}{\textbf{New 1.4}} It's possible to require a changement +% of formating for some identifiers with the key |identifiers| of +% |\PitonOptions|. +% +% \smallskip +% That key takes in as argument a value of the following format: +% +% \quad |{ names = |\textsl{\ttfamily names}|, style = |\textsl{\ttfamily +% instructions}| }| +% +% \begin{itemize} +% \item \textsl{\ttfamily names} is a (comma-separated) list of identifiers +% names; +% +% \item \textsl{\ttfamily instructions} is a list of LaTeX instructions of the +% same type that \pkg{piton} ``styles'' previously presented (cf~\ref{styles} +% p.~\pageref{styles}). +% \end{itemize} +% +% \emph{Caution}: Only the identifiers may be concerned by that key. The +% keywords and the built-in functions won't be affected, even if their name is +% in the list |\textsl{\ttfamily names}|. +% +% \begin{Verbatim} +% \PitonOptions +% { +% ~emphase#identifiers@ = +% { +% ~emphase#names@ = { l1 , l2 } , +% ~emphase#style@ = \color{red} +% } +% } +% +% \begin{Piton} +% def tri(l): +% """Segmentation sort""" +% if len(l) <= 1: +% return l +% else: +% a = l[0] +% l1 = [ x for x in l[1:] if x < a ] +% l2 = [ x for x in l[1:] if x >= a ] +% return tri(l1) + [a] + tri(l2) +% \end{Piton} +% \end{Verbatim} +% +% +% \bigskip +% +% \begingroup +% +% \PitonOptions +% { +% identifiers = +% { +% names = { l1 , l2 } , +% style = \color{red} +% } +% } +% +% \begin{Piton} +% def tri(l): +% """Segmentation sort""" +% if len(l) <= 1: +% return l +% else: +% a = l[0] +% l1 = [ x for x in l[1:] if x < a ] +% l2 = [ x for x in l[1:] if x >= a ] +% return tri(l1) + [a] + tri(l2) +% \end{Piton} +% +% \endgroup +% +% \bigskip +% By using the key |identifier|, it's possible to add other built-in functions +% (or other new keywords, etc.) that will be detected by \pkg{piton}. +% +% +% \begin{Verbatim} +% \PitonOptions +% { +% ~emphase#identifiers@ = +% { +% names = { cos, sin, tan, floor, ceil, trunc, pow, exp, ln, factorial } , +% style = \PitonStyle{Name.Builtin} +% } +% } +% +% \begin{Piton} +% from math import * +% cos(pi/2) +% factorial(5) +% ceil(-2.3) +% floor(5.4) +% \end{Piton} +% \end{Verbatim} +% +% \begingroup +% +% \PitonOptions +% { +% identifiers = +% { +% names = { cos, sin, tan, floor, ceil, trunc, pow, exp, ln, factorial } , +% style = \PitonStyle{Name.Builtin} +% } +% } +% +% \begin{Piton} +% from math import * +% cos(pi/2) +% factorial(5) +% ceil(-2.3) +% floor(5.4) +% \end{Piton} +% +% +% \endgroup +% +% +% \subsection{Mechanisms to escape to LaTeX} +% +% The package \pkg{piton} provides several mechanisms for escaping to LaTeX: +% \begin{itemize} +% \item It's possible to compose comments entirely in LaTeX. +% \item It's possible to have the elements between \texttt{\$} in the comments +% composed in LateX mathematical mode. +% \item It's also possible to insert LaTeX code almost everywhere in a Python listing. +% \end{itemize} +% +% One should aslo remark that, when the extension \pkg{piton} is used with the +% class \cls{beamer}, \pkg{piton} detects in |{Piton}| many commands and +% environments of Beamer: cf. \ref{beamer} p.~\pageref{beamer}. +% +% \subsubsection{The ``LaTeX comments''} +% +% In this document, we call ``LaTeX comments'' the comments which begins by +% |#>|. The code following those characters, until the end of the line, will be +% composed as standard LaTeX code. There is two tools to customize those +% comments. +% +% \begin{itemize} +% \item It's possible to change the syntatic mark (which, by default, is |#>|). +% For this purpose, there is a key |comment-latex| available at load-time (that +% is to say at the |\usepackage|) which allows to choice the characters which, +% preceded by |#|, will be the syntatic marker. +% +% For example, with the following loading: +% +% \quad \verb|\usepackage[comment-latex = LaTeX]{piton}| +% +% the LaTeX comments will begin by |#LaTeX|. +% +% If the key |comment-latex| is used with the empty value, all the Python +% comments (which begins by |#|) will, in fact, be ``LaTeX comments''. +% +% \smallskip +% \item It's possible to change the formatting of the LaTeX comment itself by +% changing the \pkg{piton} style |Comment.LaTeX|. +% +% For example, with |\SetPitonStyle{Comment.LaTeX = \normalfont\color{blue}}|, +% the LaTeX comments will be composed in blue. +% +% If you want to have a character |#| at the beginning of the LaTeX comment in +% the \textsc{pdf}, you can use set |Comment.LaTeX| as follows: +% +% \begin{Verbatim} +% \SetPitonStyle{Comment.LaTeX = \color{gray}\~#\normalfont\space } +% \end{Verbatim} +% +% For other examples of customization of the LaTeX comments, see the part +% \ref{example-comments} p.~\pageref{example-comments} +% \end{itemize} +% +% \bigskip +% If the user has required line numbers in the left margin (with the +% key |line-numbers| or the key |all-line-numbers| of |\PitonOptions|), it's +% possible to refer to a number of line with the command |\label| used in a +% LaTeX comment.\footnote{That feature is implemented by using a redefinition of +% the standard command \texttt{\textbackslash label} in the environments +% \texttt{\{Piton\}}. Therefore, incompatibilities may occur with extensions +% which redefine (globally) that command \texttt{\textbackslash label} (for +% example: \pkg{varioref}, \pkg{refcheck}, \pkg{showlabels}, etc.)} +% +% \subsubsection{The key ``math-comments''} +% +% It's possible to request that, in the standard Python comments (that is to say +% those beginning by |#| and not |#>|), the elements between \texttt{\$} be +% composed in LaTeX mathematical mode (the other elements of the comment being +% composed verbatim). +% +% That feature is activated by the key |math-comments| at load-time (that is to +% say with the |\usepackage|). +% +% \medskip +% In the following example, we assume that the key |math-comments| has been used +% when loading \pkg{piton}. +% +% \begin{Verbatim} +% \begin{Piton} +% def square(x): +% return x*x ~# compute $x^2$ +% \end{Piton} +% \end{Verbatim} +% +% \begin{Piton} +% def square(x): +% return x*x # compute $x^2$ +% \end{Piton} +% +% \subsubsection{The mechanism ``escape-inside''} +% +% It's also possible to overwrite the Python listings to insert LaTeX code +% almost everywhere (but between lexical units, of course). By default, +% \pkg{piton} does not fix any character for that kind of escape. +% +% In order to use this mechanism, it's necessary to specify two characters which +% will delimit the escape (one for the beginning and one for the end) by using +% the key |escape-inside| at load-time (that is to say at the +% |\begin{docuemnt}|). +% +% \medskip +% In the following example, we assume that the extension \pkg{piton} has been +% loaded by the following instruction. +% +% \begin{Verbatim} +% \usepackage[~emphase#escape-inside=$$@]{piton} +% \end{Verbatim} +% +% \medskip +% In the following code, which is a recursive programmation of the mathematical +% factorial, we decide to highlight in yellow the instruction which contains the +% recursive call. That example uses the command |\highLight| of \pkg{lua-ul} +% (that package requires itself the package \pkg{luacolor}). +% \begin{Verbatim} +% \begin{Piton} +% def fact(n): +% if n==0: +% return 1 +% else: +% ~emphase#$\highLight{$@return n*fact(n-1)~emphase#$}$@ +% \end{Piton} +% \end{Verbatim} +% +% \begin{Piton} +% def fact(n): +% if n==0: +% return 1 +% else: +% $\highLight{$return n*fact(n-1)$}$ +% \end{Piton} +% +% \bigskip +% In fact, in that case, it's probably easier to use the command |\@highLight| +% of \pkg{lua-ul}: that command sets a yellow background until the end of the +% current TeX group. Since the name of that command contains the character |@|, +% it's necessary to define a synonym without |@| in order to be able to use it +% directly in |{Piton}|. +% \begingroup +% \fvset{commandchars=\~\#\+,formatcom=\color{gray}} +% \begin{Verbatim} +% \makeatletter +% ~emphase#\let\Yellow\@highLight+ +% \makeatother +% \end{Verbatim} +% \endgroup +% +% \begin{Verbatim} +% \begin{Piton} +% def fact(n): +% if n==0: +% return 1 +% else: +% ~emphase#$\Yellow$@return n*fact(n-1) +% \end{Piton} +% \end{Verbatim} +% +% \makeatletter +% \let\Yellow\@highLight +% \makeatother +% +% +% \begin{Piton} +% def fact(n): +% if n==0: +% return 1 +% else: +% $\Yellow$return n*fact(n-1) +% \end{Piton} +% +% +% +% \bigskip +% \emph{Caution} : The escape to LaTeX allowed by the characters of +% |escape-inside| is not active in the strings nor in the Python comments +% (however, it's possible to have a whole Python comment composed in LaTeX by +% beginning it with |#>|; such comments are merely called ``LaTeX comments'' in +% this document). +% +% +% \subsection{Behaviour in the class Beamer} +% +% \label{beamer} +% +% \emph{First remark}\par\nobreak +% Since the environment |{Piton}| catches its body with a verbatim mode, +% it's necessary to use the environments |{Piton}| within environments |{frame}| +% of Beamer protected by the key |fragile|.\footnote{Remind that for an +% environment \texttt{\{frame\}} of Beamer using the key |fragile|, the +% instruction \texttt{\textbackslash end\{frame\}} must be alone on a single +% line (except for any leading whitespace).} +% +% +% \bigskip +% When the package \pkg{piton} is used within the class +% \cls{beamer}\footnote{The extension \pkg{piton} detects the class \cls{beamer} +% but, if needed, it's also possible to activate that mechanism with the key +% |beamer| provided by \pkg{piton} at load-time: |\textbackslash +% usepackage[beamer]\{piton\}|}, the behaviour of \pkg{piton} is slightly +% modified, as described now. +% +% \subsubsection{\{Piton\} et \textbackslash PitonInputFile are +% ``overlay-aware''} +% +% When \pkg{piton} is used in the class \cls{beamer}, the environment |{Piton}| +% and the command |\PitonInputFile| accept the optional argument |<...>| of +% Beamer for the overlays which are involved. +% +% For example, it's possible to write: +% +% \begin{Verbatim} +% \begin{Piton}~emphase#<2-5>@ +% ... +% \end{Piton} +% \end{Verbatim} +% +% and +% +% \begin{Verbatim} +% \PitonInputFile~emphase#<2-5>@{my_file.py} +% \end{Verbatim} +% +% \subsubsection{Commands of Beamer allowed in \{Piton\} and \textbackslash PitonInputFile} +% +% When \pkg{piton} is used in the class \cls{beamer} , the following commands of +% \cls{beamer} (classified upon their number of arguments) are automatically +% detected in the environments |{Piton}| (and in the listings processed by +% |\PitonInputFile|): +% \begin{itemize} +% \item no mandatory argument : |\pause|\footnote{One should remark that it's +% also possible to use the command \texttt{\textbackslash pause} in a ``LaTeX +% comment'', that is to say by writing \texttt{\#> \textbackslash pause}. By +% this way, if the Python code is copied, it's still executable by Python}. ; +% \item one mandatory argument : |\action|, |\alert|, |\invisible|, |\only|, |\uncover| and |\visible| ; +% \item two mandatory arguments : |\alt| ; +% \item three mandatory arguments : |\temporal|. +% \end{itemize} + +% \medskip +% In the mandatory arguments of these commands, the braces must be balanced. +% However, the braces included in short strings\footnote{The short strings of +% Python are the strings delimited by characters \texttt{'} or the characters +% \texttt{"} and not \texttt{'''} nor \texttt{"""}. In Python, the short strings +% can't extend on several lines.} of Python are not considered. +% +% \medskip +% Regarding the fonctions |\alt| and |\temporal| there should be no carriage +% returns in the mandatory arguments of these functions. +% +% \medskip +% Here is a complete example of file: +% +% \begin{Verbatim}[formatcom = \small\color{gray}] +% \documentclass{beamer} +% \usepackage{piton} +% \begin{document} +% \begin{frame}[fragile] +% \begin{Piton} +% def string_of_list(l): +% """Convert a list of numbers in string""" +% ~emphase# \only<2->{s = "{" + str(l[0])}@ +% ~emphase# \only<3->{for x in l[1:]: s = s + "," + str(x)}@ +% ~emphase# \only<4->{s = s + "}"}@ +% return s +% \end{Piton} +% \end{frame} +% \end{document} +% \end{Verbatim} +% +% In the previous example, the braces in the Python strings |"{"| and |"}"| are +% correctly interpreted (without any escape character). +% +% +% +% +% \bigskip +% \subsubsection{Environments of Beamer allowed in \{Piton\} and \textbackslash PitonInputFile} +% +% When \pkg{piton} is used in the class \pkg{beamer}, the following environments +% of Beamer are directly detected in the environments |{Piton}| (and in the +% listings processed by |\PitonInputFile|): |{actionenv}|, |{alertenv}|, +% |{invisibleenv}|, |{onlyenv}|, |{uncoverenv}| and |{visibleenv}|. +% +% However, there is a restriction: these environments must contain only \emph{whole +% lines of Python code} in their body. +% +%\medskip +% Here is an example: +% +% \begin{Verbatim}[formatcom = \small\color{gray}] +% \documentclass{beamer} +% \usepackage{piton} +% \begin{document} +% \begin{frame}[fragile] +% \begin{Piton} +% def square(x): +% """Compure the square of its argument""" +% ~emphase#\begin{uncoverenv}<2>@ +% return x*x +% ~emphase#\end{uncoverenv}@ +% \end{Piton} +% \end{frame} +% \end{document} +% \end{Verbatim} +% +% +% \vspace{1cm} +% \textbf{Remark concerning the command \textbackslash alert and the environment +% \{alertenv\} of Beamer}\par\nobreak +% +% \smallskip +% Beamer provides an easy way to change the color used by the environment +% |{alertenv}| (and by the command |\alert| which relies upon it) to highlight +% its argument. Here is an example: +% +% \begin{Verbatim} +% \setbeamercolor{~emphase#alerted text@}{fg=blue} +% \end{Verbatim} +% +% However, when used inside an environment |{Piton}|, such tuning will probably +% not be the best choice because \pkg{piton} will, by design, change (most of +% the time) the color the different elements of text. One may prefer an environment +% |{alertenv}| that will change the background color for the elements to be +% hightlighted. +% +% \smallskip +% Here is a code that will do that job and add a yellow background. That code +% uses the command |\@highLight| of \pkg{lua-ul} (that extension requires also +% the package \pkg{luacolor}). +% +% \begingroup +% \fvset{commandchars=\~\#\+,formatcom=\color{gray}} +% \begin{Verbatim} +% \setbeamercolor{alerted text}{bg=yellow!50} +% \makeatletter +% \AddToHook{env/Piton/begin} +% {\renewenvironment<>{alertenv}{\only~#1{~emphase#\@highLight+[alerted text.bg]}}{}} +% \makeatother +% \end{Verbatim} +% \endgroup +% +% That code redefines locally the environment |{alertenv}| within the +% environments |{Piton}| (we recall that the command |\alert| relies upon that +% environment |{alertenv}|). +% +% \subsection{Page breaks and line breaks} +% +% \label{breakable} +% +% \subsubsection{Page breaks} +% +% By default, the listings produced by the environment |{Piton}| and the command +% |\PitonInputFile| are not breakable. +% +% However, the command |\PitonOptions| provides the key |splittable| to allow such +% breaks. +% +% \begin{itemize} +% \item If the key |splittable| is used without any value, the listings are +% breakable everywhere. +% \item If the key |splittable| is used with a numeric value~$n$ (which must be +% a non-negative integer number), the listings are breakable but no break will +% occur within the first $n$ lines and within the last $n$ lines. Therefore, +% |splittable=1| is equivalent to |splittable|. +% \end{itemize} +% +% \medskip +% Even with a background color (set by the key |background-color|), the pages +% breaks are allowed, as soon as the key |splittable| is in force.\footnote{With +% the key |splittable|, the environments \texttt{\{Piton\}} are breakable, even +% within a (breakable) environment of \pkg{tcolorbox}. Remind that an +% environment of \pkg{tcolorbox} included in another environment of +% \pkg{tcolorbox} is \emph{not} breakable, even when both environments use the +% key |breakable| of \pkg{tcolorbox}.} +% +% \subsubsection{Line breaks} +% +% \label{line-breaks} +% +% By default, the elements produced by \pkg{piton} can't be broken by an end on +% line. However, there are keys to allow such breaks (the possible breaking +% points are the spaces, even the spaces in the Python strings). +% \begin{itemize} +% \item With the key |break-lines-in-piton|, the line breaks are allowed in the +% command |\piton{...}| (but not in the command \verb+\piton|...|+, that is to say +% the command |\piton| in verbatim mode). +% \item With the key |break-lines-in-Piton|, the line breaks are allowed in the +% environment |{Piton}| (hence the capital letter |P| in the name) and in the +% listings produced by |\PitonInputFile|. +% \item The key |break-lines| is a conjonction of the two previous keys. +% \end{itemize} +% +% \bigskip +% The package \pkg{piton} provides also several keys to control the appearance +% on the line breaks allowed by |break-lines-in-Piton|. +% +% \begin{itemize} +% \item With the key |indent-broken-lines|, the indentation of a broken line is +% respected at carriage return. +% +% \item The key |end-of-broken-line| corresponds to the symbol placed at the end +% of a broken line. The initial value is: |\hspace*{0.5em}\textbackslash|. +% +% \item The key |continuation-symbol| corresponds to the symbol placed at each +% carriage return. The initial value is: |+\;|. +% +% \item The key |continuation-symbol-on-indentation| coresponds to the symbol +% placed at each carriage return, on the position of the indentation (only when +% the key |indent-broken-line| is in force). The initial value is: +% |$\hookrightarrow\;$|. +% \end{itemize} +% +% +% \bigskip +% The following code has been composed in a standard LaTeX |{minipage}| of width +% 12~cm with the following tuning: +% +% \begin{Verbatim} +% \PitonOptions{break-lines,indent-broken-lines,background-color=gray!15} +% \end{Verbatim} +% +% \begin{center} +% \PitonOptions{break-lines,indent-broken-lines,background-color=gray!15} +% \begin{minipage}{12cm} +% \begin{Piton} +% def dict_of_list(l): +% """Converts a list of subrs and descriptions of glyphs in a dictionary""" +% our_dict = {} +% for list_letter in l: +% if (list_letter[0][0:3] == 'dup'): # if it's a subr +% name = list_letter[0][4:-3] +% print("We treat the subr of number " + name) +% else: +% name = list_letter[0][1:-3] # if it's a glyph +% print("We treat the glyph of number " + name) +% our_dict[name] = [treat_Postscript_line(k) for k in list_letter[1:-1]] +% return dict +% \end{Piton} +% \end{minipage} +% \end{center} +% +% \subsection{Footnotes in the environments of piton} +% +% \label{footnote} +% If you want to put footnotes in an environment |{Piton}| or +% (or, more unlikely, in a listing produced by |\PitonInputFile|), you can use a +% pair |\footnotemark|--|\footnotetext|. +% +% \smallskip +% However, it's also possible to extract the footnotes with the help of the +% package \pkg{footnote} or the package \pkg{footnotehyper}. +% +% \smallskip +% If \pkg{piton} is loaded with the option |footnote| (with +% |\usepackage[footnote]{piton}| or with |\PassOptionsToPackage|), the +% package \pkg{footnote} is loaded (if it is not yet loaded) and it is used to +% extract the footnotes. +% +% \smallskip +% If \pkg{piton} is loaded with the option |footnotehyper|, the package +% \pkg{footnotehyper} is loaded (if it is not yet loaded) ant it is used to +% extract footnotes. +% +% \smallskip +% Caution: The packages \pkg{footnote} and \pkg{footnotehyper} are incompatible. +% The package \pkg{footnotehyper} is the successor of the package \pkg{footnote} +% and should be used preferently. The package \pkg{footnote} has some drawbacks, +% in particular: it must be loaded after the package \pkg{xcolor} and it is not +% perfectly compatible with \pkg{hyperref}. +% +% \medskip +% In this document, the package \pkg{piton} has been loaded with the +% option |footnotehyper|. For examples of notes, cf. \ref{notes-examples}, +% p.~\pageref{notes-examples}. +% +% \subsection{Tabulations} +% +% \smallskip +% Even though it's recommended to indent the Python listings with spaces (see +% PEP~8), \pkg{piton} accepts the characters of tabulation (that is to say the +% characters U+0009) at the beginning of the lines. Each character U+0009 is +% replaced by $n$~spaces. The initial value of $n$ is $4$ but it's possible to +% change it with the key |tab-size| of |\PitonOptions|. +% +% \smallskip +% There exists also a key |tabs-auto-gobble| which computes the minimal value +% $n$ of the number of consecutive characters U+0009 beginning each (non empty) +% line of the environment |{Piton}| and applies |gobble| with that value of~$n$ +% (before replacement of the tabulations by spaces, of course). Hence, that key +% is similar to the key |auto-gobble| but acts on U+0009 instead of U+0020 +% (spaces). +% +% \section{Examples} +% +% \subsection{Line numbering} +% +% \label{example-numbering} +% +% We remind that it's possible to have an automatic numbering of the lines in +% the Python listings by using the key |line-numbers| or the key |all-line-numbers|. +% +% By default, the numbers of the lines are composed by \pkg{piton} in an +% overlapping position on the left (by using internally the command |\llap| of LaTeX). +% +% In order to avoid that overlapping, it's possible to use the option |left-margin=auto| +% which will insert automatically a margin adapted to the numbers of lines that +% will be written (that margin is larger when the numbers are greater than~10). +% +% +% \begingroup +% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +% \begin{Verbatim} +% ~emphase&\PitonOptions{background-color=gray!10, left-margin = auto, line-numbers}@ +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x) #> (appel récursif) +% elif x > 1: +% return pi/2 - arctan(1/x) #> (autre appel récursif) +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \end{Verbatim} +% \endgroup +% +% +% +% \begingroup +% \PitonOptions{background-color=gray!10,left-margin = auto, line-numbers} +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x) #> (appel récursif) +% elif x > 1: +% return pi/2 - arctan(1/x) #> (autre appel récursif) +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \endgroup +% +% +% +% \bigskip +% \subsection{Formatting of the LaTeX comments} +% +% \label{example-comments} +% +% It's possible to modify the style |Comment.LaTeX| (with |\SetPitonStyle|) in +% order to display the LaTeX comments (which begin with |#>|) aligned on the +% right margin. +% +% +% \begingroup +% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +% \begin{Verbatim} +% \PitonOptions{background-color=gray!10} +% ~emphase&\SetPitonStyle{Comment.LaTeX = \hfill \normalfont\color{gray}}@ +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x) #> appel récursif +% elif x > 1: +% return pi/2 - arctan(1/x) #> autre appel récursif +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \end{Verbatim} +% \endgroup +% +% \begingroup +% \PitonOptions{background-color=gray!10} +% \SetPitonStyle{Comment.LaTeX = \hfill \normalfont\color{gray}} +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x) #> appel récursif +% elif x > 1: +% return pi/2 - arctan(1/x) #> autre appel récursif +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \endgroup +% +% +% \vspace{1cm} +% It's also possible to display these LaTeX comments in a kind of second column +% by limiting the width of the Python code by an environment |{minipage}| of LaTeX. +% +% +% \begingroup +% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +% \begin{Verbatim} +% \PitonOptions{background-color=gray!10} +% ~emphase&\NewDocumentCommand{\MyLaTeXCommand}{m}{\hfill \normalfont\itshape\rlap{\quad #1}}@ +% ~emphase&\SetPitonStyle{Comment.LaTeX = \MyLaTeXCommand}@ +% ~emphase&\begin{minipage}{12cm}@ +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x) #> appel récursif +% elif x > 1: +% return pi/2 - arctan(1/x) #> autre appel récursif +% else: +% s = 0 +% for k in range(n): +% s += (-1)**k/(2*k+1)*x**(2*k+1) +% return s +% \end{Piton} +% ~emphase&\end{minipage}@ +% \end{Verbatim} +% \endgroup +% +% +% +% \begingroup +% \PitonOptions{background-color=gray!10} +% \NewDocumentCommand{\MyLaTeXCommand}{m}{\hfill \normalfont\itshape\rlap{\quad #1}} +% \SetPitonStyle{Comment.LaTeX = \MyLaTeXCommand} +% \begin{minipage}{12cm} +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x) #> appel récursif +% elif x > 1: +% return pi/2 - arctan(1/x) #> autre appel récursif +% else: +% s = 0 +% for k in range(n): +% s += (-1)**k/(2*k+1)*x**(2*k+1) +% return s +% \end{Piton} +% \end{minipage} +% \endgroup +% +% +% \bigskip +% \subsection{Notes in the listings} +% +% \label{notes-examples} +% +% In order to be able to extract the notes (which are typeset with the command +% |\footnote|), the extension \pkg{piton} must be loaded with the key |footnote| +% or the key |footenotehyper| as explained in the section \ref{footnote} +% p.~\pageref{footnote}. In this document, the extension \pkg{piton} has been +% loaded with the key |footnotehyper|. +% +% Of course, in an environment |{Piton}|, a command |\footnote| may appear only +% within a LaTeX comment (which begins with |#>|). It's possible to have comments +% which contain only that command |\footnote|. That's the case in the following example. +% +% +% +% \begingroup +% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +% \begin{Verbatim} +% \PitonOptions{background-color=gray!10} +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x)~emphase&#>\footnote{First recursive call.}]@ +% elif x > 1: +% return pi/2 - arctan(1/x)~emphase&#>\footnote{Second recursive call.}@ +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \end{Verbatim} +% \endgroup +% +% \begingroup +% \PitonOptions{background-color=gray!10} +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x)#>\footnote{First recursive call.} +% elif x > 1: +% return pi/2 - arctan(1/x)#>\footnote{Second recursive call.} +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \endgroup +% +% +% \vspace{1cm} +% +% If an environment |{Piton}| is used in an environment |{minipage}| of LaTeX, +% the notes are composed, of course, at the foot of the environment +% |{minipage}|. Recall that such |{minipage}| can't be broken by a page break. +% +% +% \begingroup +% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +% \begin{Verbatim} +% \PitonOptions{background-color=gray!10} +% \emphase\begin{minipage}{\linewidth} +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x)~emphase&#>\footnote{First recursive call.}@ +% elif x > 1: +% return pi/2 - arctan(1/x)~emphase&#>\footnote{Second recursive call.}@ +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \end{minipage} +% \end{Verbatim} +% \endgroup +% +% \begingroup +% \PitonOptions{background-color=gray!10} +% \begin{minipage}{\linewidth} +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x)#>\footnote{First recursive call.} +% elif x > 1: +% return pi/2 - arctan(1/x)#>\footnote{Second recursive call.} +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \end{minipage} +% \endgroup +% +% +% \vspace{1cm} +% If we embed an environment |{Piton}| in an environment |{minipage}| +% (typically in order to limit the width of a colored background), it's +% necessary to embed the whole environment |{minipage}| in an environment +% |{savenotes}| (of \pkg{footnote} or \pkg{footnotehyper}) in order to have the +% footnotes composed at the bottom of the page. +% +% \begingroup +% \fvset{commandchars=\~\&\@,formatcom=\small\color{gray}} +% \begin{Verbatim} +% \PitonOptions{background-color=gray!10} +% ~emphase&\begin{savenotes}@ +% \begin{minipage}{13cm} +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x)~emphase&#>\footnote{First recursive call.}@ +% elif x > 1: +% return pi/2 - arctan(1/x)~emphase&#>\footnote{Second recursive call.}@ +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \end{minipage} +% ~emphase&\end{savenotes}@ +% \end{Verbatim} +% \endgroup +% +% +% +% \begin{savenotes} +% \PitonOptions{background-color=gray!10} +% \begin{minipage}{13cm} +% \begin{Piton} +% def arctan(x,n=10): +% if x < 0: +% return -arctan(-x)#>\footnote{First recursive call.} +% elif x > 1: +% return pi/2 - arctan(1/x)#>\footnote{Second recursive call.} +% else: +% return sum( (-1)**k/(2*k+1)*x**(2*k+1) for k in range(n) ) +% \end{Piton} +% \end{minipage} +% \end{savenotes} +% +% \bigskip +% +% \subsection{An example of tuning of the styles} +% +% The graphical styles have been presented in the section \ref{styles}, +% p.~\pageref{styles}. +% +% \smallskip +% We present now an example of tuning of these styles adapted to the documents +% in black and white. We use the font \emph{DejaVu Sans Mono}\footnote{See: +% \url{https://dejavu-fonts.github.io}} specified by the command |\setmonofont| of +% \pkg{fontspec}. +% +% That tuning uses the command |\highLight| of \pkg{lua-ul} (that package +% requires itself the package \pkg{luacolor}). +% +% \begin{Verbatim} +% \setmonofont[Scale=0.85]{DejaVu Sans Mono} +% +% \SetPitonStyle +% { +% Number = , +% String = \itshape , +% String.Doc = \color{gray} \slshape , +% Operator = , +% Operator.Word = \bfseries , +% Name.Builtin = , +% Name.Function = \bfseries \highLight[gray!20] , +% Comment = \color{gray} , +% Comment.LaTeX = \normalfont \color{gray}, +% Keyword = \bfseries , +% Name.Namespace = , +% Name.Class = , +% Name.Type = , +% InitialValues = \color{gray} +% } +% \end{Verbatim} +% +% +% \begingroup +% +% \setmonofont[Scale=0.85]{DejaVu Sans Mono} +% +% \PitonOptions{splittable} +% +% \SetPitonStyle +% { +% Number = , +% String = \itshape , +% String.Doc = \color{gray} \slshape , +% Operator.Word = \bfseries , +% Operator = , +% Name.Builtin = , +% Name.Function = \bfseries \highLight[gray!20] , +% Comment = \color{gray} , +% Comment.LaTeX = \normalfont \color{gray} , +% Keyword = \bfseries , +% Name.Namespace = , +% Name.Class = , +% Name.Type = , +% InitialValues = \color{gray} +% } +% +% +% \bigskip +% +% \begin{Piton} +% from math import pi +% +% def arctan(x,n=10): +% """Compute the mathematical value of arctan(x) +% +% n is the number of terms in the sum +% """ +% if x < 0: +% return -arctan(-x) # appel récursif +% elif x > 1: +% return pi/2 - arctan(1/x) +% #> (we have used that $\arctan(x)+\arctan(1/x)=\pi/2$ for $x>0$) +% else: +% s = 0 +% for k in range(n): +% s += (-1)**k/(2*k+1)*x**(2*k+1) +% return s +% \end{Piton} +% +% \endgroup +% +% \subsection{Use with pyluatex} +% +% The package \pkg{pyluatex} is an extension which allows the execution of some +% Python code from |lualatex| (provided that Python is installed on the machine +% and that the compilation is done with |lualatex| and |--shell-escape|). +% +% Here is, for example, an environment |{PitonExecute}| which formats a Python +% listing (with \pkg{piton}) but display also the output of the execution of the +% code with Python (for technical reasons, the |!| is mandatory in the signature +% of the environment). +% +% +% \begin{Verbatim} +% \ExplSyntaxOn +% \NewDocumentEnvironment { ~emphase#PitonExecute@ } { ! O { } } % the ! is mandatory +% { +% \PyLTVerbatimEnv +% \begin{pythonq} +% } +% { +% \end{pythonq} +% \directlua +% { +% tex.print("\\PitonOptions{~#1}") +% tex.print("\\begin{Piton}") +% tex.print(pyluatex.get_last_code()) +% tex.print("\\end{Piton}") +% tex.print("") +% } +% \begin{center} +% \directlua{tex.print(pyluatex.get_last_output())} +% \end{center} +% } +% \ExplSyntaxOff +% \end{Verbatim} +% +% \ExplSyntaxOn +% \NewDocumentEnvironment { PitonExecute } { ! O { } } +% { +% \PyLTVerbatimEnv +% \begin{pythonq} +% } +% { +% \end{pythonq} +% \directlua +% { +% tex.print("\\PitonOptions{#1}") +% tex.print("\\begin{Piton}") +% tex.print(pyluatex.get_last_code()) +% tex.print("\\end{Piton}") +% tex.print("") +% } +% \begin{center} +% \directlua{tex.print(pyluatex.get_last_output())} +% \end{center} +% } +% \ExplSyntaxOff +% +% This environment |{PitonExecute}| takes in as optional argument (between +% square brackets) the options of the command |\PitonOptions|. +% +% +% \bigskip +% \clearpage +% +% \section{Implementation} +% +% \subsection{Introduction} +% +% The main job of the package \pkg{piton} is to take in as input a Python +% listing and to send back to LaTeX as output that code \emph{with interlaced LaTeX +% instructions of formatting}. +% +% In fact, all that job is done by a \textsc{lpeg} called |python|. That +% \textsc{lpeg}, when matched against the string of a Python listing, +% returns as capture a Lua table containing data to send to LaTeX. +% The only thing to do after will be to apply |tex.tprint| to each element of +% that table.\footnote{Recall that |tex.tprint| takes in as argument a Lua table whose +% first component is a ``catcode table'' and the second element a string. The +% string will be sent to LaTeX with the regime of catcodes specified by the +% catcode table. If no catcode table is provided, the standard catcodes of LaTeX +% will be used.} +% +% \bigskip +% Consider, for example, the following Python code: +% +% \begin{Piton} +% def parity(x): +% return x%2 +% \end{Piton} +% +% The capture returned by the \pkg{lpeg} |python| against that code is the +% Lua table containing the following elements : +% +% \bigskip +% \begin{minipage}{\linewidth} +% \color{gray} +% +% |{ "\\__piton_begin_line:" }|\footnote{Each line of the Python listings will +% be encapsulated in a pair: \texttt{\textbackslash_@@_begin_line:} -- +% \texttt{\textbackslash@@_end_line:}. The token +% \texttt{\textbackslash@@_end_line:} must be explicit because it will be used as +% marker in order to delimit the argument of the command \texttt{\textbackslash +% @@\_begin\_line:}. Both tokens \texttt{\textbackslash_@@_begin_line:} and +% \texttt{\textbackslash@@_end_line:} will be nullified in the command +% \texttt{\textbackslash piton} (since there can't be lines breaks in the +% argument of a command \texttt{\textbackslash piton}).} +% +% \texttt{\{ "\{\textbackslash PitonStyle\{Keyword\}\{" \}}\footnote{The +% lexical elements of Python for which we have a \pkg{piton} style will be +% formatted via the use of the command \texttt{\textbackslash PitonStyle}. +% Such an element is typeset in LaTeX via the syntax \texttt{\{\textbackslash +% PitonStyle\{\textsl{style}\}\{...\}\}} because the instructions inside an \texttt{\textbackslash +% PitonStyle} may be both semi-global declarations like +% \texttt{\textbackslash bfseries} and commands with one argument like +% \texttt{\textbackslash fbox}.} +% +% \texttt{\{ +% luatexbase.catcodetables.CatcodeTableOther\footnote{\texttt{luatexbase.catcodetables.CatcodeTableOther} is a mere number which corresponds to the ``catcode table'' whose all characters have the catcode ``other'' (which means that they will be typeset by LaTeX verbatim).}, "def" \} } +% +% |{ "}}" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, " " }| +% +% |{ "{\PitonStyle{Name.Function}{" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, "parity" }| +% +% |{ "}}" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, "(" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, "x" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, ")" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, ":" }| +% +% |{ "\\__piton_end_line: \\__piton_newline: \\__piton_begin_line:" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, " " }| +% +% |{ "{\PitonStyle{Keyword}{" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, "return" }| +% +% |{ "}}" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, " " }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, "x" }| +% +% |{ "{\PitonStyle{Operator}{" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, "&" }| +% +% |{ "}}" }| +% +% |{ "{\PitonStyle{Number}{" }| +% +% |{ luatexbase.catcodetables.CatcodeTableOther, "2" }| +% +% |{ "}}" }| +% +% |{ "\\__piton_end_line:" }| +% +% \end{minipage} +% +% \bigskip +% We give now the LaTeX code which is sent back by Lua to TeX (we have written +% on several lines for legibility but no character |\r| will be sent to LaTeX). The +% characters which are greyed-out are sent to LaTeX with the catcode ``other'' +% (=12). All the others characters are sent with the regime of catcodes of L3 +% (as set by |\ExplSyntaxOn|) +% +% +% \begingroup +% \def\gbox#1{\colorbox{gray!20}{\strut #1}} +% \setlength{\fboxsep}{1pt} +% +% \begin{Verbatim*}[formatcom = \color{black}] +% \__piton_begin_line:{\PitonStyle{Keyword}{~gbox#def@}} +% ~gbox# @{\PitonStyle{Name.Function}{~gbox#parity@}}~gbox#(x):@\__piton_end_line:\__piton_newline: +% \__piton_begin_line:~gbox# @{\PitonStyle{Keyword}{~gbox#return@}} +% ~gbox# x@{\PitonStyle{Operator}{~gbox#%@}}{\PitonStyle{Number}{~gbox#2@}}\__piton_end_line: +% \end{Verbatim*} +% \endgroup +% +% +% +% +% \subsection{The L3 part of the implementation} +% +% \subsubsection{Declaration of the package} +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\RequirePackage{l3keys2e} +\ProvidesExplPackage + {piton} + {\myfiledate} + {\myfileversion} + {Highlight Python codes with LPEG on LuaLaTeX} +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\msg_new:nnn { piton } { LuaLaTeX~mandatory } + { + LuaLaTeX~is~mandatory.\\ + The~package~'piton'~requires~the~engine~LuaLaTeX.\\ + \str_if_eq:VnT \c_sys_jobname_str { output } + { If~you~use~Overleaf,~you~can~switch~to~LuaLaTeX~in~the~"Menu". \\} + If~you~go~on,~the~package~'piton'~won't~be~loaded. + } +\sys_if_engine_luatex:F { \msg_critical:nn { piton } { LuaLaTeX~mandatory } } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\RequirePackage { luatexbase } +% \end{macrocode} +% +% \bigskip +% The boolean |\c_@@_footnotehyper_bool| will indicate if the option +% |footnotehyper| is used. +% \begin{macrocode} +\bool_new:N \c_@@_footnotehyper_bool +% \end{macrocode} +% +% \medskip +% The boolean |\c_@@_footnote_bool| will indicate if the option |footnote| is +% used, but quicky, it will also be set to |true| if the option |footnotehyper| +% is used. +% \begin{macrocode} +\bool_new:N \c_@@_footnote_bool +% \end{macrocode} +% +% \medskip +% The following boolean corresponds to the key |math-comments| (only at load-time). +% \begin{macrocode} +\bool_new:N \c_@@_math_comments_bool +% \end{macrocode} +% +% \medskip +% The following boolean corresponds to the key |beamer|. +% \begin{macrocode} +\bool_new:N \c_@@_beamer_bool +% \end{macrocode} +% +% \bigskip +% We define a set of keys for the options at load-time. +% \begin{macrocode} +\keys_define:nn { piton / package } + { + footnote .bool_set:N = \c_@@_footnote_bool , + footnotehyper .bool_set:N = \c_@@_footnotehyper_bool , + escape-inside .tl_set:N = \c_@@_escape_inside_tl , + escape-inside .initial:n = , + comment-latex .code:n = { \lua_now:n { comment_latex = "#1" } } , + comment-latex .value_required:n = true , + math-comments .bool_set:N = \c_@@_math_comments_bool , + math-comments .default:n = true , + beamer .bool_set:N = \c_@@_beamer_bool , + beamer .default:n = true , + unknown .code:n = \msg_error:nn { piton } { unknown~key~for~package } + } +% \end{macrocode} +% +% \begin{macrocode} +\msg_new:nnn { piton } { unknown~key~for~package } + { + Unknown~key.\\ + You~have~used~the~key~'\l_keys_key_str'~but~the~only~keys~available~here~ + are~'beamer',~'comment-latex',~'escape-inside',~'footnote',~'footnotehyper'~and~ + 'math-comments'.~Other~keys~are~available~in~\token_to_str:N \PitonOptions.\\ + That~key~will~be~ignored. + } +% \end{macrocode} +% +% \bigskip +% We process the options provided by the user at load-time. +% \begin{macrocode} +\ProcessKeysOptions { piton / package } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\begingroup +\cs_new_protected:Npn \@@_set_escape_char:nn #1 #2 + { + \lua_now:n { piton_begin_escape = "#1" } + \lua_now:n { piton_end_escape = "#2" } + } +\cs_generate_variant:Nn \@@_set_escape_char:nn { x x } +\@@_set_escape_char:xx + { \tl_head:V \c_@@_escape_inside_tl } + { \tl_tail:V \c_@@_escape_inside_tl } +\endgroup +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\@ifclassloaded { beamer } { \bool_set_true:N \c_@@_beamer_bool } { } +\bool_if:NT \c_@@_beamer_bool { \lua_now:n { piton_beamer = true } } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\hook_gput_code:nnn { begindocument } { . } + { + \@ifpackageloaded { xcolor } + { } + { \msg_fatal:nn { piton } { xcolor~not~loaded } } + } +% \end{macrocode} +% +% \begin{macrocode} +\msg_new:nnn { piton } { xcolor~not~loaded } + { + xcolor~not~loaded \\ + The~package~'xcolor'~is~required~by~'piton'.\\ + This~error~is~fatal. + } +% \end{macrocode} +% +% +% \begin{macrocode} +\msg_new:nnn { piton } { footnote~with~footnotehyper~package } + { + Footnote~forbidden.\\ + You~can't~use~the~option~'footnote'~because~the~package~ + footnotehyper~has~already~been~loaded.~ + If~you~want,~you~can~use~the~option~'footnotehyper'~and~the~footnotes~ + within~the~environments~of~piton~will~be~extracted~with~the~tools~ + of~the~package~footnotehyper.\\ + If~you~go~on,~the~package~footnote~won't~be~loaded. + } +% \end{macrocode} +% +% \begin{macrocode} +\msg_new:nnn { piton } { footnotehyper~with~footnote~package } + { + You~can't~use~the~option~'footnotehyper'~because~the~package~ + footnote~has~already~been~loaded.~ + If~you~want,~you~can~use~the~option~'footnote'~and~the~footnotes~ + within~the~environments~of~piton~will~be~extracted~with~the~tools~ + of~the~package~footnote.\\ + If~you~go~on,~the~package~footnotehyper~won't~be~loaded. + } +% \end{macrocode} +% +% \medskip +% \begin{macrocode} +\bool_if:NT \c_@@_footnote_bool + { +% \end{macrocode} +% The class \cls{beamer} has its own system to extract footnotes and that's why +% we have nothing to do if \cls{beamer} is used. +% \begin{macrocode} + \@ifclassloaded { beamer } + { \bool_set_false:N \c_@@_footnote_bool } + { + \@ifpackageloaded { footnotehyper } + { \@@_error:n { footnote~with~footnotehyper~package } } + { \usepackage { footnote } } + } + } +% \end{macrocode} +% +% \begin{macrocode} +\bool_if:NT \c_@@_footnotehyper_bool + { +% \end{macrocode} +% The class \cls{beamer} has its own system to extract footnotes and that's why +% we have nothing to do if \cls{beamer} is used. +% \begin{macrocode} + \@ifclassloaded { beamer } + { \bool_set_false:N \c_@@_footnote_bool } + { + \@ifpackageloaded { footnote } + { \@@_error:n { footnotehyper~with~footnote~package } } + { \usepackage { footnotehyper } } + \bool_set_true:N \c_@@_footnote_bool + } + } +% \end{macrocode} +% The flag |\c_@@_footnote_bool| is raised and so, we will only have to test +% |\c_@@_footnote_bool| in order to know if we have to insert an environment +% |{savenotes}|. +% +% \bigskip +% \subsubsection{Parameters and technical definitions} +% +% The following string will contain the name of the informatic language +% considered (the initial value is |python|). +% +% \begin{macrocode} +\str_new:N \l_@@_language_str +\str_set:Nn \l_@@_language_str { python } +% \end{macrocode} +% +% We will compute (with Lua) the numbers of lines of the Python code and store +% it in the following counter. +% \begin{macrocode} +\int_new:N \l_@@_nb_lines_int +% \end{macrocode} +% +% The same for the number of non-empty lines of the Python codes. +% \begin{macrocode} +\int_new:N \l_@@_nb_non_empty_lines_int +% \end{macrocode} +% +% The following counter will be used to count the lines during the composition. +% It will count all the lines, empty or not empty. It won't be used to print the +% numbers of the lines. +% \begin{macrocode} +\int_new:N \g_@@_line_int +% \end{macrocode} +% +% \medskip +% The following token list will contains the (potential) informations to write +% on the |aux| (to be used in the next compilation). +% \begin{macrocode} +\tl_new:N \g_@@_aux_tl +% \end{macrocode} +% +% \medskip +% The following counter corresponds to the key |splittable| of |\PitonOptions|. +% If the value of |\l_@@_splittable_int| is equal to $n$, then no line break can +% occur within the first $n$~lines or the last $n$~lines of the listings. +% \begin{macrocode} +\int_new:N \l_@@_splittable_int +% \end{macrocode} +% +% \medskip +% An initial value of |splittable| equal to 100 is equivalent to say that the +% environments |{Piton}| are unbreakable. +% \begin{macrocode} +\int_set:Nn \l_@@_splittable_int { 100 } +% \end{macrocode} +% +% \medskip +% The following string corresponds to the key |background-color| of |\PitonOptions|. +% \begin{macrocode} +\clist_new:N \l_@@_bg_color_clist +% \end{macrocode} +% +% \medskip +% The package \pkg{piton} will also detect the lines of code which correspond to +% the user input in a Python console, that is to say the lines of code beginning +% with |>>>| and |...|. It's possible, with the key |prompt-background-color|, +% to require a background for these lines of code (and the other lines of code +% will have the standard background color specified by |background-color|). +% \begin{macrocode} +\tl_new:N \l_@@_prompt_bg_color_tl +% \end{macrocode} +% +% \medskip +% We will compute the maximal width of the lines of an environment |{Piton}| in +% |\g_@@_width_dim|. We need a global variable because, when the key |footnote| +% is in force, each line when be composed in an environment |{savenotes}| and +% (when |slim| is in force) we need to exit |\g_@@_width_dim| from that +% environment. +% \begin{macrocode} +\dim_new:N \g_@@_width_dim +% \end{macrocode} +% The value of that dimension as written on the |aux| file will be stored in +% |\l_@@_width_on_aux_dim|. +% \begin{macrocode} +\dim_new:N \l_@@_width_on_aux_dim +% \end{macrocode} +% +% \medskip +% We will count the environments |{Piton}| (and, in fact, also the commands +% |\PitonInputFile|, despite the name |\g_@@_env_int|). +% \begin{macrocode} +\int_new:N \g_@@_env_int +% \end{macrocode} +% +% \medskip +% The following boolean corresponds to the key |show-spaces|. +% \begin{macrocode} +\bool_new:N \l_@@_show_spaces_bool +% \end{macrocode} +% +% \medskip +% The following booleans correspond to the keys |break-lines| and +% |indent-broken-lines|. +% \begin{macrocode} +\bool_new:N \l_@@_break_lines_in_Piton_bool +\bool_new:N \l_@@_indent_broken_lines_bool +% \end{macrocode} +% +% \medskip +% The following token list corresponds to the key |continuation-symbol|. +% \begin{macrocode} +\tl_new:N \l_@@_continuation_symbol_tl +\tl_set:Nn \l_@@_continuation_symbol_tl { + } +% \end{macrocode} +% +% \medskip +% \begin{macrocode} +% The following token list corresponds to the key +% |continuation-symbol-on-indentation|. The name has been shorten to |csoi|. +\tl_new:N \l_@@_csoi_tl +\tl_set:Nn \l_@@_csoi_tl { $ \hookrightarrow \; $ } +% \end{macrocode} +% +% \medskip +% The following token list corresponds to the key |end-of-broken-line|. +% \begin{macrocode} +\tl_new:N \l_@@_end_of_broken_line_tl +\tl_set:Nn \l_@@_end_of_broken_line_tl { \hspace*{0.5em} \textbackslash } +% \end{macrocode} +% +% \medskip +% The following boolean corresponds to the key |break-lines-in-piton|. +% \begin{macrocode} +\bool_new:N \l_@@_break_lines_in_piton_bool +% \end{macrocode} +% +% \medskip +% The following boolean corresponds to the key |slim| of |\PitonOptions|. +% \begin{macrocode} +\bool_new:N \l_@@_slim_bool +% \end{macrocode} +% +% \medskip +% The following dimension corresponds to the key |left-margin| of |\PitonOptions|. +% \begin{macrocode} +\dim_new:N \l_@@_left_margin_dim +% \end{macrocode} +% +% \medskip +% The following boolean will be set when the key |left-margin=auto| +% is used. +% \begin{macrocode} +\bool_new:N \l_@@_left_margin_auto_bool +% \end{macrocode} +% +% \medskip +% The following dimension corresponds to the key |numbers-sep| of +% |\PitonOptions|. +% \begin{macrocode} +\dim_new:N \l_@@_numbers_sep_dim +\dim_set:Nn \l_@@_numbers_sep_dim { 0.7 em } +% \end{macrocode} +% +% \medskip +% The tabulators will be replaced by the content of the following token list. +% \begin{macrocode} +\tl_new:N \l_@@_tab_tl +% \end{macrocode} +% +% \medskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_tab_tl:n #1 + { + \tl_clear:N \l_@@_tab_tl + \prg_replicate:nn { #1 } + { \tl_put_right:Nn \l_@@_tab_tl { ~ } } + } +\@@_set_tab_tl:n { 4 } +% \end{macrocode} +% +% \medskip +% The following integer corresponds to the key |gobble|. +% \begin{macrocode} +\int_new:N \l_@@_gobble_int +% \end{macrocode} +% +% \medskip +% \begin{macrocode} +\tl_new:N \l_@@_space_tl +\tl_set:Nn \l_@@_space_tl { ~ } +% \end{macrocode} +% +% +% \medskip +% At each line, the following counter will count the spaces at the beginning. +% \begin{macrocode} +\int_new:N \g_@@_indentation_int +% \end{macrocode} +% +% \medskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_an_indentation_space: + { \int_gincr:N \g_@@_indentation_int } +% \end{macrocode} +% +% \medskip +% The following command |\@@_beamer_command:n| executes the argument +% corresponding to its argument but also stores it in |\l_@@_beamer_command_str|. +% That string is used only in the error message ``|cr~not~allowed|'' raised when +% there is a carriage return in the mandatory argument of that command. +% \begin{macrocode} +\cs_new_protected:Npn \@@_beamer_command:n #1 + { + \str_set:Nn \l_@@_beamer_command_str { #1 } + \use:c { #1 } + } +% \end{macrocode} +% +% \bigskip +% In the environment |{Piton}|, the command |\label| will be linked to the +% following command. +% \begin{macrocode} +\cs_new_protected:Npn \@@_label:n #1 + { + \bool_if:NTF \l_@@_line_numbers_bool + { + \@bsphack + \protected@write \@auxout { } + { + \string \newlabel { #1 } + { +% \end{macrocode} +% Remember that the content of a line is typeset in a box \emph{before} the +% composition of the potential number of line. +% \begin{macrocode} + { \int_eval:n { \g_@@_visual_line_int + 1 } } + { \thepage } + } + } + \@esphack + } + { \msg_error:nn { piton } { label~with~lines~numbers } } + } +% \end{macrocode} +% +% +% \bigskip +% The following commands are a easy way to insert safely braces (|{| and |}|) in +% the TeX flow. +% \begin{macrocode} +\cs_new_protected:Npn \@@_open_brace: + { \directlua { piton.open_brace() } } +\cs_new_protected:Npn \@@_close_brace: + { \directlua { piton.close_brace() } } +% \end{macrocode} +% +% \bigskip +% The following token list will be evaluated at the beginning of +% |\@@_begin_line:|... |\@@_end_line:| and cleared at the end. It will be used +% by LPEG acting between the lines of the Python code in order to add +% instructions to be executed at the beginning of the line. +% \begin{macrocode} +\tl_new:N \g_@@_begin_line_hook_tl +% \end{macrocode} +% +% \smallskip +% For example, the LPEG |Prompt| will trigger the following command which will +% insert an instruction in the hook |\g_@@_begin_line_hook| to specify that a +% background must be inserted to the current line of code. +% \begin{macrocode} +\cs_new_protected:Npn \@@_prompt: + { + \tl_gset:Nn \g_@@_begin_line_hook_tl + { \clist_set:NV \l_@@_bg_color_clist \l_@@_prompt_bg_color_tl } + } +% \end{macrocode} +% +% +% \bigskip +% You will keep track of the current style for the treatment of EOL (for the +% multi-line syntactic elements). +% \begin{macrocode} +\clist_new:N \g_@@_current_style_clist +\clist_set:Nn \g_@@_current_style_clist { __end } +% \end{macrocode} +% The element |__end| is an arbitrary syntactic marker. +% +% \medskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_close_current_styles: + { + \int_set:Nn \l_tmpa_int { \clist_count:N \g_@@_current_style_clist - 1 } + \exp_args:NV \@@_close_n_styles:n \l_tmpa_int + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_close_n_styles:n #1 + { + \int_compare:nNnT { #1 } > 0 + { + \@@_close_brace: + \@@_close_brace: + \@@_close_n_styles:n { #1 - 1 } + } + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_open_current_styles: + { \exp_last_unbraced:NV \@@_open_styles:w \g_@@_current_style_clist , } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_open_styles:w #1 , + { + \tl_if_eq:nnF { #1 } { __end } + { \@@_open_brace: #1 \@@_open_brace: \@@_open_styles:w } + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_pop_style: + { + \clist_greverse:N \g_@@_current_style_clist + \clist_gpop:NN \g_@@_current_style_clist \l_tmpa_tl + \clist_gpop:NN \g_@@_current_style_clist \l_tmpa_tl + \clist_gpush:Nn \g_@@_current_style_clist { __end } + \clist_greverse:N \g_@@_current_style_clist + } +% \end{macrocode} +% +% \medskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_push_style:n #1 + { + \clist_greverse:N \g_@@_current_style_clist + \clist_gpop:NN \g_@@_current_style_clist \l_tmpa_tl + \clist_gpush:Nn \g_@@_current_style_clist { #1 } + \clist_gpush:Nn \g_@@_current_style_clist { __end } + \clist_greverse:N \g_@@_current_style_clist + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_push_and_exec:n #1 + { + \@@_push_style:n { #1 } + \@@_open_brace: #1 \@@_open_brace: + } +% \end{macrocode} +% +% \bigskip +% \subsubsection{Treatment of a line of code} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_replace_spaces:n #1 + { + \tl_set:Nn \l_tmpa_tl { #1 } + \bool_if:NTF \l_@@_show_spaces_bool + { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 + { +% \end{macrocode} +% If the key |break-lines-in-Piton| is in force, we replace all the characters +% U+0020 (that is to say the spaces) by |\@@_breakable_space:|. Remark that, +% except the spaces inserted in the LaTeX comments (and maybe in the math +% comments), all these spaces are of catcode ``other'' (=12) and are +% unbreakable. +% \begin{macrocode} + \bool_if:NT \l_@@_break_lines_in_Piton_bool + { + \regex_replace_all:nnN + { \x20 } + { \c { @@_breakable_space: } } + \l_tmpa_tl + } + } + \l_tmpa_tl + } +\cs_generate_variant:Nn \@@_replace_spaces:n { x } +% \end{macrocode} +% +% \bigskip +% In the contents provided by Lua, each line of the Python code will be +% surrounded by |\@@_begin_line:| and |\@@_end_line:|. |\@@_begin_line:| is a +% LaTeX command that we will define now but |\@@_end_line:| is only a syntactic +% marker that has no definition. +% +% \begin{macrocode} +\cs_set_protected:Npn \@@_begin_line: #1 \@@_end_line: + { + \group_begin: + \g_@@_begin_line_hook_tl + \int_gzero:N \g_@@_indentation_int +% \end{macrocode} +% +% +% Be careful: there is curryfication in the following lines. +% \begin{macrocode} + \bool_if:NTF \l_@@_slim_bool + { \hcoffin_set:Nn \l_tmpa_coffin } + { + \clist_if_empty:NTF \l_@@_bg_color_clist + { + \vcoffin_set:Nnn \l_tmpa_coffin + { \dim_eval:n { \linewidth - \l_@@_left_margin_dim } } + } + { + \vcoffin_set:Nnn \l_tmpa_coffin + { \dim_eval:n { \linewidth - \l_@@_left_margin_dim - 0.5 em } } + } + } + { + \language = -1 + \raggedright + \strut + \@@_replace_spaces:n { #1 } + \strut \hfil + } + \hbox_set:Nn \l_tmpa_box + { + \skip_horizontal:N \l_@@_left_margin_dim + \bool_if:NT \l_@@_line_numbers_bool + { + \bool_if:NF \l_@@_all_line_numbers_bool + { \tl_if_eq:nnF { #1 } { \PitonStyle {Prompt}{} } } % corrected 2023/04/10 + \@@_print_number: + } + \clist_if_empty:NF \l_@@_bg_color_clist + { + \dim_compare:nNnT \l_@@_left_margin_dim = \c_zero_dim + { + \bool_if:NF \l_@@_left_margin_auto_bool + { \skip_horizontal:n { 0.5 em } } + } + } + \coffin_typeset:Nnnnn \l_tmpa_coffin T l \c_zero_dim \c_zero_dim + } +% \end{macrocode} +% We compute in |\g_@@_width_dim| the maximal width of the lines of the +% environment. +% \begin{macrocode} + \dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \g_@@_width_dim + { \dim_gset:Nn \g_@@_width_dim { \box_wd:N \l_tmpa_box } } + \box_set_dp:Nn \l_tmpa_box { \box_dp:N \l_tmpa_box + 1.25 pt } + \box_set_ht:Nn \l_tmpa_box { \box_ht:N \l_tmpa_box + 1.25 pt } + \clist_if_empty:NTF \l_@@_bg_color_clist + { \box_use_drop:N \l_tmpa_box } + { + \vbox_top:n + { + \hbox:n + { + \@@_color:N \l_@@_bg_color_clist + \vrule height \box_ht:N \l_tmpa_box + depth \box_dp:N \l_tmpa_box + width \l_@@_width_on_aux_dim + } + \skip_vertical:n { - \box_ht_plus_dp:N \l_tmpa_box } + \box_set_wd:Nn \l_tmpa_box \l_@@_width_on_aux_dim + \box_use_drop:N \l_tmpa_box + } + } + \vspace { - 2.5 pt } + \group_end: + \tl_gclear:N \g_@@_begin_line_hook_tl + } +% \end{macrocode} +% +% \bigskip +% The command |\@@_color:N| will take in as argument a reference to a +% comma-separated list of colors. A color will be picked by using the value of +% |\g_@@_line_int| (modulo the number of colors in the list). +% \begin{macrocode} +\cs_set_protected:Npn \@@_color:N #1 + { + \int_set:Nn \l_tmpa_int { \clist_count:N #1 } + \int_set:Nn \l_tmpb_int { \int_mod:nn \g_@@_line_int \l_tmpa_int + 1 } + \tl_set:Nx \l_tmpa_tl { \clist_item:Nn #1 \l_tmpb_int } + \tl_if_eq:NnTF \l_tmpa_tl { none } +% \end{macrocode} +% By setting |\l_@@_width_on_aux_dim| to zero, the colored rectangle will be +% drawn with zero width and, thus, it will be a mere strut (and we need that strut). +% \begin{macrocode} + { \dim_zero:N \l_@@_width_on_aux_dim } + { \exp_args:NV \@@_color_i:n \l_tmpa_tl } + } +% \end{macrocode} +% +% The following command |\@@_color:n| will accept both the instruction +% |\@@_color:n { red!15 }| and the instruction |\@@_color:n { [rgb]{0.9,0.9,0} }|. +% \begin{macrocode} +\cs_set_protected:Npn \@@_color_i:n #1 + { + \tl_if_head_eq_meaning:nNTF { #1 } [ + { + \tl_set:Nn \l_tmpa_tl { #1 } + \tl_set_rescan:Nno \l_tmpa_tl { } \l_tmpa_tl + \exp_last_unbraced:NV \color \l_tmpa_tl + } + { \color { #1 } } + } +\cs_generate_variant:Nn \@@_color:n { V } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_newline: + { + \int_gincr:N \g_@@_line_int + \int_compare:nNnT \g_@@_line_int > { \l_@@_splittable_int - 1 } + { + \int_compare:nNnT + { \l_@@_nb_lines_int - \g_@@_line_int } > \l_@@_splittable_int + { + \egroup + \bool_if:NT \c_@@_footnote_bool { \end { savenotes } } + \newline + \bool_if:NT \c_@@_footnote_bool { \begin { savenotes } } + \vtop \bgroup + } + } + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\cs_set_protected:Npn \@@_breakable_space: + { + \discretionary + { \hbox:n { \color { gray } \l_@@_end_of_broken_line_tl } } + { + \hbox_overlap_left:n + { + { + \normalfont \footnotesize \color { gray } + \l_@@_continuation_symbol_tl + } + \skip_horizontal:n { 0.3 em } + \clist_if_empty:NF \l_@@_bg_color_clist + { \skip_horizontal:n { 0.5 em } } + } + \bool_if:NT \l_@@_indent_broken_lines_bool + { + \hbox:n + { + \prg_replicate:nn { \g_@@_indentation_int } { ~ } + { \color { gray } \l_@@_csoi_tl } + } + } + } + { \hbox { ~ } } + } +% \end{macrocode} +% +% \bigskip +% \subsubsection{PitonOptions} +% +% \medskip +% The following parameters correspond to the keys |line-numbers| and +% |all-line-numbers|. +% \begin{macrocode} +\bool_new:N \l_@@_line_numbers_bool +\bool_new:N \l_@@_all_line_numbers_bool +% \end{macrocode} +% +% \medskip +% The following flag corresponds to the key |resume|. +% \begin{macrocode} +\bool_new:N \l_@@_resume_bool +% \end{macrocode} +% +% \bigskip +% Be careful! The name of the following set of keys must be considered as +% public! Hence, it should \emph{not} be changed. +% +% \begin{macrocode} +\keys_define:nn { PitonOptions } + { + language .str_set:N = \l_@@_language_str , + language .value_required:n = true , + gobble .int_set:N = \l_@@_gobble_int , + gobble .value_required:n = true , + auto-gobble .code:n = \int_set:Nn \l_@@_gobble_int { -1 } , + auto-gobble .value_forbidden:n = true , + env-gobble .code:n = \int_set:Nn \l_@@_gobble_int { -2 } , + env-gobble .value_forbidden:n = true , + tabs-auto-gobble .code:n = \int_set:Nn \l_@@_gobble_int { -3 } , + tabs-auto-gobble .value_forbidden:n = true , + line-numbers .bool_set:N = \l_@@_line_numbers_bool , + line-numbers .default:n = true , + all-line-numbers .code:n = + \bool_set_true:N \l_@@_line_numbers_bool + \bool_set_true:N \l_@@_all_line_numbers_bool , + all-line-numbers .value_forbidden:n = true , + resume .bool_set:N = \l_@@_resume_bool , + resume .value_forbidden:n = true , + splittable .int_set:N = \l_@@_splittable_int , + splittable .default:n = 1 , + background-color .clist_set:N = \l_@@_bg_color_clist , + background-color .value_required:n = true , + prompt-background-color .tl_set:N = \l_@@_prompt_bg_color_tl , + prompt-background-color .value_required:n = true , + slim .bool_set:N = \l_@@_slim_bool , + slim .default:n = true , + left-margin .code:n = + \str_if_eq:nnTF { #1 } { auto } + { + \dim_zero:N \l_@@_left_margin_dim + \bool_set_true:N \l_@@_left_margin_auto_bool + } + { \dim_set:Nn \l_@@_left_margin_dim { #1 } } , + left-margin .value_required:n = true , + numbers-sep .dim_set:N = \l_@@_numbers_sep_dim , + numbers-sep .value_required:n = true , + tab-size .code:n = \@@_set_tab_tl:n { #1 } , + tab-size .value_required:n = true , + show-spaces .bool_set:N = \l_@@_show_spaces_bool , + show-spaces .default:n = true , + show-spaces-in-strings .code:n = \tl_set:Nn \l_@@_space_tl { ⣠} , % U+2423 + show-spaces-in-strings .value_forbidden:n = true , + break-lines-in-Piton .bool_set:N = \l_@@_break_lines_in_Piton_bool , + break-lines-in-Piton .default:n = true , + break-lines-in-piton .bool_set:N = \l_@@_break_lines_in_piton_bool , + break-lines-in-piton .default:n = true , + break-lines .meta:n = { break-lines-in-piton , break-lines-in-Piton } , + break-lines .value_forbidden:n = true , + indent-broken-lines .bool_set:N = \l_@@_indent_broken_lines_bool , + indent-broken-lines .default:n = true , + end-of-broken-line .tl_set:N = \l_@@_end_of_broken_line_tl , + end-of-broken-line .value_required:n = true , + continuation-symbol .tl_set:N = \l_@@_continuation_symbol_tl , + continuation-symbol .value_required:n = true , + continuation-symbol-on-indentation .tl_set:N = \l_@@_csoi_tl , + continuation-symbol-on-indentation .value_required:n = true , + unknown .code:n = + \msg_error:nn { piton } { Unknown~key~for~PitonOptions } + } +% \end{macrocode} +% +% +% \bigskip +% +% \bigskip +% The argument of |\PitonOptions| is provided by curryfication. +% \begin{macrocode} +\NewDocumentCommand \PitonOptions { } { \keys_set:nn { PitonOptions } } +% \end{macrocode} +% +% \bigskip +% \subsubsection{The numbers of the lines} +% +% \medskip +% The following counter will be used to count the lines in the code when the +% user requires the numbers of the lines to be printed (with |line-numbers| or +% |all-line-numbers|). +% +% \begin{macrocode} +\int_new:N \g_@@_visual_line_int +% \end{macrocode} +% +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_print_number: + { + \int_gincr:N \g_@@_visual_line_int + \hbox_overlap_left:n + { + { \color { gray } \footnotesize \int_to_arabic:n \g_@@_visual_line_int } + \skip_horizontal:N \l_@@_numbers_sep_dim + } + } +% \end{macrocode} +% +% +% \bigskip +% \subsubsection{The command to write on the aux file} +% +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_write_aux: + { + \tl_if_empty:NF \g_@@_aux_tl + { + \iow_now:Nn \@mainaux { \ExplSyntaxOn } + \iow_now:Nx \@mainaux + { + \tl_gset:cn { c_@@_ \int_use:N \g_@@_env_int _ tl } + { \exp_not:V \g_@@_aux_tl } + } + \iow_now:Nn \@mainaux { \ExplSyntaxOff } + } + \tl_gclear:N \g_@@_aux_tl + } +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_width_to_aux: + { + \bool_if:NT \l_@@_slim_bool + { + \clist_if_empty:NF \l_@@_bg_color_clist + { + \tl_gput_right:Nx \g_@@_aux_tl + { + \dim_set:Nn \l_@@_width_on_aux_dim + { \dim_eval:n { \g_@@_width_dim + 0.5 em } } + } + } + } + } +% \end{macrocode} +% +% \bigskip +% \subsubsection{The main commands and environments for the final user} +% +% \bigskip +% \begin{macrocode} +\NewDocumentCommand { \piton } { } + { \peek_meaning:NTF \bgroup \@@_piton_standard \@@_piton_verbatim } +% \end{macrocode} +% +% \begin{macrocode} +\NewDocumentCommand { \@@_piton_standard } { m } + { + \group_begin: + \ttfamily +% \end{macrocode} +% The following tuning of LuaTeX in order to avoid all break of lines on the +% hyphens. +% \begin{macrocode} + \automatichyphenmode = 1 + \cs_set_eq:NN \\ \c_backslash_str + \cs_set_eq:NN \% \c_percent_str + \cs_set_eq:NN \{ \c_left_brace_str + \cs_set_eq:NN \} \c_right_brace_str + \cs_set_eq:NN \$ \c_dollar_str + \cs_set_eq:cN { ~ } \space + \cs_set_protected:Npn \@@_begin_line: { } + \cs_set_protected:Npn \@@_end_line: { } + \tl_set:Nx \l_tmpa_tl + { + \lua_now:e + { piton.ParseBis('\l_@@_language_str',token.scan_string()) } + { #1 } + } + \bool_if:NTF \l_@@_show_spaces_bool + { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 +% \end{macrocode} +% The following code replaces the characters U+0020 (spaces) by characters +% U+0020 of catcode~10: thus, they become breakable by an end of line. +% \begin{macrocode} + { + \bool_if:NT \l_@@_break_lines_in_piton_bool + { \regex_replace_all:nnN { \x20 } { \x20 } \l_tmpa_tl } + } + \l_tmpa_tl + \group_end: + } +% \end{macrocode} +% +% +% \begin{macrocode} +\NewDocumentCommand { \@@_piton_verbatim } { v } + { + \group_begin: + \ttfamily + \automatichyphenmode = 1 + \cs_set_protected:Npn \@@_begin_line: { } + \cs_set_protected:Npn \@@_end_line: { } + \tl_set:Nx \l_tmpa_tl + { + \lua_now:e + { piton.Parse('\l_@@_language_str',token.scan_string()) } + { #1 } + } + \bool_if:NT \l_@@_show_spaces_bool + { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 + \l_tmpa_tl + \group_end: + } +% \end{macrocode} +% + +% \bigskip +% +% +% \bigskip +% The following command is not a user command. It will be used when we will +% have to ``rescan'' some chunks of Python code. For example, it will be the +% initial value of the Piton style |InitialValues| (the default values of the +% arguments of a Python function). +% \begin{macrocode} +\cs_new_protected:Npn \@@_piton:n #1 + { + \group_begin: + \cs_set_protected:Npn \@@_begin_line: { } + \cs_set_protected:Npn \@@_end_line: { } + \bool_lazy_or:nnTF + \l_@@_break_lines_in_piton_bool + \l_@@_break_lines_in_Piton_bool + { + \tl_set:Nx \l_tmpa_tl + { + \lua_now:e + { piton.ParseTer('\l_@@_language_str',token.scan_string()) } + { #1 } + } + } + { + \tl_set:Nx \l_tmpa_tl + { + \lua_now:e + { piton.Parse('\l_@@_language_str',token.scan_string()) } + { #1 } + } + } + \bool_if:NT \l_@@_show_spaces_bool + { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 + \l_tmpa_tl + \group_end: + } +% \end{macrocode} +% +% \bigskip +% The following command is similar to the previous one but raise a fatal error if +% its argument contains a carriage return. +% \begin{macrocode} +\cs_new_protected:Npn \@@_piton_no_cr:n #1 + { + \group_begin: + \cs_set_protected:Npn \@@_begin_line: { } + \cs_set_protected:Npn \@@_end_line: { } + \cs_set_protected:Npn \@@_newline: + { \msg_fatal:nn { piton } { cr~not~allowed } } + \bool_lazy_or:nnTF + \l_@@_break_lines_in_piton_bool + \l_@@_break_lines_in_Piton_bool + { + \tl_set:Nx \l_tmpa_tl + { + \lua_now:e + { piton.ParseTer('\l_@@_language_str',token.scan_string()) } + { #1 } + } + } + { + \tl_set:Nx \l_tmpa_tl + { + \lua_now:e + { piton.Parse('\l_@@_language_str',token.scan_string()) } + { #1 } + } + } + \bool_if:NT \l_@@_show_spaces_bool + { \regex_replace_all:nnN { \x20 } { ⣠} \l_tmpa_tl } % U+2423 + \l_tmpa_tl + \group_end: + } +% \end{macrocode} +% +% \bigskip +% Despite its name, |\@@_pre_env:| will be used both in |\PitonInputFile| and +% in the environments such as |{Piton}|. +% \begin{macrocode} +\cs_new:Npn \@@_pre_env: + { + \automatichyphenmode = 1 + \int_gincr:N \g_@@_env_int + \tl_gclear:N \g_@@_aux_tl + \cs_if_exist_use:c { c_@@ _ \int_use:N \g_@@_env_int _ tl } + \dim_compare:nNnT \l_@@_width_on_aux_dim = \c_zero_dim + { \dim_set_eq:NN \l_@@_width_on_aux_dim \linewidth } + \bool_if:NF \l_@@_resume_bool { \int_gzero:N \g_@@_visual_line_int } + \dim_gzero:N \g_@@_width_dim + \int_gzero:N \g_@@_line_int + \dim_zero:N \parindent + \dim_zero:N \lineskip + \dim_zero:N \parindent + \cs_set_eq:NN \label \@@_label:n + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\keys_define:nn { PitonInputFile } + { + first-line .int_set:N = \l_@@_first_line_int , + first-line .value_required:n = true , + last-line .int_set:N = \l_@@_last_line_int , + last-line .value_required:n = true , + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\NewDocumentCommand { \PitonInputFile } { d < > O { } m } + { + \tl_if_novalue:nF { #1 } + { + \bool_if:NTF \c_@@_beamer_bool + { \begin { uncoverenv } < #1 > } + { \msg_error:nn { piton } { overlay~without~beamer } } + } + \group_begin: + \int_zero_new:N \l_@@_first_line_int + \int_zero_new:N \l_@@_last_line_int + \int_set_eq:NN \l_@@_last_line_int \c_max_int + \keys_set:nn { PitonInputFile } { #2 } + \@@_pre_env: + \mode_if_vertical:TF \mode_leave_vertical: \newline +% \end{macrocode} +% We count with Lua the number of lines of the argument. The result will be +% stored by Lua in |\l_@@_nb_lines_int|. That information will be used to allow +% or disallow page breaks. +% \begin{macrocode} + \lua_now:n { piton.CountLinesFile(token.scan_argument()) } { #3 } +% \end{macrocode} +% If the final user has used both |left-margin=auto| and |line-numbers| or +% |all-line-numbers|, we have to compute the width of the maximal number of +% lines at the end of the composition of the listing to fix the correct value to +% |left-margin|. +% \begin{macrocode} + \bool_lazy_and:nnT \l_@@_left_margin_auto_bool \l_@@_line_numbers_bool + { + \hbox_set:Nn \l_tmpa_box + { + \footnotesize + \bool_if:NTF \l_@@_all_line_numbers_bool + { + \int_to_arabic:n + { \g_@@_visual_line_int + \l_@@_nb_lines_int } + } + { + \lua_now:n + { piton.CountNonEmptyLinesFile(token.scan_argument()) } + { #3 } + \int_to_arabic:n + { \g_@@_visual_line_int + \l_@@_nb_non_empty_lines_int } + } + } + \dim_set:Nn \l_@@_left_margin_dim + { \box_wd:N \l_tmpa_box + \l_@@_numbers_sep_dim + 0.1 em } + } +% \end{macrocode} +% Now, the main job. +% \begin{macrocode} + \ttfamily + \bool_if:NT \c_@@_footnote_bool { \begin { savenotes } } + \vtop \bgroup + \lua_now:e + { + piton.ParseFile('\l_@@_language_str',token.scan_argument() , + \int_use:N \l_@@_first_line_int , + \int_use:N \l_@@_last_line_int ) + } + { #3 } + \egroup + \bool_if:NT \c_@@_footnote_bool { \end { savenotes } } + \@@_width_to_aux: + \group_end: + \tl_if_novalue:nF { #1 } + { \bool_if:NT \c_@@_beamer_bool { \end { uncoverenv } } } + \@@_write_aux: + } +% \end{macrocode} +% +% +% \bigskip +% \begin{macrocode} +\NewDocumentCommand { \NewPitonEnvironment } { m m m m } + { +% \end{macrocode} +% We construct a TeX macro which will catch as argument all the tokens until +% |\end{|\texttt{\textsl{name_env}}|}| with, in that +% |\end{|\texttt{\textsl{name_env}}|}|, the catcodes of |\|, |{| and |}| equal to +% 12 (``\texttt{other}''). The latter explains why the definition of that +% function is a bit complicated. +% \begin{macrocode} + \use:x + { + \cs_set_protected:Npn + \use:c { _@@_collect_ #1 :w } + ####1 + \c_backslash_str end \c_left_brace_str #1 \c_right_brace_str + } + { + \group_end: + \mode_if_vertical:TF \mode_leave_vertical: \newline +% \end{macrocode} +% We count with Lua the number of lines of the argument. The result will be +% stored by Lua in |\l_@@_nb_lines_int|. That information will be used to allow +% or disallow page breaks. +% \begin{macrocode} + \lua_now:n { piton.CountLines(token.scan_argument()) } { ##1 } +% \end{macrocode} +% If the final user has used both |left-margin=auto| and |line-numbers|, we have +% to compute the width of the maximal number of lines at the end of the +% environment to fix the correct value to |left-margin|. +% \begin{macrocode} + \bool_lazy_and:nnT \l_@@_left_margin_auto_bool \l_@@_line_numbers_bool + { + \bool_if:NTF \l_@@_all_line_numbers_bool + { + \hbox_set:Nn \l_tmpa_box + { + \footnotesize + \int_to_arabic:n + { \g_@@_visual_line_int + \l_@@_nb_lines_int } + } + } + { + \lua_now:n + { piton.CountNonEmptyLines(token.scan_argument()) } + { ##1 } + \hbox_set:Nn \l_tmpa_box + { + \footnotesize + \int_to_arabic:n + { \g_@@_visual_line_int + \l_@@_nb_non_empty_lines_int } + } + } + \dim_set:Nn \l_@@_left_margin_dim + { \box_wd:N \l_tmpa_box + \l_@@_numbers_sep_dim + 0.1 em } + } +% \end{macrocode} +% Now, the main job. +% \begin{macrocode} + \ttfamily + \bool_if:NT \c_@@_footnote_bool { \begin { savenotes } } + \vtop \bgroup + \lua_now:e + { + piton.GobbleParse + ( + '\l_@@_language_str' , + \int_use:N \l_@@_gobble_int , + token.scan_argument() + ) + } + { ##1 } + \vspace { 2.5 pt } + \egroup + \bool_if:NT \c_@@_footnote_bool { \end { savenotes } } + \@@_width_to_aux: +% \end{macrocode} +% The following |\end{#1}| is only for the groups and the stack of environments +% of LaTeX. +% \begin{macrocode} + \end { #1 } + \@@_write_aux: + } +% \end{macrocode} +% +% +% \bigskip +% We can now define the new environment. +% +% We are still in the definition of the command |\NewPitonEnvironment|... +% \begin{macrocode} + \NewDocumentEnvironment { #1 } { #2 } + { + #3 + \@@_pre_env: + \group_begin: + \tl_map_function:nN + { \ \\ \{ \} \$ \& \# \^ \_ \% \~ \^^I } + \char_set_catcode_other:N + \use:c { _@@_collect_ #1 :w } + } + { #4 } +% \end{macrocode} +% +% \medskip +% The following code is for technical reasons. We want to change the catcode of +% |^^M| before catching the arguments of the new environment we are defining. +% Indeed, if not, we will have problems if there is a final optional argument in +% our environment (if that final argument is not used by the user in an +% instance of the environment, a spurious space is inserted, probably because +% the |^^M| is converted to space). +% \begin{macrocode} + \AddToHook { env / #1 / begin } { \char_set_catcode_other:N \^^M } + } +% \end{macrocode} +% This is the end of the definition of the command |\NewPitonEnvironment|. +% +% \bigskip +% Now, we define the environment |{Piton}|, which is the main environment +% provided by the package \pkg{piton}. Of course, you use +% |\NewPitonEnvironment|. +% \begin{macrocode} +\bool_if:NTF \c_@@_beamer_bool + { + \NewPitonEnvironment { Piton } { d < > } + { + \IfValueTF { #1 } + { \begin { uncoverenv } < #1 > } + { \begin { uncoverenv } } + } + { \end { uncoverenv } } + } + { \NewPitonEnvironment { Piton } { } { } { } } +% \end{macrocode} +% +% +% +% \bigskip +% \subsubsection{The styles} +% +% \medskip +% The following command is fundamental: it will be used by the Lua code. +% \begin{macrocode} +\NewDocumentCommand { \PitonStyle } { m } { \use:c { pitonStyle #1 } } +% \end{macrocode} +% +% \medskip +% The following command takes in its argument by curryfication. +% \begin{macrocode} +\NewDocumentCommand { \SetPitonStyle } { } { \keys_set:nn { piton / Styles } } +% \end{macrocode} +% +% \medskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_math_scantokens:n #1 + { \normalfont \scantextokens { $#1$ } } +% \end{macrocode} +% +% \medskip +% \begin{macrocode} +\keys_define:nn { piton / Styles } + { + String.Interpol .tl_set:c = pitonStyle String.Interpol , + String.Interpol .value_required:n = true , + FormattingType .tl_set:c = pitonStyle FormattingType , + FormattingType .value_required:n = true , + Dict.Value .tl_set:c = pitonStyle Dict.Value , + Dict.Value .value_required:n = true , + Name.Decorator .tl_set:c = pitonStyle Name.Decorator , + Name.Decorator .value_required:n = true , + Name.Function .tl_set:c = pitonStyle Name.Function , + Name.Function .value_required:n = true , + Name.UserFunction .tl_set:c = pitonStyle Name.UserFunction , + Name.UserFunction .value_required:n = true , + Keyword .tl_set:c = pitonStyle Keyword , + Keyword .value_required:n = true , + Keyword.Constant .tl_set:c = pitonStyle Keyword.Constant , + Keyword.constant .value_required:n = true , + String.Doc .tl_set:c = pitonStyle String.Doc , + String.Doc .value_required:n = true , + Interpol.Inside .tl_set:c = pitonStyle Interpol.Inside , + Interpol.Inside .value_required:n = true , + String.Long .tl_set:c = pitonStyle String.Long , + String.Long .value_required:n = true , + String.Short .tl_set:c = pitonStyle String.Short , + String.Short .value_required:n = true , + String .meta:n = { String.Long = #1 , String.Short = #1 } , + Comment.Math .tl_set:c = pitonStyle Comment.Math , + Comment.Math .default:n = \@@_math_scantokens:n , + Comment.Math .initial:n = , + Comment .tl_set:c = pitonStyle Comment , + Comment .value_required:n = true , + InitialValues .tl_set:c = pitonStyle InitialValues , + InitialValues .value_required:n = true , + Number .tl_set:c = pitonStyle Number , + Number .value_required:n = true , + Name.Namespace .tl_set:c = pitonStyle Name.Namespace , + Name.Namespace .value_required:n = true , + Name.Class .tl_set:c = pitonStyle Name.Class , + Name.Class .value_required:n = true , + Name.Builtin .tl_set:c = pitonStyle Name.Builtin , + Name.Builtin .value_required:n = true , + TypeParameter .tl_set:c = pitonStyle TypeParameter , + TypeParameter .value_required:n = true , + Name.Type .tl_set:c = pitonStyle Name.Type , + Name.Type .value_required:n = true , + Operator .tl_set:c = pitonStyle Operator , + Operator .value_required:n = true , + Operator.Word .tl_set:c = pitonStyle Operator.Word , + Operator.Word .value_required:n = true , + Exception .tl_set:c = pitonStyle Exception , + Exception .value_required:n = true , + Comment.LaTeX .tl_set:c = pitonStyle Comment.LaTeX , + Comment.LaTeX .value_required:n = true , + Identifier .tl_set:c = pitonStyle Identifier , + Comment.LaTeX .value_required:n = true , + ParseAgain.noCR .tl_set:c = pitonStyle ParseAgain.noCR , + ParseAgain.noCR .value_required:n = true , + ParseAgain .tl_set:c = pitonStyle ParseAgain , + ParseAgain .value_required:n = true , + Prompt .tl_set:c = pitonStyle Prompt , + Prompt .value_required:n = true , + unknown .code:n = + \msg_error:nn { piton } { Unknown~key~for~SetPitonStyle } + } +% \end{macrocode} +% +% +% \bigskip +% \begin{macrocode} +\msg_new:nnn { piton } { Unknown~key~for~SetPitonStyle } + { + The~style~'\l_keys_key_str'~is~unknown.\\ + This~key~will~be~ignored.\\ + The~available~styles~are~(in~alphabetic~order):~ + Comment,~ + Comment.LaTeX,~ + Dict.Value,~ + Exception,~ + Identifier,~ + InitialValues,~ + Keyword,~ + Keyword.Constant,~ + Name.Builtin,~ + Name.Class,~ + Name.Decorator,~ + Name.Function,~ + Name.Namespace,~ + Number,~ + Operator,~ + Operator.Word,~ + Prompt,~ + String,~ + String.Doc,~ + String.Long,~ + String.Short,~and~ + String.Interpol. + } +% \end{macrocode} +% +% \bigskip +% \subsubsection{The initial style} +% +% The initial style is inspired by the style ``manni'' of Pygments. +% +% \medskip +% \begin{macrocode} +\SetPitonStyle + { + Comment = \color[HTML]{0099FF} \itshape , + Exception = \color[HTML]{CC0000} , + Keyword = \color[HTML]{006699} \bfseries , + Keyword.Constant = \color[HTML]{006699} \bfseries , + Name.Builtin = \color[HTML]{336666} , + Name.Decorator = \color[HTML]{9999FF}, + Name.Class = \color[HTML]{00AA88} \bfseries , + Name.Function = \color[HTML]{CC00FF} , + Name.Namespace = \color[HTML]{00CCFF} , + Number = \color[HTML]{FF6600} , + Operator = \color[HTML]{555555} , + Operator.Word = \bfseries , + String = \color[HTML]{CC3300} , + String.Doc = \color[HTML]{CC3300} \itshape , + String.Interpol = \color[HTML]{AA0000} , + Comment.LaTeX = \normalfont \color[rgb]{.468,.532,.6} , + Name.Type = \color[HTML]{336666} , + InitialValues = \@@_piton:n , + Dict.Value = \@@_piton:n , + Interpol.Inside = \color{black}\@@_piton:n , + TypeParameter = \color[HTML]{008800} \itshape , + Identifier = \@@_identifier:n , + Name.UserFunction = , + Prompt = , + ParseAgain.noCR = \@@_piton_no_cr:n , + ParseAgain = \@@_piton:n , + } +% \end{macrocode} +% The last styles |ParseAgain.noCR| and |ParseAgain| should be considered as +% ``internal style'' (not available for the final user). However, maybe we will +% change that and document these styles for the final user (why not?). +% +% \medskip +% If the key |math-comments| has been used at load-time, we change the style +% |Comment.Math| which should be considered only at an ``internal style''. +% However, maybe we will document in a future version the possibility to write +% change the style \emph{locally} in a document)]. +% \begin{macrocode} +\bool_if:NT \c_@@_math_comments_bool { \SetPitonStyle { Comment.Math } } +% \end{macrocode} +% +% \bigskip +% +% \bigskip +% \subsubsection{Highlighting some identifiers} +% +% \begin{macrocode} +\cs_new_protected:Npn \@@_identifier:n #1 + { \cs_if_exist_use:c { PitonIdentifier _ \l_@@_language_str _ #1 } { #1 } } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\keys_define:nn { PitonOptions } + { identifiers .code:n = \@@_set_identifiers:n { #1 } } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\keys_define:nn { Piton / identifiers } + { + names .clist_set:N = \l_@@_identifiers_names_tl , + style .tl_set:N = \l_@@_style_tl , + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_identifiers:n #1 + { + \clist_clear_new:N \l_@@_identifiers_names_tl + \tl_clear_new:N \l_@@_style_tl + \keys_set:nn { Piton / identifiers } { #1 } + \clist_map_inline:Nn \l_@@_identifiers_names_tl + { + \tl_set_eq:cN + { PitonIdentifier _ \l_@@_language_str _ ##1 } + \l_@@_style_tl + } + } +% \end{macrocode} +% +% +% \bigskip +% In particular, we have an hightlighting of the indentifiers which are the +% names of Python functions previously defined by the user. Indeed, when a +% Python function is defined, the style |Name.Function.Internal| is applied to +% that name. We define now that style (you define it directly and you short-cut +% the function |\SetPitonStyle|). +% \begin{macrocode} +\cs_new_protected:cpn { pitonStyle Name.Function.Internal } #1 + { +% \end{macrocode} +% First, the element is composed in the TeX flow with the style |Name.Function| +% which is provided to the final user. +% \begin{macrocode} + { \PitonStyle { Name.Function } { #1 } } +% \end{macrocode} +% Now, we specify that the name of the new Python function is a known identifier +% that will be formated with the Piton style |Name.UserFunction|. Of course, +% here the affectation is global because we have to exit many groups and even +% the environments |{Piton}|). +% \begin{macrocode} + \cs_gset_protected:cpn { PitonIdentifier _ \l_@@_language_str _ #1 } + { \PitonStyle{ Name.UserFunction } } +% \end{macrocode} +% Now, we put the name of that new user function in the dedicated sequence +% (specific of the current language). That sequence will be used only by +% |\PitonClearUserFunctions|. +% \begin{macrocode} + \seq_if_exist:cF { g_@@_functions _ \l_@@_language_str _ seq } + { \seq_new:c { g_@@_functions _ \l_@@_language_str _ seq } } + \seq_gput_right:cn { g_@@_functions _ \l_@@_language_str _ seq } { #1 } + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\NewDocumentCommand \PitonClearUserFunctions { ! O { \l_@@_language_str } } + { + \seq_if_exist:cT { g_@@_functions _ #1 _ seq } + { + \seq_map_inline:cn { g_@@_functions _ #1 _ seq } + { \cs_undefine:c { PitonIdentifier _ #1 _ ##1} } + \seq_gclear:c { g_@@_functions _ #1 _ seq } + } + } +% \end{macrocode} +% +% \bigskip +% \subsubsection{Security} +% +% \begin{macrocode} +\AddToHook { env / piton / begin } + { \msg_fatal:nn { piton } { No~environment~piton } } + +\msg_new:nnn { piton } { No~environment~piton } + { + There~is~no~environment~piton!\\ + There~is~an~environment~{Piton}~and~a~command~ + \token_to_str:N \piton\ but~there~is~no~environment~ + {piton}.~This~error~is~fatal. + } +% \end{macrocode} +% +% \bigskip +% \subsubsection{The error messages of the package} +% +% \begin{macrocode} +\msg_new:nnnn { piton } { Unknown~key~for~PitonOptions } + { + Unknown~key. \\ + The~key~'\l_keys_key_str'~is~unknown~for~\token_to_str:N \PitonOptions.~ + It~will~be~ignored.\\ + For~a~list~of~the~available~keys,~type~H~. + } + { + The~available~keys~are~(in~alphabetic~order):~ + all-line-numbers,~ + auto-gobble,~ + background-color,~ + break-lines,~ + break-lines-in-piton,~ + break-lines-in-Piton,~ + continuation-symbol,~ + continuation-symbol-on-indentation,~ + end-of-broken-line,~ + env-gobble,~ + gobble,~ + identifiers,~ + indent-broken-lines,~ + language,~ + left-margin,~ + line-numbers,~ + prompt-background-color,~ + resume,~ + show-spaces,~ + show-spaces-in-strings,~ + slim,~ + splittable,~ + tabs-auto-gobble~ + and~tab-size. + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\msg_new:nnn { piton } { label~with~lines~numbers } + { + You~can't~use~the~command~\token_to_str:N \label\ + because~the~key~'line-numbers'~(or~'all-line-numbers')~ + is~not~active.\\ + If~you~go~on,~that~command~will~ignored. + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\msg_new:nnn { piton } { cr~not~allowed } + { + You~can't~put~any~carriage~return~in~the~argument~ + of~a~command~\c_backslash_str + \l_@@_beamer_command_str\ within~an~ + environment~of~'piton'.~You~should~consider~using~the~ + corresponding~environment.\\ + That~error~is~fatal. + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\msg_new:nnn { piton } { overlay~without~beamer } + { + You~can't~use~an~argument~<...>~for~your~command~ + \token_to_str:N \PitonInputFile\ because~you~are~not~ + in~Beamer.\\ + If~you~go~on,~that~argument~will~be~ignored. + } +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +\msg_new:nnn { Piton } { Python~error } + { A~Python~error~has~been~detected. } +% \end{macrocode} +% +% \bigskip +% \subsection{The Lua part of the implementation} +% +% \bigskip +% \begin{macrocode} +\ExplSyntaxOff +\RequirePackage{luacode} +% \end{macrocode} +% +% +% \bigskip +% The Lua code will be loaded via a |{luacode*}| environment. The environment +% is by itself a Lua block and the local declarations will be local to that +% block. All the global functions (used by the L3 parts of the implementation) +% will be put in a Lua table |piton|. +% +% \medskip +% \begin{macrocode} +\begin{luacode*} +piton = piton or { } +% \end{macrocode} +% +% \begin{macrocode} +if piton.comment_latex == nil then piton.comment_latex = ">" end +piton.comment_latex = "#" .. piton.comment_latex +% \end{macrocode} +% +% +% \bigskip +% The following functions are an easy way to safely insert braces (|{| and |}|) +% in the TeX flow. +% \begin{macrocode} +function piton.open_brace () + tex.sprint("{") +end +function piton.close_brace () + tex.sprint("}") +end +% \end{macrocode} +% +% \bigskip +% \subsubsection{Special functions dealing with LPEG} +% +% \medskip +% We will use the Lua library \pkg{lpeg} which is built in LuaTeX. That's why we +% define first aliases for several functions of that library. +% \begin{macrocode} +local P, S, V, C, Ct, Cc = lpeg.P, lpeg.S, lpeg.V, lpeg.C, lpeg.Ct, lpeg.Cc +local Cf, Cs , Cg , Cmt , Cb = lpeg.Cf, lpeg.Cs, lpeg.Cg , lpeg.Cmt , lpeg.Cb +local R = lpeg.R +% \end{macrocode} +% +% +% +% \bigskip +% The function |Q| takes in as argument a pattern and returns a \textsc{lpeg} +% \emph{which does a capture} of the pattern. That capture will be sent to LaTeX +% with the catcode ``other'' for all the characters: it's suitable for elements +% of the Python listings that \pkg{piton} will typeset verbatim (thanks to the +% catcode ``other''). +% \begin{macrocode} +local function Q(pattern) + return Ct ( Cc ( luatexbase.catcodetables.CatcodeTableOther ) * C ( pattern ) ) +end +% \end{macrocode} +% +% +% \bigskip +% The function |L| takes in as argument a pattern and returns a \textsc{lpeg} +% \emph{which does a capture} of the pattern. That capture will be sent to LaTeX +% with standard LaTeX catcodes for all the characters: the elements captured +% will be formatted as normal LaTeX codes. It's suitable for the ``LaTeX +% comments'' in the environments |{Piton}| and the elements beetween +% ``|escape-inside|''. That function won't be much used. +% \begin{macrocode} +local function L(pattern) + return Ct ( C ( pattern ) ) +end +% \end{macrocode} +% +% \bigskip +% The function |Lc| (the c is for \emph{constant}) takes in as argument a string +% and returns a \textsc{lpeg} \emph{with does a constant capture} which returns +% that string. The elements captured will be formatted as L3 code. It will be +% used to send to LaTeX all the formatting LaTeX instructions we have to insert +% in order to do the syntactic highlighting (that's the main job of +% \pkg{piton}). That function will be widely used. +% \begin{macrocode} +local function Lc(string) + return Cc ( { luatexbase.catcodetables.expl , string } ) +end +% \end{macrocode} +% +% \bigskip +% The function |K| creates a \textsc{lpeg} which will return as capture the +% whole LaTeX code corresponding to a Python chunk (that is to say with the +% LaTeX formatting instructions corresponding to the syntactic nature of that +% Python chunk). The first argument is a Lua string corresponding to the name of +% a \pkg{piton} style and the second element is a pattern (that is to say a +% \textsc{lpeg} without capture) +% \begin{macrocode} +local function K(style, pattern) + return + Lc ( "{\\PitonStyle{" .. style .. "}{" ) + * Q ( pattern ) + * Lc ( "}}" ) +end +% \end{macrocode} +% The formatting commands in a given \pkg{piton} style (eg. the style |Keyword|) +% may be semi-global declarations (such as |\bfseries| or |\slshape|) or LaTeX +% macros with an argument (such as |\fbox| or |\colorbox{yellow}|). In order to +% deal with both syntaxes, we have used two pairs of braces: +% |{\PitonStyle{Keyword}{|\texttt{\slshape text to format}|}}|. +% +% +% \bigskip +% \begin{macrocode} +local function WithStyle(style,pattern) + return + Ct ( Cc "Open" * Cc ( "{\\PitonStyle{" .. style .. "}{" ) * Cc "}}" ) + * pattern + * Ct ( Cc "Close" ) +end +% \end{macrocode} +% +% \bigskip +% The following \textsc{lpeg} catches the Python chunks which are in LaTeX +% escapes (and that chunks will be considered as normal LaTeX constructions). We +% recall that |piton.begin_espace| and |piton_end_escape| are Lua strings +% corresponding to the key |escape-inside|\footnote{The \pkg{piton} key +% |escape-inside| is available at load-time only.}. Since the elements that will +% be catched must be sent to LaTeX with standard LaTeX catcodes, we put the +% capture (done by the function |C|) in a table (by using |Ct|, which is an +% alias for |lpeg.Ct|) without number of catcode table at the first component of +% the table. +% \begin{macrocode} +local Escape = + P(piton_begin_escape) + * L ( ( 1 - P(piton_end_escape) ) ^ 1 ) + * P(piton_end_escape) +% \end{macrocode} +% +% \vspace{1cm} +% The following line is mandatory. +% \begin{macrocode} +lpeg.locale(lpeg) +% \end{macrocode} +% +% \bigskip +% \paragraph{The basic syntactic LPEG} +% +% \begin{macrocode} +local alpha, digit = lpeg.alpha, lpeg.digit +local space = P " " +% \end{macrocode} +% +% Remember that, for \textsc{lpeg}, the Unicode characters such as |à|, |â|, +% |ç|, etc. are in fact strings of length 2 (2 bytes) because \pkg{lpeg} is not +% Unicode-aware. +% \begin{macrocode} +local letter = alpha + P "_" + + P "â" + P "à" + P "ç" + P "é" + P "è" + P "ê" + P "ë" + P "ï" + P "î" + + P "ô" + P "û" + P "ü" + P "Â" + P "À" + P "Ç" + P "É" + P "È" + P "Ê" + + P "Ë" + P "Ã" + P "ÃŽ" + P "Ô" + P "Û" + P "Ãœ" + +local alphanum = letter + digit +% \end{macrocode} +% +% \bigskip +% The following \textsc{lpeg} |identifier| is a mere pattern (that is to say +% more or less a regular expression) which matches the Python identifiers (hence +% the name). +% \begin{macrocode} +local identifier = letter * alphanum ^ 0 +% \end{macrocode} +% +% \medskip +% On the other hand, the \textsc{lpeg} |Identifier| (with a capital) also returns +% a \emph{capture}. +% \begin{macrocode} +local Identifier = K ( 'Identifier' , identifier) +% \end{macrocode} +% +% \bigskip +% By convention, we will use names with an initial capital for \textsc{lpeg} +% which return captures. +% +% +% \bigskip +% Here is the first use of our function~|K|. That function will be used to +% construct \textsc{lpeg} which capture Python chunks for which we have a +% dedicated \pkg{piton} style. For example, for the numbers, \pkg{piton} +% provides a style which is called |Number|. The name of the style is provided +% as a Lua string in the second argument of the function~|K|. By convention, we +% use single quotes for delimiting the Lua strings which are names of +% \pkg{piton} styles (but this is only a convention). +% \begin{macrocode} +local Number = + K ( 'Number' , + ( digit^1 * P "." * digit^0 + digit^0 * P "." * digit^1 + digit^1 ) + * ( S "eE" * S "+-" ^ -1 * digit^1 ) ^ -1 + + digit^1 + ) +% \end{macrocode} +% +% \bigskip +% We recall that |piton.begin_espace| and |piton_end_escape| are Lua strings +% corresponding to the key |escape-inside|\footnote{The \pkg{piton} key +% |escape-inside| is available at load-time only.}. Of course, if the final user +% has not used the key |escape-inside|, these strings are empty. +% \begin{macrocode} +local Word +if piton_begin_escape ~= '' +then Word = Q ( ( ( 1 - space - P(piton_begin_escape) - P(piton_end_escape) ) + - S "'\"\r[()]" - digit ) ^ 1 ) +else Word = Q ( ( ( 1 - space ) - S "'\"\r[()]" - digit ) ^ 1 ) +end +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +local Space = ( Q " " ) ^ 1 + +local SkipSpace = ( Q " " ) ^ 0 + +local Punct = Q ( S ".,:;!" ) + +local Tab = P "\t" * Lc ( '\\l_@@_tab_tl' ) +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +local SpaceIndentation = Lc ( '\\@@_an_indentation_space:' ) * ( Q " " ) +% \end{macrocode} +% +% +% \bigskip +% \begin{macrocode} +local Delim = Q ( S "[()]" ) +% \end{macrocode} +% +% \bigskip +% The following \textsc{lpeg} catches a space (U+0020) and replace it by +% |\l_@@_space_tl|. It will be used in the strings. Usually, +% |\l_@@_space_tl| will contain a space and therefore there won't be difference. +% However, when the key |show-spaces-in-strings| is in force, |\\l_@@_space_tl| will +% contain ⣠(U+2423) in order to visualize the spaces. +% \begin{macrocode} +local VisualSpace = space * Lc "\\l_@@_space_tl" +% \end{macrocode} +% +% +% \bigskip +% \subsubsection{The LPEG python} +% +% \bigskip +% Some strings of length 2 are explicit because we want the corresponding +% ligatures available in some fonts such as \emph{Fira Code} to be active. +% \begin{macrocode} +local Operator = + K ( 'Operator' , + P "!=" + P "<>" + P "==" + P "<<" + P ">>" + P "<=" + P ">=" + P ":=" + + P "//" + P "**" + S "-~+/*%=<>&.@|" + ) + +local OperatorWord = + K ( 'Operator.Word' ,P "in" + P "is" + P "and" + P "or" + P "not" ) + +local Keyword = + K ( 'Keyword' , + P "as" + P "assert" + P "break" + P "case" + P "class" + P "continue" + + P "def" + P "del" + P "elif" + P "else" + P "except" + P "exec" + + P "finally" + P "for" + P "from" + P "global" + P "if" + P "import" + + P "lambda" + P "non local" + P "pass" + P "return" + P "try" + + P "while" + P "with" + P "yield" + P "yield from" ) + + K ( 'Keyword.Constant' ,P "True" + P "False" + P "None" ) + +local Builtin = + K ( 'Name.Builtin' , + P "__import__" + P "abs" + P "all" + P "any" + P "bin" + P "bool" + + P "bytearray" + P "bytes" + P "chr" + P "classmethod" + P "compile" + + P "complex" + P "delattr" + P "dict" + P "dir" + P "divmod" + + P "enumerate" + P "eval" + P "filter" + P "float" + P "format" + + P "frozenset" + P "getattr" + P "globals" + P "hasattr" + P "hash" + + P "hex" + P "id" + P "input" + P "int" + P "isinstance" + P "issubclass" + + P "iter" + P "len" + P "list" + P "locals" + P "map" + P "max" + + P "memoryview" + P "min" + P "next" + P "object" + P "oct" + P "open" + + P "ord" + P "pow" + P "print" + P "property" + P "range" + P "repr" + + P "reversed" + P "round" + P "set" + P "setattr" + P "slice" + P "sorted" + + P "staticmethod" + P "str" + P "sum" + P "super" + P "tuple" + P "type" + + P "vars" + P "zip" ) + + +local Exception = + K ( 'Exception' , + P "ArithmeticError" + P "AssertionError" + P "AttributeError" + + P "BaseException" + P "BufferError" + P "BytesWarning" + P "DeprecationWarning" + + P "EOFError" + P "EnvironmentError" + P "Exception" + P "FloatingPointError" + + P "FutureWarning" + P "GeneratorExit" + P "IOError" + P "ImportError" + + P "ImportWarning" + P "IndentationError" + P "IndexError" + P "KeyError" + + P "KeyboardInterrupt" + P "LookupError" + P "MemoryError" + P "NameError" + + P "NotImplementedError" + P "OSError" + P "OverflowError" + + P "PendingDeprecationWarning" + P "ReferenceError" + P "ResourceWarning" + + P "RuntimeError" + P "RuntimeWarning" + P "StopIteration" + + P "SyntaxError" + P "SyntaxWarning" + P "SystemError" + P "SystemExit" + + P "TabError" + P "TypeError" + P "UnboundLocalError" + P "UnicodeDecodeError" + + P "UnicodeEncodeError" + P "UnicodeError" + P "UnicodeTranslateError" + + P "UnicodeWarning" + P "UserWarning" + P "ValueError" + P "VMSError" + + P "Warning" + P "WindowsError" + P "ZeroDivisionError" + + P "BlockingIOError" + P "ChildProcessError" + P "ConnectionError" + + P "BrokenPipeError" + P "ConnectionAbortedError" + P "ConnectionRefusedError" + + P "ConnectionResetError" + P "FileExistsError" + P "FileNotFoundError" + + P "InterruptedError" + P "IsADirectoryError" + P "NotADirectoryError" + + P "PermissionError" + P "ProcessLookupError" + P "TimeoutError" + + P "StopAsyncIteration" + P "ModuleNotFoundError" + P "RecursionError" ) + + +local RaiseException = K ( 'Keyword' , P "raise" ) * SkipSpace * Exception * Q ( P "(" ) + +% \end{macrocode} +% +% \bigskip +% In Python, a ``decorator'' is a statement whose begins by |@| which patches +% the function defined in the following statement. +% \begin{macrocode} +local Decorator = K ( 'Name.Decorator' , P "@" * letter^1 ) +% \end{macrocode} +% +% \bigskip +% The following \textsc{lpeg} |DefClass| will be used to detect the definition of a +% new class (the name of that new class will be formatted with the \pkg{piton} +% style |Name.Class|). +% +% \smallskip +% Example:\enskip \piton{class myclass:} +% \begin{macrocode} +local DefClass = + K ( 'Keyword' , P "class" ) * Space * K ( 'Name.Class' , identifier ) +% \end{macrocode} +% +% If the word |class| is not followed by a identifier, it will be catched as +% keyword by the \textsc{lpeg} |Keyword| (useful if we want to type a +% list of keywords). +% +% +% \bigskip +% The following \textsc{lpeg} |ImportAs| is used for the lines beginning by |import|. +% % We have to detect the potential keyword |as| because both the name of the +% module and its alias must be formatted with the \pkg{piton} style |Name.Namespace|. +% +% \smallskip +% Example:\enskip \piton{import numpy as np} +% +% \smallskip +% Moreover, after the keyword |import|, it's possible to have a comma-separated +% list of modules (if the keyword |as| is not used). +% +% \smallskip +% Example:\enskip \piton{import math, numpy} +% \begin{macrocode} +local ImportAs = + K ( 'Keyword' , P "import" ) + * Space + * K ( 'Name.Namespace' , + identifier * ( P "." * identifier ) ^ 0 ) + * ( + ( Space * K ( 'Keyword' , P "as" ) * Space + * K ( 'Name.Namespace' , identifier ) ) + + + ( SkipSpace * Q ( P "," ) * SkipSpace + * K ( 'Name.Namespace' , identifier ) ) ^ 0 + ) +% \end{macrocode} +% Be careful: there is no commutativity of |+| in the previous expression. +% +% \bigskip +% The \textsc{lpeg} |FromImport| is used for the lines beginning by |from|. We +% need a special treatment because the identifier following the keyword |from| +% must be formatted with the \pkg{piton} style |Name.Namespace| and the +% following keyword |import| must be formatted with the \pkg{piton} style +% |Keyword| and must \emph{not} be catched by the \textsc{lpeg} |ImportAs|. +% +% \smallskip +% Example:\enskip \piton{from math import pi} +% +% \smallskip +% \begin{macrocode} +local FromImport = + K ( 'Keyword' , P "from" ) + * Space * K ( 'Name.Namespace' , identifier ) + * Space * K ( 'Keyword' , P "import" ) +% \end{macrocode} +% +% \bigskip +% \paragraph{The strings of Python} +% +% For the strings in Python, there are four categories of delimiters (without +% counting the prefixes for f-strings and raw strings). We will use, in the +% names of our \textsc{lpeg}, prefixes to distinguish the \textsc{lpeg} dealing +% with that categories of strings, as presented in the following tabular. +% \begin{center} +% \begin{tabular}{ccc} +% \toprule +% & |Single| & |Double| \\ +% \midrule +% |Short| & |'text'| & |"text"| \\ +% |Long| & |'''test'''| & |"""text"""| \\ +% \bottomrule +% \end{tabular} +% \end{center} +% +% +% \bigskip +% We have also to deal with the interpolations in the f-strings. Here +% is an example of a f-string with an interpolation and a format +% instruction\footnote{There is no special \pkg{piton} style for the formatting +% instruction (after the colon): the style which will be applied will be the +% style of the encompassing string, that is to say |String.Short| or +% |String.Long|.} in that interpolation: +% +% \piton{f'Total price: {total+1:.2f} €'} +% +% +% \bigskip +% The interpolations beginning by |%| (even though there is more modern +% technics now in Python). +% \begin{macrocode} +local PercentInterpol = + K ( 'String.Interpol' , + P "%" + * ( P "(" * alphanum ^ 1 * P ")" ) ^ -1 + * ( S "-#0 +" ) ^ 0 + * ( digit ^ 1 + P "*" ) ^ -1 + * ( P "." * ( digit ^ 1 + P "*" ) ) ^ -1 + * ( S "HlL" ) ^ -1 + * S "sdfFeExXorgiGauc%" + ) +% \end{macrocode} +% +% \bigskip +% We can now define the \textsc{lpeg} for the four kinds of strings. It's not +% possible to use our function~|K| because of the interpolations which must be +% formatted with another \pkg{piton} style that the rest of the +% string.\footnote{The interpolations are formatted with the \pkg{piton} style +% |Interpol.Inside|. The initial value of that style is \texttt{\textbackslash +% @@\_piton:n} wich means that the interpolations are parsed once again by \pkg{piton}.} +% \begin{macrocode} +local SingleShortString = + WithStyle ( 'String.Short' , +% \end{macrocode} +% First, we deal with the f-strings of Python, which are prefixed by |f| or |F|. +% \begin{macrocode} + Q ( P "f'" + P "F'" ) + * ( + K ( 'String.Interpol' , P "{" ) + * K ( 'Interpol.Inside' , ( 1 - S "}':" ) ^ 0 ) + * Q ( P ":" * (1 - S "}:'") ^ 0 ) ^ -1 + * K ( 'String.Interpol' , P "}" ) + + + VisualSpace + + + Q ( ( P "\\'" + P "{{" + P "}}" + 1 - S " {}'" ) ^ 1 ) + ) ^ 0 + * Q ( P "'" ) + + +% \end{macrocode} +% Now, we deal with the standard strings of Python, but also the ``raw strings''. +% \begin{macrocode} + Q ( P "'" + P "r'" + P "R'" ) + * ( Q ( ( P "\\'" + 1 - S " '\r%" ) ^ 1 ) + + VisualSpace + + PercentInterpol + + Q ( P "%" ) + ) ^ 0 + * Q ( P "'" ) ) + + +local DoubleShortString = + WithStyle ( 'String.Short' , + Q ( P "f\"" + P "F\"" ) + * ( + K ( 'String.Interpol' , P "{" ) + * Q ( ( 1 - S "}\":" ) ^ 0 , 'Interpol.Inside' ) + * ( K ( 'String.Interpol' , P ":" ) * Q ( (1 - S "}:\"") ^ 0 ) ) ^ -1 + * K ( 'String.Interpol' , P "}" ) + + + VisualSpace + + + Q ( ( P "\\\"" + P "{{" + P "}}" + 1 - S " {}\"" ) ^ 1 ) + ) ^ 0 + * Q ( P "\"" ) + + + Q ( P "\"" + P "r\"" + P "R\"" ) + * ( Q ( ( P "\\\"" + 1 - S " \"\r%" ) ^ 1 ) + + VisualSpace + + PercentInterpol + + Q ( P "%" ) + ) ^ 0 + * Q ( P "\"" ) ) + +local ShortString = SingleShortString + DoubleShortString +% \end{macrocode} +% +% \bigskip +% \paragraph{Beamer} +% +% The following \textsc{lpeg} |BalancedBraces| will be used for the (mandatory) +% argument of the commands |\only| and \emph{al.} of Beamer. It's necessary to +% use a \emph{grammar} because that pattern mainly checks the correct nesting of +% the delimiters (and it's known in the theory of formal languages that this +% can't be done with regular expressions \emph{stricto sensu} only). +% \begin{macrocode} +local BalancedBraces = + P { "E" , + E = + ( + P "{" * V "E" * P "}" + + + ShortString + + + ( 1 - S "{}" ) + ) ^ 0 + } +% \end{macrocode} +% +% +% \bigskip +% If Beamer is used (or if the key |beamer| is used at load-time), the following +% LPEG will be redefined. +% \begin{macrocode} +local Beamer = P ( false ) +local BeamerBeginEnvironments = P ( true ) +local BeamerEndEnvironments = P ( true ) +local BeamerNamesEnvironments = + P "uncoverenv" + P "onlyenv" + P "visibleenv" + P "invisibleenv" + + P "alertenv" + P "actionenv" + +% \end{macrocode} +% +% \begin{macrocode} +UserCommands = + Ct ( Cc "Open" * C ( "\\emph{" ) * Cc "}" ) + * ( C ( BalancedBraces ) / (function (s) return MainLoopPython:match(s) end ) ) + * P "}" * Ct ( Cc "Close" ) +% \end{macrocode} +% +% \begin{macrocode} +function OneBeamerEnvironment(name) + return + Ct ( Cc "Open" + * C ( + P ( "\\begin{" .. name .. "}" ) + * ( P "<" * (1 - P ">") ^ 0 * P ">" ) ^ -1 + ) + * Cc ( "\\end{" .. name .. "}" ) + ) + * ( + C ( ( 1 - P ( "\\end{" .. name .. "}" ) ) ^ 0 ) + / (function (s) return MainLoopPython:match(s) end ) + ) + * P ( "\\end{" .. name .. "}" ) * Ct ( Cc "Close" ) +end +% \end{macrocode} +% +% +% \bigskip +% \begin{macrocode} +if piton_beamer +then + Beamer = + L ( P "\\pause" * ( P "[" * (1 - P "]") ^ 0 * P "]" ) ^ -1 ) + + + Ct ( Cc "Open" + * C ( + ( + P "\\uncover" + P "\\only" + P "\\alert" + P "\\visible" + + P "\\invisible" + P "\\action" + ) + * ( P "<" * (1 - P ">") ^ 0 * P ">" ) ^ -1 + * P "{" + ) + * Cc "}" + ) + * ( C ( BalancedBraces ) / (function (s) return MainLoopPython:match(s) end ) ) + * P "}" * Ct ( Cc "Close" ) + + + OneBeamerEnvironment "uncoverenv" + + OneBeamerEnvironment "onlyenv" + + OneBeamerEnvironment "visibleenv" + + OneBeamerEnvironment "invisibleenv" + + OneBeamerEnvironment "alertenv" + + OneBeamerEnvironment "actionenv" + + + L ( +% \end{macrocode} +% For |\\alt|, the specification of the overlays (between angular brackets) is mandatory. +% \begin{macrocode} + ( P "\\alt" ) + * P "<" * (1 - P ">") ^ 0 * P ">" + * P "{" + ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}{" ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}" ) + + + L ( +% \end{macrocode} +% For |\\alt|, the specification of the overlays (between angular brackets) is mandatory. +% \begin{macrocode} + ( P "\\temporal" ) + * P "<" * (1 - P ">") ^ 0 * P ">" + * P "{" + ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}{" ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}{" ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}" ) +% \end{macrocode} +% Now for the environemnts. +% \begin{macrocode} + BeamerBeginEnvironments = + ( space ^ 0 * + L + ( + P "\\begin{" * BeamerNamesEnvironments * "}" + * ( P "<" * ( 1 - P ">") ^ 0 * P ">" ) ^ -1 + ) + * P "\r" + ) ^ 0 + BeamerEndEnvironments = + ( space ^ 0 * + L ( P "\\end{" * BeamerNamesEnvironments * P "}" ) + * P "\r" + ) ^ 0 +end +% \end{macrocode} +% +% \bigskip +% \paragraph{EOL} +% +% \bigskip +% The following LPEG will detect the Python prompts when the user is typesetting +% an interactive session of Python (directly or through |{pyconsole}| of +% \pkg{pyluatex}). We have to detect that prompt twice. The first detection +% (called \emph{hasty detection}) will be before the |\@@_begin_line:| because +% you want to trigger a special background color for that row (and, after the +% |\@@_begin_line:|, it's too late to change de background). +% \begin{macrocode} +local PromptHastyDetection = ( # ( P ">>>" + P "..." ) * Lc ( '\\@@_prompt:' ) ) ^ -1 +% \end{macrocode} +% We remind that the marker |#| of \textsc{lpeg} specifies that the pattern will be +% detected but won't consume any character. +% +% \medskip +% With the following \textsc{lpeg}, a style will actually be applied to the +% prompt (for instance, it's possible to decide to discard these prompts). +% \begin{macrocode} +local Prompt = K ( 'Prompt' , ( ( P ">>>" + P "..." ) * P " " ^ -1 ) ^ -1 ) +% \end{macrocode} +% +% +% +% \bigskip +% The following \textsc{lpeg} |EOL| is for the end of lines. +% \begin{macrocode} +local EOL = + P "\r" + * + ( + ( space^0 * -1 ) + + +% \end{macrocode} +% We recall that each line in the Python code we have to parse will be sent +% back to LaTeX between a pair |\@@_begin_line:| -- +% |\@@_end_line:|\footnote{Remember that the \texttt{\textbackslash +% @@\_end\_line:} must be explicit because it will be used as marker in order to +% delimit the argument of the command \texttt{\textbackslash @@\_begin\_line:}}. +% \begin{macrocode} + Ct ( + Cc "EOL" + * + Ct ( + Lc "\\@@_end_line:" + * BeamerEndEnvironments + * BeamerBeginEnvironments + * PromptHastyDetection + * Lc "\\@@_newline: \\@@_begin_line:" + * Prompt + ) + ) + ) + * + SpaceIndentation ^ 0 +% \end{macrocode} +% +% +% \bigskip +% \paragraph{The long strings} +% +% +% \begin{macrocode} +local SingleLongString = + WithStyle ( 'String.Long' , + ( Q ( S "fF" * P "'''" ) + * ( + K ( 'String.Interpol' , P "{" ) + * K ( 'Interpol.Inside' , ( 1 - S "}:\r" - P "'''" ) ^ 0 ) + * Q ( P ":" * (1 - S "}:\r" - P "'''" ) ^ 0 ) ^ -1 + * K ( 'String.Interpol' , P "}" ) + + + Q ( ( 1 - P "'''" - S "{}'\r" ) ^ 1 ) + + + EOL + ) ^ 0 + + + Q ( ( S "rR" ) ^ -1 * P "'''" ) + * ( + Q ( ( 1 - P "'''" - S "\r%" ) ^ 1 ) + + + PercentInterpol + + + P "%" + + + EOL + ) ^ 0 + ) + * Q ( P "'''" ) ) + + +local DoubleLongString = + WithStyle ( 'String.Long' , + ( + Q ( S "fF" * P "\"\"\"" ) + * ( + K ( 'String.Interpol', P "{" ) + * K ( 'Interpol.Inside' , ( 1 - S "}:\r" - P "\"\"\"" ) ^ 0 ) + * Q ( P ":" * (1 - S "}:\r" - P "\"\"\"" ) ^ 0 ) ^ -1 + * K ( 'String.Interpol' , P "}" ) + + + Q ( ( 1 - P "\"\"\"" - S "{}\"\r" ) ^ 1 ) + + + EOL + ) ^ 0 + + + Q ( ( S "rR" ) ^ -1 * P "\"\"\"" ) + * ( + Q ( ( 1 - P "\"\"\"" - S "%\r" ) ^ 1 ) + + + PercentInterpol + + + P "%" + + + EOL + ) ^ 0 + ) + * Q ( P "\"\"\"" ) + ) +% \end{macrocode} +% +% \begin{macrocode} +local LongString = SingleLongString + DoubleLongString +% \end{macrocode} +% +% \bigskip +% We have a \textsc{lpeg} for the Python docstrings. That \textsc{lpeg} will +% be used in the \textsc{lpeg} |DefFunction| which deals with the whole preamble +% of a function definition (which begins with |def|). +% \begin{macrocode} +local StringDoc = + K ( 'String.Doc' , P "\"\"\"" ) + * ( K ( 'String.Doc' , (1 - P "\"\"\"" - P "\r" ) ^ 0 ) * EOL + * Tab ^ 0 + ) ^ 0 + * K ( 'String.Doc' , ( 1 - P "\"\"\"" - P "\r" ) ^ 0 * P "\"\"\"" ) +% \end{macrocode} +% +% \bigskip +% \paragraph{The comments in the Python listings} +% +% We define different \textsc{lpeg} dealing with comments in the Python +% listings. +% \begin{macrocode} +local CommentMath = + P "$" * K ( 'Comment.Math' , ( 1 - S "$\r" ) ^ 1 ) * P "$" + +local Comment = + WithStyle ( 'Comment' , + Q ( P "#" ) + * ( CommentMath + Q ( ( 1 - S "$\r" ) ^ 1 ) ) ^ 0 ) + * ( EOL + -1 ) +% \end{macrocode} +% +% +% +% \bigskip +% The following \textsc{lpeg} |CommentLaTeX| is for what is called in that +% document the ``LaTeX comments''. Since the elements that will be catched must +% be sent to LaTeX with standard LaTeX catcodes, we put the capture (done by +% the function~|C|) in a table (by using~|Ct|, which is an alias for |lpeg.Ct|). +% \begin{macrocode} +local CommentLaTeX = + P(piton.comment_latex) + * Lc "{\\PitonStyle{Comment.LaTeX}{\\ignorespaces" + * L ( ( 1 - P "\r" ) ^ 0 ) + * Lc "}}" + * ( EOL + -1 ) -- you could put EOL instead of EOL +% \end{macrocode} +% +% \bigskip +% \paragraph{DefFunction} +% +% The following \textsc{lpeg} |Expression| will be used for the parameters in +% the \emph{argspec} of a Python function. It's necessary to use a \emph{grammar} +% because that pattern mainly checks the correct nesting of the delimiters +% (and it's known in the theory of formal languages that this can't be done with +% regular expressions \emph{stricto sensu} only). +% \begin{macrocode} +local Expression = + P { "E" , + E = ( 1 - S "{}()[]\r," ) ^ 0 + * ( + ( P "{" * V "F" * P "}" + + P "(" * V "F" * P ")" + + P "[" * V "F" * P "]" ) * ( 1 - S "{}()[]\r," ) ^ 0 + ) ^ 0 , + F = ( 1 - S "{}()[]\r\"'" ) ^ 0 + * ( ( + P "'" * (P "\\'" + 1 - S"'\r" )^0 * P "'" + + P "\"" * (P "\\\"" + 1 - S"\"\r" )^0 * P "\"" + + P "{" * V "F" * P "}" + + P "(" * V "F" * P ")" + + P "[" * V "F" * P "]" + ) * ( 1 - S "{}()[]\r\"'" ) ^ 0 ) ^ 0 , + } +% \end{macrocode} +% +% \bigskip +% We will now define a \textsc{lpeg} |Params| that will catch the list of +% parameters (that is to say the \emph{argspec}) in the definition of a Python +% function. For example, in the line of code +% \begin{center} +% \piton{def MyFunction(a,b,x=10,n:int): return n} +% \end{center} +% the \textsc{lpeg} |Params| will be used to catch the chunk\enskip |a,b,x=10,n:int|. +% +% Or course, a |Params| is simply a comma-separated list of |Param|, and that's +% why we define first the \textsc{lpeg} |Param|. +% +% \medskip +% \begin{macrocode} +local Param = + SkipSpace * Identifier * SkipSpace + * ( + K ( 'InitialValues' , P "=" * Expression ) + + Q ( P ":" ) * SkipSpace * K ( 'Name.Type' , letter^1 ) + ) ^ -1 +% \end{macrocode} +% +% \medskip +% \begin{macrocode} +local Params = ( Param * ( Q "," * Param ) ^ 0 ) ^ -1 +% \end{macrocode} +% +% \bigskip +% The following \textsc{lpeg} |DefFunction| catches a keyword |def| and the +% following name of function \emph{but also everything else until a potential +% docstring}. That's why this definition of \textsc{lpeg} must occur (in the file +% |piton.sty|) after the definition of several other \textsc{lpeg} such as +% |Comment|, |CommentLaTeX|, |Params|, |StringDoc|... +% \begin{macrocode} +local DefFunction = + K ( 'Keyword' , P "def" ) + * Space + * K ( 'Name.Function.Internal' , identifier ) + * SkipSpace + * Q ( P "(" ) * Params * Q ( P ")" ) + * SkipSpace + * ( Q ( P "->" ) * SkipSpace * K ( 'Name.Type' , identifier ) ) ^ -1 +% \end{macrocode} +% Here, we need a \pkg{piton} style |ParseAgain| which will be linked to +% |\@@_piton:n| (that means that the capture will be parsed once again by +% \pkg{piton}). We could avoid that kind of trick by using a non-terminal of a +% grammar but we have probably here a better legibility. +% \begin{macrocode} + * K ( 'ParseAgain' , ( 1 - S ":\r" )^0 ) + * Q ( P ":" ) + * ( SkipSpace + * ( EOL + CommentLaTeX + Comment ) -- in all cases, that contains an EOL + * Tab ^ 0 + * SkipSpace + * StringDoc ^ 0 -- there may be additionnal docstrings + ) ^ -1 +% \end{macrocode} +% Remark that, in the previous code, |CommentLaTeX| \emph{must} appear +% before |Comment|: there is no commutativity of the addition for the +% \emph{parsing expression grammars} (\textsc{peg}). +% +% \smallskip +% If the word |def| is not followed by an identifier and parenthesis, it will be +% catched as keyword by the \textsc{lpeg} |Keyword| (useful if, for example, the +% final user wants to speak of the keyword \piton{def}). +% +% \bigskip +% \paragraph{The dictionaries of Python} +% +% We have \textsc{lpeg} dealing with dictionaries of Python because, in +% typesettings of explicit Python dictionaries, one may prefer to have all the +% values formatted in black (in order to see more clearly the keys which are +% usually Python strings). That's why we have a \pkg{piton} style |Dict.Value|. +% +% The initial value of that \pkg{piton} style is |\@@_piton:n|, which means that +% the value of the entry of the dictionary is parsed once again by \pkg{piton} +% (and nothing special is done for the dictionary). In the following example, we +% have set the \pkg{piton} style |Dict.Value| to |\color{black}|: +% +% \medskip +% \begingroup +% \SetPitonStyle{Dict.Value = \color{black}} +% \piton{mydict = { 'name' : 'Paul', 'sex' : 'male', 'age' : 31 } } +% \endgroup +% +% \medskip +% At this time, this mechanism works only for explicit dictionaries on a single line! +% +% \begin{macrocode} +local ItemDict = + ShortString * SkipSpace * Q ( P ":" ) * K ( 'Dict.Value' , Expression ) + +local ItemOfSet = SkipSpace * ( ItemDict + ShortString ) * SkipSpace + +local Set = + Q ( P "{" ) + * ItemOfSet * ( Q ( P "," ) * ItemOfSet ) ^ 0 + * Q ( P "}" ) +% \end{macrocode} +% +% \paragraph{Miscellaneous} +% +% \begin{macrocode} +local ExceptionInConsole = Exception * Q ( ( 1 - P "\r" ) ^ 0 ) * EOL +% \end{macrocode} +% +% +% \bigskip +% \paragraph{The main LPEG} +% +% First, the main loop : +% \begin{macrocode} +MainLoopPython = + ( ( space^1 * -1 ) + + EOL + + Space + + Tab + + Escape + + CommentLaTeX + + Beamer + + UserCommands + + LongString + + Comment + + ExceptionInConsole + + Set + + Delim +% \end{macrocode} +% |Operator| must be before |Punct|. +% \begin{macrocode} + + Operator + + ShortString + + Punct + + FromImport + + RaiseException + + DefFunction + + DefClass + + Keyword * ( Space + Punct + Delim + EOL+ -1 ) + + Decorator + + OperatorWord * ( Space + Punct + Delim + EOL+ -1 ) + + Builtin * ( Space + Punct + Delim + EOL+ -1 ) + + Identifier + + Number + + Word + ) ^ 0 +% \end{macrocode} +% +% \bigskip +% We recall that each line in the Python code to parse will be sent back to +% LaTeX between a pair |\@@_begin_line:| -- |\@@_end_line:|\footnote{Remember +% that the \texttt{\textbackslash @@\_end\_line:} must be explicit because it +% will be used as marker in order to delimit the argument of the command +% \texttt{\textbackslash @@\_begin\_line:}}. +% \begin{macrocode} +local python = P ( true ) + +python = + Ct ( + ( ( space - P "\r" ) ^0 * P "\r" ) ^ -1 + * BeamerBeginEnvironments + * PromptHastyDetection + * Lc '\\@@_begin_line:' + * Prompt + * SpaceIndentation ^ 0 + * MainLoopPython + * -1 + * Lc '\\@@_end_line:' + ) +% \end{macrocode} +% +% \begin{macrocode} +local languages = { } +languages['python'] = python +% \end{macrocode} +% +% % \bigskip +% \subsubsection{The LPEG ocaml} +% +% \begin{macrocode} +local Delim = Q ( P "[|" + P "|]" + S "[()]" ) +% \end{macrocode} +% +% \begin{macrocode} +local Punct = Q ( S ",:;!" ) +% \end{macrocode} +% +% \begin{macrocode} +local identifier = + ( R "az" + R "AZ" + P "_") * ( R "az" + R "AZ" + S "_'" + digit ) ^ 0 + +local Identifier = K ( 'Identifier' , identifier ) + +local Operator = + K ( 'Operator' , + P "!=" + P "<>" + P "==" + P "<<" + P ">>" + P "<=" + P ">=" + P ":=" + + P "||" + P "&&" + P "//" + P "**" + P ";;" + P "::" + P "->" + + P "+." + P "-." + P "*." + P "/." + + S "-~+/*%=<>&@|" + ) + +local OperatorWord = + K ( 'Operator.Word' , + P "and" + P "asr" + P "land" + P "lor" + P "lsl" + P "lxor" + + P "mod" + P "or" ) + +local Keyword = + K ( 'Keyword' , + P "as" + P "assert" + P "begin" + P "class" + P "constraint" + P "done" + + P "do" + P "downto" + P "else" + P "end" + P "exception" + P "external" + + P "false" + P "for" + P "function" + P "fun" + P "functor" + P "if" + + P "in" + P "include" + P "inherit" + P "initializer" + P "lazy" + P "let" + + P "match" + P "method" + P "module" + P "mutable" + P "new" + P "object" + + P "of" + P "open" + P "private" + P "raise" + P "rec" + P "sig" + + P "struct" + P "then" + P "to" + P "true" + P "try" + P "type" + + P "value" + P "val" + P "virtual" + P "when" + P "while" + P "with" ) + + K ( 'Keyword.Constant' , P "true" + P "false" ) + + +local Builtin = + K ( 'Name.Builtin' , + P "not" + P "incr" + P "decr" + P "fst" + P "snd" + + P "String.length" + + P "List.tl" + P "List.hd" + P "List.mem" + P "List.exists" + + P "List.for_all" + P "List.filter" + P "List.length" + P "List.map" + + P "List.iter" + + P "Array.length" + P "Array.make" + P "Array.make_matrix" + + P "Array.init" + P "Array.copy" + P "Array.copy" + P "Array.mem" + + P "Array.exists" + P "Array.for_all" + P "Array.map" + P "Array.iter" + + P "Queue.create" + P "Queue.is_empty" + P "Queue.push" + P "Queue.pop" + + P "Stack.create" + P "Stack.is_empty" + P "Stack.push" + P "Stack.pop" + + P "Hashtbl.create" + P "Hashtbl.add" + P "Hashtbl.remove" + + P "Hashtbl.mem" + P "Hashtbl.find" + P "Hashtbl.find_opt" + + P "Hashtbl.iter" ) +% \end{macrocode} +% +% \bigskip +% The following exceptions are exceptions in the standard library of OCaml (Stdlib). +% \begin{macrocode} +local Exception = + K ( 'Exception' , + P "Division_by_zero" + P "End_of_File" + P "Failure" + + P "Invalid_argument" + P "Match_failure" + P "Not_found" + + P "Out_of_memory" + P "Stack_overflow" + P "Sys_blocked_io" + + P "Sys_error" + P "Undefined_recursive_module" ) +% \end{macrocode} +% +% \bigskip +% \paragraph{The characters in OCaml} +% +% \begin{macrocode} +local Char = + K ( 'String.Short' , P "'" * ( ( 1 - P "'" ) ^ 0 + P "\\'" ) * P "'" ) +% \end{macrocode} +% +% +% \bigskip +% \paragraph{Beamer} +% +% \begin{macrocode} +local BalancedBraces = + P { "E" , + E = + ( + P "{" * V "E" * P "}" + + + P "\"" * ( 1 - S "\"" ) ^ 0 * P "\"" -- OCaml strings + + + ( 1 - S "{}" ) + ) ^ 0 + } +% \end{macrocode} +% +% +% \begin{macrocode} +if piton_beamer +then + Beamer = + L ( P "\\pause" * ( P "[" * (1 - P "]") ^ 0 * P "]" ) ^ -1 ) + + + ( P "\\uncover" * Lc ( '\\@@_beamer_command:n{uncover}' ) + + P "\\only" * Lc ( '\\@@_beamer_command:n{only}' ) + + P "\\alert" * Lc ( '\\@@_beamer_command:n{alert}' ) + + P "\\visible" * Lc ( '\\@@_beamer_command:n{visible}' ) + + P "\\invisible" * Lc ( '\\@@_beamer_command:n{invisible}' ) + + P "\\action" * Lc ( '\\@@_beamer_command:n{action}' ) + ) + * + L ( ( P "<" * (1 - P ">") ^ 0 * P ">" ) ^ -1 * P "{" ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}" ) + + + L ( + ( P "\\alt" ) + * P "<" * (1 - P ">") ^ 0 * P ">" + * P "{" + ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}{" ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}" ) + + + L ( + ( P "\\temporal" ) + * P "<" * (1 - P ">") ^ 0 * P ">" + * P "{" + ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}{" ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}{" ) + * K ( 'ParseAgain.noCR' , BalancedBraces ) + * L ( P "}" ) + BeamerBeginEnvironments = + ( space ^ 0 * + L + ( + P "\\begin{" * BeamerNamesEnvironments * "}" + * ( P "<" * ( 1 - P ">") ^ 0 * P ">" ) ^ -1 + ) + * P "\r" + ) ^ 0 + BeamerEndEnvironments = + ( space ^ 0 * + L ( P "\\end{" * BeamerNamesEnvironments * P "}" ) + * P "\r" + ) ^ 0 +end +% \end{macrocode} +% +% \bigskip +% \paragraph{EOL} +% \begin{macrocode} +local EOL = + P "\r" + * + ( + ( space^0 * -1 ) + + + Ct ( + Cc "EOL" + * + Ct ( + Lc "\\@@_end_line:" + * BeamerEndEnvironments + * BeamerBeginEnvironments + * PromptHastyDetection + * Lc "\\@@_newline: \\@@_begin_line:" + * Prompt + ) + ) + ) + * + SpaceIndentation ^ 0 +% \end{macrocode} +% +% +% \begin{macrocode} +% +% \paragraph{The strings} +% +% We need a pattern |string| without captures because it will be used within the +% comments of OCaml. +% \begin{macrocode} +local string = + Q ( P "\"" ) + * ( + VisualSpace + + + Q ( ( 1 - S " \"\r" ) ^ 1 ) + + + EOL + ) ^ 0 + * Q ( P "\"" ) +% \end{macrocode} +% +% \begin{macrocode} +local String = WithStyle ( 'String.Long' , string ) +% \end{macrocode} +% +% +% \bigskip +% Now, the ``quoted strings'' of OCaml (for example \verb+{ext|Essai|ext}+). +% +% For those strings, we will do two consecutive analysis. First an analysis to +% determine the whole string and, then, an analysis for the potential visual +% spaces and the EOL in the string. +% +% The first analysis require a match-time capture. For explanations about that +% programmation, see the paragraphe \emph{Lua's long % strings} in +% |www.inf.puc-rio.br/~roberto/lpeg|. +% \begin{macrocode} +local ext = ( R "az" + P "_" ) ^ 0 +local open = "{" * Cg(ext, 'init') * "|" +local close = "|" * C(ext) * "}" +local closeeq = + Cmt ( close * Cb('init'), + function (s, i, a, b) return a==b end ) +% \end{macrocode} +% +% \medskip +% The \textsc{lpeg} |QuotedStringBis| will do the second analysis. +% \begin{macrocode} +local QuotedStringBis = + WithStyle ( 'String.Long' , + ( + VisualSpace + + + Q ( ( 1 - S " \r" ) ^ 1 ) + + + EOL + ) ^ 0 ) + +% \end{macrocode} +% +% \medskip +% We use a ``function capture'' (as called in the official documentation of the +% \textsc{lpeg}) in order to do the second analysis on the result of the first one. +% \begin{macrocode} +local QuotedString = + C ( open * ( 1 - closeeq ) ^ 0 * close ) / + ( function (s) return QuotedStringBis : match(s) end ) +% \end{macrocode} +% +% +% \bigskip +% \paragraph{The comments in the OCaml listings} +% +% In OCaml, the delimiters for the comments are |(*| and |*)|. There are +% unsymmetrical and, therefore, the comments may be nested. That's why we need a +% grammar. +% +% In these comments, we embed the math comments (between |$| and |$|) and we +% embed also a treatment for the end of lines (since the comments may be multi-lines). +% +% \begin{macrocode} +local Comment = + WithStyle ( 'Comment' , + P { + "A" , + A = Q "(*" + * ( V "A" + + Q ( ( 1 - P "(*" - P "*)" - S "\r$\"" ) ^ 1 ) -- $ + + string + + P "$" * K ( 'Comment.Math' , ( 1 - S "$\r" ) ^ 1 ) * P "$" -- $ + + EOL + ) ^ 0 + * Q "*)" + } ) +% \end{macrocode} +% +% \bigskip +% \paragraph{The DefFunction} +% +% \begin{macrocode} +local DefFunction = + K ( 'Keyword' , P "let rec" + P "let" + P "and" ) + * Space + * K ( 'Name.Function.Internal' , identifier ) + * Space + * # ( P "=" * space * P "function" + ( 1 - P "=" ) ) +% \end{macrocode} +% +% \bigskip +% \paragraph{The parameters of the types} +% +% \begin{macrocode} +local TypeParameter = K ( 'TypeParameter' , P "'" * alpha * # ( 1 - P "'" ) ) +% \end{macrocode} +% +% \bigskip +% \paragraph{The main LPEG} +% +% First, the main loop : +% \begin{macrocode} +MainLoopOCaml = + ( ( space^1 * -1 ) + + EOL + + Space + + Tab + + Escape + + Beamer + + TypeParameter + + String + QuotedString + Char + + Comment + + Delim + + Operator + + Punct + + FromImport + + ImportAs + + Exception + + DefFunction + + Keyword * ( Space + Punct + Delim + EOL + -1 ) + + OperatorWord * ( Space + Punct + Delim + EOL + -1 ) + + Builtin * ( Space + Punct + Delim + EOL + -1 ) + + Identifier + + Number + + Word + ) ^ 0 +% \end{macrocode} +% +% \bigskip +% We recall that each line in the Python code to parse will be sent back to +% LaTeX between a pair |\@@_begin_line:| -- |\@@_end_line:|\footnote{Remember +% that the \texttt{\textbackslash @@\_end\_line:} must be explicit because it +% will be used as marker in order to delimit the argument of the command +% \texttt{\textbackslash @@\_begin\_line:}}. +% \begin{macrocode} +local ocaml = P ( true ) + +ocaml = + Ct ( + ( ( space - P "\r" ) ^0 * P "\r" ) ^ -1 + * BeamerBeginEnvironments + * Lc ( '\\@@_begin_line:' ) + * SpaceIndentation ^ 0 + * MainLoopOCaml + * -1 + * Lc ( '\\@@_end_line:' ) + ) +% \end{macrocode} +% +% \begin{macrocode} +languages['ocaml'] = ocaml +% \end{macrocode} +% +% \bigskip +% \subsubsection{The function Parse} +% +% +% The function |Parse| is the main function of the package \pkg{piton}. +% It parses its argument and sends back to LaTeX the code with interlaced +% formatting LaTeX instructions. In fact, everything is done by the +% \textsc{lpeg} |python| which returns as capture a Lua table containing +% data to send to LaTeX. +% +% \bigskip +% \begin{macrocode} +function piton.Parse(language,code) + local t = languages[language] : match ( code ) + local left_stack = {} + local right_stack = {} + for _ , one_item in ipairs(t) + do + if one_item[1] == "EOL" + then + for _ , s in ipairs(right_stack) + do tex.sprint( s ) + end + for _ , s in ipairs(one_item[2]) + do tex.tprint(s) + end + for _ , s in ipairs(left_stack) + do tex.sprint( s ) + end + else + if one_item[1] == "Open" + then + tex.sprint( one_item[2] ) + table.insert(left_stack,one_item[2]) + table.insert(right_stack,one_item[3]) + else + if one_item[1] == "Close" + then + tex.sprint( right_stack[#right_stack] ) + left_stack[#left_stack] = nil + right_stack[#right_stack] = nil + else + tex.tprint(one_item) + end + end + end + end +end +% \end{macrocode} +% +% +% +% \bigskip +% The function |ParseFile| will be used by the LaTeX command |\PitonInputFile|. +% That function merely reads the whole file (that is to say all its lines) and +% then apply the function~|Parse| to the resulting Lua string. +% \begin{macrocode} +function piton.ParseFile(language,name,first_line,last_line) + s = '' + local i = 0 + for line in io.lines(name) + do i = i + 1 + if i >= first_line + then s = s .. '\r' .. line + end + if i >= last_line then break end + end + piton.Parse(language,s) +end +% \end{macrocode} +% +% \bigskip +% \subsubsection{Two variants of the function Parse with integrated preprocessors} +% +% The following command will be used by the user command |\piton|. +% For that command, we have to undo the duplication of the symbols |#|. +% \begin{macrocode} +function piton.ParseBis(language,code) + local s = ( Cs ( ( P '##' / '#' + 1 ) ^ 0 ) ) : match ( code ) + return piton.Parse(language,s) +end +% \end{macrocode} +% +% \bigskip +% The following command will be used when we have to parse some small chunks of +% code that have yet been parsed. They are re-scanned by LaTeX because it has +% been required by |\@@_piton:n| in the \pkg{piton} style of the syntaxic +% element. In that case, you have to remove the potential |\@@_breakable_space:| +% that have been inserted when the key |break-lines| is in force. +% \begin{macrocode} +function piton.ParseTer(language,code) + local s = ( Cs ( ( P '\\@@_breakable_space:' / ' ' + 1 ) ^ 0 ) ) + : match ( code ) + return piton.Parse(language,s) +end +% \end{macrocode} +% +% +% \bigskip +% \subsubsection{Preprocessors of the function Parse for gobble} +% +% We deal now with preprocessors of the function |Parse| which are needed when +% the ``gobble mechanism'' is used. +% +% +% \bigskip +% The function |gobble| gobbles $n$ characters on the left of the code. It uses +% a \textsc{lpeg} that we have to compute dynamically because if depends on the +% value of~$n$. +% \begin{macrocode} +local function gobble(n,code) + function concat(acc,new_value) + return acc .. new_value + end + if n==0 + then return code + else + return Cf ( + Cc ( "" ) * + ( 1 - P "\r" ) ^ (-n) * C ( ( 1 - P "\r" ) ^ 0 ) + * ( C ( P "\r" ) + * ( 1 - P "\r" ) ^ (-n) + * C ( ( 1 - P "\r" ) ^ 0 ) + ) ^ 0 , + concat + ) : match ( code ) + end +end +% \end{macrocode} +% +% +% +% \bigskip +% The following function |add| will be used in the following \textsc{lpeg} +% |AutoGobbleLPEG|, |TabsAutoGobbleLPEG| and |EnvGobbleLPEG|. +% \begin{macrocode} +local function add(acc,new_value) + return acc + new_value +end +% \end{macrocode} +% +% \bigskip +% The following \textsc{lpeg} returns as capture the minimal number of spaces at +% the beginning of the lines of code. The main work is done by two \emph{fold +% captures} (|lpeg.Cf|), one using |add| and the other (encompassing the +% previous one) using |math.min| as folding operator. +% \begin{macrocode} +local AutoGobbleLPEG = + ( space ^ 0 * P "\r" ) ^ -1 + * Cf ( + ( +% \end{macrocode} +% We don't take into account the empty lines (with only spaces). +% \begin{macrocode} + ( P " " ) ^ 0 * P "\r" + + + Cf ( Cc(0) * ( P " " * Cc(1) ) ^ 0 , add ) + * ( 1 - P " " ) * ( 1 - P "\r" ) ^ 0 * P "\r" + ) ^ 0 +% \end{macrocode} +% Now for the last line of the Python code... +% \begin{macrocode} + * + ( Cf ( Cc(0) * ( P " " * Cc(1) ) ^ 0 , add ) + * ( 1 - P " " ) * ( 1 - P "\r" ) ^ 0 ) ^ -1 , + math.min + ) +% \end{macrocode} +% +% \bigskip +% The following \textsc{lpeg} is similar but works with the indentations. +% \begin{macrocode} +local TabsAutoGobbleLPEG = + ( space ^ 0 * P "\r" ) ^ -1 + * Cf ( + ( + ( P "\t" ) ^ 0 * P "\r" + + + Cf ( Cc(0) * ( P "\t" * Cc(1) ) ^ 0 , add ) + * ( 1 - P "\t" ) * ( 1 - P "\r" ) ^ 0 * P "\r" + ) ^ 0 + * + ( Cf ( Cc(0) * ( P "\t" * Cc(1) ) ^ 0 , add ) + * ( 1 - P "\t" ) * ( 1 - P "\r" ) ^ 0 ) ^ -1 , + math.min + ) +% \end{macrocode} +% +% +% +% \bigskip +% The following \textsc{lpeg} returns as capture the number of spaces at the +% last line, that is to say before the |\end{Piton}| (and usually it's also the +% number of spaces before the corresponding |\begin{Piton}| because that's the +% traditionnal way to indent in LaTeX). The main work is done by a \emph{fold +% capture} (|lpeg.Cf|) using the function |add| as folding operator. +% \begin{macrocode} +local EnvGobbleLPEG = + ( ( 1 - P "\r" ) ^ 0 * P "\r" ) ^ 0 + * Cf ( Cc(0) * ( P " " * Cc(1) ) ^ 0 , add ) * -1 +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +function piton.GobbleParse(language,n,code) + if n==-1 + then n = AutoGobbleLPEG : match(code) + else if n==-2 + then n = EnvGobbleLPEG : match(code) + else if n==-3 + then n = TabsAutoGobbleLPEG : match(code) + end + end + end + piton.Parse(language,gobble(n,code)) +end +% \end{macrocode} +% +% \bigskip +% \subsubsection{To count the number of lines} +% +% \medskip +% \begin{macrocode} +function piton.CountLines(code) + local count = 0 + for i in code : gmatch ( "\r" ) do count = count + 1 end + tex.sprint( + luatexbase.catcodetables.expl , + '\\int_set:Nn \\l_@@_nb_lines_int {' .. count .. '}' ) +end +% \end{macrocode} +% +% \begin{macrocode} +function piton.CountNonEmptyLines(code) + local count = 0 + count = + ( Cf ( Cc(0) * + ( + ( P " " ) ^ 0 * P "\r" + + ( 1 - P "\r" ) ^ 0 * P "\r" * Cc(1) + ) ^ 0 + * (1 - P "\r" ) ^ 0 , + add + ) * -1 ) : match (code) + tex.sprint( + luatexbase.catcodetables.expl , + '\\int_set:Nn \\l_@@_nb_non_empty_lines_int {' .. count .. '}' ) +end +% \end{macrocode} +% +% \bigskip +% \begin{macrocode} +function piton.CountLinesFile(name) + local count = 0 + for line in io.lines(name) do count = count + 1 end + tex.sprint( + luatexbase.catcodetables.expl , + '\\int_set:Nn \\l_@@_nb_lines_int {' .. count .. '}' ) +end +% \end{macrocode} +% +% +% \bigskip +% \begin{macrocode} +function piton.CountNonEmptyLinesFile(name) + local count = 0 + for line in io.lines(name) + do if not ( ( ( P " " ) ^ 0 * -1 ) : match ( line ) ) + then count = count + 1 + end + end + tex.sprint( + luatexbase.catcodetables.expl , + '\\int_set:Nn \\l_@@_nb_non_empty_lines_int {' .. count .. '}' ) +end +% \end{macrocode} +% +% \begin{macrocode} +\end{luacode*} +% \end{macrocode} +% +% +% \vspace{1cm} +% \section{History} +% +% The successive versions of the file |piton.sty| provided by TeXLive are available on the +% \textsc{svn} server of TeXLive:\par\nobreak +% +% \smallskip +% { +% \small +% \nolinkurl{https://tug.org/svn/texlive/trunk/Master/texmf-dist/tex/lualatex/piton/piton.sty} +% } +% +% % \subsection*{Changes between versions 1.4 and 1.5} +% +% New key |numbers-sep|. +% +% +% \subsection*{Changes between versions 1.3 and 1.4} +% +% New key |identifiers| in |\PitonOptions|. +% +% New command |\PitonStyle|. +% +% |background-color| now accepts as value a \emph{list} of colors. +% +% \subsection*{Changes between versions 1.2 and 1.3} +% +% When the class Beamer is used, the environment |{Piton}| and the command +% |\PitonInputFile| are ``overlay-aware'' (that is to say, they accept a +% specification of overlays between angular brackets). +% +% New key |prompt-background-color| +% +% It's now possible to use the command |\label| to reference a line of code in +% an environment |{Piton}|. +% +% A new command |\|⣠is available in the argument of the command |\piton{...}| to +% insert a space (otherwise, several spaces are replaced by a single space). +% +% \subsection*{Changes between versions 1.1 and 1.2} +% +% New keys |break-lines-in-piton| and |break-lines-in-Piton|. +% +% New key |show-spaces-in-string| and modification of the key |show-spaces|. +% +% When the class \cls{beamer} is used, the environements |{uncoverenv}|, +% |{onlyenv}|, |{visibleenv}| and |{invisibleenv}| +% +% +% \subsection*{Changes between versions 1.0 and 1.1} +% +% The extension \pkg{piton} detects the class \cls{beamer} and activates the +% commands |\action|, |\alert|, |\invisible|, |\only|, |\uncover| and |\visible| +% in the environments |{Piton}| when the class \cls{beamer} is used. +% +% \subsection*{Changes between versions 0.99 and 1.0} +% +% New key |tabs-auto-gobble|. +% +% \subsection*{Changes between versions 0.95 and 0.99} +% +% New key |break-lines| to allow breaks of the lines of code (and other keys to +% customize the appearance). +% +% \subsection*{Changes between versions 0.9 and 0.95} +% +% New key |show-spaces|. +% +% The key |left-margin| now accepts the special value |auto|. +% +% New key |latex-comment| at load-time and replacement of |##| by |#>| +% +% New key |math-comments| at load-time. +% +% New keys |first-line| and |last-line| for the command |\InputPitonFile|. +% +% \subsection*{Changes between versions 0.8 and 0.9} +% +% New key |tab-size|. +% +% Integer value for the key |splittable|. +% +% \subsection*{Changes between versions 0.7 and 0.8} +% +% New keys |footnote| and |footnotehyper| at load-time. +% +% New key |left-margin|. +% +% \subsection*{Changes between versions 0.6 and 0.7} +% +% New keys |resume|, |splittable| and |background-color| in |\PitonOptions|. +% +% The file |piton.lua| has been embedded in the file |piton.sty|. That means +% that the extension \pkg{piton} is now entirely contained in the file |piton.sty|. +% +% +% +% \tableofcontents +% +% \end{document} +% +% +% Local Variables: +% TeX-fold-mode: t +% TeX-fold-preserve-comments: nil +% flyspell-mode: nil +% fill-column: 80 +% End: + + + + + + diff --git a/macros/luatex/latex/piton/piton.pdf b/macros/luatex/latex/piton/piton.pdf index 3697dd93ed..e573842f13 100644 --- a/macros/luatex/latex/piton/piton.pdf +++ b/macros/luatex/latex/piton/piton.pdf @@ -389,19 +389,27 @@ endobj << /S /GoTo /D [ 225 0 R /FitBH 771.02165 ] >> endobj 230 0 obj -<< /Filter /FlateDecode /Length 3399 >> -stream -xڽˎ#·ñ>_ÑÇYC“Å7 ­,Î)ÎÞl ñ!Ù1$ŸŸ"Y|6»%íhV€ n5YU¬w±‹|ù}áË÷Oœ~OŸž¾¹€\„e ´R˧¿? |±€TLºÅ -ÏÜòéóòÓsã8—üÂñErÀ´â\|äNG0x¯Lº—§8ê—O?jŠC‚aJ­ -™Çk×g#a‚y­…íÀÎœ7‹Í”ÑÌóψþCš¦Ätˤ ¢aHIƎиv¸¼¸-`iIHG¼túÂóÖzN#HÃpâb¬aÒ–¥J[9¨Î#è9‹,°PÇDn_kâ×%8†¯¬%Êq½˜ñ>“ N‰ÄQ«²v‰ÄÀ9ßg}ú5¯„ʈÅ1o jJ‹É"g•] 7ÌYÑb‰³I¶cRpŸ!òDêcQFe¥¤œ©£’fPG·¥Ž¦8¬d¬pljã¥Þ0+Õ JX¯GðA_ˆÛ©<É+HxŽ/qXDèòcÛ<΃Ó2ƒžh…“ÂM‚G¿>OÔ2 䥬…$ -ªl¢&œß*ò †™òRˆ€9Ø‚#«\i§<:àÎ*¯]{_!T -ÂL}º“%P8ÎC[´õLYUtãœ(káH%•щÅ”MãÅÇòQõ•ô4ü"îfNà©D>ÊWòé‰H|'lR®#>wt†äieÄ@š‡îmY¡7š‡Ë—Èe˜Pô1 9œ "N¿(2)‘eÆwŠ.ôâQÑÑLÐbƉi|ð£AÚMƒœbÒ¡ÑûǦAÎéF2/õŠÒsc$…ÚN5â?jxsM5Êœª²þñû’.~ü>Ðkü•NwÎÓ)æp oA89to­¼Dc0ãjcœ1F r ”¯Ì$Øp=¶F•c\*‡sÀ$e'k)d >¨õ¤’b¬È‚¾Ñ;»Å;ÙÃz¹ÁòU‚-êH -Np­ œ(iT- 0b,Às¨!|41&‘—äœ,­Ÿ°í› zˉIÅÇÄh`dŒCÙE¹ê/¢{R»6(Q§­ó#ĤQ Z°žD©Ö½Þ$V´«Ã'âbòÚõtíë¦;Ÿ(çÌÖ´%ÂlT1ØXÈ”²µ|Mª wy,”ÄäÓ¸îä«0žaš7Bó>n«p·Z§"³wÓ˜À;9l„¸G ›7fÅ -«ˆÁw’ç`µ8“íT7:‰1%Ó]ò”òu7¸šn«ØL`Ô¿b'yTMÉGRäŽ-èt>áj¢‘z" 8Õ8Ø2hˆÝ½^+ç˜Åú¦Ë–z\6ÖC»Y̾ªi‰¥™Q+ž¾‘‘—*çømR”°Ü°4­LrËb0™c,S}'3‰ *s)ÞY~¬Ñ+'ÚQ¸P ã!¬£Cz’]j¬½ô(ú4f7`÷ÔéªÕÙ)å1 K½ºÆ4Q,WéÜÓfê#gYq¬ã µÆŒÕŸ/)hžÛÝÁkÉxš°~õºd6ßUÄeP¦ÜQñNwÙ^“õ‘è];;Ú¨-„¬ƒp~tSùEPúâe+çå˜Æ"´_ä)/`Xp0éEÑÆļ˜Få -§rÚ” ÖìÃbÜ>õcJ¿‘W`Í­É2IcúõáÿvwŠ{f‚géå(KÆâ¿&dÜõ&fÝv§šQàWmÒ\–{Òï ‡Q< €Œ-T9D4…K¤¨NÕLÃ8Ušèwéh(ã.šÚÆy'„ÌØ\´M2–œd‘¸¯ò 0Œ¿+ú²Z¿MbÈ5!ÛRÚ›(óšaÊ>ÀÈŒCùp]vÂ"9wS³;Ì¥ù©Ð2—;!õ ® Îu"“᳌¿‘®ù£–N´íÍ€FªìV›©*—ÝT›œHOapž~¾$ƒ«E/Ê…{ÉI¬T…íô!}+û$êêMÒ»#̬>×oŒ(M¼7ç&i³C’oGÛËuhŸä %G6¹Ér®°RHI×s5©Ò×æ&í%6¢¯ÌÆlÜ›¶MÅ?c×™RCÚæÍQy\~—'Ÿ*¼œÐÌ`Ç1ç›Ý0±5XrÿpÖô`«†ÝCšÒLê‰ÔÞâ¸É' °ÕíþP¬™4̨‹Ž}„G¢h5RéwÝ䊢[˜4ÌóÕÜ-諒–GÏ]—LÅûTz’&èFG\¹:òä¿ø*Äl×b)¬¨HœIÁb€­øF¤HÁ0zÛ/>‚Bïã.ÃmWX·®F'ïÜIÕԄΤaË}pä¿XQp!M!É©J6×y–WWØFåîñ9¨QJÉ÷ñ9=ìRÏßá{²¾¯©|œïÉa ö¼ïFŠnñ= -c„YÍ6ñW–Ùžû¬{”s_Ç÷ ¸à{ÖÔ·EÀÛ¤KùçˆÃÜ"/,MÃëòqîi./ë˜UYsÝäɽ}€·LKy‡}0eÜ‚s`I&ÒÝÿ¸ýª-[É€1fñp¤­ ²•r‰ïuh+e|Ú¾‚Õ†Lª7r+Í<¶p‹µµèhyþõßþóë¿>¼Ø矹æÔ #ùæ¼ï§ÿïÃ.FúƒT?ñˆ/ðü§ôÓ“ öi@HÜ ¿Ý§B⺭ôS*¬}þ–&;{ÓÚ¸nÝ®6y²Ld~÷ééß“¡œqPËoŸŸ~úŸü ¿?%÷nùoûyQc<^ýsùëÓ_R•1[øµ$^!ð¤ÚÏða÷EšÔh zÔ¹æõÆü•{sdÕqŸÏXZÕã}æû¤ZÅ,¬ ²3Ú[Þ‡Kt¶†C”’P[®y?õ‡l³î]RŸvN}èÑ=©Ïiþ•Ý[®­’:¥BlÀO;Ië²-%Z+joJRÚ5ÌÝ(Ûˆ+©3_')p ¦wUÖ™3kŠU-,6i 4j˜M/Nv_ÄQɵÂKºÄ•ô¡ÞN¬¯ÉEÓÕ³Ò ôr*¸ê~v—1-ÙÚ'…®§64]Õøw³€Ìûží·­ ó|½‚Ç”´”´ð)U¼–ð¦v\͆ì()G›‡$¼)…`CH]7’^*åÇu?‚š\ø2ÛHN[Ý#[nÊ°…Æ -q…çôˆ5ÐFÊ£ó5€fÄûp“ʈ•ÍÜT‚¤2á6 ÍeÂ{h((ƒ¶"oå§!‰GSÛÊ)ÑmEÞa+¡ÉÝ„¤úKTÔÚ‚zEÿ#@ßÊSô?Rë÷ÑQç˜væËtÔËØlr£ŽúðÔlèèõ$6Ú~ŒfÀõömžõpC71ˆöe~ßL oo&6F(¾ —دÝ)Í&‘ÆÜÑvŠf–æFÇ4²ô5£c"Õ´¦ÆYh»cüªY#>·çÒƲۄÁÑ”B x…é\Iîî-]+µ–*l?ˆ¡ã3øF’•S²§8¯ñ”vIJ‡Râ“,5yj}}›ÿ©ì{rOÙV磘fˆõoÚT.½(ó¶Zn†HäÊCÛg­:ºT|Åq¥]Î0 nÄ][©çf¿5F8ÃT¨1ÖP2õ±•/ŠÇPU8˜’ûlsSݨ¢­Äp\„»U/¤¦ï­°À”ùKËžªhÛ-k–èBep4ýï4ç°E¡¡¬Ú£|j"++pGå\FQ°Kߟ{Ýb¯ÜyÒQ˜`Ñ‹íìÑZ|ÅiöŠæ¦1畘¨a²90R;¾ú'm³ž‚Ù†dÑá4îµi™pPÇU·[Ft\5»{e%`„èwË°,Á™Öêî`•óñ­™ÐáW­ùi¹XœÄXûÊ^b¤5Ñ®´ƒ1°Ô†IÕôÃJÞ¸‹¶Å-uK†á²ñÞ­C Ò }€Did»´XŠú—»Ú”ªhsØ76—_µ‰È5й?—çQÏ"1ÃϘZ£•#76fÎÒóh±‚uM«CÙ®Þ\!\Ú†îþ<«;lê¯tŽ$¶×åH”:š)EH¸Ìx”æšÎ`Öï›…þLúÁ¶Ï4ÝŽ·mÖõë¾pÅû6¢`ú¾9zR½Åóµ{-· k{¶'ao“EŸ-ô•\šWîr.”gniΉI×錅KQiÃaâ¥h)Z¶»šÓ™ÃøRý1ªG‰1ƒqÐŒS™›| Ãy“ŠÎå¯  ™ÀH-mNqÚ±þÇ’¯þ–½ }ÕRt@q©=®]ÓVNmLRAM§1"oûÍëïÏöSb™bõP]^3N°Ì¹ïÐÛs”® ~Zfg ÈoWŸT^¾Uß%Ë ¦{½ M¿}žÎûš7:ÍÉ!ušú·ügsla'> +stream +xڽˎ#·ñ>_ÑÇYC“Å7 ­,Î)ÎÞl ñ!Ù1$ŸŸ"Y|6»%íhv€Æt«Éªb½‹]äËï _¾âôÿôéé› ÈEXB+µ|úû“À7| HŤ[¬ðøÎ-Ÿ>/?87ŽsyÁ Ž/’þ¢çâ#çp:‚ÁgeÒ³<ÅQ¿|ú!àPS Sj…$€T€È<Þ ¼? ‹Ìk-lÆpæ¼Y,h¦ŒŽ`žFôÒ4%¦ÓÀX&½X CJ2v„ƵÃåÅåhy{HKB:â} +Ж˜³†hÔsA†c “¶,UÚÊAuA°ÈYd…:&rû’X/—à~¼²^¨a1˜ñ>“ N‰ÄQ«ºvHœó/ÇZŸþ›WBgÄâ˜7µ¥Åf‘»Ê.†æ¬h±ÄÙ$߀5©OxÎù ¢@²('òRRÎTRI3¨¤ÛRISV2aV865rƒRo˜•j%¬W‹#ø 3ÄqˆÔžä$<Ç—8,"tùµm^çÁi™AW´ÂIá!Á£ÿ>OÔ2 䥬…$ +ªl¢6œß*ò Š™òRˆ€9؃#«\i§<:àÎjï]û\!T +ÂL}º“%P8ÎC[´õLYUtãœ(káH%•Ñ‘Å_”MãÅÇò Qõ•ô4üGÜÍœÀS‰|”¯ä7Ò‘øNØx’„>%‘¼J}¤ ÝG|îè ÉÓʈ4]*zh…zÜh._"”aZ@Ñ;Ä€äpR€Š8ýG‘Iш,3¾St¡ŠFMÐbƉiŒð£AÚMƒœbÒ¡ÑûǦAÎéF2/õŠÒsc$…ÚN5â/jxsM5Êœª²þñû’n~ü>Ðkü•NwÎÓ)æp oA89|o­¼Dc0ãjc¬1N r ”¯Ì$Øp=¶F•ã\*‡sÐ$e'k)d >¨õ¤’b¬È‚¾Ñ;»Å;ÙÃz¹ÁòU‚-êH +Np­ œ(iT- 0b,Às¨!|41&‘—äœ,­Ÿ°í› zˉIÅÇäh`dŒCÙE¹ê/¢{R»6(Q§­ó#ĤQ Z°žD©Ö½Þ$V´«Ã7âbòÚõtíë¦_;Ÿ(çÌÖ´%ÂlT1ØXÈ”2¶|Oª wy,”ÄÔ¸îä«0žaª7Bó>n«p·Z§"³wÓ˜Ä;9l„¸G ›7fÅ +«ˆÁw’ç`µ8“íT7:‰1%Ô]ò”_òu7¸šn«ØL`Ô¿b'yTMÉGRäŽ-èt>áj¢‘z" 8Õ8Ø2hˆÝ½^+ç˜Åú¦Ë–z\6ÖD»Y̾ªi‰å™Q+ž®ÈÈK•s¼š%,7,M«Ó†ÜÁ2LAæ ÇÔDßÉLâ‚Ê\ŠO–kôÊ €vn#èxëèÞd—ë/=Š>Ù Ø=uºjuvJy ÈR³®1MTKVg:÷´™úÈYVëÇøÆB­3cõçK +šçvOðZ2Þ&¬a½.™ÍwUq™”)OTÀÓS¶×d}$z×ÎŽ6j !ë œ_ÝT~”¾xÙÊyA9¦±íygÊ Œ@zQ´11/¦Q¹Â©œ6å‚5û°·Oý˜RÄoäX`sëG²LÒ˜~}ø»Ý]£âž™àYzF9Ê’±øÆË„Œ»>ĬÛîT3 +<ãªMšËrOCú½áï0ꀇ±…*‡ƒˆ¦p‹Õ©ši§ªSý. ebÜISÛ8ïã„‚;‚‹¶IÆ’“,÷Už`†ñwE_Vë·I ¹&dÒ‚BJ{e^3LÙ™q(N¢ÛNX$çnjv‡¹´ ¿3Zær ¤¾Á5Á¹Nd2ü-ãÿH×üUK'Z‡öf@#Uv«ÍT•ÆÛnªMN¤§08O?_’Á‚Õ" ‰å½ä$VªÂvú®Ê~‰ºúôÁîs«ÏõŠ¥‰÷æÜ$mvHòíh{¹í󃜡ÄâÈ&7YžÏV +)é~®&UúÚܤ½ÄFôõñŃÙ؃ûÓ¶©øgì:SjHÛ¼9*ËïòäS…—šì8æ|³&Ö KîΚlÕ°{HSšI=‘Ú[7ù¤¶ºÝ +5“†u±À±ðH­F*ý®›\Qt‹“†y¾š»å½ ×Òãè¹ë’©xŸJïQÒÁÝèˆ+WGžü_…˜íZ,Å‚õ‰3)X °߈)#FoûÅGPè}Üe¸Bà +ëÖÕèä;©ššÐ™”#l¹Žü+ +.¤)$Y8UÉæ:Ïòê +Ûˆ£Ü=>5J)ù>>§‡]êù;|OÖ÷5•ó=Ù# Ôž÷=ÂHÑ-¾GaŒ0«¹Ã&þÊ2ûÑs߃urîëøž×|Ïšú¶x›t)ÿq˜[ä…¥iød>Î=Íåe³j"‹G¬ÂIæ­aoyRçãVW¼é>?ã.&m#\ý9…vˆ°C;—ÓÊ+¿g£›<¹·ð–i)ï°¦Œ[p,ÉDºç·?µe+0Æ,Ž´T¶R.ñ»m¥ŒoÛïA°ÚIõFn§™Çn±¶-Ï¿þñÛ~ýׇûü3לb$ß܃÷ýôÿ}ØŨBê§ ñážÿ”þõ$ˆ}7Äo÷©¸n+ý” +kŸ¿¥ÉÆξ´†$C·«Mž,™ß}zú÷d(gÔòÛ租~Á7Ã뇠äÞ-ÿc?/ +cŒÇ».}úKê³2f ¿6€Ä+žTû>ì~H“­A:×|ÞÝã°Ô˜ß£rbŽ¬:îóËA«z¼Ï|ŸT«˜…•AvF{Ë÷p‰ÎÖpˆRjË5ï§>àmÖ½Kê3ÀΩ}#º'õ MÃ?` 2p£{˵õCR§Tˆ øi'i]¶¥DkEíM©SJ»†¹eqÅ uæë$E®Áô®Ê:sfM±ª…Å& ”F ³éÃÉî‡8*¹VxI7€X ’>ÔÇI‚5Âà5¹hºzV:^NWÝÏá2¦%[û„ ÐõÔ†¦«ÿnyßÓ£ý¶dž¯W𘒖’Ö>¥Š×ޔŽ«Ù%¥ãhó„7¥°l©ëFÒK¥ü¸îGP“ ÿQfÉ©àa«{dËM¶ÐX!®ðœ±ÚhXqt¾ÐÌxnR±²™›JT&ܦ¡¹Lx eÐVä­üÔ"$1ãhj[y#%Ú¢­È;l%4º›T‰ŠZ@[Pèè[yŠþGjý>:êÓÎ|™Žz›MnÔQ>€š ¢žÄÂFÛ¯“Ñ ¸Þ¾Í3£nè&Ñ~ÌáíÍÄÆÈÅô»àµ; ¥Ù$Ò˜"ÚNÑÌÒÜè˜F–þ£ftL¤šVÂÔ8 mwŒ_5kÄ÷ö\ÚXv›08šR¨¯ð!-Éݽ¥ke£ÖÃÂR…í14c¼`ßH²rJöç5žÒ.IéPJ|’¥³&O­Ÿoó/•=°bOîâ)Ûê|Ó̱¾óM›Ê¥eÞVË͉\yhû¬UG—ŠŸ8®´Ë&Á¸kë#õÜì·Æg˜ +5ÆJ¦>¶òEñê¡ +SrŸmîbªU´•Ž‹p·â¯ê…Ôô½˜20`iÙSmø²±eÍ]¨ Ž¦_âæ¶(´#”U{”OMdeîè œË( +véâs¯[ì•;O: +,ú°=Z‹¯8Í^1CÂÜ4æ¼u"L6FjÇWÿ¦mÖS0Û,:œÆ½6-óê¸êvˈN£‘«fw¯L Œýn–%8ÓZݬr>~5:üW«ƒ~Z.'qÖ~²—iM´+í` ,µaR5ý°’7î¢mqKÝ’a¸l¼wëP‚4C`QÙ.-–¢þå©6¥*ÚöÍåO€Em"òxq©}®]ãVNoLRAM'2"oû ‘ëßÐöSb©bõPa^3N°Ì¹ïÔÛ³”® €Zfç ÈwWŸT>ÀUß%Ë ¦ƒ½ !MÏ}žÎüš;:Íé!uû·ügsta'DUÄd™S~Ji˜ÐbdhhL‘禧úÚÉCÍ„ +íŸq«°÷³˜üþÈ!š endstream endobj 225 0 obj @@ -619,26 +627,22 @@ endobj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 242 0 R /F74 245 0 R /F22 271 0 R /F79 270 0 R /F65 243 0 R /F81 294 0 R /F16 244 0 R /F82 295 0 R /F71 255 0 R /F53 253 0 R /F59 254 0 R /F73 258 0 R >> /ProcSet [ /PDF /Text ] >> endobj 306 0 obj -<< /Filter /FlateDecode /Length 4795 >> +<< /Filter /FlateDecode /Length 4786 >> stream xÚµ\I%¹q¾÷¯xÇÅ!ƒÁ (ÐÕ5%@:Yž›¬ƒ ÅyH`ÿ|÷5·î, ý2“ ƒƒ±eræ@=þûÁÿ¿ùôÏOâÁé?ñ0ŽIó0J3÷øó/Ÿüm”š)©¢~ü믿}úOœEžÀëÏŸ~|7òa˜3\ˆÇÏ+µeBãÃhÁ¸¦'¿<þð̹‚—?þü[¢N¨?5eHDÜßÈ¿ÿ'«Ž9 D¤!k‘I%F²Òp®9‘œãk7Â!ÁÏzOI›Ô›3K­[þ'1Uú -š>Ÿúâ+çâ+ÑpÄÑ{ÇEé)C’ýö¨×Ä!h‰´šè!DnF™xÙhwN.´p\Ú™ÃH ÓHúéçLˆ$`¼Lè˜àºðÔ¯ôž$0)î¸4L¨*§/7¼' ï)ð@? nÎ8ʉ¹Ô›ð̸ÓÏÜycô}° Fðî¯ñmä ”=¥87!x«=™ôÿ{ŒÿÎÖZN•aʘq‰¶ˆÒö´ò϶¯fùÔW‘Œ[ÏÊHÚN=H(ðõô¦š‡–·N•ÙŸÛæf}g¿Ëë_ ƒ(Èzlv5kO[½Õ?ø’uuÔ*ú-iMHc Z¯{Íï·÷¼¾ƒt6ö¡ÿ×ë·JË+Ó× ®PUú²†á–!··.° àaY_{•%í4Cu/æ¸``+lÔ%Ì oÅ\OÛ¯eÀ_û-l½E|xˆqxÄ­Ü]‡Ý,öwóÀ²QÀ Øp°¼<Ñ2=GïS|w Ÿ†]é¤/w]îW¢Ä?¾ÃÚˆÀÈKîxùü§ýùßúÇOæóqňý%_öGI¹—ÞçÿûawH$ è~ú~ ñÃ|þUü§çAì2!9M‚€ÓQüõ>’&n@,¹0æó¯SgM`%ÌI‚h:“CD'ìÑAFZ4u–‘Íðµ©çQyÈÿáôä/ô÷[¿IÉýohûË™£ÅÿóøOÂÀ¼Ö[ã{×X{$‰¸ ?Cby :‰¤TœA'MN(¼ìJX‘—‰n\æ ª—}9¿Õûq?ó}VIIn§ýq9v§ýë{ÍAç¦ëÌ…!Cp¤fz÷Z§=ílFqYxœ3+îÕÑħÆNG_‹nöutŽèÝI!~|‰u2¿GnO@’1Þ÷< ˧Èl±êVì+GºÞvØ‚×Ë7øPSykÐs‡æqZÂÇXýõM’q=ôŽåÜs7Y;›@ I[/f÷HƒW›S¾N¡°ÎGƵVÉX½”S†Î..nÅ Ì4Ñe¸š¬ªS)#ÄܶZÉؘgpK8+»\ýä設ä€M˳á®E—jl­ï˜EtÀÒ௭È\ˆâ³Ö·cÐo\± ÏJ(RýSësþ¡OCã´=²ô}³HqÆI¤ëYH28|Œ<“<í™3J^î9„f/÷# -Šhž•§"ª¦ÖïàDV]Ù,È,Q߆Qc˜5úc0JúÇ”)é)ÍÇ`”N¥Í·aÔYfœ9‰QIŠ‹ƒÝÄèññ¬ÉᤃøÎãY“ëflw<_ÊK>ÖDÆúþhêŠ{xÙóuÓJ bVÖT©ÍU/O`Ås æúš\'ãí1xß7'}ÉW#}ðÁ:™ª(\¢ì­;žªwRN¾0pqòׇQ¥PÙ£W©®'×S”Ù%Ø® ™ê~~1Pšïæ(—™çZ¹sW™R0ñÛš žûÓæ.ýŒnG7ÛÇš£Ôê½}ŠPòc‰Hÿë¹[¢2­Äzžnmctu–%/·äØÛÜyÖÉXP#%™ƒw‘B€^ø9âÜT…⛟ÃXïÒC$.œo=†(¶ØÇ—Öä-A·O€¦;9Oü*4>¶3Q¶™~Ô½æôº`É"\ÃÑLìÛë2Ôï„q!èèUÂ,6,×dMÔQß/ŒõDäÖF%œe•ŽòH=Vhéìlrs-u´Íz{Ûç(ǺnyJ%dž”ŒcÄ4P« vùôÉztnEåH Ät w¾QéÑ%q GN¼ÒÓ¢ªø•ÔI}ÔõyÙ© -¦”V'Plg‘Ãôe¬×”ˆ·í|HjÉ|© -OÆ}Ô”WMEW¸; +·SeLâuV.hTˆFOñ“¶P“¨p3rÎ3?Âi«Ô‹²¥Öº‰Tæ2Ð~Ži¡e,àóWv9®_Õ ÞÓ“„Üô4ë ¼E¥ò?ÚüO(Õ¸Ãø™ulKW›ƒ3 ïõnå–Ά´by~Cê¦{c'$JY×/ -ôÖ™ªv®­/ä0'‚קC_TÒ`ÒfLÆ~öÅÊ|äÊ’Ðz­¯vx»úvÞ2dÂ!¡5^ÚmôíêTÚ½R-.”ø=F—a€v¤ÿú€4—ÓLrvY¿ÃC—Ye;!â<à¦<+(z­%´£¾É-3…¥”xÕ5­%RJ¾ÚGÝ®ÌtÓNó·Ë¬"„yóoçí%)1˜J?ä»ÒEŒ‹‰zžB-ªêð[ðŽ­Oìh \ö¶SÚ˹í[s²ÂŠ>Œ;.vu -lØeóîÞÕ6w¹ºa½ß—'Ǩ ­\|1ÇoϪ]·$OÖ™AM²/¹°'­¤†sh8OO/ñRz%¢žùIç4hp„ó­ ¹çZ³Þú6ºöÅü\+3éCÊ"õʬl|[ç:ZÂùÌþóï':9QßO’ ÖŒø^ò$“gMm?œ2´•LH}‘—8éH£éT}›|MºWJG€` äDÑ+lž!ê×:HŸÌÍ]öÛl÷͆¤B«¢BlkRaVÖ%w"£/¨kGU{CQ¶FV«¸ -oµî´ IÖn]À™2“lòZgsÓ–qIÛN‰¢ÎöñÀ”˜„¿+Æâ6¦¥Àx†‹wÝN·èRØ°·¥fÔS&銰³ Öîz„'Óà LcÂÓ•{îß¾ªØukCÅ2…z:›žàÜdból¬ã“wF9_öøH¹ïuQ·íšEÎ1m'‘Bˆ0¹d¼DimQ²{fwì_M­^_ǧŽæ~Z­Æ%ˆc›`‡žÔ<èÒl -ÿÔºŒ†XŽ¥þò›{[±ýVl,>­wÆÔr†þd`Xµé¬–ö££ûd—$Œœy -£½7EØáºJʯ¹t¦ …þ3O9 aÞâ<FÜå¾U_ª„¥tËõŒ²Nñ>ÜÀtګÚ¢OTØÖ°¯1†þn·C›¹×>/¹ÕæÚcÞ¯ºP¥'Sˆ'8ÔÚ6FXql±Æµ“ªƒŽÉu y2ß襡£Z‹QÄþèžÀeúëRR¹eÔ(fÈ<(wþÌ:ç½YaÝØ3Ûàųz;>Èœ$³ÍN<¨eqè:©íÄÑßÙˆ,f/"ETV[M´jð>ê)¸é|G4Èë°ã,Zö†kŠZðý#E †8˦ŒÛ<Ù±(tûуo‹ xSûåIW-øµ÷½á-õþ=%æ_'Œç¦åñ¡v¶y ɯ®òåb¾”®]¡f.DlÀ)f¡î‹¬®„\E΄Ü=âM{¡0”à £Þ4ÿ]´)Áœ€i¾i7´žeœeçY¦[¯½£ÜÝysº -Ù„zQFj¸:gD|H4ò¯-«jàlÌ -6NžYUù´¿5ò(ðÕ†JXbÇ6«¡\‡>¶™m-ŽŒ)>ÓkÜP¹_»-ã+¨¶DhƒªØÍi]ÿŸs–Íwk6ý{TŒ6Å(É{@~= “JŽÜ,í]К)WԨݜ×oB4+S2ýC Ê}~cÌŸyC#WK^®RðeWVˆqž?á5©4µÈ*ü¥‚”xñû¡\ÄWCù -Ð’$_ -FÀ×–ÀCpz¨J½Hb(ÖŠ¬gVÈõ3K»*~³á Åg˜ö¨í)Ô¯|¤w[¿~G•ˆ÷"é$÷íU"RÒ°ÂÍkqã«Ÿý!“h×uP’Ή˭—§2À@Ú£irÿ6’svtç Õ’¼ªQÓ­„*¸)ί”€Äæõ@šÂ&åN8žd— Ú®‚ mÌÂ(†­G«˜9µö.Ê¥ø²¢lã\€SŶ¥Zu'¨þxå}6t×K"û™;1ñ}­^‘ö¿t#•5ú¨¤¤ðÇOE!m÷ýð3‚üDu7¯ á2Ùóž¼+ì}°j€Ìù¡mÿkGÚ¯"1¤K¬šxj ¼ˆœ}Ë×{åvšôÞa -´È×µ 6å…Ne”•eýÈŠŽ;}ÀƒÇÓññ÷Gýý»UU%pr]­ª¤±È å!IGèªÒ§6](!G¬©Í¯Ér-Ñ2•¾}—ÂÂèèèuIoß‘ô¦ÓÒñ‰þV¥áÕD·/TÆ™û­Dw˜IIt‡«’è6òl¢ÛŒ§Dwð…"Åì åÑòý­Ôp•}ŸæŽ­Á “ìÎ:¯Í’á C»þ:@ãÊ/Þ"¾˜övVñeñýº2?Ýy-}šz?a|9¬7’ᛶÿ*E¾ô1„Ï ˜ú¾_òÍÒ‹d Orb VX¼¸&-îžJóŒ5990Ÿ5VTìÌþ­ _ÑØOÈ»gç·hlªÖ,hR¿ïÞ½‹mƒÝæØää¸h1r<×/x7͸ixü"}·°¡[çwèH¬5y‚’!oIØî·Ûñ¹3112|ùkAy«¤ ·6·ðP™’áv¥×ÛEÑÑ·ª» Õ%ÔNU`1î7I~§v#ýëèÍÕDrm{ã÷È0 Ø8ª6vkJåÈ«YCwhË<ªZE©Ž9é¼ây½¼¥GFs{$ -5¬g.=í²®‰íºèbl0¸%yyK7ÝxCÙAˆÕRýÜa[5¼$-‡¾?tº õWä™ ÀQëÀ”@¼@iœc¥XÔe¤ÍÄ\xÇnêJ¡Dˆ‹šlJ³kYÔPX ]Ô&5¨œÊ›ö °aýGœkžþ¢;²ÞÌB8fI)Ž´á’Ý)|4EŽD’î[Øþ‚»Ý|ƒL ÑâÃóGþˆO×µö¿£ãOÅèlö®?¾«å[X>ëGîMx…»~dN¼X—W^ac–m’¡­pe7©\ðµÖ›m­7%Ÿ+Š\Sì_¾äÞC;9rÏl5›Iµ¥ªñêÜ+-mÿÊó¯Û¥ÈËâ€i>:‰«B]Móef‘ßìibıÇßù×ï6ß·¾Z<ñžhËEœŠÐBTÇ?oöœ[¯¹ž -A8zµeÒ==X)ëÉ9žzb4”KÙP«0~ý™ä aÆbªƒ‹i™0ÚÊ.2žÚ'\ôý6‚%àŽUë+nãՕزù¸Dº“µ`lƒs+FŽþBt¨ ã ÑmFTÖòGë_bÑüÓþØj—¾ÖâõúÍúoý†½,YúÔó–ª…bmIIövb‰,ÙÈOJ‹ÃT\©ÐÉ[šøÅ«¦zi[o Ô…w†ú úoiúDºÏf…„ú—üï®ÈA“þu­VZm, {OPò#OCë Æù'¿&B4®Dl+–òÒ0¤rwä/¦ˆèc"&xèjšWÇo¬HÎ=ê M6ÓÆÌÎvg“¿ûñÍoÌ&÷DÖ óööˆ†êj Tx]0”i„_>ßÚ¾æY×HÜŒ ÄZ_÷ -ä•=(³TL ¯¶'‚vøœ=Gÿ¤^ÚZ +š>Ÿúâ+çâ+ÑpÄÑ{ÇEé)C’ýö¨×Ä!h‰´šè!DnF™xÙhwN.´p\Ú™ÃH ÓHúéçLˆ$`<SÂ2%0)îE¦4L¨:Á×›Ù“…wÂx„žD%gåÄ\êM@ä •ég‹ÊŒè¾o@$­?¼Fdúk|Û@gBSOA)Î ­=¼ÕžLúÿ=ÆgëG-§Ê0eÌ8ŽÄ@[Di{ZùgÛW³|ê«HÆÆ­ge$m§$øzÍ@óÐòV‚b©²Æ_N!$ÃlèlÚ¿ +Qõ""ØìªÄž¶z«ð%+Ù¨ô[Rwƪ¯^÷*1ÞoïyEémìCÿ¯×o•–W¦9®A]¡ªt¿›O,0· ¹½u ºÝU–´Ó Õ½˜ã‚-K+í%ÌõïÅ\OÛ¯eÀ_û-l½E|xø`L.QöÖO•;©ú&ß?˜ƒ?¸8ùëÃ(R(¼ÌÑ«TÓ“k)Êì’aLWLu?¿(Íws”ËÇÀÌs­Úˆy«L)˜øm½Ïýis—~F·£ˆíc½QjõÞ>E(¹±D ¤ÿõÜ-Q™Vb=O·61º:Ë’“[rìmî<ëd¬¨‘’Ì‹Á»H!@/üqn‹©BáŠÍÏÆ€a ,Šwé!ηC[ìãËjò– ‹ Û§ @Óœ' þÇÛ™(ÛL?êÎ^sz]0Šd©á¿h&öíuêÇw¸tô*a–k²&jyžïÆz"òa K£€ Î2€JGy$‰+´tv6¹¹–:Úf½=€ís”c]·<¥:aCJ Æ1b¨U»|úD=:·¢r¤â : †;ߨôè’8Ð#'^éiQUüJê¤>êú¼ìÇTSÊN«(¶³Èaú2ÖkJÂÛv¾ $µd¾T…'ã>jÊ«G‰¦¢+ÜЕ[Œ©‚2&ñ:+4*D£§øI[¤IT¸9癟ÀGá´UêEÙRkÝD*s h?Ç4‹Ð2ïù+»ׯjPïéIBnzšuP^‹¢Rémþ'”jÜaüÌ:¶e«ÍÁ™F†÷z·rKgCZ±<¿!uÓŒ½±¥¬ë—zëLU;×Ö·ò˜HÁëÓ¡/(i0i3&c?ûbe>reIh½Ö÷1<]ýN;o™2áЉš /í6K­vu*í^©–FJü£Ë0@;Òÿý@šŽËi&9»¬_Šá¡Ë¬²qpSž½ÖòÙQßä–™ÂRJ¼êšÖ)åÞ m‰£nWfºi§ÇùÛeV +¼‡ù·óö’”ÌF¥ŸÇâñ]é¢ÆÅD=Ï¡Tuø-øÇÖ'v´‡.{Û)íåÜö-9YaEÆ—N»:6ì²ywoÈj›»\Ý°ÞïË“cÔ¿…V.¼ÎŽã·çFÕ®[’'ëÌÇ &Ù—\Ø“ŽVRÃ94œ§§—x)½’ QÏŠü¤s4¸ ÂùV†Üs­Wo}] ûb~®•™ô! åF‘zeV6¾­s-áüf‹ù— +œ¨ï'IPkF|/y’ɳ‚¦®NÚJH&¤¾ÈKœt¤ˆÑtª¾M¾¦Ý«Ž¥#@0r¢è6Ïõk¤OæŠæ.ûŠíF¶ûfCR ¡UQ!¶5©0« ë’;‘ÑT‡µ£*ˆ½¡Ž([#«U\…·ZsZŽ„$k·® àL™I6y­³9ƒé˸¤m§DQgûx`JLÂßcqÓR`<ÃÅ»n§[t)lØÛÒ³ê)“tEØYPëv=“ið¦1áéÊ=÷o^U캵¡b™B=MOpn2±y6Ö‹ñÉ;£œ/{Œ|¤Ü÷º¨ÛvÍ"瘶“H!D˜\2^¢´¶€(Ù=³;ö¯¦V¯¯ãÓ@ ÇÇFs?­VãÄ1M°COjti6…j]FC,Ç¿¿Rù­½Œ­Ø~+6ŸÖ;cj9C20¬ÚtVKûÑQ}²KFÎ<…ÑÞ›"ìp]%å×\:Ó†ÇBÿ™§0oq#îrߪ/UÂRº¿åzFY§xn`:íÕaMÑ'*lkØט C·Û¡ÍÜkŸ—Üjsí1ïW](ŽÒ“)Äjm#¬8¶XãÚIÕAÇd ƒ:Ð<™oôÒпM­Å(btOà2ýu)©Ü2j3dž ”;f‰óÞ¬°nì™mðâY½dN’Ùf'Ô²8tÔŒvâèïlD³‘¢*«­&Z5xõÜô@¾#š äuØq­ {Ã5E-øþ‘¢CœeSÆmžìÀX:ä*¿+.àMí—'^µà×Þ;ô†·Ôû[<ö”˜0ž›–Ç;„ÚÙæ$¿ºÊ—êøR6ºv…š¹±§˜…º/²ºr9r÷ˆ;4í…ÂP‚7ŒzÓüwѦs¦ù¦ÝÐz–q–g™n½öŽrtçÍé*dêE©áêœ]ð!ÑÈ¿¶¬ª³U03´Ø8yfUåÓþÖÈ£ÀWZ(a‰Û¬†VpúXØf¶µ8J0¦øL¯rCå~Q춌¬ Ú¡ ªb7§uýÎY6›ÙôïQ1Ú£$ïùõx€VL*9r³´wAk¦\Q£Fts^¿ ѬLÉôi€*÷ù]Œ1|æ \-y¹JÁ—]Y!Æy^üh „×t`¤ÒÔ"«ð— +RâÅï‡r_ å+L@K’|)_[Áé¡¿ÚkEÖ3+äú™¥]¿×pâ3L{Ôöê>Ò{­_¿£JÄ{‘tŒN’ûö*)iXá浸ñÕO‰þI´ë:(IçŒÄå‡VŠËÓ ` aÍщ4¹É9»ºóƒ„jI^Õ¨éVBÜçWJ@bóz Ma“r'O²ËmWA6f +aÃV£ULœZ{— åR|YQ¶Îq.À©bÛR­ºT¼ò>ºë%‘ý̘ø¾V¯€Hû_º‘ʉ}TRRx‡ã§¢ȶû~ø™A~¢º›×…ðN™ìyOÞö>X5@æüжÿµÎ#íW‘Ò%VM<5^Dξåë½r;Í zï0ZäëÚ›òB§2ÊÊ2‡~dEG‹>=Àãéøøû£þþݪª8¹ˆ®VUÒX€dÐÀò¤#tUéS›.”#ÖÔæ×d¹–h™Êß¾Ká?ßttôº¤·ïHzÓiéøD«Òðj¢Û*ãÌýV¢;̤$ºÃUIty6ÑmÆ€S¢;øB‘bö…òhùþÆVj¸Ê¾OsÇÖà„Ivg×fÉŽp†¡] qåo_L{;«xŒ²ø~]™Ÿî¼–>M½Ÿ0¾œÖÉðMÛ•"_úÂgL}ß/ùféE²…'¹1P+,^\“ +wO¥yÆšœ˜Ï‹+*ö fÿV†¯hì'äݳó[4¶GUk 4©ßwïÞÅ6‡Ánsì +rr\´9žë¼›fÜ4<~‘¾ÛØЭó;t$Öšš"G"I÷-lÁÝî>„A¦…è?ñaÈù#ħëZûßÑñ§‰bt6û×ßÕò-,Ÿõ#÷&¼Â]?0'^¬Ë+¯°± Ë6ÉÐV¸²›T.øŒ¿ZëͶ֛’ÏE®)ö/Ÿ_ï¡‚¹g¶ƒÍ¤ÚRÕxuî•–¶åyƒ×íRäƒeqÀ4ăU¡®¦ù*³Èoö41âØãïüëw›ïÛ _­FžxO4‡åƒ"NEh!ªãŸ¿7{έ×\O… ½Ú2鞬”õäO=1Ê¥l¨U¿ü̃ò„0c1ÕÁÅ´¿L meOí.ú~Áƒp Ç*ÈáÕ·ñêJlÙ|\"ÝÉZ0¶ÁF‡¹•#G!:T†qƒè6#*kù£õ/1è þilµK_kñzýf}„·~¿^–,}ŒêyKÕB±¶¤${;±D –lä'%áÅa*.ƒTèä-MüâUÓ½´­7PêÂ;Cýýw4}"Ýg³BBýKþwWä IÿºV«F­6†½'(ù‘'È¡õãü“_!W"¶KyiR¹;òSDt1“ˆ> /ProcSet [ /PDF /Text ] >> endobj 345 0 obj -<< /Filter /FlateDecode /Length 3634 >> +<< /Filter /FlateDecode /Length 3588 >> stream -xÚÅ\I\¹ ¾÷¯¨?Ð-Ô ¸\]&§$}Ì)Aæø\ò÷C-Ôþ–*ÛÈ¡ÜUzïQÅå#Åg~ùãÂ/__®/¿Ü­¿xæ4pùøÇ‹À ü".Ö3e/ÖƸ||»üö‰sù™sñ…ssÃç$çZàßÛÛï¿"-¡W´„0Ìê™Ú—·Wå~3ŽsuÇ|{•*Œ(¤lð#¯iF xÅ}jo hA¿ÀfÖÜ›#V…«òSº.}ðiqÌÊ·L§¹ÓR嫆FÂ<•¹xÏ5ÝFãœ<ý ÌÆ»e3å‰ $e³,¬„¤”aÊ™QH³ Òþ‰â‡[ºq‘˽­n˜ñ~œdËm 86ž¤Û®.Üky–@}&ò²–YÜ-™FM÷ºÆY¿ƒÚg‚›ÂñÃß^Aóf6Ðb˜-]×*ì`½’•4ßVG®é£µ¸¢Èc¥£éùYg‚ è{X• ô­'iz.E*—"›mSI1û¢Qíô+©Yf LŠWÁÇ­¡û¬lÛÑÛ?Çê®i)Ù†;©,ºÓ³8±mV66 f´Ät¿TÅ $å!EŠŸ¢T…¼ÌüÈÒɃ2Ø5E)ú+31TlßÓILŠiÙבó¸ï·Ö…”ÅQJCÎ,(\Ü߸6º?¦ÝoÄví 9¼ø¬¸«Ã8ä ©@+õºÅ¤qÙÁ,Dj&¼.1ឺËaµ“:2\«vy3p„`^kýÃŒ·LzUjx¥`>¿½â¢¢jg Ά¦¢1ñÞb¸Cߣ¬n˜~µ¾'®ƒ˜£@³_ÍWòPÒ–ÕHCª5m”‰Ï™¹òÅ6Ïvk40ïL ShsÏ)@ñ›Jœ!Æ™žTá8Ó0Që7«1î‚B𪤕Ì:½Z•²JåƒU)ÔÄD-ÃͼŠ ·“¯@Ik"ðÚÙ)2•%ah¤s~ †› ™]I€Æ( fÒ¤F -%Æ»c`ë9SÚO’pîþçKúò—¯NͼU¸Å„ t3\:!$xNžœ©B€m«ž‰ê\"Lön„Éq$ìFÛÉI€©’(0k 7’ ;Í(ö¶r`'†w#•’ $¾oìË£[¶´µÖE Ü[ŸtŽy¥GÎ:P¸ˆ¬ç·^ Ü9‰.Aœñ¢Ýzs=µõJZŽ3‹Á¡p½B‡i;¤?éí˜Lš41ZÁ÷éàÓRíëB¶OȘC^A†„CßS8‹™$…«{”Ó"Ðà®Yv#)KqI÷>C¦ì²“jõ`)‘Ì^L6RÊmKÖèêü>¦¿è -ŒÜŽL¯ª%"X‹¿$¬ï‡ü7zæ\i!ÈGy]¢Ðfq$¢y\aLÂh(ÙdkùšI%„ò[¾©>·ˆ˜þ4j Ì Øðs»þ -u¬)<ꯂnz9R© ³òW )•’…Jö ÿ„)ˆpbääÈ?m¢V@ã3“€ƒ/‘ÚL ÿü!À¼ ç&( Ä´QQ"7Ú³¹mÚ<³ 00 =±ÿ¼Õ°ŒÁQH³¸À’þç¥ûù§&å³L¡wæ ªi®)`©ªšíž…e\UWÔzµ}\wXêë·ŒIÖu*‡I…v Ÿ÷Ø^€Lþ(OvrK´eNšaêvDàÚ½u#ï&ÙA´Ý÷ä *y» ]ŸD½‡Ö@i¦ÔZC_ÐÚç­ ’m¯X±*ømÓŸ4Ö2u¸ªàP×ÖH3ÕCÜØÉïÆŽÇQ fGê9Lç™DE(<Œé03j¤B˜‡˜.–곘 -•qäQL'3ˆéNžÆtˆ$b ‘ÜmYY SœO/‡#¡w‘R+º ¤Âd[Kù£(GÔ×I/ôjGÆÄ°Ýñ.®6šPïÂÓôDð\Š*}ïÖ-ÛøÖ €¿š3®C̸uT·Æ"®}x<³‰5·ødIy·ju¶= MÏt¸*Ž<ž*V6•̃ÅüdºJ2‰š2P ÓyCãO¬–êt}x­0çç²ó_I:ÍÉT[\ß,”î¸1?q^Œ“ý$×.ÑôÌK3Ò¸ó&eñF_@ËÔ#g®¢fÜ iq¿mµøDÞBürp>‹Ê‘Ã(8hlKggŠ€R‡ƒD…´ ³MUBÆÃ3ž)gGî|¾@: ^‰[#F´j7퓲ü?DŽfèaäRÂÜr"ÀKÄ‚†Û‰ÚmŸc™Ùæ c<õûó{1ÿcó+ÌÂ’ÅüäPŠ+3´ýÚˆe`•‡2Ši½”Gñ®ñBs;Ï,X^3»Þ s«gÆËÏAÀäc^ÍÙZO0:%Wü<¹'!/?QÜ0^¥0¹YøJTÄ\m~+gÆ?Þˆ»’ø‘!û¤j=Ç­O8· -ÓSØŒPLI¹L -ÒÔ²òs¼Û#‚Q† #Ç*¼¢Â q’Ër»ÂráðÀŒT—•éÐ ”[@ÐI4L•1}ZLp¯Òݵ‚°6²?Õ ªÖÔ"©l›&©å‚V–ùº5í-jh+l¨ª¸……kW²Ã°Ÿy?ßÇ·%ô Æ{iÑ{èûÞj²cnMCÇ}(ER-¯içË1­¹rØKyì§Q+r‹ñеXGùSXGx‹TËí«À[݇›Ù¦ý4ïûµ†´¾Ùµ:Íú¬ÄàªU±« õ¹®ò*+OÓÌCÍ6¹„ãên[Ù¯±·¦ú»*È:yq(m£Ü\ Žªi¢jš[õËQwÓœb‡´Œê¸}"_R³aZ©™ÑbŒô”ýè öM 9„Íp˜G„Ówy¦Þ|¸î%}ŽáK©3ô× 9øq{m*xÝ/æ^2kõwÖÑšN0'LÛ<é…(+õž§x'•LßÇ9¤Ù±Ú´È“a9sº4$ê[ý”ºê­…~ÉšSÁºÒ·~Z%[É÷Üêæ’À¨¹>ß‘Ýæþ’+g{ÿxù÷(U°Qÿöíå·ßqüïøùMSa2÷ßxç7Äæ4~ù×å¯/ÎoR jD'kugµèc=&’¡ÍK»h(úåŽù¦Å9lÄDÝâæ -å˜h2Ñ{#Eibݧ=AKh ŒÂxÒf¡ÀjzŠÐ€?®)Þ0.—Â2#ã‡-nk)HÍ€šÄ@ÕîæãbM6¨^š¯tÝ»Øâû¶%g -ZßÈØaÿÚz™¡ZJOB‹{äÖ¬6¯Æ›ÛN2¾^`<ѳ€WaOl8Â@=`ɉ^§Ô¹8•]ãB³LzóÈ~s¶d*SG›§Wy~ÙˆFf†Ö ¦{•¥íöjÀÅžÀwLc>ÜËï:¾êø2Üâ`˜ :ÙXK0O¶ÀhxM°€¡äëB“röyÎ(ÖÐÅÁ Í'è¶UzJ¾47¤Gâ²{°g„öž†iÐW-z8jÕw—y¤‚IjôÙç“ìðTÿpóß ìÎÞ?2bZ}WVÚšYsäð0úãTûÞˆÀjö¶4ÖÍ>pi˜{ZšIq|y«’kó£k“¿ŠR{?K.¼Â›“–ÒÖ¾H¾3V98]ó¥j.¡´f»ó ›´èýãåPj +xÚÅ[ÉŽ¹½÷WÔ4‡Kp„T*•€ñɶnƒ9Ùðlì‹ßÁ%¸çR% >´ÔK0Ëã‹ “_þ¸ðË—·Û×·_Ö_<óF¸|ýÇ›Àü".Ö3e/ÖƸ|ývùíçò#çâçæŽ?žsœkÿ߯¿ýe ½’%„aVÏÒ>]ß•Wø›qœ«þÈë»TáŠBÉä-¨ï¸í#A-è/°Y5wu$ÀªpW~HwÀ¥|GZ¼få5KÄaô¤Tù®¡+aœª\|æ–ž Wã˜<ý”OËtÍ”7‚‘”ÍF²°2’R†)gF#͆H×ð¿h~¸§ûgµÜspÃŒ÷ã( [mƒÌ ±ñdÝvváY˳ê;Q—µÍ¢·dºj½Õ-ŽôÂ<ÜíH~}Í›Ñ@‹a´t_«àÁz'i~>Ì$^¹¥•¤ÅE«MïÏ1l@¿‡YÉ ßz²¦çâa:YÂq*²q›J™ÔMh§¿R˜eÊ x|t =ge3ÙNÞ¶9ø¡9VOMSÉ9´ð¤²Lè.ÎâÀfÌYÙä,˜1ÓóRHÁCJPñ2ëo [';m°›ŠR*Ä+3)Blé¤&Å4mƒŠë¨yôû½…2¹3AiÌBÀEÿƹÑóéjò~c¶[€xñ]ñP‡Ž8Ô ¥@kõêbŠ¸ 0‹‘š ¯ËšðÈ îòÀÁXí ŽÒçª]v:AæµFÓOk˜ñ–I¯ + †—Ñ +æãõ'C;GpN4“‰×å-.wˆ=Êêf‚é¯{Ò• u0s4hÆÕ|'Q\F¡¸³ ë˜ó¶LÁdƒrÂUAGËðk‚ ™F P³¶yc˜‡´¢&•¼åpSfÄÛx¥ ²\7Íʃ» (œDM`ÔHše”Æ$]Úý¤Ätö\OÒÈ>>¥£û@³ÊÉgFcÕ+…jœ>rº);M~+´"·íº¡ªÑÞÀ”ÎiÝ 3÷Ny9-3Q|Ä@I.«+ …BRÔ´«L|ÏÜ ÊnžóÖh`Þ™–¦sÏ@ÁƒÍ ÎŒãH/pœi˜¤õÎj’»°Ð<+i%³N¯f¥l¥’$ù`VJ 41IËt3ÏbvòÝ@(iND^["VŠ,GeKºÒ_¢á¦!Hf× q•3ERc…²Æ»cbë9SÚO–pMìþçKúå/_‚šy«ÐÅ„ r3\9a)Hð\<€©B‚mkœ‰ +.‘&{7Òäx%x#‘í`ª%ŠÌ:ÂdÂN#‰}®ä‰aÀÝ(¥Iï{GûòÕ­\Úšëb¡Ü›ŸtŽy¥GÍ:R¸XYÏ»^ ôœDˆ@g¼h]on§\¯¤Eâ8«…ëµ:NÛ1ý™€HoÇbÒl”yÈy0 ¾/ß”j?r~Bæä¸äfH<4é=-g±’¤åêí´XhÐ+Bo¤`)ôè+dª.;«VK…dF1ÙH)·3Y#"Ôñ+}Lÿ#(¹½2½«Ò”ˆd-þ%aý<äÿ#2çN Q>ªë’„¶ˆW"›ÇÆ"‰†’ ÑH¹–ï™ÔB(Ë«êk‹ÈéI£¶Àœ€ œÛÅ+ŒQ°j”ð,^…Øôr”Rf…W‰)•–…Zö|ÂD81jr„O›¬0ùÌdà€%R›IáŸÀÂÌz€aÂ@LŽŠ¹“[̦#Ú´yg—``zRÿõ¬;‘ ¸;d!Íä‚òÄÅ£l¿Íž‚.陶·JÕ;=Urt³<Þg ‚3“®~Ž:ÈΕ˜¤<Ã<Ó£¶Þ¶Eˆ}÷ͶŒe™¶KuÁâ2PʺÉv•±vÿZÚZqíâm‹x`“Åçšcy µ8O è~f‘CµDD9W+ºªK[ÑC?Ñ8T]O¼š‚VÄBç?%&Ãtà2øï—Í@ÉÓ“®+T ;¶àP#/Âá|ýÏK÷矚’Ï2…è:ŒBÓÜÒ‚¥jh¶st–qU\ ë•û¸î¸õ×ÌëT1‹ +í˜÷œ/À&’t‰¶ÌI3 ý„GÎÝ[7ênRÄÜýœ° ê—Ýéþdê=¶J3¥¶ØòøÂÖ>n-*9÷J«Âß6ñ¬°±f“©ãU…‡º¶Gš¥òÆv‘ünîx¼ŠÀêH½Æé<“胄§9`FRˆÓáå§KWK÷YLÊxåYN'3ÈéM^ætÈ$r QÜ}ÙY +Ó"9ï^[Bï2¥Öt' +H…Ŷ–òGMÐŽ¯S\è•GÆ°õx·®M¬wôÀ‘¨¢K‘B¥ß»ùÅÌ6¾EãøW³'Âuè“7²Ž*ãÞdÄ­o{6±çß,%ïV¯Î¶¤éŽWÅ+Ï— +‡Måó F3¿X.€’Lb¤ ÒBÄthhü‰ÙR‚6¡7 Öü\vø•¬ÓìLµÍõÍFénƒëçÅ8ØO‚v‰©§`žš)œžD?j¬›”Å}!-Ÿ0þu\9s…8ë3ʼnÿ¶Ýâu ðÓÁþ,R +F £á É-9ì]œiJ6Ê6Ì6] w ÏP> x¦œµCòùi7xenѪÙÜäÿ¦dù˜ÓÐ襄ùlȉ^"4ÜNÒîû:Ë̶D㮨ßßûÈùŸ_a¥ –,Æ'@)P:Whû½ËÀ/ú$Ô…à'‰É«7 ¬Ä@ÌÝækÙ3þñIܵÄÙ§Pë5n“è(y¾]˜^†a„bJÊ•aÒ"MGV~º=ce˜9j,¡Ò+jÜ&¹-·k,6Ì(uÙ‰Q <‚v¢aêŒéÓf‚Ó|•ž®<ˆµ‘íøû¥uµ¦#2QjHÁöÐ$¹ ™e½îÍñ5+j¨¸E…[ײÃe7¾óùü9¾-£o(¾ð¥Eô0П{«ÅŽ¹7:C+’zyÍq¾¼¦5wÏRž!;ÂiŒJ…ÚâzèZ®£ü)®#¼Å…TÓí»À[§7;²ÍñÓì÷[]Òúî@6û³W­jê=jó’Æ–¾˜VšîOǪlS¿Üæ>ýщLp)ŨÑ3Ø+8)=J8¹HJv¨ìjüï‚8Á¬–£Ô9È¿É®m`g’“ Îír\wG9½KŽ£ hŽHÐ ¼–Éiû¼¸(Ë)Ù¶áì»6ÐXš˜n·úô +Õ§Íziã¤eYsn¥‚D u«âóàžº !kzNI8l_¤Ð9ÞèXÏÒÞ›´BþúöïQqLûËß¾½ýö;^þ;þüzAƇåÕãƒß.ÂB<.Æ/ÿºüõíÏùÛäq{6ôÞkÄ"êy,íx…Öö|Äç—V€_ä(°yKg‹H*ür¡FDv;$vbZ7¦ð WaÜû²Pr˜Þ¢ ñÇýÅ»=¿¥âRàTaTüðÐÙÚ +Rs &3_ín«È ÚÜwÊãõ4©¨ž ¼ÚšzÁ}àL\³éuù‘uÙ|ÿ={`)Chè÷¶ÜеÐÐtlÓ_Wâo}4hïRën¥+ÒL›ëzJ0Ý$XœI$ÇE>ÅéL`ØP._÷Èö¨^¿=‘¾<Ö1«`qÀìxfùz©ýlJiÛ oYΛ<ëÁt1Œ€pèQãln߬•Æ35HÙj\›¢}¿ïÁYë/•dü4r à]‹  3 21‹« ؈ñè}<ÿfIq:…­dKôÇ绽~íšô‰&HZØõPüè@±azÑ­¿Û*×˺Ý&*ËTR’ %ƒ=Aܘ|^=ÉO¾O^] ‡1 tÝé?õ—{=  £ OxYHÉœ£¤¦çŸ ƒ÷uGb¬©š- ²›\˜€üx1Î3ÉÎ9 é¥T·¨YÔxûyAG¶6C8~6›ú×û£ÊxÍm¹¯û¼1;Cûª=RY¹èÏa¨6Èúꆯk p»Sžä»|ùu ݲ(]>ÔˆWÇTOWO¥z¬¾Ø}¿ÁG8MWŽÒ­™Öv4ÝÎ~Ë&§2œñ@D{Ie×>&ÿ6}›æÚoÓ¸Ùù6-ïŠäíuá÷ݳeU™Î™yú‘çO€èÊÒò!¦æ “öVC0öl.¸ÃjZÒò7ˆï:~¤ö‚f¤åÆ6Yb{²¥GÃ÷{…%Ä §‡3ò9OÜXC·N¤>¸­žPBÔ|R< +—Ý‹½"ä~‘~™…å2 †`—W&Þ˜Ta(y¡(§FvÚ@ÿþÄÎ `YåM¸#@SXÔ[·$…i?|ÕH´|¿‘˜Ÿ¨EÝÞgÕén×ɳSSå䈴¾â0–3MÒÙˆ[¦Çæï—‘¸è)?ZVÞÇ6­˜ó[¥Êç˳ #µzQgŸIx=¾Ï&@„¬é­Å ‹Ú“ÝÕB;&°²™,G?ûÚ`ÅmídÁæóÿݱÃ÷AFÌ ŸÝ±5‰Oo#0è¸v@Mäïe8ÔUÛ Ëi!iFÃe†v@µÌ—Ù_ äüem1XYk¸DèÂ7#¼Ù )'ÏÅx×hÜÞj—hWs »»¶Ûb°žº}ÿ‘ ÷ endstream endobj 344 0 obj @@ -874,32 +880,32 @@ endobj << /D [ 344 0 R /XYZ 79.37 445.014 null ] >> endobj 347 0 obj -<< /D [ 344 0 R /XYZ 93.716 147.579 null ] >> +<< /D [ 344 0 R /XYZ 93.716 204.477 null ] >> endobj 348 0 obj -<< /D [ 344 0 R /XYZ 93.716 128.487 null ] >> +<< /D [ 344 0 R /XYZ 93.716 185.386 null ] >> endobj 349 0 obj -<< /D [ 344 0 R /XYZ 93.716 109.395 null ] >> +<< /D [ 344 0 R /XYZ 93.716 166.294 null ] >> endobj 350 0 obj -<< /D [ 344 0 R /XYZ 93.716 90.244 null ] >> +<< /D [ 344 0 R /XYZ 93.716 147.142 null ] >> endobj 343 0 obj -<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F79 270 0 R /F15 242 0 R /F74 245 0 R /F64 241 0 R /F16 244 0 R /F65 243 0 R /F22 271 0 R /F82 295 0 R /F71 255 0 R /F53 253 0 R /F73 258 0 R /F59 254 0 R >> /ProcSet [ /PDF /Text ] >> +<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F79 270 0 R /F15 242 0 R /F74 245 0 R /F64 241 0 R /F16 244 0 R /F65 243 0 R /F22 271 0 R /F71 255 0 R /F53 253 0 R /F73 258 0 R /F59 254 0 R >> /ProcSet [ /PDF /Text ] >> endobj 354 0 obj -<< /Filter /FlateDecode /Length 2665 >> +<< /Filter /FlateDecode /Length 2594 >> stream -xÚ½ZÍ®» Þç)üQ$R¿@p€8Ž ´ÛìŠnÛÅEß[J%F3¶Ïõ-‚Û3Š¤>‘©Ñ*¸‹Vé¢éßômøù/×ß_¾Ý#\¢JÞc¼üþ÷Sn™KŠ -.Á¥½¹üþïåŸßµ«µ3ZÛýE­ƒ§Ï¤µ¿Ò§Öé:Ð5_8z­|sõž»µ+I¾y ¿,‡d8Dz!˧k@Žn@øø×ï¿Oê9­Œ†‡êýت‡Çy- -„¦¦…ü|ûUqt~²2𳫽7³_ëæÓoÏ™쉹˜”±øÈ\LWãPÍ Ÿez­Üå?—üÿß&U *­¨’µG±äÆ¿»i²Ñ–†K0A¸Ñ6î*Èë‘¥Š¡“_ª,íx&+¯yÖÊÐ*Ú+ß_ÊòÉ)ÔáLVþÌúÀ•­yyLÖUœ—]GŽûv7î’h‡·ã«óT˜d:kØqÖáw†÷,\®8Û4»§@ùÆkÊ£Ê]ÛÍOe„£³ô¸–ØÕ¨.U¶Æ¡nÈ”;nkËt[…׎o÷`WNBë•~rÓLøᵇÑ{£™.^)Ëy>s Ê:·š9<œÙê ¼_LÌ‹×~•HÔ—µ *É–žœA\5fØíî+î+\S(·Øvl‰5Ð÷—,X…Dl®ú€øuá« Ö4pVÊl+?”ÅŠÙ‚ªúycu%ÀÉ6TÎ7Wæç"‡vþüøJÚë|‹a‡ð½o‘2•„ʶ[yLeV¼lŠ< -ƒüà±cÔÈYƒï–«‘ÿœ©3Öu¨#eëT©Ç±m”|%”`¿xÆÖÏ‚ƒÐ×Ë–?Åiu®vÊ„–X‚‘­]´æçýòy££òÑÏJÀÙhzª…AZ\“f)¶†tJâϺ4z–Ç A‰ïgÀe?ÂnÖö€Inܬ `Cø g†”ÌŸfqYaïv -—*9€U6½lVŽ›mô€âvF°³«ŽÀ^îŽÁ‹çÎiPæ[®*õ>§ëƒ@å*0qAÉ"èç¬S®|Òg‘ßP–nMš< $‡0Hfi9Ûœ­ydmAôl:eÒ:J’a‡aÛ“ùvñpB7»ÏŸ'Doݹ寉LÖæEH;·ùÂÀÏô¤¤­¼†Õò)H¨Sq_ucЃåt´œýNúíT§ -íhˆ§â¬‘P³ÂÒKÚ4¯ìNò¹6ƒ¢Òn¥æ åÏL EÏôCÅf /êTè…U~_ð¼¢ á×Ø—u Z.u)ÜÿÖY\Ð}_Ð Ñ+4;½ž¥©íi©ß›ÖКHD8Í3TÚ6!ܧ±zÂ_œÀ"3£–Bƒîß³·JBœÊŠ!ÝØ4²ËéH¾5ö;«}žkwÂ<Œó|:¥ÚüË^+G¿‰FrGP2²ø²ÆÂ`Êì[|Ëʧ£%?û<…V~ÅjYpCòˆçÛF‚?)äx,Q{§Ë3δ3©ri‡Ûùå„"ºÖ××Ê -)á2CxYÏt÷â7æòK„bRF€n †8Bm,‚†âç°¶þ¹ëšµ×ª2yk¥M*}Ø\ØÚÚ”À{;hr”é…)Ø-½v¶§J[“JÓįèýÁ<6yå¶æU5³8Áâ =•I|¤Øæùëþw÷Æ{í9YÒ´š7Xªîá™yŸîaY*è¿+Þó®ìBW½ÓÉøÔ5ü¹ïZ*X760ä~T¥®M«;¡N:0Ð35ZÑŒ*‹á½ÛØž8Xæ®]ÝIgÝë­™Ö¨ý3kò|Þîím¼7D-j!<×ÍËE7sÛùU+©>>žu'_d%+‹*"©¶O:½¥C‹‰r•{Kƒ£W)™·6hÏ:O™ž…¾²Nѵ£ÙúÖ¦¹Ž¢pIécõ¾ëÀNÏ_û ûFоh8níç›_Ï5ÈÆÆÕqÁÒ%öFÖSí´Ç *„¼¹{p<êTÌÕï†ÄµNÈÈžÙýÐÛÉŽ›¡ÒÖÀ„shƒJl̼ƒÇA%~Òñ”ªÛl›•àÂûÚišH±´]³k.Ôe¾N_Ï‹iظ[?_ºZ*Ç’v³ä¹/ò„å‹AZGèaòxW–É`s(ž…­7ài•îˆsî QçbEúåÂ3[¸®¤7œÔ߆¶{ãç¼–CÓ6¸¿÷) 8ïÃåwÅ$mK‡×)¼×Cļ¿Zkÿ?û¬ã¥FÚð\è™ù3ïöeFü ¹Ú™£˜¦?Ú0æݪöWL­ò3€# ™ÙºÐ3iYLÛK~ÛdÔçŽ&Á;Ê´ð™bb^áñª‘ÏW%;¶fEj|W ¿ÞãÀE -Ïö~²ß‹)®™´æ•RµÝÆŒ‘í’–€Ð·‘-°Õí œ ÈÕžíxµK݆½ _½{«HNre8Òh 3$“Ý ÞÎ`]Ç|W<ÂxñœU„ËåqŠœ"vXœŸ8¯tœ%¾zàdiCÑ­IÊÖõ-fÎ?&ŽçÐÃgAGæŒå]9–f‘I#o2»c­r¿õþ+ÒK°ow¶c—,ã@®œé„sÑ M+y‡"yÜoal‰™Í)Sׯ…¸š*°Ø¬¥5µBZö¶›8‹ŒLÃôvD‰‚ õ&Íh| 1‰R¼ŸÕ|MÊ q,+W6NûçÁ–žâPÃŒ-o‚pˆ­Ï] ’ðuM 1´"c‰2öt˜¯ìç;BÓ¦ÁÚt-dFãÅ ¡¢ÜôÒmË|ºð5’uÐGã”é´uæ9ÖŒ<‡åž5cg -Ëþȼ²|u^Ù*æÎbΞ´VrC¾b§Q«µó}¯*í.FlϤ+  Q0á%œâ…w¼çÚ4®4>pŽ¨ƒß¹¬;ñ“„¿®,%pØò}0 Þ¶¿Õ”r`–^ƒãiÆs¦¼ú2=)´®Ø¦«‹ã¹!*íw*¸E<ÙPñ1dI¾Û­)EŒ3¢kÑŒåI¯aå-·9úôô©³J­¨OµTu»Ÿw!0Qô%i³çúÛKÏ—$&…o*I^¯)z™PfªeB;I}†BÞ (/⮚q&Ÿè¸Mc¯í7?´TÒ e_[Ȩ́?iÓw4W P4Ê®ùÅŸÅ+¾–>C^õôÝûƒÎðÖ¾H8¼m¢JvLè`·ÍÔâÜéHõ˜MTg¤þ~îc‚Ðçݽï{¯/'¿RBBßÙöZ [¦H¡ -ÝNpü Nók}‚QÜŠ+•é0t9šl¥ñK¸½ góô¶0®œov*9¼ñ‡%ÁArýl3ÔÓÎJnšô3ÍЕ٠út»ó˜¹´—ÿü@¥s;ÿüGªP&Á¯è1”wþB,2…N@2‘bÿúýåÃ×êgm%ç*Í{¡ç¿µ`ߊ·#IÊ7÷“(g-~’äÚzkéšMV~8Ç àâ¢Zzfloí~4¡‘z *Y(õÎßF¶|•«kn͹l°LꊬØ#•›ŒY)¼Å-³V]†Ÿÿ˜” Fh{ϱ‚IœLb˜¼˜.^ljSUcWqm\ ÎöO‘æS$Çâ ¿ð…×B?–îÇ(]ò|Zç$ó÷fmP–æÈ~'Yà½I}Ô²]kÚeÍoÏiîÍF[ÂhõH];ãTLÏŸ%RZvE±J_3¢ã`%3Ê1,û×$«†\Çù+íå—rƒ(¬5;Zë|¶¢¥‚°Ñîh=™{e2îÛ]ÙKÄšÎkšE{¶ fÎXýFÄtNl|%•6¶/»<‡ò|J«ò]Ӕ͈t¢ÖÔSŽa#Åz—·Æ©lšbïØQ—³tLÁñíîÍÊHÚ8á¼›ÌÔåzxmaíœAMg«dwî9/Œµ+Îþ!g#½pnÁ˜œW ~åLÔÜš£*ò–žŒžM_JA|½(6ÅYpÂê×9×@Û_ì°H˜´ÖÕTß!¼‘,tU3ŽºÒ +‹i%/IŠÑ¸ÒC‰,«ÍQ5ˆŸœŠ)6Û!˜Ñ5á¤g¥vúüþ¥—é…†·¶E2+N•u·Òš”Ið¼)¸Ó/€Jä»ùj(hAŽ@ŸÅe%oBõ<·õ”o=…œìϘòi“&㺓mã´WƒÀ§Ø¸^ñÖÎRÓónù¼’A¸àf +GÄ»•Biµ ÎTLI?Ú¦Pêw¶‹½eiM—”èþÿoõ1ÝØYÐ5ÂÁ°S 0jSÃ2“K;{8s(ठ¬¼éy³RÞ¬«»´ð Ø!ôÁn}ìdª³`ÏwûäE¼Sd~«ÄU¨Þ§ät}”¨mT¹Šh7W|åƒØe~ågá­I’ä4”Ιk¢–p¿ÍI›GÚÎÍÊTIË*. +;¶­˜{ˆ–ct“ùܾ :#píÁ,¿'3“œfk]Ù™œX´…“°r__‚:eóAkÚ¸1«P¸•gê·­L%´1[*p³D ͨU|I¥æ+s ¼—Fi/|JKGyLÇ›-}&hÈr¾ (l,ƒQ>P^È…VîØð¼" Ư2/Ë⥽”%cÿ[Cq}Ëÿ‚\Z;¡ÕA®gajŠö¸”ï“|h°#26Î +l#ÜD'”¯»Bÿ¤Õêeûž§n¹‚mEWnLìÑ€‰eBß*úŒÕ>O½»ñ~æ=Ÿ—T“~™kÁè·6Ú¡;%=ŠÏ>f“¹ñÍžg JTn¶y +µý +E3ßœ8ã¹z§ï6­Ehoe~æ»UµÀïs&vC6¢Ã4|9EQ0TíUz_%Ôf0.k•îžíFX~¡s‹ }„±¦uk}Ôu?§Íõûal²ŸhãEˆñO´±ð‹h~û@Û€Åô¯~Û@Û(‹þø@ÛH„BNê@[GÒìÚ¶X§¡ñil¸XëX÷Üv`}ípZÙ …iAwbœ °¡åG€—'NÜüñQµöJ¨àŸñÉó…»·õm?Eh+ÂsÑä.¼™æίji¢wãÉaÉJ£‘:ˆqÜüá ­/´UŸ2¡Õ +ñR„OÐîFO€#šÖp%º¶h6®Îi®%º,œkzß¾F°Óó×Æá8 :v ç“£#~úõÜ„¬Ÿ\w,b›d=5O{<¡«1~ZØŸ*æöw@qu¼²Uv× wR†£i§/¸Õâìæ œð uP<¹-וÛà 꼯 §ñ‰Q;L»æNý”æëøußMKL8&<ðÿ÷®û±(íLyŒ<¡ù1G€QÂtÅô|Wmûd0)ÏÄÖpÛ¦Ûˆ-ÔLˆ‘:u+<0gœYÓuAízÀ¤îÖÍÝ+@oà5šÖÅ5Põ[c™ƒóÞ1È¿kPLÔF8¼.á­!BèýÕógönä Œ›·U.g ù°1SÈ¿P¬•Ó=0ó?Û2)Ð;ÀU,P¢jU¡‘uuÐÏ·bšýiZÛïnCQ}îx$¢ªÖ)¼ÒÐC]—ù +~5̧«\ ëÀ¢$6ºËQB¿>9Í¥"Ïú~pæ«¥ÆÔ¦ÔªUrãvë‹FÒ‹ÇŒàzÀ@Z×S€|:ÀW[Á#oçÞM·I|±î­Ärä+ݱFuLWO‹ÚHƒdíK^¶ 0èY¤d°t/kôdù$±…ÅþÔ  ¶ðÅWò v¦2Z¸Œ¦@Í%H…þlZÍÑÑžÙ‚L#¿îÂÇÀ<0R±‡Nêp´•ï×ù‰ôœïëqíhœÐåsÿcîxpÅÏê®Oî÷›ïÇbj8ijòÕWª…Î:KO­"ȧ=Zwò”I˜ÞÈY¡¡*ÔŸŸCTÄ*ïf1?)EfÂì¹¼q"ë?gÒt‡æ8ü6MHû4 Ê5_¶W*HË4–QF–öó•#¿³h†¬UÖŒg¤ž²Ø"hœºõå#øiÄ× ˆ ÔÉ,QY¬þÆŸÍê¡ýJskúFÆêÆ–í‘Ù³tuöl!s'2»'áÚ®˜©MdÁJû|?ŠŠ»‹¢Æsé‚pLñâ·ñB;ÞQ{VŸÇLÐÁLÖŒøAÌ_<«ƒðãŒÔ:ûñ÷£6À¤ÌÔKrÜV<«„uq~’a]ÖM‡½ >é"ØE>ÐxŸ²¸Þ}GGr_ýáÌ€õC#ª¾Cim,¿é6gŸ6‡Þ ›IäÖXc¦*Û}?ˆÐ„ÄD2[®½Áô|W¢TzmÆNWòzWÑú„Ì©ô õ854½clh~w5SÒ ¯‡ÍR7œëÆ*±“2öï-hF¬xÞ -÷•%¼kÊ»ÜÙ(®´>]]u'ðݹ“áð¨"àñr«ÕÕs0ã85›v:U=ű½¢û4¾‡W~ïåýäWÚSˆZåfÕ^Ks«¾Tc¢Òv¦>£é½>ŽOà˜eCøÓ ‚sÏ„"µBýióSm1`pØØc*¾ÂŠäKYéç¯/ÿ«4YT endstream endobj 353 0 obj @@ -909,23 +915,35 @@ endobj << /D [ 353 0 R /XYZ 78.37 808.885 null ] >> endobj 77 0 obj -<< /D [ 353 0 R /XYZ 79.37 633.034 null ] >> +<< /D [ 353 0 R /XYZ 79.37 559.897 null ] >> endobj 352 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F82 295 0 R /F15 242 0 R /F74 245 0 R /F22 271 0 R /F65 243 0 R /F79 270 0 R >> /ProcSet [ /PDF /Text ] >> endobj 360 0 obj -<< /Filter /FlateDecode /Length 3241 >> -stream -xÚÅ[9c¹ÎçW(´ƒæ’Åâ4:Ðh5Àf¶'[ldÛx ؉ÿ¾‹÷)¾§ž;PKM=V±Š_¤øå÷ ¿|ùtýú駻ƋÌ)%Ìåëß? ú†_ÄÅ8&ÍÅhÁ¸—¯ß.¿¾r.çÊú÷·Á9§!%ߤ wñ™†¯ô‚·i€ä\s?¿EúG—oÃÈžºç$ÂqôÊo_¡µ\sH†yéLk5/=¾+èD€Q+˜ µaÈ@»Ìh¾ÑDƒH÷HQšHUߢðš–7ÿ”{ÿÉ{Z ¶ -Ò¿-ʺ&ņ§Æ5+ñö6±ó,àÙ£â½yÍKÉ©F&é9žÈGæx­ÏØ@!©ÇàJ=R(&„˜¤ý6$ê®R³U¶TDöx Öa+(eV¦×Fàr¯fÎný( É!àzù˜ÞÞÜÒ2tÚ9–sK˜Ø -1I¢HÒÀAÕ§‘ný»|½Þ/ΙTE.ùsÀQØXñÝÏ5¼~ö|jçNÑq-ïS´°È,©eXÑ#M+ž´œì"X+(ÍLr76eOÀÏ–«á±¼¨=é½1HÎ4Ú‘»·o¿‚bï.¾ú܆՟#eýB\iØ _Í.gÉ »$Ï}‡.=#Ê ¦ÈT´± ±„ÏæíE·ëCšQ¤@^;òúEGæœ)c‚[äU¼k5P¹zÉ‚‰ÞZ3¦¯Ë<þ¦t³=ú–(oŒì04~½ë8vùÉ•Ù¥”÷:&AY¦„ÚÁèQ8cÌI (²(+G^͈ç@¸à .}ÄAX~ƒ<*>çY9ºê&šêìp®ù) -5¡"-Yòµ{¡%kþÃ?ÿ¸õ¨™âzS©ºÑiYÕ'D!®UˆÂü %/ 5+Ù›`ÉsîqК°ì‘g - ýšž˜º:+j¯ÃŸ c.Ú §ËÖå„åWoûµ¦ “Ý©)‹PüŒÝ)1Ú]˜wÊîÂÜðdöa$êì1¥ü\Æ]tñùùš^ã+çã¤,jRsúvV€¹EöiÏwpD‚#x8Öm8@#¢"››6®«²žù˜÷íÄY¢C"Ó\µ¡rö±a'EHa—CGó@V”4ý2faƒ{}Á˜®ÛÙùúª"„^ÂÆÎce²´¢QúS“^*©­ãtœ„I°.‚†¨‘À˜ì½‹C…ÑÄAÂó6ÅRŽ $Þ'ßV.¤´œã¤¹eZ­}ð¨U´èCi°/éV¡"Œw>ù¥…%&oëÝFp5¼¦Ťm³o›Q‘iyŸžƒUT©KB9Õ¡aä‰x j1( Š±!F„…Û¦)¡§”ºgXÜ8ò¥D -µúÏÀt»&ò)¡r‹œÚ •“ níÓ©Bé£2£z¸fÇãe—ÓÁ‡eцüìŠù÷&O*äçåÞ”P=BãÆr碳­ÿ~‰þüÅ󥜅9#­êË;NÃóµ^« õ‘O°}+‰H0‹ø¨•¤¯¥•„fèa}_‰l”ª;µ‘Œ;ÓFrSÈó$4>õÚwxÂÞ†'íéV’üFK¯à 5rǃ`^]E¿‡“A&í¤Ú\wSP7§ ­]n? 4vô„a$•k´©¼<Ýê føoŒÜ>j«‡ÜU1gº*¶÷Á¿±ƒZxIE«“ÅÜ:W6šë¶/ÀõcFߪ¡/`r À· ß@5Ä›ŒÜ„o¼šN N(1ÚL˜ëäk¾]Ø´qm®FÏͧº3Ž@ p­ùWØÍ®uèáê jùÛâü¸YÎö=¯°gM3aHdÓžåÊÒ¶Î;HÎÇâ$FÅu©N% ÓBÎ¥º}‚SŠÏ¦B“ÊŽ<—»Í× 16Â!ÞPÎàô$µßfPv-ßpVÛdj°Oƒ’>ì“?×6ðXè;Pzo7[ù¸(&Éq¥ÃÔ¥·õuÐÏ•RÔ×Ê´Í„¶ª…ØäišØ`:™Í´ƾ_fŠ)5­ê¡ÌjY„&ɸu/GçÊcw£HŸœA•5ÄÜø_@S FqƇéCRnä´>§}E$%bÒlÝÇx†T=Cr²ïôàµèä:drë³’Cuæ¡Ï’brÐB?ë³HB„‘çwù,ù¤Ïr &¡cdšª6±<^z³…£¤Ð']–ØF4¡—êþàƒE¤ð”ëŒyßÁbq]œŒé\WÎðäÁû³/¯±Ö¢Û¦’lŠª¦}ùØ*WƵÉ=`€³Y ¾æZT·´à\éþì¢=ï8¤uêŒâ\Í‘/ÊÑÉÂ×jýÙ¢3Ìr1íÎÚg!0«>«6öÞUÇk)Gêç½ÓA-/™²8Rïkùزꎽj±1ÀëxX[pp.HŽ ;®š;1-¯´ã¡ÄZ“ˣ˘J˜«M¤nO„ymÓùÚŽk.‘ì -a! ‹'®Ð#·¤rxz-L{˜”úKRä„c¬l<½â¹Ä|*×R-Õ¤èÒ’¶Ë~Þ®ãC®¶6]ÆmYJë€E×vIrvÍé€gV-µuFlIçúÿ9+ ,v\ÁÚAIc(µ'’*5eêéBP1‡8òD¨ áwƒãàc§~ÿ·FÜ%ˆ‘{Ȩô”0j¾\YEx›ÒX*Ûº7Uzûš/:RÝé€Zi´…àÍ9Qk9ÙßÌêÒ>ryrNWÂ^BÙàÏƉtÖʱ°wù`1Ó5ºP1ö üÙgq„’ŽÔ%ô qžÅÑC(˜µ#ãì³V§í)!ñžv²ŠÁ‹ÚɲâHò»ùä=49ÍkãX­û¶íöߺvÿg&njrZ×Â×øºCøÚ Ñ%¢¨Š-—Q·É3«ûÉ(­IõúM;?´ñ>ïa䨚¥u ëñi£¼¯ÛyÀcÁaòAÓeçf4éóx¦¡?i–÷ýy"³Þ”úU>°7!™¬ç ìMˆgí ˜ä8Ro¿6Ý×·•wŒ¶V1“ ¼·9ª÷¬zÄý¼Ñ Ñ¥.ÓÙIhø]˜øÐè´FžÍ!¿ë§‡oÜq^äc—û‚Òô»»48.˜´0ÆÛm^˜v#s咕ȃÆÒ,1Í^¢¬`¨P%Êœ.²È×+=Rÿ8Ô×(U"уLh‘kl]S¤ú+?e-Ð…(˜¢œ Qñ±GÖ]ˆŠÿ­¬¬¬×À|ÓLqh“•É¦¤ÛØT¼CÝ!ü|WŸ¯ÎµZs*“㣥Þ]“z:Í,×; -xl{¡£½±‰ëK‘ïùàk gõ¨àIÝÛ-Šr­çz‰csë ÍÇbË[z}åêœ(ª×pZ1¯9‰_yÖgwö½A ¯z÷HˆÞÖÓ9pȤ#÷eß@2mp™ÁYÓhy®«‡]«‹cêÎüWñþisÆšñgÍ?Íp>2™gM‹Û£§81$¹á“n{¸ ØY©Íì|!þÙruZ\SL|ÕAŠ --ÄÆ»Jlä†(×4¾U<Ü›Š>|ãïÊèk–,$©×qV?£q$ hÁLS“-€`W@(­À|=¬m'ÃáLùÛ<ô÷ËAóEXz´ïþMIÜ™gš6pûÈNF¤÷}×èâåÍ<ÇÓñ¡Zª|?ª +ß‘úù맊Ԗi{ùë·O¿þFã×/´ÒÙ˃ß(ÏC¦…ŸöË_>ý)þæÐ93gŒ²íæX#绚®¹{^okýtWòbh"'‚ÍDªÔŒÐ¡5Œ-*t0Ä9t¹ì¦8·d$Ð’1É‘ÓS7äÖ"JV¹Å‘²O8˜åºs.àŽÐ$¯`vòù›æ¦U¢­eŸ83Rkãžœù¹ZÔD{UÊ5†HçÑåõ¨/ïÆã§ráè'r:S~^×yfr´IOn¥§dKè˜n.î¸ÑheƒœL—ùûÁ=¸ÈëzlõBN£‚>îµOMLJ6pucÁµ—áâïÑOœyB? ­[<«!ˆíª´¨½†Àp†vä€Í1oÎÛ²óŽúéî©4zÉwYÚk{YŸïÓ•9§+ô1}õÑ~ÇÁ—ʪî–3Ñ'ÝóÌzõgË×»1Áø¬óÜ­Çœ¥øŸoSšiSÁ¤ðµS[{ ‚¯ýî=á™Óìú+²2Ò«`ŒY’Ÿ‹Y ŒÏƒF¡Nüik0Ê2KÔªg¬YûŸ–MJþH„’TŽN,ÔA'ÑÓJ“ …ó±&ý ØO¤è¿I˜QÓ +<< /Filter /FlateDecode /Length 3427 >> +stream +xÚÅ\;“#¹ Î÷W(´ƒåà»jj­NWu™íÍ®.²Ë—x]e'þûŸM‚TwkVgÚ‘º›^ì•—ß.òòÓ§ë×O?ÜÁ\‚­¾|ýû' ò„rgAH —¯ß.¿¼Ii½”ê.%|¡ïáý3IWñ*¥úå㺭0þq€Œ¿êU)ÝMJ}Ëß-Ö ´ï'¸æùãÅøq¶>fC¦®ÚÀ8¾½££ïŽHiÌ$ d2úº=ãÓ ï¿~ý™xvzÅ3: çí¶"U(¤µ`¦)£+3¯¥©ÐŠ“<–5Ît^ëŠß$ÎçùMbÞãY+#¤Z±lÔ¶¸Jà€Mí´0 +ølÆDVó’¶Íkº1lxšŸ)¡¤mJF%TJ1aå+Y-³Pt¥y¸ï +¬:NõJ v¥Á ˜gª|'~q³…­Ðèb YìœÅ‘ñ~¿_` +ðè'ö_`^ +PÈg6QÕ|I#D0†le#¤«e Šz—C¢ ^£Jõ®à-¯T]‹28ׯ6Á'>lzºÛ©F¹R7'ƒÕÁ,yíˆ;8*Qxéæ¥ç¿³àÕñ=·^ ›mcU¥ÍÛ†ÌÊźeæãæbT=¸ué^@¶ DÖµ6=etUÆÎ=Dx­Ž!>j{×ÒÒôDÔ¾ï$. Ÿ24›5|¶A·’Pfa~ª´rBO#R­–¯Ëß´'·² [v.™õ]rH$mÏ\ÖÉ +G‰ôµÒÛø7^¯pbV¸o­F6¾ÔI2Ð5oaûéàíõ>$ìI,lE$md‘r±‹zýÀZÑX8ñÝÙÐòÕr;ß1ñ«m''»o J +«=§í;® Ù{ÈŸq€ß +´aš9d\È+íC¾n—+gXa£ðsßÓ.;kTa¢©(/Œo.ä‹{ÿlìFãPî%‚µ×sZ/$J-B|f=;tMWy¤™LôÖ›i6…"xÛÆÉwc»í±%xß3²C×ÐèÐq }ÌÃÍÞÙÌ¥ºo×ÔcE/¬q;Šà,gι¢î¤"²(Ú&Fë%Š`Ñd7=ÈKçz–?êA½ +_ê¨ê]mçMmœk}*j…™´¢,YÉ5¼Ð’ÙšÿðÏ?î↶„–³™³‰-a0!3qݘÈJXïPñ¹¥!3ï³”[¢ª®5æΣæ¹6‡}ky[&¶QYzƒþÙ0:ù¸…ÛÞՈ喗ïÇÅ`‹á™)Œ0òŒáà†—Æ2¼46=Ya#]ÉB{è£Ö†¬nÞº!U¨’–<ôÛch¥ &èDe½#̦½–öÁô[ÈÝÈ Åü•bKÃq[N¹g¾‚›_À뀥}ìvmÐiž˜­ÞmÐ'Ýrt¬{¥=ë + +,’-{î-eÁ=r'Æ%OO†NËÖ5ùNgÌœ­;ãœ"|6B‹BÏi.7[®bÝ1§åó`B”ƒ¸Ž»ŒÆ¯ùcí +ÜpóôEã°Åû‘Bë;íXÈ[Ëï(h“ST&ÎõJ†¥Pï·ÏA¾fVš\¾ ¡¯'ôy-æ:OWÇF7ðì¦=pþã<#aÌ´ª‡<Ƴ9pLJÈÓì·Ö¡gMÅÂ}íÏ7^“ÃÍ¿’6m¾(x™<ùˆ`í9yìgDJ €I²Û>æ6Ò† ÉÇ©±Ø£¯M&ó1‡]ÌRX‹‡˜¥`Âg°Ïb–V#§ù]˜¥žÄ¬ pb:;¦)iƒe‡ìžËË$Ø“¥@÷ ìRÜ/î-jò~Ô$‘õt!ŠtÕ0L· x¿ý%ÖR–`_TR]FÕU0 +¤T…¯Mí+ J134&\‹ÔñV\Ó/;¶/ú–Çá\§ÚçŽÒ¿hÝ“]Í€˜pÎúïÔ¶ÕÁ /aÚ5fIz(,0k+ì}(‰Gá”ⳟG§ƒD^ ã5Ÿ}LäsÅjèGÑêί¼_Û4à 5H@0ô¤·žfÕ•osç¾ÄZ’ËîeŽ¤)2"¦øa¼ aî­æ·j\wŽd/ åL$žt¸`IÂr–Ã6¸¾ŸTŠK +jÀÁ›8_C.˜sý¬-™„!,éÓ°Šó~íj²mt—ÏU½mK醲ø唳 ô».ÐvxnUÿX[gÑ-ÿˆÀ+œç+X”"5Å31•™‚óthDК‘Ô¸ƒ«×M°!y g»ÿP#â +OᔢE+— ÛÔ»g›Nßc›iu}+Õ¨¡3`Vg¹Úú_ýéß\iè̦‚mSXÛJG¡®±Jêçc`Æ£#…F 7ü e²ðÒLžt­Z± l\ŸV‰´Þh6¹Â±£wáY%ÚW Â{F·B_é´7ÍÞË6¶1᧟Œ*_)ˆ[ÛéÞ:HMç}kÁ¾¯7¥Í÷¡ßü™H˜ª›>ôºë›î†CÝõ*¡+u¢ð]hi–þ¶‹07ä©*º…Óëã3ýøT¿û²¯D´°Š¯'Œê¾®ã¡Ì©†«m®¸Ž.­èÊwÞ³8ö˜Õ}¿Ï¥)Ñ!;b«\[,KP†t`mÏZ +%5Ÿ½ùú@ßÞVИMmÓé,˜¢Êû&§…óæõóF0-SË$Uz. |ht€½Ñ¥g«³ +ééÎ×E>ÆÛÏZ¹qw—ãÇÙ×þÞæåPØÀ‰›P¬DD/^(ÓèµÖkHg*vµ›9^ÔËgÖoNª9¢QÐ"ÐØ+…‰¢_¯ü”µàà¢pòxÎEåÇY .j{‡[ zϬE¯O!aµî#•É¦Tر©|t‡Þû|P_®Z½9µÁùі鮧z:Ælç:šòøþ$G\S¯ÏBdºç]€ +!µÅ™€_¶Z øåíìÆÎy/'¬oF°|Ú{ñŽŸÞÜâOÇ:#“ynaqßtÊS›¾Ù¾z[» +µ]ÏaøwßÎM«ƒj ¬D.:,^¡W1~Déèå@é„‹/x3oa|/x¼wÉ|ºOÈØkå,©W>jÑÉB5yMË­m~éA«ÖSa}Õ¸Ø&á¡:¨ºÄãMA«¿O’7æ™j Þ^YÄÈó}ßé¹|j³Ž‰óDO­L=Õ«Œúñë§qA¢ñò×oŸ~ù•®ÿ>?Ó¨à/ÿIO~£×ÂB÷Ë_>ý)¿üìàbDp.ž¶Ýñt(>‘ÝÁóíŒÖw£.ŽÊøÞÕ6rGª n>€W§t@æçt¨•à0ù¹%!ОŒIqJOŒ[³¬J¯ùÌ1à0è–ë®±@8n)9½–¼\E<AnnZÅQûlÍƨ 8>[ßNÌ{ræ]µ,‰þŒT÷jv™çÑÁõ,¯ãù[;{pô~œ­3?/ë:²m‘SXÉ©“ ”ÈöÏG£-ËìãT9ÇŸþ:½¯[@ «ј$ûV¥Ð]½‡¶ouR!ôgàò¯H'è¤ÐžÐ]s·Æl¹³t†Ó)Tê –þ¬^•æÇ$åÎIJKŠný~š”^ß+QmÀ‚Ë:†ÛÓÀí´Ï.ÕØ£®ÀgACÉ°Et"ÉwéÿŸˆ!Q2úmYßùÐoãÎ=ÈeôöêX»2tRtöUJžóU1R§ˆ3uâ­£][1äò‰ ›õŒÛxôzò+Õ“X 4t"a*ˆ…5–Ì'uĺ°ƒß8"ŸÿÅÖ>R endstream endobj 359 0 obj @@ -935,25 +953,25 @@ endobj [ 357 0 R ] endobj 357 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 249.572 591.547 259.999 603.997 ]/A << /S /GoTo /D (Hfootnote.15) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 249.572 551.689 259.999 564.139 ]/A << /S /GoTo /D (Hfootnote.15) >> >> endobj 361 0 obj << /D [ 359 0 R /XYZ 78.37 808.885 null ] >> endobj 81 0 obj -<< /D [ 359 0 R /XYZ 79.37 771.024 null ] >> +<< /D [ 359 0 R /XYZ 79.37 732.66 null ] >> endobj 85 0 obj -<< /D [ 359 0 R /XYZ 79.37 752.217 null ] >> +<< /D [ 359 0 R /XYZ 79.37 712.359 null ] >> endobj 89 0 obj -<< /D [ 359 0 R /XYZ 79.37 578.588 null ] >> +<< /D [ 359 0 R /XYZ 79.37 538.73 null ] >> endobj 362 0 obj -<< /D [ 359 0 R /XYZ 93.716 168.567 null ] >> +<< /D [ 359 0 R /XYZ 93.716 128.709 null ] >> endobj 358 0 obj -<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 241 0 R /F22 271 0 R /F15 242 0 R /F74 245 0 R /F30 249 0 R /F16 244 0 R /F65 243 0 R /F71 255 0 R /F53 253 0 R /F73 258 0 R /F59 254 0 R /F72 257 0 R >> /ProcSet [ /PDF /Text ] >> +<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 242 0 R /F74 245 0 R /F64 241 0 R /F22 271 0 R /F30 249 0 R /F16 244 0 R /F65 243 0 R /F71 255 0 R /F53 253 0 R /F73 258 0 R /F59 254 0 R /F72 257 0 R >> /ProcSet [ /PDF /Text ] >> endobj 368 0 obj << /Filter /FlateDecode /Length 4388 >> @@ -2133,17 +2151,17 @@ endobj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 242 0 R /F74 245 0 R /F59 254 0 R /F82 295 0 R >> /ProcSet [ /PDF /Text ] >> endobj 690 0 obj -<< /Filter /FlateDecode /Length 2366 >> +<< /Filter /FlateDecode /Length 2430 >> stream -xÚÝZÍnä6 ¾ç)梕Hýƒ™$³@Ϲ½¶§¾ÿµú£,Ñž‰å hÙÛò'’"Å”å鯓<ý|º|>ý¸œ‚¬>}þù¤âyR'º“³JH«NŸŸ~?Ki”ÆÇÿ/õÿ×—g%¥LüK°éÿx‰ ¥z‹¿ƒ”úR®õû Bz^žÑcüeâ›èèJ½Ñ/u~#½¹=’*^%H¸æ|þö$…IªÅFÍL8i¼Bè5óF€7'§QØNµKRGJ -PµÐ«‡“æ±è{àDÏA@Ñlß~ -´^] ””IÆIÏòxú5h8ýVÆF£=0„¬Ê_B"3çQ¾˜ª©óóúl¸½¡ê8Ÿ™·‚p¸åè Ë)éjà(`§Å%¢ý¹ö²O e…3Ž£$;g·õ‹³í²2㪴‘ÕÙÉêížo£-³;ÝwÓª+)œ×+Õ_çTQ²‹aqÎôGŠ¥XD·¨oã}´[&4½u-Hî §Ìï3ÏĆ šÇ¢A‚<]D³Q|ûI*DÐzmt1PR&'=Ëãéï¨ DÃé÷26íÙ€!dU~™9òÅÜPMŸ×gÓ}¨è UÇù̺å„“À-G@ßXNI'PG»,(íÏÅ°çcb(+œq%Ù9»­ïv̶ }eæUi#«³“ÕÛ=ßF[fwºï–UWR8¯7ª¿­©>£dÃâœé‡K±ˆ®«oã}´{&˜4½u)Hî§ÌïN3¯Ć ¿¾hS’l½J›³Œ\¼ÒÓœ¤æi<œïyq¡Ï½߶(\*îµz\(Ç¥{v™·zœ«äùeNc–Y -¡èµ]t/F¤·l^Ž"I]Wæ&&ZØ™æ :¨óíÊØ4"sðoúÂ(ÏgäÙ|Ë‘òÜXl~/«ÃÛ}Ç1ZDï嘸Šq3×JÐ.ËšiÛ,1X¿øɬ‹ö@’#s›Àß+6…›6¥§-ßÊž*ùxE\Í¡]•Ô¿ø&#ny€ö¢ã—ƒ—¯‚¯“dG“XRÕM<‰…29\19DvŽç%¾ÊŠÎ|5DNnÖÏOhÜ-Á\,ùdlx”²¹Èº4ç­)ï‘/,:4 -Þdk^Qéx¶ôŠ©+vt÷ÚW]uƒ6EQ-,l/ÂhéN¨EE‹•%¬ß—UÜ`fžuĬ äŠuX³/Ñ¡Æ[Ž²Ÿ†}EÁ¶”ÎHé‰fÈ1ø±•žBÓTÜŒôŠX½Ï`Úˆ¨ G™¯¬D¡¼_Ü'FÜQµ²å›8â¤j&€\5ý±O5‹Â£â(…vêFPcÑÞ ©³¢z%`ð »ëï&é2 -ÙH¼²#Ã~\Ö]óïy8)P)nƒ½•4Ù`DÙYÌŠùà¢î­¶kè2”‹‰®Äxª-Ê1Ð š‹±·Þ¬8Cù¦…‹:kgW¢ú©n C9`1³Z…ûÎ\YÛm „·Û°Q¤…D6RUÇ8ÙÑ\X8ÆíÏãÛnËv”öÒaó¸_ßêX[åû7¡zF*ËF;ʸÅmËè¥9Yžºj!¸.4¼â.ÅO¼ã*ñN|+ë$2TXKPYH¼Ç[%¨sKŸDn)Iüšž˜AÿMZ¥Tž®2ã—iº?÷³'½×òƒµïÄBïØá^¨S˜¾x[5 q‡ž‰q¶öE½WÅYamÛg;"}·Z•J„X±·¹¤bÉ $T6V2Vú}S6o…1ø•l²"8%tà“QÓÁêPO,¬‘·ËÎ8Îoq}USÞç-Ž‚ß7ièÎèÆåmòK÷¾ÄSŸ®R4»‚VïfÚ“w¼»¯ŽdµpÒ}—+)¬G>Kkî üd2ìËŽSîæó"¤26í -ý®Ö7òv¡Ñ¬ÍQã?]7<ÞpÊwÛ&Wµn½â«@ÅSúŸ4˜¯0µAá´_eM=“5ÏšýÇc©&‚qû`䘷ÍØWƒp>¬ÈN‘#†2_jT™É31öVm•N2”d½dù>}{eX¤ðn¬ üþŽÄQšØÇœ);ʵëRØ_aÏZÆmK!Wqo…F*Ž(™èÃÂ;‰»:¿ðÖ$z‰²>¶ £aä'„ÚNàalá,3ï @„Ž÷S±oRÛ£²ÀÒÆxyÖzÕ€”ýûã>Ÿ÷˜Ž{¥==í¦}£qÑ¥ÇX®†Æ*ö!Ô^iì:·Y²ÃFkl~×FB²ZÇOŸL3”ÇÏ6e/èía¤LÑV+¥ç*s†2¦•%6•TNýVðk‡õÛÈÇ›;h¥PÜ“'ÒÆ|^A„Òk!üTƒš¡ ÷±w glÙúBCõddÊIó–W§ÄpÝ%>¶$™6z¡ü*‹ííâ×ÎC9°VàÀ*Óìíצ4CÉýZy$j9³ˆû^ÎAÌYqªÊPXGøZZ×ý®—I»\zð·Z5d„>=PÉ„´žÜU"+¿rnê0çp¡ðé*ã9iŽ"÷#:Ï(ˆÜØ{'9ýˆ2/ôx‚fö3È*C™=ð(Ð;.Æ^–Wc¡ü—b ž`/c©±ÇPþϱ·Ì‘¾Z1%©Ö;ø°(«„¶aµ,¯sá1¢ÃÄaŠK1IeFB`f<€ÊRÌ}UÆPlà… ò’Ìù3èŽJA²´Ó±~…U}K/xäÛ]PNØñà*‹¯çÄQè軉{Y:EtÎ’ï]ð3VXgV s"(Yd"®rhˆNˆ¦‚N­Ò×Þ,ZEc(ß}æô«+¯s}Ú+­÷çlRzD¹±¬øk nº:U… ž ½7Ã×݃¡°…˜)c²3ÀPZi\ë÷öÕɯ•Ã mZI£„_™z²0‚ÌïÓJK@q)pÒKGòÒü¡/,íTê7Òfç|×r Œß¼}#;™5¤Æ®Œ4×`(û€m«µ›•~/¡–pù¤øM,¥B¤Lzå»s½†rÀy¥R›•s½†²w]¾îËôŸ«ý;ëœÞ®üv®U0‚ŒÕJÊ=ê¼6ÒÝÆÖû`¼Û ÷pêõqo„Uæü¸oálƒNÿøùÄ­õœ?5rF(;ö‰qºäA¾øxkì)mæŽ%¦üâÇçÓ?矑 +LJRÄaÜéc‘˜®ó–æ)úêÏûÖ/Ò<÷œ7¢î|$˜·§kÞØÞ3í/›öPæÇ@v\^ ï…·n³~m1f”º?üº(s=]Y§Dh±¬§”‘÷Ø˘R´}÷RW“àÞƒW`Dˆæ ’ÏŽùNÇ‹ho–ÁŠçûõ^úÛ`¹NbeŸÿ¸© |úüzצ$Ùz•6gÙ½ÒÓœ¤æi<¼Üòâ4B¿Œ~|Ý¢p®¸—êu²#QŽK÷lŸ·zœ«?äùeNcú,…PŒÚvÝ‹é-›—£HRו¹‰‰v¦9è ‡êåúFel‘9NøWýFa”ç3òl¾çHyn,6¿•Õáý¶ã-¢÷r L\ʼn¸™K%hç¾fÚ6KLÖ/>d2ë¢=äÈÜ&ð÷ŠMáªMé)…FË·rdE„J>^7shW%õ¯¾Éˆ{ ½¸Ç¹Æàyâ«àë$ÙÑ$V‡TuOb¡LWLG‘ã¹ÇWBÑ™¯¦ÈÉÀÍúù »&˜k‚%Ÿ¬‘-R6Y—漶"å=ò…®C£àM¶æ•Žg‹Á¨˜ºà@w/mqÕE7ØhSÔ‰ÕÂÂŽ"Ì–„ÚYT´±XéaýÑWñH€™uÖ³‚’ÖaͱD‡Fo9ÊqöÛS:#í¤'š!Çàç^zzMSq3Òf`õ1ƒi#¢&e½r°…ò~CPð˜qGÕÊr”∋ª™ pÕôç1Õ, +Š£Ú©AEÿËI]Õ+“/`8\7I'YÐÈFâ•öã²î–¯›ÀIJq­¤É3ÊÁ2`UÔÈÐõhµ]C—¡Üa±˜¸1àFŒ·¥Ú‚¡Ü!:¡Qs1ŽÖ›µg(?´pQgíìFT¿Ô­a(wXLÅl§6á~0WÖváí6l©“ÈFªê'š c\oð<¾íÖ·£´—N›ÇíúVÇšØ*?¸ Ð3RYî4ú8PÆ=n[F÷ædyꪅàÒixÅíÅO¼ã*ñN|+ë$2TXKPYH¼Ç[%¨sOŸDn)Iüšž˜Iÿ]Z¥Tž®2ã—iºfOú¨å5j?ˆ…ްí"P§07|ñöj@â#ãlí›z¯:Š³ÂÚ¶ÏDúfµ*•±,bosI)Ä’AîPÙ |ØÈXé÷UÙ¼Æàw²=ÈŠà”ÐOFM«C=±°F^/;ã8¿SÄUMyŸ·8 +þؤ¡;³—·É/ÝG§2>]¥hv­ÞÍ´'ïx7 ^Éjá¤û)W0RX|–ÖÜA:ùÉdØ—§ÜÍçEHelÚÆ]ml:å=ìL£Y›£Æºnx¼á”ï¶;M®jÝzÅWŠ§ô›4X¯0µAá´ßdM½’5ÏšãÇc©‚qÿ`ä>o[±¯á|Ø#\"G e½ Õ¨2“gb­Ú*d(ÉzÉòc3úúÊÜa=»¹&ðÇK8{FibÞçLÙQ.C—Âþ{Ö2n[ +¹ŠG+4RqFÉD:ï$îê|ç­Iôec4ìFÃÌOµÀÃÜÂé3 @„÷SqlRÛ£²ÀÒÆx}ÖzÓ€”ãûó>Ÿ÷˜{¥==í¦c£±ë2bô«©±ŠãAµW»…ÁmzvØi­ïÚèAHVëøå“i†òøãÙ¦ìù½=Œ”)Új£ôZeÎPæ£Ñ´²Ä¦’ÊégÜ +~ï°~ùþæZ)7Çâ‰ô„±žWP¡ôV¿Ô f(ÄÈ}ìÀÈ[¶>ÓÁP=YrÒ¼åŸçÕ)1\w‰Ï=I–„^(¿ÉbG»øµ³ÅPîX+p`“iŽöÆkSš¡ä~­¼'j9«ˆû^ÎAÌYq©ÊPXGøRZ×ã®—I»ì=øk­2˜(‰dBZOî*‘•ß97u˜s¸PøŒ •ñœ4G‘ûg”FÄn죌“œ~FY‚Ž z>A3Çdƒ¡¬Çxèã(Ë«±ÇPþN±„Ï p”±ÔØc(ÿäØës¤¯VLIªõ>,JÁ*¡mØ,ËÛZxÌ(wˆaâ0Å¥X¤23ÈB`f>€ÊR¬}UÆPîØ*À 3@å%Y;óg(0'”‚¤·Ó±~…U}Kw¼çÛ]PNØùà*‹¯×ÄŸQè軉{î":gÉ÷.÷ð3VXg6 k"Ï(Yd"®rjˆ.ˆ¦‚NmÒ×Ñ,ZEc(?}æô»+¯s}:*­çlRzF¹²¬øk n¹:U… ž }4Ã×݃¡Üa; 1S.Æbg€¡´Ò¸Öïí«“ß+‡Ú²’F ¿1õb#`Yߧ•–"€âRࢗÎ(ä¥ùC_èíTê7ÒfçüÐr Œß¼ÿ ;Y5¤ÆnŒ´Ö`(û€m¯µ›•þ(¡–pù¤øM,¥B¤Lzã»k½†r‡óJ/¤61Öz åèº|ß—?WûkÖ)8!½ÝøíZ«`™«•”{ÔËÖHTµ˜óü¥^2š’å<öz¦Ý-lv?µT½gV¶ƒþnyƒÎƸò|*9nüwª©ã¾=ékÿ1äÜ?ÏÏ_lÚr#mùv×-Ó'·z؉ÅogNžè0“·\sÏõC0g„²sÛ—;3È7ßAa=¥ÜäXžÍ/~~=ýÖºÉG endstream endobj 689 0 obj @@ -3420,7 +3438,7 @@ endobj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 254 0 R /F82 295 0 R /F15 242 0 R /F74 245 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1091 0 obj -<< /Filter /FlateDecode /Length 2390 >> +<< /Filter /FlateDecode /Length 2393 >> stream xÚÍ[Ër#©Ýû+ôMÉ3Âá•eMĬ½»q·wVóÿÛá•$% äöÜ^È’KU‡äo?ýuâ§?^8ÓñSøûÇËöùòóªýI1ïÈÓçÿ^D¸‰ŸÄÉi&>Y#7âôù÷é?¯œ͹õá}{ûïçŸ/¼`þ¼:yrÌ®Â0«-E‘*¼®œ+^[@û¨Žsÿιáû÷ðÝûÛ-uyB‡—xÏw¤'/Êgã³LÍüMNs&¸&w^›\’&'%óÄâ{š˜ÏÿÇÏzà ÒI*—')¡L̵ßJ‘_g¼³`^–iÏ„Jø9¸e $E‘vY LªA 7%…·ÌKG0¡&ÓcM]Ô°U“âÿ™¾D!’nð“†|o\ƨŸé¾ò5Ó\òw` @@ -3432,10 +3450,8 @@ PԜҊ7 Þö4S'$ N(_±…‡¬:û}’FUËWw;‘G÷EeÎWw­ODgW|Ï9»1O ¢»ºC¶7·žÚ}Ùp_ö²ÛÒ=ª¤7ÌhAGlº’÷ä¡Ùø0õTIÜK]},Ðr­rWáB1{”ùºöÑéˇEýí&×úAH²§?6~Ź;Á=Ó\QÂÏŽ”8EËkR£Õ0ùá@ܪà>#JS¹wõ 35Äz«ÆÙäC¨ ç%Ôƒ¬—\Ö0#b61)¡¸¹U¼ÄsICÑù"úãñ°¼QW¶æ‡"²þè#a]¾£¸!?$¹½7}mNŠ3ßT µÝôñùòLê … +@}»á<ß…TœI¯(JjC^+CØ·¬»Ü¬Y›d?[sœê£E[ž¤fH³à<ß´ §åŽ¢<Á5HfHà<ß&Ôž‰Pù”ĵ­š˜˜»4©•¬¾;·—Å–"ÍŸŠ}^»Gy~§êÈ|ÛôåÿdÎ!EµƒÍvíŒc:\êAÖL†tÈöùIŠÉ¦˜µÌk (‡m×ÆÑ¢SÆc~ØûytŽ¹~7<)Ûd“,M¶APúm08Øê´¼ÉO.Mn0Ý ÖþaŒYëZ<Ý•a…Bµ¤‹å 1Œa^¨AaMŒå ›Ð:hõ`™³qm¢G™l:¬ŠªÂw¾ Sàçc1ê~òdÇã½Þm ås~÷ÛtDV)ÅB|¡ÏfHqò ³"ž„P×;*Þl†€ÊÚ£üË\H&„¦p^c¸Gù ø¥Ⱦ5DŒäÛ=Lô{ñ°p$ÞÆSèʺ‡" ßý†ù3ñ"”JŠò„Ö‡ùÀ xzé A9úÈ|󕚶ŽºLDÒ©µ¶=Êx¸ª-ìl{`öý‰‚nÉïeñ¸8û©—Jã0†õ95¸ä×Îr +Ü—Ôƒ)ÀRQOP¦ºúBIõ79~ãOî¶Þê˜íJÙîW)U¶á™æ“Á”|Ââ+‚‚§IÓl=†I‡]N…äL™Þg¸ùŒ ÅìQæKÛG0Öõ·û\ëg!ɶþØCøGï÷LsE _<>FPâ-¯IVÃä‡3q«‚ûPŽ(Må^<áÕƒÌëÝš@EB=/y d½è²†é¨³‰I Å=È­ê%MŠÎÿ¨Ñπ剺"°5¿‘õw ëòÕ ù-ÉííIÉŒ6'Å™oÊ…Úqúø|ù ýP endstream endobj 1090 0 obj @@ -8005,13 +8021,19 @@ endobj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F15 242 0 R /F59 254 0 R /F82 295 0 R /F81 294 0 R /F74 245 0 R /F79 270 0 R /F22 271 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2489 0 obj -<< /Filter /FlateDecode /Length 2097 >> +<< /Filter /FlateDecode /Length 1745 >> stream -xÚíZËn$·Ýû+ú¬‘(êܶ;@ÖÞÙæ®îÿoCJbI¥’ÛUm{0‰Çõ<⛇*kåNÿ;iú÷»óÛÝ‹K'T) §·îÌIÓæAy<o”öæôöÿÓ_Z;ÐÚZúIZãëãßoÞi#¨—§¨’÷6ö8)¨q²„/ZÃ¥€t2} :e`+PÔ:¤C­lÐÚ¿T¡Ît̸3|íñÞãå°\å»åý¦¥á©œ B~û¹=cù÷¹¼Ï÷‚§óP°ò}ÆäÕ\Y߃K¹îüQYTÆÃÌDv™Èè ,ˆ„±JFšg>»ˆÌM¹cQŽÄ=ûõ«@Û™þ|L5ÒUiÊh@âTƧc2Hn±íGçtÝh§ë¬Šcãæ@‘WôQ5´QÝL »/« ¥EÅÉ”„²CYðSIâ>I*4~ƒ´ÔÙåèer´XѼv¡Û,;A¡ëœØ:ãÔ7$e}˜;¦ï€”ú©G Gø±_eÍ“}ܺ[ -œ÷Q¡ŽS›á¡h‘溔΅˜¦lI·Fêlí¾Å—‡c½Â4íÅ;ÉA­ m¸¹pû;̼uÊÙMëón7;0V«ÒÉoãuï…î‰çå‰Ú(¹åsÄÛKïÁO7z¨\°3m6ú‰åe‰z“©I&¡,™®îÆ*op&ñÞ–^™#Snçbm‘l½ÕƱÑñJï¾–£ÏÌ…˜ÅÎ"¸¢>‡³FÓ/ç¦6x:fƒéµä<àÚKþµéŸu~.ä´ÑÚå­XžS~ø8bÛŽ…Òòyfñ­ÍÏÅ-µÍ×a$\àYî%+˜`î •ëç²Þa…s4“\2Ê'?ó‰=4U @79Î[µ™ - ´ú†1g2ÆX_¯Õ¬áj‡5;9^nªvΊ8­í{™R­vÒOkã´jïe/¢Ç‰}›¥mj•‡ËUè}-ÞgÿÎòö߉….üö{]Éê´å©·'õñÓN³—…‰•×HßÖI$Ä´/ìeSµ/ H¿Qot:óÝÖaÜÏßÄÒ÷÷Æß­çaŠŠª÷ÌÖ;Ùcm1ÐÍ)KD3v’Ch ôklí}KOD—”Ivj²cÛOÒOQÅ™{÷ŸD5ÒOí‰u¶AApSã1×HëžÌ²·íCað~¶;4;ú’½²ÏMÊ×=×ÐŽ{€z…5Ón³—Q‚Q¸EÊ]ö"¥ðØÑA=SÖM+ý^Æ)z®‘n/õ•MqûÇØÙ€t³D6Y…6Í$Ú˾ªDÒ·ñEK¿0nwßìa®4 ýF|Ñ£ÀÌ{wÀÄÒ{)·VU":Êy;óÉ17ÝžÚˆÊÃ\ §C­ØËM¨bÿ>wÆ| ÿɶyÁ’ËPåB¿˜?á„P±í³+Õè{‚áO~¶:ÞwD• Ið¬QÉ9&¸>)g—Z™?,^*‹áè:K„=ÞÛ£†º¿5îù8ÀãrM\y<èv‡¥b)Ñî”$WDòîøL¬ºwâ¹HÇ­jÎ(Ómé<×Ã+ZËWü#Ä*Ûb­€3DCãs €1_júœK¯´Ô]YÄ«òš@dˆö€îâ.ò‡ìÖ[~R}ìÁ´ÇƒÔÈ#Ú¯õà€ -—QÊ€Ðk}݃Q+oÌ _®Ë•€Ü·Ñ• ‰³“ñS·v0xáš|T‡hW©¶¶:Kc|ßêRÄ8ê…¤wUø]M1ÐîGü÷4õ¦ž3=¸®!iæÓ¾¤Ð\¤ª09/ÙfzÛj5ú’Aù›i×+9d8ÁSÄe¦¼&žfeX±ôýÊÍÌ"È4YÝîWO´3JTç%éjϱݳb‰4š‘l$‹}s¹î€èè8"°UxÖB'¶FUøßžRgœUÝŸìü•îüq¥«|âz¥3–¢·mQ³‰ö¬FH¾bª9Ù”BÁ³„ùY¨ÚõÛ¼áQÞÃåY>ó/­SeÒ’W Ó«D²½*’n6’µø™øÐÍ<h”×0êŸië¤&,TinKkƒŠ‚k´•o®Xò†šF*‡ÿ½WÓPª8V«§qðª~NƒrÉÍôcÔ·‡È"¼Aè¹Ø®ÔèÖ=óè™#©Þó¥À-çP~·µ %­yóKlZF¿¥CC_¢Š-–3è×{Œö¡ÆÞò¬äݽZ»"×aëº_Ì©ÂP/ë µßõ­Ê¬*Ö^c5%¹ê´GÓÚ~«ª³h$å+·ÉgÝË’E÷‚Ó3ŸÒx,{¯£­Bû\õ%Á¥oIÄa!ø`Ìô¨ ÅÃê%à­„*]­ÕE2.na¤•°BÉö>»²¼ßçƒ Öø:·©¹w8×ñ‚$±ôÒV³äqcµù—¾&±ý|ˆF!Œ¾—lë-ÔmjѺZ\4®Mªæ´³å\›tœ|Åim3oAcð¹¾ô-2ãÐÙäÛ^ßH{Q6ˆîç ) ®¯Wg!—]”¶?mÝKy9weø]y&fåiØDFÂb¤î -_ßîþu¦a; +xÚíZÉn9½û+ô¡É*®€!@²­æìÛ`®3§ùÿkª¸t“lJn*VƒÄV‹Í~¬½Ù–Âþ=HúýÇÓùãéùbÂA‹àÂáãŸ'uôO<«Î*!­:|üwøëEJR"ÒOR¿ÿþøóI2A=_<¼Ö¢¯q‚|„¤ß¤„K©dúD m„‚­@^J¦jÐIiß²Pgºf Ü(;~3`x9FùnºCŸ´4œÒ÷‚Ÿ~]ç žÓó|ÏYúîV¼Ï˜¼šI«óspIãÆΚµPF&2°ËDJ:z$í³d$¡zåïÅ.EæUÿru¹*îÙ¯ ‰#=ìyN馴“2* õPÆÓœŒ’Yl{âè\"Æ•42߈ª6n ”òˆœUC*ÞŒÔÀ}Y¥((*6HfRÊ`‡’ø}’-´²¤Å —«·ÁÕbEõ^…îjÙ +sbˈ3©¯ ­™Ó·C +uÈä+(Wús=¾Ê›™uÜš{ +œµ^hé‡6ÓSÑÚ#u”Î8¡uF0ÎI×"U¶6ñåtìj+töâä@i) l¸¹pû›f0¸i}Öìf +¥ð.lì6Žµ¬½PÍx]fäFÉ-Ÿ#/µ¸Ñ[ÐÂ8i;Ùè;$–—%r:Ñ›HMr4Ê)ÐtuW(¬Ò#‰÷¶t°B9葘šp;/Ö.Òæ1È6ö+})^©}Àc1ú0a.ÄÌWÑ õ™ÎIÆ mpš³A‡ôžrtë%û¾êu~Mät¥µËS>Í•~ø:b\¯ ¥åï‘Åw´6Îó[jÇ¡'\`Yî%+˜`î •í¼¨·kpf3É%l°#ŸàÔ®¢º{›c, +/ÕP ?%P ô€mÎ`ƒ6å¬áj§svr¼ÜUíŒáõ°¶ïeJ¹ÚuH?y[c´Þ«ö^öRôh‘Ø·QÚµC5y¸ŒBíëâ}öï(o¯ø®XèÂOÏØëFV‡-O½?¨vš½,¬X¹EzXo4*þ°—Må¾Ð!ýF½ÑÈ@Ìw[‡õ~þVlÐ!=¾7þn=O/¨zl½“=æÓݲÔI„20h'9,µ@¿ÆÑÞCz¢6A¨€C“Í?uH?¹'jí é±÷ü©èÑ"ýÔž8©3:Î uös:·HmOfÙ×ãÃÂàíèthtõ%ge?¶S¾í¹mÞÔ+P »Í^F Jè-Rì²—R +ÀŽ&õTF Vú½Œ³èÙ"Ý_ê¥ü0öçØY‡t·DPh #‰ö²¯,Q‡ô0¾ˆô¡ýöô §¹R‡ôñEtJ€‘ öž€tHÿŸ¥Ü[U‰ècqä“9×ÝŸÚZ cNSµ@ìåU¨dÿ:wú| ÿdÛ¸àó…äRT¹´mæW8îTAp}íJ5úÁð+?ÌŽ·QåBâl†UæÀ{? ø-,‡8.in}iRÇo¨ð%£f’ ç*Ü ­êäÜKy^ê‘$G™¹ö‚Í#LCòJ¡^[3Ò[)Y§Gš8!7ª\ãîÅLŸ˜ñ'Ú/Pãûu•M«,þ¼u“hlë²a®;6˜©«§lG2š<›g”C[OkãrÚ7iM¥} 53~›¨€¬èÛM“i +)å‡O—XXUMô»‰ÆÄ1n¥Pd@¼iÀH³‚ì͸œ´ë‹6L,ä!;R·6ÿ„”xÎ¥1g÷û¬óK3+¥ÚɬuÁ“káÕy}Z›iÁˆózÌsÚÄÄ—|åÄ­.ý¶«B%jú9£œ¹6>Ì%®`Jc”X]Yá`}uyJ–eë¦êBqáLJ!Š.ᯗ±Â¥Ót +ƒuöµÂãL.÷&ýC)BÄümçøeT/×òk¶+¯ˆ²Ú®!ºXk\Δ +ÂQïê1ßrÀœS¶7ZÊŠé›ò*®k´§ïÐßãAå$ÑØ_ÈÔ«?w`Øã@B®G_ãÀ³jË¡äL†ZëÛôRX¥FèK}¾"W[]™²$¸\‰gç…›“PmíVÉÖY]KêÜáºÕ ]â /Çß»ª©vBÛã_ÓԪ꘮æW4¤í¥ =ø’Ac‘²Âà…ZߔݫÉM 6Ù²òXÛeeŠ¥ÝkiAݯ˜v™»,f.2‚WÜn›ë·†…侂ÕÜb‰0O6’ùº‡Ýv€7¤ï:Ù†NÕ°ÓN³ D’DX +rfpË‘AõÇïOß3ïÄå endstream endobj 2488 0 obj @@ -8129,263 +8151,261 @@ endobj << /D [ 2488 0 R /XYZ 79.37 310.551 null ] >> endobj 2526 0 obj -<< /D [ 2488 0 R /XYZ 79.37 283.486 null ] >> +<< /D [ 2488 0 R /XYZ 79.37 230.677 null ] >> endobj 2527 0 obj -<< /D [ 2488 0 R /XYZ 79.37 237.187 null ] >> -endobj -2528 0 obj -<< /D [ 2488 0 R /XYZ 79.37 166.978 null ] >> +<< /D [ 2488 0 R /XYZ 79.37 184.378 null ] >> endobj 2487 0 obj -<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 254 0 R /F82 295 0 R /F64 241 0 R /F15 242 0 R /F74 245 0 R /F79 270 0 R >> /ProcSet [ /PDF /Text ] >> +<< /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F59 254 0 R /F82 295 0 R /F64 241 0 R /F15 242 0 R /F74 245 0 R /F81 294 0 R /F79 270 0 R >> /ProcSet [ /PDF /Text ] >> endobj -2541 0 obj -<< /Filter /FlateDecode /Length 3105 >> +2533 0 obj +<< /Filter /FlateDecode /Length 2479 >> stream -xÚÍ\ËŽc¹ Ý÷WøZÑû4 -(·§È2è]mf5›üÿ"”DÞ‡îë¸ÆAjQ(ûúX"EŠ‡¤T¥oÜôí÷o÷_ßþöýÍUB0éöëßß }¢oæ–Šré–¢Q:šÛ¯?oÿü¡µ}×Ú}hm~jíôúN?Vëhß¾»*ÂÑ+óƒ—·ö:Ù·éYýñ'=uˆ>¥Ÿ`úóÀ¡>Íõ·<!ìLj‰÷·ýú;éf­¨-é¸UÍ[cÕüÏ.Eªã;WŸÄ7›Y¶›,}Ôä÷F5Ö©˜ý8®u]³:J“˜Þxzïs×´-£eÍõü¬¾¾¿EVäT/댊ºŒ,ÖéL~´*9½T~÷”ü.ÊfCn߬ç´J5Þ¹áLQ)”aȪOuõ*wbÝê³j“ºö~¬wdãâ¹»_ØΪbü ÄÊÅ»^÷*ÒÛ÷¦œýèã§G—§Âë¼ó’¯Õw.É»Š©º¹Ï,— Qéä>½\§Ëà m"=šwßL&³M^’ŒèÔõö6 šö'Uê»m­–Å]L =•ÇÉj”›Ö«IÔӧꙕó@Yâ/¦íöµUŸwua]mj‘”GÒsôlŸßgœŒrÉœÎ*x»Q:vé<{[3µžc·cO¯Ïl:ßéÉ(§76´s¹R•kO,Q¸¶†ê'D¡•TÑø'Eñ´]³O{²L†`*«´Ê5“&W)4Cgƒ9oU*e)_H𔔧iB$Ëä’¾PšÊuš,&ĨUÐsœËó&ŒÖIÈô¼=­È³ -§Æ -0›yž¤~“’2qÄ~Ès<¹OûŸ…_Æ”hýóñ‘|J632@ÚBëÝ8ÜÒ†]pá¡;ò ÖuÔt?æVåò÷å —áÑ» èg£²ßJXÎ'«hÁ7£]ÄŸl(*¸#d'·½RNçĸÆÅ'çç½ák@ËÙ¯ã˹×–¦G>—Ƹ¤’ÝgM çSG§òÎ(SGzhv—â˜+Ï·€ ŠBõ8"šÅ;¯\0{ò|Ò$–lí7âx‰Ï-ùX%”Ó¾?KM>“–ÐR»íÂ4þß×üª‹²zãiÉ®ÓÈ#ýž “>QiC5Æ(û'Ãd¨Â³gdب.Re5qØbrz}Åñ”V¢úÿs|*¿ýoõçšçSx>­lymE9ŒY½¨1„›ËÆæ?…çê¾”õuÅ¡›T;åɆ1ˆh•Ëù‹YÖåcËX×;UŠÝ·nfë&ܺ9ÅqL¼QrQ"Rå›7wÿi…ãë=íQvÒeO’¶Æ®¬ZeÓ -¨OväÝý¦;ó!Œ­ ùú<]‹q»‹/Sæ•Ú2¥¯iÃÜ9ÌK ¶jUyjRür[“FïÍ@5é»!`Þ!ÂûK{J±ü—Ú_ØÞrØ[>•\~iäÆ|Qw©VI¶¸qôÝö’OŽö¡Û«û>¡UR™2—aÌ©ÞN\1蹉̜gkEÄœòfôG ùÇÒ²Z“û¹$r´g¨´.&¿ü”l·†@¿ ¯)®’‘‹0Hë0Ž ÖͦÔêÆmô]–xÏËdÉ&ö´mÙ>ºÇ ªsÿ·QåhÇ[k†ÓàÑu§pvÒ&¾.;¼ÊÑ,ÃlXZDò(mÂJ‹œCÒ" Š8Ú“Ñ”—F‘aÌe1éÚ% Éë9±GÜÝÿŽ~Õh,š˜u˦­ú}™ÏŸdü)âýϬO.ÊR0H¬&¾Z3 ¨öÄ%ÙŽ#cÞí‚QéKÜœÏþÚ»iÞMÜîþ7'†qÅO¤nì ­øÝ…‡g•}GD¹ ge­}NžnÞªmõ:¤ÏŠ -nWÆð¶³Fù×v³†!_U¼ô’l=8¶Åè{”ë}¥Žd ×[Œ¶áõ³)(cÌË·Ø0®¤ÿ-½™ºòç AéÇ‘.IŒ2ÁmæA6Q¥Æ‘áã’HrÙ6n.…j÷¬º’œ^LÇ:cêž'Z;-oÈ&lÖoµUŽJ*O%îVV¿ŸÆ=W÷ƒ×ž§t–Ösã»AÆÆ®Ë^Äצ[z 6<Š0Q‘Çñ¶gàœ‚qJa~^yFÌã¨"â$åêf -í£^÷îdƒI›²]Íù×÷«/¯Òš ñõ k¶ëàzHqrqÀY ëAóÛw_ìÂ|u•î‹F²½¦Œ¨·Æ¯”žÖð/\ðÅ«H\~¹HX¥¤ÌŽ÷®8 î¶ËÆ#J¿¼ëÔÏ”Çzmnk¶h¥/®ñÙåí¼mþ :J _º†„¥^ÑMlæµsIÈ^9O%ævu åM®,ù˜W¤Ñèlÿùýê´ò?Üú‹üN3QvhGS¢¢Œa’ŽÖÍ”v%.¸5«É„va’ÛšoDÏ·"´¢Ôdg¢}qñ’W^Ͻãû$^ü)b‘¥óêffÞxBÿ|jqw%*Õ÷n¦êCá7b­õAÕž*+'ZåýÜŒ¿Ï7±¶M¨4¤©ó¥×C_(f3¦˜¥$‘’©Q vÎ-º(c#Š¦­”·Ê¡=%›Qt°$wAÑõJ•ÅÑIeX"õè Š¦Hà(º€èB)žs0š*´Œ¢Ž$·GÑ5BeÔMœµíŠ.$7ê&Î%’µŽó¡ÃƒèP/n¡nâbM)`p&ÊEÝÄ%Š‘u—½2F“Så»I)$7ê&^'’uo(ö¨›xrª\`´Ó$w‚Ñ™äFÝÄ{ªpí¬a™ó!,3>„e¾Ç°í¬p=„e¦‡°Ìó–YÃvŽ‡°Ìð¶ñ;„dvÇ°Û!,3;„e^‡°ÌêV8}…udôú'ÐaS;.Zš­æ]ü…3òOÏäÖþå®'ÿGÅ'¬¿  ̬€™@pç,Ä€™00SîÜ€™00³fzÀÀ@l' Ì ™"00sî$…%00ÓfžÀÀL ¸3fªÀÀ+0(“îl™.00óf€ÀÂCì«kç¶ÉTIsG5LÕâo¿¾ý¦ µð +xÚ͹®ã6°ß¯ð,C‡ðð€x/2x]6[¥Éÿžâe‰ò:À+ [5÷Mš_~\øåû—ëÇ—_î/B0§”0—¿¿zÂ/âb“æb´`\‹ËÇ?—?ß8‡_9—wÎÅ7ÎñF¿¯ôÎ5¼•Fù’~‰·tÛ½‡ßÞË=ÿÁ[^nøöDsˆžÒG‰ˆ`¬ü]Kw®ùN&îÚ_ßÿúøxêâ˜Ó@<Ž¬!0­Uf͈ÈZ¡Oó7ÏA¾ëïxJXF±ëÌzX ‰»@W ÏïaYë¯ô-¾í×Á‡€ÑL1&ŠÀy%H|“QÆå×Ø!qopÆ=8Ã4‡ž J&ènƒfW–Rf¹í¡5ºÙ‘dÀrŸê=ú‰@¦pÐàœ~Lß +“Ô=:®óz$zöøS˜rjÆŸ×Az»³,É™É>#îÒUCæ¾³¹GCJÏÔ’bž[M÷”Ý0’iï. Ø\•”&#UŒmjH|óížÿ=zÙ~“‚š×°šM'=›WR/OQ/•Oç½øæ)iùÚB­ƒ\ý 7‰¹¹cŒë\lòÚ-TÌ ì©h @;ˆ>VP¹"Ñ=9õI+=ú9üÉ7ÑŒ\ã˾ûÚ•Pö÷©ÒPœ›‘Óf…ƒF_2;r€ZÓM1Åã4¹ïB1 +Õ=ÄÕú]"“JÌèyR%@ºÆœ2“‚aã£øý¹¹ÔqAB¢–£`žœM!w ø`iº­¤ü “h¨«¡ö¢§ýÉ0©<ñBÌ”¢g#’Sb+Ò»êrmà·S´Ÿ É8þæ?lj޸…DI¦æ¥ÝdÓ›QæŽ1Э2Ý4êó¿ýºU/å’!åáãšf‘z9)ð“iVÚÇší,`A»”"œ°síæ-"³®]kts}HrÐRÑnŠ·ÍÀ¼±àÚ¸McÞj^f”ÄÑ£k†n¸·)½Ó7ç;q¡ê‡ùõvÊ:~Fi¶3ʼŠÃä­J[S0²åéQØísæ1,òIÔô}¡ÓrÈÀ§‡§ÒYÆõ§r¯5×’vÁµüþ€ÖøÒÀÙÁ|ÑTÉwIàd}:U’šjJîf}ß\ju³ôÛfÛýͽHÞñIuÖ>W–jf;@ïwpwNô§ZNžh7<š-/U͘Hjv›ΰPe32?W©R¡iz©¡v0mÛ‚úÁ@³Q­KßÃæL8Á¸=–îÐHÚüªMrŠ×Z‘ãyoÓi²uÜŽ‘w5+©›²z§ï¾¯Q4Á9»7«¯ý&A0*Tgxåm%˜¡dÆÙ×ÚH³ÑËû‘}µl#-–³6òÈg¨!·(_¾;ÖÁõ!«ôUÂa{rb? Á\õWPŠÖVüÖ-ÞyšéfÊm:®ó0è>»YšY =Æ0š™œ¦›5Î'NØ!WÔ8ØÛbUD-‹ûLM‡”+UÑBKÝ>¾¶"ê`Ö­$VÜ™…›áiqêþ`$S¶9+VOl‚Ôëã²{…@zºbügäc*:Ju•Ô²72[h©‘R‰…òšqûSiÚ~¦šßŸX:²nò€ë_E¿<#´`³•äž1V³ÙêìÛR0RÀÕ<`-€SÔDÕzV½Å­Œx•cJÎ(|AÆöócùâS=ÌW5.±ë ¯9˜°†¡„Ïä`êØÁ4.8˜ßS ,ürëàæÚ?Ô6e$¿¯1ªª¹Ö=¤Ã=ÁÕâ=þ„h¡™1ª‡¼¼W¢‰.¸ùÿ`KÒ„Pƒü_yÔO!3v¤õÁ?'¯•·V»_ÏÉs°ÀiœÊ0nÅt@‚~àfnÅÍH=¼ÙÑRe·‚B|;HdÚöPË_. +•ÍL áQl‚ãd2,Ë#Êp"ç^Í Ë±y¹)j_—i“YgVå‘;“ƒÝMßUO€Ú÷¯è R_IB‘¥k5DÎAOÕ j×7LþÄétÈ4åòCa¬„U*ÉèþÀU +©ÓiY¿C‰õ)'[ŸÂ- Z]Î~ßúS¼Øü§e¬MÅ0îƒBËÙOš +ؤ:¨uZF&‘ºÌQƘÐMS—¤’éfÛu³aùïKüñÇwÂDuØCm:η}.pá8œ’mjËø ÒÊä|Oÿ«ÜÎEpFʈgÿø +0M¢CNζmݨò·Æß>¾ü 2Ô endstream endobj -2540 0 obj -<< /Type /Page /Contents 2541 0 R /Resources 2539 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2486 0 R /Annots 2552 0 R >> -endobj -2552 0 obj -[ 2529 0 R 2530 0 R 2531 0 R 2532 0 R 2533 0 R 2534 0 R 2535 0 R 2536 0 R 2537 0 R ] -endobj -2529 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 195.265 168.645 204.152 ]/A << /S /GoTo /D (section.0.1) >> >> -endobj -2530 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 171.405 199.908 182.374 ]/A << /S /GoTo /D (section.0.2) >> >> -endobj -2531 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 159.4 217.99 170.359 ]/A << /S /GoTo /D (subsection.0.2.1) >> >> -endobj 2532 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 147.564 260.909 158.403 ]/A << /S /GoTo /D (subsection.0.2.2) >> >> +<< /Type /Page /Contents 2533 0 R /Resources 2531 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2486 0 R /Annots 2545 0 R >> endobj -2533 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 135.051 282.11 147.006 ]/A << /S /GoTo /D (subsection.0.2.3) >> >> +2545 0 obj +[ 2528 0 R ] +endobj +2528 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 89.191 168.645 98.077 ]/A << /S /GoTo /D (section.0.1) >> >> endobj 2534 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 115.514 177.731 124.56 ]/A << /S /GoTo /D (section.0.3) >> >> +<< /D [ 2532 0 R /XYZ 78.37 808.885 null ] >> endobj 2535 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 101.178 257.353 113.133 ]/A << /S /GoTo /D (subsection.0.3.1) >> >> +<< /D [ 2532 0 R /XYZ 79.37 775.009 null ] >> endobj 2536 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 89.671 172.561 100.62 ]/A << /S /GoTo /D (subsection.0.3.2) >> >> +<< /D [ 2532 0 R /XYZ 79.37 668.934 null ] >> endobj 2537 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 79.539 258.917 88.775 ]/A << /S /GoTo /D (subsection.0.3.3) >> >> -endobj -2542 0 obj -<< /D [ 2540 0 R /XYZ 78.37 808.885 null ] >> -endobj -2543 0 obj -<< /D [ 2540 0 R /XYZ 79.37 775.009 null ] >> +<< /D [ 2532 0 R /XYZ 79.37 586.77 null ] >> endobj -2544 0 obj -<< /D [ 2540 0 R /XYZ 79.37 692.844 null ] >> -endobj -2545 0 obj -<< /D [ 2540 0 R /XYZ 79.37 622.635 null ] >> +2538 0 obj +<< /D [ 2532 0 R /XYZ 79.37 516.56 null ] >> endobj -2546 0 obj -<< /D [ 2540 0 R /XYZ 79.37 576.336 null ] >> +2539 0 obj +<< /D [ 2532 0 R /XYZ 79.37 470.261 null ] >> endobj -2547 0 obj -<< /D [ 2540 0 R /XYZ 79.37 518.082 null ] >> +2540 0 obj +<< /D [ 2532 0 R /XYZ 79.37 412.007 null ] >> endobj -2548 0 obj -<< /D [ 2540 0 R /XYZ 79.37 423.963 null ] >> +2541 0 obj +<< /D [ 2532 0 R /XYZ 79.37 317.888 null ] >> endobj -2549 0 obj -<< /D [ 2540 0 R /XYZ 79.37 365.709 null ] >> +2542 0 obj +<< /D [ 2532 0 R /XYZ 79.37 259.634 null ] >> endobj -2550 0 obj -<< /D [ 2540 0 R /XYZ 79.37 307.454 null ] >> +2543 0 obj +<< /D [ 2532 0 R /XYZ 79.37 201.38 null ] >> endobj 221 0 obj -<< /D [ 2540 0 R /XYZ 79.37 248.929 null ] >> +<< /D [ 2532 0 R /XYZ 79.37 142.854 null ] >> endobj -2551 0 obj -<< /D [ 2540 0 R /XYZ 79.37 236.172 null ] >> +2544 0 obj +<< /D [ 2532 0 R /XYZ 79.37 130.097 null ] >> endobj -2539 0 obj +2531 0 obj << /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R /Font << /F64 241 0 R /F15 242 0 R /F74 245 0 R /F65 243 0 R /F22 271 0 R >> /ProcSet [ /PDF /Text ] >> endobj 2599 0 obj -<< /Filter /FlateDecode /Length 6310 >> -stream -xÚåÝÍ®ÛVšFáy®Â7Eü• øÄq=ldÖèiÕ¨&}ÿƒ&¹ßµER?\'n4h‚$®Ç¶äHßÚ›¤¨æËyúßýóK³üÿÿý—?ùíGÛ~¹nc;ö_þüÇ/åÿk¾\n§îòå26§óØ|ùó__þãoçswûúksk‡é›¯];ý½ýq>_Î_Ç~þ±ßÏçþûôcmçÿïë¯Ýµ›â¥üÈ,ÆÛôפÆsù±±ýúŸþÛ/ç/ÿœ~ã¿×04çSsyxã°èæá¹üö£ž=‘æÜŸÚù×éo§æ<ÞŸÊù<\§¿Úé)Ûù©tLz@Ýüð§§Õ_×ÿþµ½þ­<øùÇæ§Ù}LO¯›ŸÞ8ýÈôxÏýòÄùѾ-<Ýâ·?ÿò=Oþüò §?€ö¶àÃõ…¾œ®W‹/Ãi쫯ݩ»¶VßšSÓuZ_§‡muw§ÇÝ[ÝôÓã¬nÛéqZߦÇ}±º»LÛþ×éúazÜZÝô¸íˤ›^TW¯§±·/“î2žº›}™t×þÔôZO/ªëM¿Ln·éqÛ—I¾LÛ¾Lúf˜·}™ôÓ‹êzÓº;Oû¢õuzÜöeÒ÷ãô¸íù~zQi; èqh´¾ú³Ö—Ë©쫤Ÿ^S·³}•ô·vzÜöU2çèÖ>è—9zÈO7?“fŸŸñ£æ§ÿ–j~”TÌ ¢¨}["3f¬™c24ü[3×wþyCÿõ×ò ½ø ý%A¾~½ò \º÷ÁØ>‹£`8M0¤N0”®Ápš`8M0¤N0œ&N § †Ó †Ä †ÓÃi‚á4Á:ÁPºÃi‚á4Ápš`H`8M0œ.Áp–`H`8M0œ&N ¥k0vƒ¿; -Fs9µíô_©^7Ó«ì!«}KÓÏÛ®ñZbQç|ó£{9Ý3ûçH°cé?÷(SHšýû}ÉöìK&3N“§ÉŒÔÉŒÒ53N“§ÉŒÔÉŒÓdÆi2ã4™q:™‘8™qšÌ8Mfœ&3R'3J×Ì8Mfœ&3N“©“§ÉŒÓ%3Î’©“§ÉŒÓdÆi2£tÍÌ.:3Mwš~ú‹Ê,Û“•9÷c6*sYÆM{>î‡ú–#içŸ+YØ<Ö£*(LN ®IP˜"(LN& -S…‰Âi³I”@aB 0p80¸V@a" 0 P˜8œ(L.ó_QƿÙþ -3üfö+Ìè7¸Nþí׃ÿÜœÚëËýÅøíÝäÿ0‡ªÖExspªä“*ËO½Ÿ8y™÷öYMn¥ëèvšÙí4Ã[êLo§ßN3¿f€; .qF¸ÓÌp§âN3Å¥ÎWºÎq§äN3Éf”KYî4ÃÜé2ÍeœKyî4Ýi&ºÓŒt¥ëLßêþy–a¼ÞNÓTÜÏôoõ$CÛ–‘[&v™Þ—Œßyu^N̯Ï`OkôÕÙƒmæi>Ÿ%_ÖúíúÔ¿ÏR…Îu¿;B´}èˆÎNÀáEâÒ…ɉé‰Ã‰‰Ä¥%'%§$'$—ŽH[2âp*âp"âp"qIˆÂÄáÄáôÃáäCâR‡‡—v8štH\ÊápÂápºáp²¡ðpN·þáWžËÜän`œžIwyÜ |{8ÛÐŽÓ¿vYçßrLg¾èë²9}«%èŸû>úTg®Ë˜æ\וYêrÞŸßêu? -5«Ò£ücÙ\ÔoËßï¿âË £gûçr4{œfø8Íôqšñ#uæÒu9Íršä43Hê !§™BN—1ä,sHê "§™DN3Šœf)]‡ÑNjÃizÉ¿F«ƒÒí·íAåzêõbtÝå`iº6Ë…Ÿ×Õˆiï#f¹¦õÉâøx,ÞÛÿÀh|û®Øüé½)æ=¡pyK(Ê;Âá¼!æý 0o…y7\ß [ü©÷ÂôÇÙýË7Ãý8]×ÜϨ°§›+W_VOϺü¿{“äu¿ýc=zá;]^ùÎòÒ—:¯}§yñ;Í«ßi^þJ××ÿN·Ë’RÓè›Óp¾íßËgÊA¡»/ëºÍ%ømwÿœÁòÒ×/ùÇ—ü/—÷ý*O íT½ÛþA¿¼8¦\Jcu9Pâ0GJœæP‰Ó+‘:K”®GKœæp‰Ó/‘:Lœæˆ‰Ó2qšc&Ngç"qv.N³sqš‹Óì\¤ÎÎEéºsqš‹Óì\œf&ubå4±rºÄÊYb%ubå4±ršX9M¬”®±ÚévÙrÈÕÚ44†¡ŒÕÃq”OGëélòõÒïÛW“¸éNc;XÝ6ËÎêÛ”²Ñênœ÷Å꾟÷Õjì4 –º$Øaì4 všK+]ì4 všK;M‚&ÁN“`§“`‰“`§I°Ó$Øi,u¬tM°Ó$Øiì4 –: vš;]ì, –: vš;M‚&ÁJ×ïô§<ý}¸Ý^%xuôpþˆÄÏíöÈïö·<ʯÓäWêä×iòë4ùušü:M~¥.ùu˜ü:M~&¿R'¿J×ü:M~&¿R'¿N“_§É¯Óä×éäWâä×iòë4ùušüJü*]óë4ùušü:M~¥N~&¿N—ü:K~¥N~&¿N“_§É¯Ò5¿;­òËáÚéט_—ûü^ï÷YË'çO¢/[àå³[ç矻ÍådG¢­Oküì©ù„ÂödÃû1½}¾GcÚiÆ´ÔÓN3¦fL;͘v:cZâŒi§ÓN3¦fLK1­tÓN3¦fL;͘–:cÚiÆ´ÓeL;˘–:cÚiÆ´ÓŒi§ÓJ×1½Óír:Øéá6mF®»¤q¨cšŽÏ{ eOô}u±ïí~ÉpùÔÆÓÚ\§§Õ6ûßìÅÓjnçiçÐj}vÔìÔ¤ÎNMêìÔ¬.;5©³S“:;5©³S“:;5«—šÄÙ©IšÔÙ©Y]vjN³:K©³°º,¤Î@ê,¤Î@ê²°¸,¤Î@ê,¤ÎÀê²pš%€ÔYH%€ÔYX]–Rg õ²6K«Ë@ê,¤Î@ê,œf °×ï–ïoõ9\šÓår¿O͵Þês¾®ìÒ߯[6H×÷7ïœV}Ýÿ¢ïý <‡ašqÍýž×‡x>?ž[÷|Ë>°üsÛ­>~:ž7÷ô|»|Ø>†£åƒÓ,¤ÎòÁi–N³|pšåƒÓ,¤.ˇY>8ÍòÁi–Rgù t]>8ÍòÁi–Rgùà4˧Y>8ÍòÁé,$ÎòÁi–N³|pšåƒÔY>(]—N³|pšåƒÓ,¤ÎòÁi–N—僳,¤ÎòÁi–N³|pšåƒÒuù°ÓŸ:‚ÐO3ú!Ç«šÞ󦱫»=¿öö@ìãaÞŸ½§Ýû¿y>GÞà:àf¾+Ìxw8Ó]a†»ÂÌv…í -g²;›Á®0s]aƺÂLu‡3Ô ®3]aFºÂLt…ègž+Ì8W¸LsEæg–+Ì(W˜I®0ƒÜà:Ç·¸]>!Çx7ýçáaŽßïÑÿþWOËñqŠ±ÝOü×Ó˜ÝÐöa톜f7ä4»!§Ù 9ÍnHê²r˜ÝÓ솜&•R§•J×X:M-&—R§—NL§)¦Ó$Óé4SâDÓiªé4ÙtšnJp*]Ëé4étšv:M<¥N=&ŸN—~:K@¥NA&¡NÓP§‰¨Òµ¢;Ý.‡AeFÛéOõ¡¢«)6ëV.;—§ÇT_ï…–˜ßÿʾ©ôwuOŒ÷Gok6Ïé¨ ' ×"(L¦' -S…‰Â´@á¤ÀÙ”@aB 0P˜ 8œ -\# 0 P˜(LNfþ+\Æ¿¢L‡3üfö+ÌèW˜Éopü[Ü~â{}†¦9Ýž þûåŽcnŽwÇ—ö~…a÷ã~Ýáv@Ïã¾ÞD{ÉÅû“MÛrt²Iêl¯œf{å4Û+§Ù^9ÍöJê²½r˜í•Ó”ÔiR*uZªt©ÓÔÔir*uzê4Auš¢:MRNS%NT¦ªN“U§éªÔ «Òµ¬N“V§i«ÓÄUêÔÕiòêt髳VêÖië4ušÈ*]+»Ósû¿t­J;ŸÎSiî_Âǵ*}óxÊê\Ðò•µsP/b}{Ëþ7üxs§£ëXúË|áj{ð×±4»WçÕ‡%–[›åKvÅ3à¢ÚÝïzpQ­Ó\#u*Rg¡buY¨H…ŠÔY¨H…ŠÔY¨X½,T$ÎBEê,T¤ÎBÅê²Pqš…ŠÔY¨H…ŠÕe¡"u*Rg¡"u*R—…ŠÅe¡"u*Rg¡"u*V—…ŠÓ,T¤ÎBEê,T¤ÎBÅê²P‘: ©—…Š´Y¨X]*Rg¡"u*Rg¡â4 •}¡?Ìí©û8ý7/ûº¯.‹yòu*—r¾õþùCnP|¿òá¥1íÛ…O]KÈ…OíÁöéõ@êô@éÚ§éÓô@êôÀizà4=pš8Hœ8Mœ¦NÓ©Ó¥kœ¦NÓ§éÔéÓôÀéÒgéÔéÓôÀizà4=Pºö`7Ó?ÌÝKs7š~˜ºÐ´=x¼±þ|©Öês–ç§[6’ð5]ólV·›{»kØ>ì£]ƒÓTBêTBéZ §©„ÓTBêTÂi*á4•pšJ8JHœJ8M%œ¦NS ©S ¥k%œ¦NS §©„Ô©„ÓTÂéR g©„Ô©„ÓTÂi*á4•PºVb7é?U‰¾=µÃøª«{–­oJê Úo÷´½»Ë5nýõ\XÂ4ö×zYýœ\]~"?ÿ_çìöéÍY©3gfÎ:Íœuš9ëtæ¬Ä™³N3gfÎ:Íœ•:sVé:gfÎ:Íœuš9+uæ¬ÓÌY§Ëœu–9+uæ¬ÓÌY§™³N3g•®sv7+?Ìg–˜³Óßîܼœ³ë/½-1Zß r™zÇTž¯Æ›ßߧÀîë6>vgxŽ–çÛçq´ð£ª8MUœ¦*R§*Jת8MUœ¦*R§*NS§©ŠÓTÅéTEâTÅiªâ4UqšªHª(]«â4Uqšª8MU¤NUœ¦*N—ª8KU¤NUœ¦*NS§©ŠÒµ*»2|ûÄy”îÖŸúîõy”áMUö·z~Þd>Jwÿ·,gTÖÁyw[ŒåXâ÷å]üZßß~i-“s÷ô&§Ô™œRgrJÉ)u™œ—É)u&§Ô™œRgrZ]&§ÓLN©39¥Îä”:“Óê29¥Îä”z™œÒfrZ]&§Ô™œRgrJÉé4“s?ý>59¯í©¿¾>3Ò¿[3-·_öýrž¾?;ýsßåÑ]¸áÜëùË™ìíyîåKÄÛúUçoß¼Û?¬£7¯Ó¼yæÍë4o^©óæuš7¯ÓåÍë,o^©óæuš7¯Ó¼yæÍ«t}óîÞ€Ÿzó^Χ¡^n¦»7oÞOÞ„Oˆí~˃OˆI#ßRçÈ·ÕåÈ·Ô9ò-uŽ|K#ßRçÈ·ÕË1 -‰sŒBê£:Ç(¬.Ç(œæ…Ô9F!5+m©³Òvš•¶Ó¬´f¥ítVÚg¥í4+m§Yi;ÍJ[êÄZék§‰µÓÄÚib-ubí4±vºÄÚYb-ubí4±všX;M¬•®±Þ÷›¹c ±®§áòªÕýïÚíã%˜»EìÓš¿ïçæñåSaê©0ñT˜v*L:.åT–p*L7&›§š×h*L3&™§˜ -L…é¥ÂäRáÔÒÙÄRaZ©0©T˜R:œP\;©0™T˜J*L$N#&‘ -—B*J N& -SG…‰£ÁµÛ¾}[öŸ2ÓŸýØ ¯?,·|û×qÉc÷G àòi¶÷Ó¸åßïdžo—9¶÷#SÛ¸òY‡õ±¥>Ÿ}XX~;ç·ÏáhÐKI¯tõN3ëfØKiï4ãÞiæ½Ó |§3ñ%ÎÈwš™ï4Cßi¦¾ÔûJ×¹ï4ƒßi&¿ÓŒ~©3ûfø;]¦¿³Œ©3ÿ&NS§I€Òµ»AþíWuÝ´!ß5`þÐtiÀØÜ?3½¿¯çcÙ½½)Öö·:¸'–Âõ€§ÂïT˜íšÃÙ®)ÌvMa¶k -³]S˜íšÃe»¦,Û5…ɸÂTÜáDÜàÚp…I¸ÂÜá\aú­0ùV˜z+œx;›v+Lº¦Ü -n‡Ómƒk¶¦Ú -m…i¶ÃI¶Â[álEéµÃɵÂÔZab­0­6¸¦zƒçï?¾×¥ž^—óÛíÚüÉõñÅÑ̺¡:ïOÙ×´ç¯ûMK>s]ï_¸ýI»Ûgv4wfðJÉë4£×if¯Ó _§3}%Îøušùë4Øi&°ÔÁJ×ì4CØi¦°ÓŒa©3‡f;]&±³Œb©3‹f;Í4všq¬tÇ[írn>Ø5çÓåq;º÷à÷õçÕÿoÜ•õæ­¬ ®#^a&¼Â x‡3ßf¼+ÌtW˜á®pf»³í -3Ùf°+Ì\w8cÝà:Õf¨+ÌLW˜‘îp&ºÂ t…˧£]žÔÙå)]wyN³Ësš]žÔÙå9Í.ÏivyN§‰§‰‚ÓDÁi¢ u¢ t‚ÓDÁi¢à4Q:Qpš(8]¢à,Q:Qpš(8Mœ& -J×(<ì¯. üíGÛ~¹nc;NKßÔ_ër;u—åó¦Íêüsní°º=¸ú6šy)ùâ#±Ã¹?õýõáêå4¿ýh†g¤]þæ;pO«óëú'æíþòßyT£: +<< /Filter /FlateDecode /Length 7243 >> +stream +xÚåÝÍ®ÛXzFáy]…o Tâ( hðiÛ dÔ,È´{”Iî’û][$%‘븀 @ªÜyêXrIßÚ›¤¨æËyü¿ÿþ×—fþ‡ÿÇoþöÇ϶ýr?݇vè¿üùÏßÊÿ¯ùr½Ÿºë—ëÐœÎCóåÏÿúò;Ÿ‡¯¿7÷ö2ýãßÇ¿Úó¹k¿þÞݺñ¹4㯮üj¸¿ú¹úÿ÷çs3þ[íÇ×®Ýå×ÝǬþóÏûíüå_ãoþú Æyj®¯Ƥ›§çóÇÏæòêÉ4çþÔN?§¿Ÿšóðø9㣺±9·óƒº–'2?Ðñá÷ãSì¿Or|ÝÓë6O¬½¹'Ö¶ÍøÇ{Ù> ËíU;XÝ §Ûó“}§ûþ4´7«/íø¸ïVã¾Öëëé¦ÈõrºÆê[wên­Õ÷æÔtÖ·ña[݇ñq÷V7ýø¸íˤkÛñqZßÇÇm_&]w·ý¯Óõ—ñqk}éÆÇm_&Ýø¢ºy|; ½}™t×áÔÝíˤ»õ§¦×z|QÝîúer¿Û¾Lúóu|ÜöeÒ7—ñqÛ—I?¾¨nw­»óø¸¯ZßÆÇm_&}?ŒÛþ—ïÇ•¶c^†K£õýÔŸµ¾^OÍžJúñ5u?ÛWIoÇÇm_%SLïmÿÁ71}Šg7=“fÏyMPâ9ܶiœbyi¾þ>wqêj?ý«rŽ±œÈ,ÆøÎÅmç2ý}ûƒÞ5xøÎrdú‰»}Y?£¾8M_œ¦/R§/J×¾8M_œ¦/R§/NÓ§é‹ÓôÅéôEâôÅiúâ4}qš¾H¾(]ûâ4}qš¾8M_¤N_œ¦/N—¾8K_¤N_œ¦/NÓ§é‹Òµ/ÛNؾ´ãëf|•mûòm¯/㸿Ó­d +ôõºö51ìJß„£ýH˜>Ê_Ó¿=møéiûª)L%Cóï·;Ù×Oåh²+]'»ÓLv§™ìRg²;ÍdwšÉî4“ÝéLv‰3Ùf²;ÍdwšÉ.u&»Òu²;ÍdwšÉî4“]êLv§™ìN—Éî,“]êLv§™ìN3Ùf²+]'ûvB¿= ·{LñÜóþVÊ·zL±ýöXÈ×IûQ&ïõVfóô¿O¿Þ™Âõ¨áÓoôkG ‡ñ 8NÈÇÏy:jø&™•n›•ñïçì‹VOtÞ5ícÛ<Èýclg$uö@R§”V—R:M)¥N)¥N)­.¥”:¥”:¥”:¥”º”ÒâRJ©SJ©SJ©SJ«K)¦”R§”R§”R§”V—RJRJ=—RÚ”ÒêRJ©SJ©SJ©SJ§)åS2äh˜9\·©Ù?Æ6$Іrˆm> ö:͵?Ýž~§7ϧ¹Ï¾m¬¾ŸÇÀ·ZßÆruR·çËø°{«›n|Ü«s6Îêr6N꜓:gã¤ÎÙ8©Y)H]V +³Rpš•‚Ó¬¤ÎJAéºRpš•‚Ó¬¤ÎJÁiV +N³Rpš•‚ÓY)Hœ•‚Ó¬œf¥à4+©³RPº®œf¥à4+§Y)H•‚Ó¬œ.+gY)H•‚Ó¬œf¥à4+¥ëJa­»›])Œó¹ož6¥‹£¥ónú\Ö/vÎ/ΗºL»íººèÚÇÑUNÏ•SvE÷k3ý.o·ª%)ëG~”§IŠÓ$Eê$E隧IŠÓ$Eê$Åi’â4Iqš¤8¤Hœ¤8MRœ&)N“©“¥kRœ&)N“§IŠÔIŠÓ$Åé’gIŠÔIŠÓ$Åi’â4IQº&e“†Ë/¦Æ·xïk˜îõ0m“ 8§«4®ç¯Cÿ·ÅñÍÅ•óeŸÝu ùïyw‹ÊÜÍCØy"p»îtçO}*Op»¥ló%›?ËúñëGÙ^\Ú>ô>öäË‹X–eœdç2•ãƒºë~°Us˜®:MW¦«R§«J×®:MW¦«R§«NÓU§éªÓtÕétUâtÕiºê4]uš®J®*]»ê4]uš®:MW¥NW¦«N—®:KW¥NW¦«NÓU§éªÒµ«ký6GOùi›ÓåÖoó³8¨ÛK5ó ‚)AuÞpµ%0CûúzÈ.¦Í™ÆKŸK.»7ÿÂô1‡9È·¯7~ÀµÛÆúYÃi‚!u‚¡t †ÓÃi‚!u‚á4Ápš`8M0œN0$N0œ&N § †Ô †Ò5N § †ÓCêÃi‚át †³CêÃi‚á4Ápš`(]ƒ±üÝQ0šë©ÎþœÇ×d{ÆbßÒôý«³ÍÏîítsiÊóÑ»ñ§ôûû’õ<Ø—8Lfœ&3N“©“¥kfœ&3N“©“§ÉŒÓdÆi2ãt2#q2ã4™qšÌ8Mf¤Nf”®™qšÌ8Mfœ&3R'3N“§Kfœ%3R'3N“§ÉŒÓdFéš™M.lf.÷q\ûw™™÷'o2sî‡ìTæ ðWñùx뛥ÿZr҅̓=è‚Ôé‚Õ¥ NÓ©Ó©Ó«K¤N¤N¤N¤.]°¸tAêtAêtAêtÁêÒ§é‚Ôé‚Ôé‚Ôé‚Õ¥ R§ RÏ]6]°ºtAêtAêtAêtÁiº°ïº ·ËéÚÜÞváÛ^>Ì‘¬e/vŽ]•xpÎeþWçUÞƒ¡¾~GC]é:Ôf¨;ÍP—:CÝi†ºÓ u§êNg¨Kœ¡î4CÝi†ºÓ u©3Ô•®CÝi†ºÓ u§êRg¨;ÍPwº ugêRg¨;ÍPwš¡î4C]é:Ô׺ÿ!OB\®Ýé:tOC}q½XnŸPFöúŠ¯iñ^NÜ/Ïp?®"{ý¹ÚžÏlµËSü>s>Ì-6ýà’Ôìœ&*R'*Jר8MTœ&*R'*N§‰ŠÓDÅéDEâDÅi¢â4Qqš¨H¨(]£â4Qqš¨8MT¤NTœ&*N—¨8KT¤NTœ&*N§‰ŠÒ—óåtïŸötPçnw ãŸÔíü¼[øöt²¢^âµ½®Îcß>!ÛóIÙ>Qšâ3$I·e„æøœ·§GwzÚTÉÕâƒTçůÛò÷ÇO|»a­ÿ\Ž¦‘ÓL#§™FN3¤Î4RºN#§™FN3œfIiä4ÓÈé2œeIiä4ÓÈi¦‘ÓL#¥ë4ÚèOM£~\Â\ºwÓhqL{úxÄëOè¯îP¶úxÄ›¥ëbÚÌŽÞ3¦}̘Çgÿ׋çã¹èï fãîÛbýÇwô¶pš·…Óåmá,o ©ó¶pš·…Ó¼-œæm¡t}[lô§ÞãZývéÅ!½®ù¥Ïûü{»ä °þc=z8]ÞÎò:o§y8ÍÀiÞJ×7ÀF·óêRþhËÏؼæO5”×î±ÂëVó·ÝúƒtÓý‡öý‹”Óü”½ÏuoôÁ纭.‡TæŠÓRqšC*RçŠÒõŠÓRqšC*RçŠÓRqšC*NsHÅélb$Î&Æi61N³‰qšMŒÔÙÄ(]71N³‰qšMŒÓ¬Ö¤N¬œ&VN—X9K¬¤N¬œ&VN+§‰•Ò5VÝš;a²ZkÆ?ÕÛõ9VO‡T>­½[«l~Ûƒ[«H[«X]n­"un­"un­"5 všK]ì0 vš;M‚¥N‚•® vš;M‚¥N‚&ÁN“`§I°ÓI°ÄI°Ó$Øiì4 –: Vº&Øiì4 všK;M‚. v–K;M‚&ÁN“`¥k‚7úS >·§±ï¼8Ž8}Øâ¯íöÈïú·<ʯÓäWêä×iòë4ùušü:M~¥.ùu˜ü:M~&¿R'¿J×ü:M~&¿R'¿N“_§É¯Óä×éäWâä×iòë4ùušüJü*]óë4ùušü:M~¥N~&¿N—ü:K~¥N~&¿N“_§É¯Ò5¿Ý~â» úûùt¾>ï€o;¶ _󭃋ošo±òýñÏÝê³£KÖ~ñVg/O}È/Œ`LožïÁ˜–:cÚê2¦¥Î˜–:cZêŒi©Ë˜¶¸Œi©3¦¥Î˜–:cÚê2¦fLK1-uÆ´ÔÓV—1-uÆ´Ôó˜–6cÚê2¦¥Î˜–:cZêŒi§Ó[Ý~âvÕýuº…óÓ.i¸,nW]Æôüý¨]9ÉÚ¿ü*‡÷7¬Î=¨7¿ÙÁ=¨­.÷ vššÔÙ©IšÕe§&uvjRg§&uvjRg§fõ¼S“8;5©³S“:;5«ËNÍéºpš%€Ó,¤ÎÀi–N³pš%€ÓYHœ%€Ó,œf à4K©³Pº.œf à4K§YH%€Ó,œ.KgYH%€Ó,œf à4K¥ë`£ÛÝ/KÚ»ihNí¹_ÜÍš›†Nו]ûǵ`óiÿ›*.ã*£ïoÛzððöoÚqkûǽn/¿þùxnÝóÍûÀòÏm·ø¤êp^Ýtwù°~ G˧Y>HåƒÓ,œfùà4˧Y>H]–³|pšåƒÓ,¤ÎòAéº|pšåƒÓ,¤ÎòÁi–N³|pšåƒÓY>HœåƒÓ,œfùà4Ë©³|Pº.œfùà4˧Y>HåƒÓ,œ.ËgY>HåƒÓ,œfùà4Ë¥ëòa£?u¡kOíâ.ã·§{£>ô&²‹û ½¾%÷ÑWþþÕÛãíÏøõ:šñJ×ï43Þif¼Ô™ñN3ãfÆ;ÍŒw:3^âÌx§™ñN3ãfÆK¯tñN3ãfÆ;ÍŒ—:3Þif¼ÓeÆ;ËŒ—:3Þif¼ÓÌx§™ñJ׿ÑíüÙ 9ãÛó©ëžö\‹[OôÿÕsv|Ö‚¯ ~Ôàý¤f«´~XG[%§Ù*9ÍVÉi¶JN³U’ºl•f«ä4[%§É¨ÔɨÒ5£N“Q§É¨ÔɨÓdÔi2ê4u:•8ušŒ:MF&£R'£J׌:MF&£N“Q©“Q§É¨Ó%£Î’Q©“Q§É¨ÓdÔi2ªtÍèF·ŸøÆ¿þ<þ»uÛŒ.>ÂØ|,c9ok^q}¿Qšo~ÿ•MÕ'¿…¸Vaý¤Žª uª t­‚ÓTÁiª uªà4Upš*8MœN$Nœ¦ +NS§©‚Ô©‚Òµ +NS§©‚ÓTAêTÁiªàt©‚³TAêTÁiªà4Upš*(]«°Ñí'¾\¨»§¾½=Uáq¥ä;ð=fõµ}\œØý|\²¸žÞS ê¼ç–잧Ú<ƒóTV—Í—ÔÙ|IÍ—ÔÙ|IÍ—ÕóæKâl¾¤Nf¥Nf­.™ušÌJÌJÌZ]2+u2+u2+u2+uɬÅ%³R'³R'³R'³V—Ì:Mf¥Nf¥Nf¥Nf­.™•:™•zά´É¬Õ%³R'³R'³R'³N“Ù­ž +ØÿÒe.ݵ?l/ä*—¾y¾ºeqiþÚÜ©§/¾}ï +˜Íï÷±s秣 `º¡=].—Çc¾¦Ùœð:/>e1ß-ßó+žWãn~׃«qær©Y¦8Í2Eê,Sœf™â4˧Y¦8Í2Eê²Lq˜eŠÓ,Sœf™"u–)J×eŠÓ,Sœf™"u–)N³LqšeŠÓ,SœÎ2Eâ,Sœf™â4˧Y¦HeŠÒu™â4˧Y¦8Í2Eê,Sœf™âtY¦8Ë2Eê,Sœf™â4˧Y¦(]—)›B˜û>¶È-Ž7b>¼ ¦Ý]õÔ•„\õÔ,ŸÌQ ”M „­0– +K”MŒeþËô7–Ùol&¿¢™ûÆ2õeæËÄW6ó^Ø:íeÖˤ7–9¯l¦¼±ÌxcË„7’ù®l¦»±Ìvc™ìÆ2×…­S}5™?Ì­Ks+š®›Þ+—ç©þ|ƒý|ùÖâC–ç—sWNvzÀ×yM·±YÜknwå¿~ØG+§™öRgÞ+]'¾ÓÌ|§™úRgî;ÍäwšÙï4Óßé̉S§i€ÓTÀi: uJ tmÓÔÀizà4E:Mpš*8]ºà,e:mpš:8Mœ¦J×Fl&ý§*ÑŽãëþ.‹û•-oJêÍÙï³íÝá·ü–G.á{û[½¢þgN ...‘Ÿý¯cvõ쎦¬Ã² +3cfÄ*Ì„U8ÖÙÌW…¯ +3]f¸:œÙjp­ +3Yf°*Ì\u8cUa¦ªÂe¨*ÊLu8#Ua&ªÂ T…™§×qº‰æcILÓqî\»·kîÕWà–-oö8·§ã¯×ÜÍß÷¿6`ó›s1G‹ðõó8Z„;Í"\ê,•®‹p§©ƒÓäAêôÁiá4…pšD8FHœH8M%œ&NÓ © +¥k)œ&NÓ +§‰…Ô©…ÓäÂéÒ g †Ô)†Ó$Ãišá4ÑPºVc3ú?v®xÊƹ=]¯oWáó¥Ú¬ÂŸ¿Œèrιµq=£½þMÎhK3ÚNsFÛiÎh;Ím§9£-u9£í0Iuš¤:MR¥NR•®Iuš¤:MR¥NR&©N“T§IªÓIªÄIªÓ$Õi’ê4I•:IUº&Õi’ê4Iuš¤J¤:MR.Iu–¤J¤:MR&©N“T¥kR7Yü0ß[Ÿ¤¶÷ñÍ×öo“z[ìÄžÎK››6 ­>ͽڠ½ïr©ÊæTEêTEêTÅêR§©ŠÔ©ŠÔ©ŠÕ¥*R§*R§*R§*R—ªX\ª"uª"uª"uªbu©ŠÓTEêTEêTEêTÅêR©S©çªH›ªX]ª"uª"uª"uªâ4UÙ–áÛ'Ζ´×qØíœ.¹ìTe{ƒ ×§G¦£tO[qwÀrâdœ½›[ÌÇ¿ÏŸ¼âg}ßý^Ú:9×Oïhr:ÍätšÉé4“ÓéLN‰39fr:ÍätšÉ)u&§Òur:ÍätšÉé4“SêLN§™œN—Éé,“SêLN§™œN39fr*]'çfú}jrÃéÞ¼]ýÞzœi¹þ>ï·ótÿ$ô_ûºŽîÊ-åÞÏ_NX¯OgÏßÞÖo3ß}ó®ÿ°ŽÞ¼Nóæuš7¯Ó¼y¥Î›×iÞ¼N—7¯³¼y¥Î›×iÞ¼Nóæuš7¯ÒõÍ»y~êÍ{ßåýñénçÍûÉ|ðY®ÍoyðY.©sä[êù¶ºù–:G¾¥Î‘o©sä[êù¶º£p˜cNsŒÂiŽQHcJ×cNsŒÂiVÚRg¥í4+m§Yi;ÍJÛ鬴%ÎJÛiVÚN³Òvš•¶Ô‰µÒ5ÖNk§‰µÓÄZêÄÚibít‰µ³ÄZêÄÚibí4±všX+]c½ î7sgbÝw§óùíJ»ÿ±·ÒnŸ/µÜ¬b_æ|? ëtP§ ¨ÓÔiê4•ºÔaê4uš€J€*]ê4uš€J€:M@& NP§P‰P§ ¨ÓÔi*uªt ¨ÓÔiê4•:uš€:]ê,•:uš€:M@& J×€n"ømޥʀvÍiìÚûÎͬþ}˜Úý(•œ?Ùöóq²·üúqéùΘCû8~µ.0|XêóAˆÅéçݬŸÃQ¤N”®pš8M¤Nœ&N§‰€Ó‰€Ä‰€ÓDÀi"à4:PºFÀi"à4pšH8Mœ.p–H8Mœ&N¥k6ƒüÛg®jî§ó½Û‹Àô ê¡y|€z>Ì_OÛ²QÚ½ËÕæ÷:¸Ë•ÓõȨÓušÔÙØ9ÍÆÎi6vN³±sšÔecç0;§iºÓ4]ê4]éÚt§iºÓ4]ê4Ýišî4Mwš¦;¦Kœ¦;MÓ¦éNÓt©Ót¥kÓ¦éNÓt§iºÔiºÓ4ÝéÒtgiºÔiºÓ4Ýišî4MWº6}­§¯Ž?¾ËM_iM·»±›>ð>¼98Z·^çí%õsðùëq«“Ï\'ü 7M©yýÌŽ²Ó d©3f ;Í@všìt²ÄÈN3f ;Í@–:Yé:f ;Í@vš,u²Ó d§Ë@v–,u²Ó d§ÈN3•®y­Ý@Îm›ûøÚ¹=o²¾Ýxðûòðÿ7n>˜e÷æ),»fÊK)/u¦¼ÕeÊK)/u¦¼Ô™òR—)oq™òRgÊK)/u¦¼ÕeÊ;Í”—:S^êLy©3å­.S^êLy©ç)/m¦¼ÕeÊK)/u¦¼Ô™òN3å7zšòúêÁñß›ÿþ4åŸnD8G»ô‹ÚÍw$|º¡»>¾qìù†òË%7gRÊ¿ÿê,Ìëï´™"3}Ô¾›"òmÌ®ŸÝј•:cÖiƬӌY§³NgÌJœ1ë4cÖiƬӌY©3f•®cÖiƬӌY§³RgÌ:͘uºŒYg³RgÌ:͘uš1ë4cVé:f×z³Ã‡³×f\TwïÆìâV~¯Õ‹y÷⛽X@ï-sè~ó@ÝKC÷RçнÕó¡{‰sè^꺗š=„ÔÙC(]÷N7§‰›Ô‰›ÓÄÍiâæ4qs:q“8qsš¸9MÜœ&nR'nJ׸9MÜœ&nN7©7§‰›Ó%nÎ7©7§‰›ÓÄÍiâ¦tÛZOqëì¡ûær?uÍõmܾ}>nõvˆ›Ùöû§°7âà¶ÔtÐi:è4”ºtÐa:è4tšJ*];è4tšJ:M¦ƒNÓA§ÓA‰ÓA§é ÓtÐi:(u:¨tí ÓtÐi:è4”:tš:]:è,”:tš:M¦ƒJ×®uwûLûñ•6´ï:¸¸Sä‹ó×»‡Íj7÷yÏW@ï†ný ŽBç4¡sšÐI]Bç0¡sšÐ9Mè¤Nè”®¡sšÐ9Mè¤Nèœ&tN:§ Ó Ä Ó„ÎiBç4¡“:¡Sº†ÎiBç4¡sšÐIÐ9Mèœ.¡s–ÐIÐ9Mèœ&tN:¥kèÖº»}âú릻ŒÏýí†ouÿÆr'ýk[µ¸ƒÖùëeX¤¬žIzyg—£ þR>÷Ï6m.9èòù¡åwpÍgÃ~./yà›øçÕ†vy5Z¹VííG†ê{cý'~ôÞpº¼7œå½!uÞNóÞpš÷†Ó¼7”®ïç×·¾Ž±i»Sy»\Ü…n:ìñ+¯“ÿÅ·Äó •ºÜØ©íÊ_{7®#èë?‘ƒ Kœ ;MÐ&èNt©t¥kÐ&èNt§ ºÔZN3´œ.CËY†–ÔZN3´œfh9ÍÐRº­çÁã‡VÓœúûû#¸ýSÐ!çVoeÖl¿çŵ}Ç7p~=âì­šÙå­ŸÓÑ.Oêìò”®»<§Ùå9Í.Oêìòœf—ç4»<§‰‚Ó‰‚ĉ‚ÓDÁi¢à4Q:QPºFÁi¢à4Qpš(H(8Mœ.Qp–(H(8Mœ& +N¥k^ öw—þñ³m¿ÜO÷¡ú/þ³þ¬ëýÔ]¿Üî§ËâvÿSîíeq“…añÍ7ÓJòÍçj/çþÔ÷·íϻԋiþøÙ\^=ŒvþÆ7Àé~]]°˜´?þüížîA endstream endobj 2598 0 obj << /Type /Page /Contents 2599 0 R /Resources 2597 0 R /MediaBox [ 0 0 595.276 841.89 ] /Parent 2486 0 R /Annots 2601 0 R >> endobj 2601 0 obj -[ 2538 0 R 2553 0 R 2554 0 R 2555 0 R 2556 0 R 2557 0 R 2558 0 R 2559 0 R 2560 0 R 2561 0 R 2562 0 R 2563 0 R 2564 0 R 2565 0 R 2566 0 R 2567 0 R 2568 0 R 2569 0 R 2570 0 R 2571 0 R 2572 0 R 2573 0 R 2574 0 R 2575 0 R 2576 0 R 2577 0 R 2578 0 R 2579 0 R 2580 0 R 2581 0 R 2582 0 R 2583 0 R 2584 0 R 2585 0 R 2586 0 R 2587 0 R 2588 0 R 2589 0 R 2590 0 R 2591 0 R 2592 0 R 2593 0 R 2594 0 R 2595 0 R 2596 0 R ] +[ 2529 0 R 2530 0 R 2546 0 R 2547 0 R 2548 0 R 2549 0 R 2550 0 R 2551 0 R 2552 0 R 2553 0 R 2554 0 R 2555 0 R 2556 0 R 2557 0 R 2558 0 R 2559 0 R 2560 0 R 2561 0 R 2562 0 R 2563 0 R 2564 0 R 2565 0 R 2566 0 R 2567 0 R 2568 0 R 2569 0 R 2570 0 R 2571 0 R 2572 0 R 2573 0 R 2574 0 R 2575 0 R 2576 0 R 2577 0 R 2578 0 R 2579 0 R 2580 0 R 2581 0 R 2582 0 R 2583 0 R 2584 0 R 2585 0 R 2586 0 R 2587 0 R 2588 0 R 2589 0 R 2590 0 R 2591 0 R 2592 0 R 2593 0 R 2594 0 R 2595 0 R 2596 0 R ] endobj -2538 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 759.955 197.477 769.031 ]/A << /S /GoTo /D (section.0.4) >> >> +2529 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 758.062 199.908 769.031 ]/A << /S /GoTo /D (section.0.2) >> >> +endobj +2530 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 746.057 217.99 757.016 ]/A << /S /GoTo /D (subsection.0.2.1) >> >> +endobj +2546 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 734.222 260.909 745.061 ]/A << /S /GoTo /D (subsection.0.2.2) >> >> +endobj +2547 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 721.708 282.11 733.664 ]/A << /S /GoTo /D (subsection.0.2.3) >> >> +endobj +2548 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 702.172 177.731 711.218 ]/A << /S /GoTo /D (section.0.3) >> >> +endobj +2549 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 687.835 257.353 699.791 ]/A << /S /GoTo /D (subsection.0.3.1) >> >> +endobj +2550 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 676.329 172.561 687.278 ]/A << /S /GoTo /D (subsection.0.3.2) >> >> +endobj +2551 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 666.197 258.917 675.432 ]/A << /S /GoTo /D (subsection.0.3.3) >> >> +endobj +2552 0 obj +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 644.388 197.477 653.464 ]/A << /S /GoTo /D (section.0.4) >> >> endobj 2553 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 746.057 252.591 757.126 ]/A << /S /GoTo /D (subsection.0.4.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 630.491 252.591 641.559 ]/A << /S /GoTo /D (subsection.0.4.1) >> >> endobj 2554 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 734.222 269.318 745.061 ]/A << /S /GoTo /D (subsection.0.4.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 618.655 269.318 629.494 ]/A << /S /GoTo /D (subsection.0.4.2) >> >> endobj 2555 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 723.98 256.257 733.106 ]/A << /S /GoTo /D (subsubsection.0.4.2.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 608.413 256.257 617.539 ]/A << /S /GoTo /D (subsubsection.0.4.2.1) >> >> endobj 2556 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 710.202 267.465 721.151 ]/A << /S /GoTo /D (subsubsection.0.4.2.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 594.635 267.465 605.584 ]/A << /S /GoTo /D (subsubsection.0.4.2.2) >> >> endobj 2557 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 698.356 287.5 709.195 ]/A << /S /GoTo /D (subsubsection.0.4.2.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 582.789 287.5 593.629 ]/A << /S /GoTo /D (subsubsection.0.4.2.3) >> >> endobj 2558 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 688.114 260.89 697.24 ]/A << /S /GoTo /D (subsection.0.4.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 572.548 260.89 581.674 ]/A << /S /GoTo /D (subsection.0.4.3) >> >> endobj 2559 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 673.888 356.78 685.843 ]/A << /S /GoTo /D (subsubsection.0.4.3.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 558.321 356.78 570.276 ]/A << /S /GoTo /D (subsubsection.0.4.3.1) >> >> endobj 2560 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 661.933 423.071 673.888 ]/A << /S /GoTo /D (subsubsection.0.4.3.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 546.366 423.071 558.321 ]/A << /S /GoTo /D (subsubsection.0.4.3.2) >> >> endobj 2561 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 649.977 434.598 661.933 ]/A << /S /GoTo /D (subsubsection.0.4.3.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 534.411 434.598 546.366 ]/A << /S /GoTo /D (subsubsection.0.4.3.3) >> >> endobj 2562 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 638.461 249.98 649.42 ]/A << /S /GoTo /D (subsection.0.4.4) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 522.894 249.98 533.853 ]/A << /S /GoTo /D (subsection.0.4.4) >> >> endobj 2563 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 626.505 202.349 637.464 ]/A << /S /GoTo /D (subsubsection.0.4.4.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 510.939 202.349 521.898 ]/A << /S /GoTo /D (subsubsection.0.4.4.1) >> >> endobj 2564 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 616.493 200.416 625.509 ]/A << /S /GoTo /D (subsubsection.0.4.4.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 500.926 200.416 509.943 ]/A << /S /GoTo /D (subsubsection.0.4.4.2) >> >> endobj 2565 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 602.715 298.12 613.664 ]/A << /S /GoTo /D (subsection.0.4.5) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 487.148 298.12 498.097 ]/A << /S /GoTo /D (subsection.0.4.5) >> >> endobj 2566 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 592.473 179.455 601.599 ]/A << /S /GoTo /D (subsection.0.4.6) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 476.906 179.455 486.032 ]/A << /S /GoTo /D (subsection.0.4.6) >> >> endobj 2567 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 568.842 153.283 579.681 ]/A << /S /GoTo /D (section.0.5) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 453.275 153.283 464.114 ]/A << /S /GoTo /D (section.0.5) >> >> endobj 2568 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 556.767 196.72 567.726 ]/A << /S /GoTo /D (subsection.0.5.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 441.2 196.72 452.159 ]/A << /S /GoTo /D (subsection.0.5.1) >> >> endobj 2569 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 544.812 285.168 555.88 ]/A << /S /GoTo /D (subsection.0.5.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 429.245 285.168 440.314 ]/A << /S /GoTo /D (subsection.0.5.2) >> >> endobj 2570 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 532.857 215.52 543.816 ]/A << /S /GoTo /D (subsection.0.5.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 417.29 215.52 428.249 ]/A << /S /GoTo /D (subsection.0.5.3) >> >> endobj 2571 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 520.901 278.842 532.08 ]/A << /S /GoTo /D (subsection.0.5.4) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 405.335 278.842 416.513 ]/A << /S /GoTo /D (subsection.0.5.4) >> >> endobj 2572 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 508.956 207.39 519.905 ]/A << /S /GoTo /D (subsection.0.5.5) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 393.39 207.39 404.339 ]/A << /S /GoTo /D (subsection.0.5.5) >> >> endobj 2573 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 487.148 184.546 497.987 ]/A << /S /GoTo /D (section.0.6) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 371.581 184.546 382.421 ]/A << /S /GoTo /D (section.0.6) >> >> endobj 2574 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 476.906 182.752 486.032 ]/A << /S /GoTo /D (subsection.0.6.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 361.34 182.752 370.466 ]/A << /S /GoTo /D (subsection.0.6.1) >> >> endobj 2575 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 463.238 281.114 474.187 ]/A << /S /GoTo /D (subsection.0.6.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 347.671 281.114 358.62 ]/A << /S /GoTo /D (subsection.0.6.2) >> >> endobj 2576 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 451.163 266.498 462.232 ]/A << /S /GoTo /D (subsubsection.0.6.2.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 335.596 266.498 346.665 ]/A << /S /GoTo /D (subsubsection.0.6.2.1) >> >> endobj 2577 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 441.041 308.71 450.276 ]/A << /S /GoTo /D (subsubsection.0.6.2.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 325.474 308.71 334.71 ]/A << /S /GoTo /D (subsubsection.0.6.2.2) >> >> endobj 2578 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 429.086 268.292 438.321 ]/A << /S /GoTo /D (subsubsection.0.6.2.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 313.519 268.292 322.755 ]/A << /S /GoTo /D (subsubsection.0.6.2.3) >> >> endobj 2579 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 415.417 208.436 426.366 ]/A << /S /GoTo /D (subsubsection.0.6.2.4) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 299.85 208.436 310.799 ]/A << /S /GoTo /D (subsubsection.0.6.2.4) >> >> endobj 2580 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 405.175 258.718 414.411 ]/A << /S /GoTo /D (subsubsection.0.6.2.5) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 289.609 258.718 298.844 ]/A << /S /GoTo /D (subsubsection.0.6.2.5) >> >> endobj 2581 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 393.22 316.441 402.456 ]/A << /S /GoTo /D (subsubsection.0.6.2.6) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 277.654 316.441 286.889 ]/A << /S /GoTo /D (subsubsection.0.6.2.6) >> >> endobj 2582 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 381.265 397.756 390.5 ]/A << /S /GoTo /D (subsubsection.0.6.2.7) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 265.699 397.756 274.934 ]/A << /S /GoTo /D (subsubsection.0.6.2.7) >> >> endobj 2583 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 367.487 194.479 378.436 ]/A << /S /GoTo /D (subsubsection.0.6.2.8) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 251.92 194.479 262.869 ]/A << /S /GoTo /D (subsubsection.0.6.2.8) >> >> endobj 2584 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 355.532 219.345 366.481 ]/A << /S /GoTo /D (subsubsection.0.6.2.9) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 239.965 219.345 250.914 ]/A << /S /GoTo /D (subsubsection.0.6.2.9) >> >> endobj 2585 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 343.566 274.508 354.635 ]/A << /S /GoTo /D (subsubsection.0.6.2.10) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 228 274.508 239.068 ]/A << /S /GoTo /D (subsubsection.0.6.2.10) >> >> endobj 2586 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 331.621 185.562 342.68 ]/A << /S /GoTo /D (subsubsection.0.6.2.11) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 216.055 185.562 227.113 ]/A << /S /GoTo /D (subsubsection.0.6.2.11) >> >> endobj 2587 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 319.656 300.033 330.725 ]/A << /S /GoTo /D (subsubsection.0.6.2.12) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 204.09 300.033 215.158 ]/A << /S /GoTo /D (subsubsection.0.6.2.12) >> >> endobj 2588 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 307.821 286.653 318.769 ]/A << /S /GoTo /D (subsection.0.6.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 103.28 192.254 286.653 203.203 ]/A << /S /GoTo /D (subsection.0.6.3) >> >> endobj 2589 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 295.746 311.739 306.814 ]/A << /S /GoTo /D (subsubsection.0.6.3.1) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 180.179 311.739 191.248 ]/A << /S /GoTo /D (subsubsection.0.6.3.1) >> >> endobj 2590 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 283.801 231.968 294.859 ]/A << /S /GoTo /D (subsubsection.0.6.3.2) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 168.234 231.968 179.293 ]/A << /S /GoTo /D (subsubsection.0.6.3.2) >> >> endobj 2591 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 273.669 227.246 282.904 ]/A << /S /GoTo /D (subsubsection.0.6.3.3) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 158.102 227.246 167.337 ]/A << /S /GoTo /D (subsubsection.0.6.3.3) >> >> endobj 2592 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 261.713 233.353 270.949 ]/A << /S /GoTo /D (subsubsection.0.6.3.4) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 146.147 233.353 155.382 ]/A << /S /GoTo /D (subsubsection.0.6.3.4) >> >> endobj 2593 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 247.925 432.127 258.994 ]/A << /S /GoTo /D (subsubsection.0.6.3.5) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 132.359 432.127 143.427 ]/A << /S /GoTo /D (subsubsection.0.6.3.5) >> >> endobj 2594 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 235.97 350.832 247.038 ]/A << /S /GoTo /D (subsubsection.0.6.3.6) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 120.403 350.832 131.472 ]/A << /S /GoTo /D (subsubsection.0.6.3.6) >> >> endobj 2595 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 225.848 276.381 235.083 ]/A << /S /GoTo /D (subsubsection.0.6.3.7) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 116.232 110.281 276.381 119.517 ]/A << /S /GoTo /D (subsubsection.0.6.3.7) >> >> endobj 2596 0 obj -<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 202.157 142.892 212.976 ]/A << /S /GoTo /D (section.0.7) >> >> +<< /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [ 78.374 86.59 142.892 97.41 ]/A << /S /GoTo /D (section.0.7) >> >> endobj 2600 0 obj << /D [ 2598 0 R /XYZ 78.37 808.885 null ] >> @@ -8788,38 +8808,43 @@ endobj << /Type /Font /Subtype /CIDFontType0 /BaseFont /GJKKSV+LMMono9-Regular /FontDescriptor 2634 0 R /W 2633 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> endobj 2639 0 obj -[ 35 [ 580 ] 47 [ 624 ] 50 [ 558 ] 55 [ 536 ] 59 [ 641 ] 72 [ 513 ] 77 [ 613 ] 81 [ 636 ] 84 [ 558 ] 96 [ 602 ] 116 [ 613 ] ] +[ 35 [ 580 ] 47 [ 624 ] 50 [ 558 ] 55 [ 536 ] 59 [ 641 ] 72 [ 513 ] 77 [ 613 ] 81 [ 636 ] 84 [ 558 ] 96 [ 602 ] 98 [ 458 ] 112 [ 613 ] 116 [ 613 ] ] endobj 2641 0 obj << /Filter /FlateDecode /Length 23 >> stream -xÚc````T`hñ`h`àz— +xÚc````T`hñ`XÀÐ Z7 endstream endobj 2642 0 obj -<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1648 >> +<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 1946 >> stream -xÚ}UP×ßåîvY¦w²»Ê„*%±©UC%@¥V&Õæä–»“ã÷îP”ƒx·wË!¹ T<]üg*Ö’Vm†13US”gÚ40“´3éŒÆ™&ßšÇtºçÑv’fúvçÛ7ï{¿ï÷û~oŽiµŽãÙ5Û^®,Ù¶¢jÓf¾Éê.µ6{~P˜¿™³û\V!± LY¦,õ´²S²q…NQÂjQ®^3¦×ÎùÑ奺¾šÑec~nQ"Þ\ ôËÕ?²XŸ“˜˜ÐKMÁp,[Ž=Ä œÂ¿‹Óxîÿƒ.*(,|¦”onœv‡—-*,|ze"®f×°•ÖúF¾ÅÓèd­nÀn*`«ùuÖÉ>ŻٜÃêj`ù¶–ÛÆú<œàaíïköä°µ§‡má…FVý -œ‹³z8ësÛ8õ:8ö…Ÿl©eËx·—­rÖsnÇæ糬‡ãX‡×Ûüc‹Åë³ð‚ÝÒ ®ñX\ÉEK"/¿ì¥êÚüªŠÒÕ[6x[½l/°6Îkuº<ßJôk“Õ¼Ðdu•Øø\…s{Þ6LOb¬{[ƒ•c›°¬{ójTAÕ¡Çô iµXö ¾¿‘âHӬф4ŸktupÞ Üex=v‡´ßCÏŸ4Ê(ÐÆ÷_œx&Fÿaèúø{¦›o!œFo Äd¤{'3G;{ºËi&HÐLÝžbr l´ï^ÿ$´°–‹Hè¿ZçaFPظc× …táè‘Æx¾OÎœ,¶2†GZQþµ¬,UqÜëÑ(SÐg:¡œoC{›„e_@*d3?ÊZÝnÝÓHû^µÎb~.¹µb #ß#f/ÿ¬m‰óqk®É L¨üZe°É™—§Åé©éAù LÝïT‰n5 -JÍó -ZbFØ|›¦È»oµ”32¼"åûZJè°:Ië!AýƒÔQÂcŒL´Â:Ý\Í¿+ÕÌWªl')¬Ó œW‘݉÷12¬”¿”—ÌPŸ+~øÌø8³ì›™ªž,:¨“IêþóíâUÖN’wc{*’µTtî)¡Ë¡4YËg¤œnDÚ¨ª¥±C†b®È™×fáòìöijƒò7¨4Êd`W}p·Ù^#JF!?ìí¬gšHjÜ+zê½ô^ŸÓï6W£œóàVœ¼òÁÇ?EÔQÆuGÍÔ?ÄÈQÖ‘Ãbÿþî``mÛ¦»Ô°5^kFy( ¥¡|”‹‘ -/ÜL\d:Þ<㊙ßû‡Б{û~K”¨(+ó  î(Me_Óµ¿±æªùî‘äÕ!ñ´L"•?5ƒ4’N ¿îÅB”Gó[=àÀ‹jP‰N**ÑUjZyûöPX`’²M‹[½ ºJ¢3ŠQ7p ¶š‘^ ¨Œ§Dÿ3·˜¤ŽyÅ­¥ªè³’ŽŠ ½ ÈŒ*üéRñÝã |EF÷Áä\¹®³_û̃⡣Œò’Úp\|wš6<ÊèUöɸ*÷?g5ÊGÐo„<´2ÐSª.i(C+ ¥A®ú¤C¬ WÅŒ¨¥lÞ°¥\‡:õ,W&oƒ®½D'}ʇvWe§—,Uz•Æéâ;ˆ¤Ñ‰o0 °„UÊ{ú.1ðC0‘>¾ù!³*Ë&>‡2i„CMÒ(wÈ‹ëƒr_Å؇ÝÉ3ç™ý@5¤òémcDŒîí xƒ®öÛƒ~sËX7Ó5Ü}jï­® û¯=:uêÈñß™¦ŠÞGé4òÿO1_H_þ·”õŸ’òhÐu–9æ=?7mÛιè¶#cíãæ[C7FT·Œ¶žR”E? e„ŽF#´tè¤xÄ|wæ Ëü§É§¡d”üJ¨{ÊŸ³dÒí‡[™ŽTÍÃ!û‰ ¿ºxx<”ªÚ\p³%ašáÀ`—`z­kŸ¿‹^»l%uÞ#½¦ÃƒÑ£!Õ`ìA]³-nRmò^·í4ÚŒHdÑQÇÜÜ.gE U Ãò™Ð¨ùÜ;à jŠ–pçÀˆépl8NŸ½tæ—çÆ`!zö‰Þ©§ËäïiãɆèNŒgCâfÌPÌú\õ~ÃV%îº-™¾¸:Ö'èÊZ—E¿@Ô/”Ó>Y—B¡P8t(¹Õë徑c1I’z{%IŸþ/ˆ: +xÚ}V p×]Y–V!À‹h¢Å»‹C˜cËuBR +ŒÁØÄvO +A¶ä–%y%ÿâ2’…¥ÕGÂŒ,óñ4˜RÓ‚“2¤S>5¸ Ó–Ïä3“f Ì4¹Kž§ÓrÛIšéÛ»;wî}÷ÜóÎy,1“H$)Ù¯o,.Ü–VP¸Õ\£3åè,Ög¦o5TÔul, WX,¤rJJX„ )Jh©À$¢¥Jéˆ2qÚ‰.,’Ýûö¾,Ã$§çÆìø|˜¥Lÿ^å’˜ãwÊg1E&ÁR°Tì‘D.!$OK(ÉÒÿW:+#3óų¥‰­ª¨´1Y™™/,Ù•Ìú f³®¬ÚÜ`­®bt&=³9ƒ)Ì`ŠÌ ¢·ŠyÎlbJ •:c9c.gŠ o0uVke*Xsź,ƒ)®¬²2 f¶š¿¬ÁhÐY z¦Î¤7°Œ­ÒÀlÚ¾­˜É5›lLAU™Ád50éé c5˜J›ÍòS­ÖVW‘af+´åbŒUkŒYµ±¼ôÜ׊ŠÓ òs6mÛ˜ak´1åf–Ñlº*£5ãýŽ³ÈÌÖèŒÙzs©!_o0ÙªlM˜¸žÁ´Xö2¶ +Ëà +±-X1¶+Å,˜M*’*.¦ŠÑ›ˆµbŸHvI®%T&ŒHWI½Ò¯»eÕ²{òÃpF%ÜåxhŽB/¤?€ë/Rá8Pꛯ^y1Bý±÷êèšëo …βòñ`G)=-ÇK]y WpNÜš —€O]Q»þ +%ÂjùHÐ?Lý]þYï+=€|ê]{6eRËä•.ÿ ¯ÃóøýÁµ:Zõ8‘ãÍ ‹Äº³nÃÕ¿I… ©ZsÑ’ªv‡Å_ƒRèŸ,\Ù¢«¯¦êšw—hÉWâ[ *üIå»ò© ?oê¡£æ¨n©F%\ûkäAÏ'_˜ä&'&{xó<ñÀ.6ºCÍÊÑœ·­o¢$Âf0Nàw6äÑ<¼ÉÊóö6dSae¼­Grâ] Ç+‘$BóòFX#›Þòo¤Ò¤ÂNœÀì*áŒXÙ{ŸT†åü7ü‚ûÄW‚¾P?ÉÌý~¦È§ævÊxœx°®…»LÃêqüN¤>?Ž%ß^ŸMåANËrH8YÃ"—êVÖòp‰O›‚ S;'‰ Âç°YÍãî=ežZ²b 篤Ùü£€½Œ®Á‰Qg-³QmuUNY„–œ*0CÚà¥?þ"ÓNŸ·#Lÿè悇iXƒ÷q]íw»ƒÒ¿!;_¾#ZL¢eh!JBéhÌG*Ⱦ¼rŽn}gÈ!ßáºziáç¡÷(•æxaæˆÛBÍÚW9Ú³CÌœŽ_îåþDñ8û'î#©_ÆâßU€ ÅUÂã™­š«¢ZÅFWˆiy-;½>–fqB?Éí°Ñè2Ž†µ¬{Ÿ›k$‘’•óŽàœôô|œ8bãv䈤OùeD°÷¢ÇÍÓ"ñ's¸÷Òð-Þ ãÓy2{—Ÿ ‘=Üôð#œØp”{’R=ž×z\ØËKDºÿ9%îA—–¡Ù0='ò’„æ‰6 æ $X*>s Ò¨5*A [7l@ W¡Dœù¥ñ[ +A¯QqŽB /iâ&,Â,õäÚۧб˜Tò\¡ó4¼üáÇ×?¢W,Ôs¯ d +I`K\(·åÌ­-£U±Fmjã3gúP¤ðé-u ·Ù=ûöSEÎ +“lØ×é }'Ún8†ÛÇÖTLô_ý½f"ë&šC!çÿ€ùÚÿÍ¡¬ÿç{Œ§è#uœõ-Í6®é´‘jêi%oô^ QÜPë]9h!õäÊy_8¤ü¹~òÎýNFĹ«•÷ðÀÃòh7ÿ%ï‹&Aó˜yŒ íB¤ª¯ëÏsTù»Íþ—ꃕ]>EÉ@ó¹!ÍÅ‘Kã@ô£YÕÊéã:"d\À‹fì©k¡\®ö–ýŠ_v,%3ó7­ÙvzÏÁ½ôPÍÀþÏëÛv­WÑuÁýƒ–·4%úí¹µÛû©]×<ƒŠ.ÃÛI¶qÎ&šÈƉv¬™s„C^o´—]Á`¸7Röuµ'ß³Ý$¿¼v÷ÏbKÃõB'/6CšT˜z¢Xw½ÅSOZÌ^ŸE”ìpçúF½Óá²S(}†ž‡i™£Ÿó4ƒg¹Câd¤vÊjKãÁWBÎ==4MÈÚB>g7Ùã õ„Dê…¬Á룾^ïÓÿ™”“½ ²ÙÄ]ᯠyÜdãúéÖn”{ß#HyjøWçz" ÖèaImlòúÜ=Vó¶c¯ÓA­^¼Ô²}¹`@s¨'|Ø+ba:e½×W#bù «C‚ +mE8Òʈ#&Þª|·‚Å}ü÷8yú¢ÛÓ#NVƒÏÞ= 9Ôé‹R§ÎýòôÌF/?pù]ÓÕdvÇU-;6âqŸ¢U±kÆ™õ{½^Ÿ÷€/8V*ùÐÀ‘ˆßïü~åœ3öØ… endstream endobj 2640 0 obj -<< /Type /FontDescriptor /FontName /QXPJAX+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 2642 0 R /CIDSet 2641 0 R >> +<< /Type /FontDescriptor /FontName /APETMS+LMRomanCaps10-Regular /Flags 4 /FontBBox [ -496 -290 1501 1100 ] /Ascent 1100 /CapHeight 683 /Descent -290 /ItalicAngle 0 /StemV 106 /XHeight 514 /FontFile3 2642 0 R /CIDSet 2641 0 R >> endobj 2643 0 obj -<< /Filter /FlateDecode /Length 419 >> +<< /Filter /FlateDecode /Length 427 >> stream -xÚ’Ñkê0ÆßóWœ=î¡kZŽ!…­NèØœWåâkMŽÞ€MJÚ>øß/ɱŒ!·ÐÒ_ÏwN¾|éàfµ‰ž¤Ùc4ºã°ÆÆtV`”¿—5 æFtêv‰(QöÕæVÖˆ ¶0Ì‹y¡U{ëÄ…§Nb¯ú]ôŒG¥¿%~nqýÙ­^ŸvÑÛûÚT¥Î˺Ix´Æcw*mÄ}ëVµ'×òjp¸&0ð/ÚFýÉçÜ}xÑ27•ßpÃâ‹iˆûm”–öâö~,IA*Ñ^(¡7œeH<¸ù.·eY!Ä>BºªjÏWcùnÜžk„4pBÖ…‘ØÔ¥@[ê#²™‹ƒg0[¸+c¨å:§®ýÐ ú×$éKâ_iý täq>I³@ ¢q QJtO4%š=Mˆr¢9ÑK û„hA44å&œˆVŸ^jyýöü™}E*:k]žá`C^>)¥ñëìkSû®p‡Ÿ¦ÿŸ=},Ø'Ú­L +xÚ’]k£@†ïýg/é…uÔ4–„Ö$ lÚò·fæ$;gdÔ‹üû™£-”%¬ øxÞóõ:³û*|ú„aúÈà€ Ç°ØÕm0›­5Tý;¢@1E»ØÍ+ìa^”ëRÉþÁŠKůƒÀIõoÑ^¤ú’¸>0?âïðu¿9îªðçî ›ZuÛÅ,<àe¸Ö&d.õ(û«Mù5X Ü“€/ø M'µzø‘1f?l”(tãî‚h¢i³TÂŒ“ÃÉíÄ Éû‘ü“7Ö9—\ݺ›Ru°ZAd;Ë®77?ÿC}Fª Ìï j…ÕжWtC òžm}ëÛ{Ý DÎRبìowmùJ<ÞZ„ÄsL£s-°kkŽ¦V VÖ–Ãjk¯<@%¾Åe΄V0½Æéâjã +%©-ÄØ2É=m‰žÒ„è‰(#Z½ežÏDÑšhãé)&Ú-~~·ºûŸŸvóÁëµÿéÞKç¢Tøy.Zݺ,û5uGÛà/+ÏV endstream endobj 294 0 obj -<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /QXPJAX+LMRomanCaps10-Regular /DescendantFonts [ 2644 0 R ] /ToUnicode 2643 0 R >> +<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /APETMS+LMRomanCaps10-Regular /DescendantFonts [ 2644 0 R ] /ToUnicode 2643 0 R >> endobj 2644 0 obj -<< /Type /Font /Subtype /CIDFontType0 /BaseFont /QXPJAX+LMRomanCaps10-Regular /FontDescriptor 2640 0 R /W 2639 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> +<< /Type /Font /Subtype /CIDFontType0 /BaseFont /APETMS+LMRomanCaps10-Regular /FontDescriptor 2640 0 R /W 2639 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> endobj 2645 0 obj [ 28 [ 500 ] 50 [ 444 ] 52 [ 778 ] 70 [ 528 ] 72 [ 278 ] 109 [ 556 ] 112 [ 528 ] 118 [ 528 ] ] @@ -9725,50 +9750,48 @@ endobj << /Type /Font /Subtype /CIDFontType0 /BaseFont /CKBVSC+LMMono12-Regular /FontDescriptor 2762 0 R /W 2761 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> endobj 2767 0 obj -[ 27 [ 734 490 ] 45 [ 272 ] 54 [ 639 ] 57 [ 490 ] 59 [ 490 ] 66 [ 272 ] 72 [ 272 ] 77 [ 544 ] 83 [ 666 544 ] 88 [ 272 ] 96 [ 381 ] 105 [ 381 490 490 ] 118 [ 517 ] 121 [ 490 ] ] +[ 27 [ 734 490 ] 45 [ 272 ] 54 [ 639 ] 59 [ 490 ] 66 [ 272 ] 72 [ 272 ] 77 [ 544 ] 82 [ 490 666 544 ] 88 [ 272 ] 96 [ 381 ] 105 [ 381 490 490 ] 118 [ 517 ] 121 [ 490 ] ] endobj 2769 0 obj << /Filter /FlateDecode /Length 24 >> stream -xÚc````a -Ph‘hh(`r˜Ý +xÚc````aPh±hh(`r½ endstream endobj 2770 0 obj -<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2381 >> +<< /Subtype /CIDFontType0C /Filter /FlateDecode /Length 2379 >> stream -xÚ}V TåŸe™JÜlÇ­œÑ™±£ÞÔxøÎìŠ.%…ˆ‰˜D¾@–‡À,ìŒMVp|¬,"ÊsÙeawS{˜xÕŒJ"µ4ñRz,¤‹Ouï76œÛÅs¼÷œÛ½sæ|3ç›ïûý¿ßoÎ'ABC‰D2åÕÕªuªsÖ$iòÓØyó#’ÔY†¼4mðã*~:ÿ4§ø©?MÂS!<-å™P!6\ú^xèØóÂᩨö7† ’ÆÇ‚ã§CyøÓâÛ£O†ÏNœ Ÿ‰„… d -B!w‘J0ÉD‰BBü¯°ó#££Æj -Šµ9YÙzf~tô‚gƒãRFÉħmÏÕ˜t¹9L›ÁÄG2k"™DIœÍažÑ°Lº:;-/“Ñd2ÉêÆ SkuL–Vc(ÐÍŽd’³stŒI£ÍeħV§NÓ©3›¡Ö2úl5·a}2³JÃꙄœíjV§f""F§V3Ùz}ÁóQQzCV¤F›•)®ÑEå=X¤‹ -î‹Xµ619"á•Ø—׿©/Ò3™-“¡Ö§åäé"ÿ«È‡‰m~ZÞÊ Mºú• 5«ÏÑ#âE"S‘d1²Y†¨—‘5Èz$IA¶!9È$1"ÅR±¥â…#x°¹¡H©$L’ 92)äwiª´!tZh%úº=„ò2¦ÀÞ›)ü.ÜÆñ)&Éý¤'8,¾7Ó{_†´9ªÍ¤ÙaÓJ ê±ÍéšÂÕSXìoN4p8ÚiK«ÔzD5pºê¨p - -]²…y¨kp؉ü ¥XÌÙ:dà2p´Ò€ J¡DÃà·¨Üʽe„{Ým׿6)Þþ¦ zñž½­† +ŒpèƶHáF›ò¼±;ƒ-2¸  ö¹ª©½{§ÙJ¬.\»u3e³W8l„Õeuíü -b”Ü&öñTð–À©ßÀd/œá|“á·( ¡ó³-²Ë{-™ôX;–i·ÄR&VæôÝä‘[ÀÁÑ\>¶Ðqð( ·°‘ÚKh/l4È–XvDP `­ì°sß{|\gp¯ Óëi¹âxIO~.åÓá2%7‹s—¹Ìv•QÂÙ±,”…ÑX¦Ã¢÷€‡¯ƒy¯áç(›Íì¹%fª5?»NMÎ{9nyÒ‘ÌÚÝ4þcé®’b6ƒXwD[c¥6¿µ9k#±j$ >'ütæj[ùÇkQí)¯ƒEdb9pÓ–ÚÝnÑTÝT[Oå}Ðß_¸xÍ_Ö•ÛI÷t\d• 8ªh|Ñ -‹Íj)%̵»kš]^JX.„(‹AúΊ-Ê·Éà^k38Þä§9wG­‡ÄûKoYz"c*_Ù5WÕûQ³»«ª÷î_7 -Ò"í€ãÃ8¶b£Š[£1ýxÜô€ÍÕMó¡þ‘0µe±ÏöïI¥…6lK)ˆêY?G获iü©õü=e‡Î­Ó …^C{‡Ûç£Æ¡ï£"´Júñc°R„]½ ¼OßG0ü’@a/Ö”§ÒcžÃöŠjè8ZþŒÈïa®€Ûð+|³ˆñºtTÐ0»úNª›ÝTCÎQ?g*£+~–á£G|‘ÛÏŠÄsgXv< ˜ˆýzéÜùóõ)‰”°ëÊ[ÅÞñÁQÐÓ†NÜKîHyÈ[•£sn $%|ÿPÐÿôu±3×Ã÷PaÐ -ÿŒÁGþ1tŽ|" 2a %аí¤Gdp1ÐmbÅÂkŒjáI®Ô«øe6â“xÌSB<â® Y°)Áf§.`b‰ãÍû¢º|+=¶ãÿ•¨Â´ÍÇ3>#!vo*é˜'„ q —ç±un¥o-i 0]4LåF -Ÿü~G¯»‹¼úI´:.ŒQÉw£R˜Ð«ôë=ZÖ¤×æ·µú½ž%ÄÎ\èi’óK¿m¨sŸ ÿÎãÊŽ‚À¶ÅlTѪJe8'DFàC‘fÿ—ã.Äðr“ W9ˆÎŸ‡ö _«q‚Š*ªÌöæž‚m-mli©ócZ¼<ÁÁ“âçƒNõâ¿Â!8Iù‘!‹eÓ2âÀ& -†Ó9aº(<Û «ˆÈšm3aø•›Â!™ ýJ¦ÿðùË”Üè¿}7Õ—ùàÄa0¬ó).ÇÝé>uG>Æ(Xyynõ]Û¹+%†–öÍùÓÊD…“+¶*kðø::uõ†=Pa§.vˆV=k¥"IW”7¬ßd R7Òc½©äºÙç2iM‚e€sö©Ž¾HÅt_Ò&¿;uº£^uÞí#b*_1¥¢ãCŠŠ²ÉÜøf()¢K?ƒ_×ÁWSšþrè]²«O¿ÈM×%âyðÔ7‰'Ãg‰g7dYð7Waôð± PS[ã‘QñÉyQá€ð ܣܕNWeeuU¥³§!<Üë¯wV»ö:UÕUáù·&ßRù/_›ì +xÚ}V PGžeÙq“ì¸&Θ™1e¼¨áá;&9Qˆ’’1AÎÈòeö "+¸š•EDyí²Ø„¨€yñ|…D‘(‰F<- SV’»3ÔÝÍjUrU—»®©ž©žþ¿þûû¾¿«EHh("‰f$&Æ¿¶!~~ÒÚuA³`aDŠ2G¯ÊЮáfqOp’›‰pOŠ82„£ÄÊÇ…‹ß|žïš)ÑüÊKžDQó#ÁþÜcPþ”ðõ0>;8p*üi$,!3¹ƒüS„Š¦Šä"ü-»02:zqœº°D“—“«£FG/z6Ø/§c#é„Œmùj£6?Î`²è„Hzm$¬6 +£yô3j†ÎTæf¨²iu6ªL£õZ¥FKçhÔúBíÜH:57OKÕš|Zxk”*e†V™Eë™,¥†Öå*éøõëRé5jFG'åmS2Z%AÓZ¥’ÎÕé +ŸŠÒés"Õšœ¨laŽ6Jõ`’6*±æÕäÔˆ¤WâV'¯[©+ÖÑÙj ¥Ôeä©´‘ÿµÉß’Õš‚ Õª,u¦ò•,%£ËÓ• B#™H²y‰E^FÖ")È:$IC¶"yÈv$1 %bR¡a$7)…‰’DÇCŠ%âÕâs¡SCK%a’9’&ɘԆ Î0ÿ/Ù(`áV–K3Šî¥LgÑ„p´Œâ™{RÉ‹­¶Œ(³Yß2S¼ròû²LuQbÕ ýÁ. ¶vŠE3ª5î^ ìŽòœ!é~ıجxAÐ j÷Ž€¸ l^Š°IÁ—JaüZ"3³oàWÛõ/òw>‡™ƒÃ¬•cn+Îêס)ÚŠ2%8ÕDÂ8ô4èÝÒCvænnÜB,OZŸÀ¸Ê¼¾–ßÑPJ½ë=îì%Ž}¬\@mCùMÖ˜e+plå‹ßiÎ}úAïq‰6ÖÌyp÷7~IñËN*æÆnßšžyø8|®8pØNÊ&Q~¥®ŸÁ¸V1|Ó¢8oèÉbŠõE….}GÓþ½ŽZrÏ;À^fÆ‹^ݲ‰´X«lÜì0;ö QRfx<|DpæW0Õg{¦Ýäƹ͊"¨•Lú™Véå=¦lj²ͶšâH##µûnƒâÐ-`c)¶]l;p˜‚ö[èxýöe”6ë¥ËLÛ#ÈE°^Úeßû> “ÂÙìü¬FJÆg¸áú3_»¡Ý-÷÷•Á¸!ÐgêËéæ­äÔÜ<…³,ûfV~ié-ÈmP ^Ž_‘r(»~…}_¾³´„ÉÂ_?¤©3“›ÞÞ”ó&¾f<>§üxêj[åǯ$ÛÓ6€%Dr%p•P¦ú].7ÞRÛRßHª>ìû‰o/^ºæ¯èÎï¤z{>¢Æl5¶d¥Éb6•ãeõ;›ëœɯàC% sG!ɘ Ä"p×ëG[üëê¨wØ@ù-0GGAdòaÅk1£æÇö}Tgïén'=ûÀgÄ (‹)A!Àra,Ó Ñ ù­‰˜¬ îÚÕâ衸PûˆŸY.aÐ ûv§S|º¹$­'ø”%ö÷Û;öÄ:CëÒª úÂ"¾½Ãåó‘÷¡ïIh9 `G`µ›¸|@ÝCPlˆ§‚°—ê*Ó©I÷ï°}‚p'€-@Éž„ïbî ƒpÛ v…s +4 £Š‚Ièè:Éfcm1Oùœ±‚ªúIŠM2ïû ¹ý´P+ìéÕu? ˜Œþ2töüùÆ´d’ßùGe7½ì£ª‡Ä\ätV….² +^âΡ^Pm$ µ²g ê=ÚÏP“N4Ǻs© èŸ]D×Àæ§d^aïúà `à'GŽÁecbrfÅļ[ªøHŸŠÆ1Yñ`¬…„]pËÏ<†åê¥U9ó£­aF»r“?(åÅ_èN t¿LÊ þÛwÒýðœ: +Fµ>ù¥Ñø±ŽÑc˜áRaŒâ»U—ç·ß´½ò7|dyÿ¼?­JŽ%1b嶃Mn_SG§¶Q¿Ûª¬ä¥îq¡Þ»Kç[×1[©‚-yÖª0lÈ]`•ì¨²TíÂMà$Iov¯žÏ?Ÿ›þ—åÞO +£‘N3ë<Œc§ÊYC«Z[T¦\x;ŠIŒ¦á”[£w‡VÞ7~íßv«ä’à‹ +½Ôº£"ÕôVØ®ÊP@ðk¥~ï¹ í¾0ìWø,¤Ïžü‡hô5>Œ‹fIÚû`»½©3PìRïz´ëô±AâæÉ—¢–¦¯JI¤øͼA¢åD¨Œ—ó‰†îaîõa†•»®‚«pïULΙ¹9 +µ1e ŸxÞ.ˆzĶOW‚ï²™-&òiÞ!ÁfóbØ&ÙÝöKm?ZI! (¨‰yÁ€þ:³ª‚s'C¶Ì6KÅŒ‚…ÊÍ„ªØ (p¨æî+n(!±¦£<’}êìѾv +®âVH.ú?¬v2`¸k†uÃbA¤+Šæ¯r†É™qžtâõ—˜ç²)u’i-àóöÆ~‰ŒéÒž$¾9q²Ÿ¥_µßéÇc(^1å±RœTœKä'8¡¨˜*ÿ †__4L^lùëÁ÷ˆî~ÝÕ^ŒÇeÁ[Þ£>G¸«!/ïm„Üàæâš º¾Î-%RUQáð)ìÃS\ÕvGuumMµ½·)<Üão´×:öØí5µ5áS¹·§Ý{\ñoŠA’Z endstream endobj 2768 0 obj -<< /Type /FontDescriptor /FontName /PKBQBW+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 2770 0 R /CIDSet 2769 0 R >> +<< /Type /FontDescriptor /FontName /KKGPYG+LMRoman12-Regular /Flags 4 /FontBBox [ -422 -280 1394 1127 ] /Ascent 1127 /CapHeight 683 /Descent -280 /ItalicAngle 0 /StemV 91 /XHeight 431 /FontFile3 2770 0 R /CIDSet 2769 0 R >> endobj 2771 0 obj -<< /Filter /FlateDecode /Length 454 >> +<< /Filter /FlateDecode /Length 452 >> stream -xÚ…“Mo£0†ïþÞC¤ô@1…¶ŠÒJ¨Û6›D»½{’Z -62pÈ¿¯íVZm´‘ˆx˜wf^ÆÃìÇz<½‡ ¹ft ‡ |©[2›­4Pý+€1E»{º6šo¡§ó²ZUJöWV\)~Lª‹–p”ê[âúÐùÞƒõóò×òOðóe£›ZEq°ãpªMÀ\ÚNö'+ÿ’Ú0½¦¾Ðo0ÔêžF׌1ûàQ‰R7î%;ŽFi8Y?H%Ìè–îwÅTHÞäÿyc§å’·ç®‡¦RM ÚβëÍÙû¾"á›`¤:Òù%“V´ÚöÎe¤(¨€ƒ­mçôZ7@C7JبìÏGñ´;·@cÏZæZ@×ÖL­Ž@v ¬ ‹'û+(ñWœaÖþ€hÓmt;…øGm\¡hi 1–F…§ÒS†¯<Å¥§$Ce†tç)I‘°J–{Jc¤;¤[$¬’bÍìÑÓMâé†!¥žò‘0/FeÆ0#a÷»gè%AB/ *st£—|tÍ -œŠŸ‚ Û†¯ãƒ1ö´üÊøqg!|mU«[—å/¿ŽÓ×áèí‰|æð` +xÚ…“Kkë0…÷úê".\ËØm †Öi‹é+$¡ô.i’+ˆ%#Û‹üûJš¸…rà 8øóœ3:É“‹å:¸z ArÅè +:=AùZ·d2Yh>4 ú7b¬v·ti4_CO§eµ¨”ì/­¸Rü0UÿÝÃ^ª‰[‡N7ðv=4•Úi2ŸÓЮ,»Þ}îK¾Fª=ž iEë¡màQFŠ‚ +ØÙÞvNou4t¨„­Êþxv?¦Í±{Ž02׺¶æ`jµ2·c`?Ú_A@‰_u†®íÑ +ÆÛèz,ñ¿µq¢{Ûˆ±4*<•ž2¤xá).=%*3$ôe¹§4FºAºFB_Š]²O3T&¸Â,ñ4cH©§üDØ%F_Æ°#Ý ¥HwØ3AÂd *sLc²} +p*~ +n€î4|oŒ±»åŒß·RÁ÷©juë\þòÇqü:½?’/0«v endstream endobj 236 0 obj -<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /PKBQBW+LMRoman12-Regular /DescendantFonts [ 2772 0 R ] /ToUnicode 2771 0 R >> +<< /Type /Font /Subtype /Type0 /Encoding /Identity-H /BaseFont /KKGPYG+LMRoman12-Regular /DescendantFonts [ 2772 0 R ] /ToUnicode 2771 0 R >> endobj 2772 0 obj -<< /Type /Font /Subtype /CIDFontType0 /BaseFont /PKBQBW+LMRoman12-Regular /FontDescriptor 2768 0 R /W 2767 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> +<< /Type /Font /Subtype /CIDFontType0 /BaseFont /KKGPYG+LMRoman12-Regular /FontDescriptor 2768 0 R /W 2767 0 R /CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >> >> endobj 2773 0 obj [500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1000 ] @@ -10159,7 +10182,7 @@ endobj << /Type /Pages /Parent 2800 0 R /Count 10 /Kids [ 1936 0 R 1985 0 R 2020 0 R 2066 0 R 2124 0 R 2184 0 R 2248 0 R 2295 0 R 2348 0 R 2400 0 R ] >> endobj 2486 0 obj -<< /Type /Pages /Parent 2800 0 R /Count 4 /Kids [ 2438 0 R 2488 0 R 2540 0 R 2598 0 R ] >> +<< /Type /Pages /Parent 2800 0 R /Count 4 /Kids [ 2438 0 R 2488 0 R 2532 0 R 2598 0 R ] >> endobj 2800 0 obj << /Type /Pages /Count 64 /Kids [ 261 0 R 356 0 R 477 0 R 968 0 R 1515 0 R 1983 0 R 2486 0 R ] >> @@ -10516,10 +10539,10 @@ endobj << /Names [ (page.12) 361 0 R (page.13) 369 0 R (page.14) 374 0 R (page.15) 382 0 R (page.16) 397 0 R (page.17) 408 0 R (page.18) 415 0 R (page.19) 419 0 R (page.2) 269 0 R (page.20) 427 0 R (page.21) 436 0 R (page.22) 481 0 R (page.23) 537 0 R (page.24) 569 0 R (page.25) 601 0 R (page.26) 638 0 R (page.27) 691 0 R (page.28) 746 0 R (page.29) 803 0 R (page.3) 279 0 R (page.30) 857 0 R (page.31) 920 0 R (page.32) 972 0 R (page.33) 1031 0 R (page.34) 1092 0 R (page.35) 1149 0 R (page.36) 1205 0 R (page.37) 1252 0 R (page.38) 1316 0 R (page.39) 1375 0 R (page.4) 293 0 R (page.40) 1414 0 R ] /Limits [ (page.12) (page.40) ] >> endobj 2863 0 obj -<< /Names [ (page.41) 1472 0 R (page.42) 1520 0 R (page.43) 1549 0 R (page.44) 1579 0 R (page.45) 1627 0 R (page.46) 1676 0 R (page.47) 1708 0 R (page.48) 1765 0 R (page.49) 1829 0 R (page.5) 307 0 R (page.50) 1873 0 R (page.51) 1938 0 R (page.52) 1987 0 R (page.53) 2022 0 R (page.54) 2068 0 R (page.55) 2126 0 R (page.56) 2186 0 R (page.57) 2250 0 R (page.58) 2297 0 R (page.59) 2350 0 R (page.6) 318 0 R (page.60) 2402 0 R (page.61) 2440 0 R (page.62) 2490 0 R (page.63) 2542 0 R (page.64) 2600 0 R (page.7) 323 0 R (page.8) 332 0 R (page.9) 338 0 R (section*.10) 2033 0 R (section*.11) 2035 0 R (section*.12) 2145 0 R ] /Limits [ (page.41) (section*.12) ] >> +<< /Names [ (page.41) 1472 0 R (page.42) 1520 0 R (page.43) 1549 0 R (page.44) 1579 0 R (page.45) 1627 0 R (page.46) 1676 0 R (page.47) 1708 0 R (page.48) 1765 0 R (page.49) 1829 0 R (page.5) 307 0 R (page.50) 1873 0 R (page.51) 1938 0 R (page.52) 1987 0 R (page.53) 2022 0 R (page.54) 2068 0 R (page.55) 2126 0 R (page.56) 2186 0 R (page.57) 2250 0 R (page.58) 2297 0 R (page.59) 2350 0 R (page.6) 318 0 R (page.60) 2402 0 R (page.61) 2440 0 R (page.62) 2490 0 R (page.63) 2534 0 R (page.64) 2600 0 R (page.7) 323 0 R (page.8) 332 0 R (page.9) 338 0 R (section*.10) 2033 0 R (section*.11) 2035 0 R (section*.12) 2145 0 R ] /Limits [ (page.41) (section*.12) ] >> endobj 2864 0 obj -<< /Names [ (section*.13) 2148 0 R (section*.14) 2217 0 R (section*.15) 2279 0 R (section*.16) 2298 0 R (section*.17) 2305 0 R (section*.18) 2307 0 R (section*.19) 2526 0 R (section*.2) 1555 0 R (section*.20) 2527 0 R (section*.21) 2528 0 R (section*.22) 2543 0 R (section*.23) 2544 0 R (section*.24) 2545 0 R (section*.25) 2546 0 R (section*.26) 2547 0 R (section*.27) 2548 0 R (section*.28) 2549 0 R (section*.29) 2550 0 R (section*.3) 1684 0 R (section*.30) 2551 0 R (section*.4) 1750 0 R (section*.5) 1859 0 R (section*.6) 1889 0 R (section*.7) 1957 0 R (section*.8) 1972 0 R (section*.9) 2023 0 R (section.0.1) 5 0 R (section.0.2) 9 0 R (section.0.3) 25 0 R (section.0.4) 41 0 R (section.0.5) 101 0 R (section.0.6) 125 0 R ] /Limits [ (section*.13) (section.0.6) ] >> +<< /Names [ (section*.13) 2148 0 R (section*.14) 2217 0 R (section*.15) 2279 0 R (section*.16) 2298 0 R (section*.17) 2305 0 R (section*.18) 2307 0 R (section*.19) 2526 0 R (section*.2) 1555 0 R (section*.20) 2527 0 R (section*.21) 2535 0 R (section*.22) 2536 0 R (section*.23) 2537 0 R (section*.24) 2538 0 R (section*.25) 2539 0 R (section*.26) 2540 0 R (section*.27) 2541 0 R (section*.28) 2542 0 R (section*.29) 2543 0 R (section*.3) 1684 0 R (section*.30) 2544 0 R (section*.4) 1750 0 R (section*.5) 1859 0 R (section*.6) 1889 0 R (section*.7) 1957 0 R (section*.8) 1972 0 R (section*.9) 2023 0 R (section.0.1) 5 0 R (section.0.2) 9 0 R (section.0.3) 25 0 R (section.0.4) 41 0 R (section.0.5) 101 0 R (section.0.6) 125 0 R ] /Limits [ (section*.13) (section.0.6) ] >> endobj 2865 0 obj << /Names [ (section.0.7) 217 0 R (subsection.0.2.1) 13 0 R (subsection.0.2.2) 17 0 R (subsection.0.2.3) 21 0 R (subsection.0.3.1) 29 0 R (subsection.0.3.2) 33 0 R (subsection.0.3.3) 37 0 R (subsection.0.4.1) 45 0 R (subsection.0.4.2) 49 0 R (subsection.0.4.3) 65 0 R (subsection.0.4.4) 81 0 R (subsection.0.4.5) 93 0 R (subsection.0.4.6) 97 0 R (subsection.0.5.1) 105 0 R (subsection.0.5.2) 109 0 R (subsection.0.5.3) 113 0 R (subsection.0.5.4) 117 0 R (subsection.0.5.5) 121 0 R (subsection.0.6.1) 129 0 R (subsection.0.6.2) 133 0 R (subsection.0.6.3) 185 0 R (subsubsection.0.4.2.1) 53 0 R (subsubsection.0.4.2.2) 57 0 R (subsubsection.0.4.2.3) 61 0 R (subsubsection.0.4.3.1) 69 0 R (subsubsection.0.4.3.2) 73 0 R (subsubsection.0.4.3.3) 77 0 R (subsubsection.0.4.4.1) 85 0 R (subsubsection.0.4.4.2) 89 0 R (subsubsection.0.6.2.1) 137 0 R (subsubsection.0.6.2.10) 173 0 R (subsubsection.0.6.2.11) 177 0 R ] /Limits [ (section.0.7) (subsubsection.0.6.2.11) ] >> @@ -10546,2886 +10569,2886 @@ endobj << /Type /Catalog /Pages 2800 0 R /Outlines 2801 0 R /Names 2871 0 R /PageMode/UseOutlines /OpenAction 224 0 R >> endobj 2873 0 obj -<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y\000\040\000,\000\040\000f\000p\000a\000n\000t\000i\000g\000n\000y\000@\000w\000a\000n\000a\000d\000o\000o\000.\000f\000r)/Title(\376\377\000T\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000p\000i\000t\000o\000n)/Subject()/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.16.0) /CreationDate (D:20230404180353+02'00') /ModDate (D:20230404180353+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.16.0 (MiKTeX 23.1)) >> +<< /Author(\376\377\000F\000.\000\040\000P\000a\000n\000t\000i\000g\000n\000y\000\040\000,\000\040\000f\000p\000a\000n\000t\000i\000g\000n\000y\000@\000w\000a\000n\000a\000d\000o\000o\000.\000f\000r)/Title(\376\377\000T\000h\000e\000\040\000p\000a\000c\000k\000a\000g\000e\000\040\000p\000i\000t\000o\000n)/Subject()/Creator(LaTeX with hyperref)/Keywords() /Producer (LuaTeX-1.16.0) /CreationDate (D:20230411101223+02'00') /ModDate (D:20230411101223+02'00') /Trapped /False /PTEX.FullBanner (This is LuaHBTeX, Version 1.16.0 (MiKTeX 23.1)) >> endobj xref 0 2874 0000000000 65535 f -0000364030 00000 n -0000364075 00000 n -0000364095 00000 n +0000364110 00000 n +0000364155 00000 n +0000364175 00000 n 0000000020 00000 n -0000018143 00000 n -0000601390 00000 n +0000018148 00000 n +0000601788 00000 n 0000000067 00000 n 0000000167 00000 n -0000023116 00000 n -0000601266 00000 n +0000023121 00000 n +0000601664 00000 n 0000000214 00000 n 0000000354 00000 n -0000023176 00000 n -0000601192 00000 n +0000023181 00000 n +0000601590 00000 n 0000000407 00000 n 0000000559 00000 n -0000023237 00000 n -0000601105 00000 n +0000023242 00000 n +0000601503 00000 n 0000000612 00000 n 0000000828 00000 n -0000023298 00000 n -0000601031 00000 n +0000023303 00000 n +0000601429 00000 n 0000000881 00000 n 0000001110 00000 n -0000028535 00000 n -0000600905 00000 n +0000028540 00000 n +0000601303 00000 n 0000001158 00000 n 0000001264 00000 n -0000028596 00000 n -0000600831 00000 n +0000028601 00000 n +0000601229 00000 n 0000001317 00000 n 0000001502 00000 n -0000040513 00000 n -0000600744 00000 n +0000040509 00000 n +0000601142 00000 n 0000001555 00000 n 0000001659 00000 n -0000044757 00000 n -0000600670 00000 n +0000044753 00000 n +0000601068 00000 n 0000001712 00000 n 0000001912 00000 n -0000044818 00000 n -0000600543 00000 n +0000044814 00000 n +0000600941 00000 n 0000001960 00000 n 0000002089 00000 n -0000044879 00000 n -0000600469 00000 n +0000044875 00000 n +0000600867 00000 n 0000002142 00000 n 0000002344 00000 n -0000052163 00000 n -0000600345 00000 n +0000052159 00000 n +0000600743 00000 n 0000002397 00000 n 0000002605 00000 n -0000052224 00000 n -0000600271 00000 n +0000052220 00000 n +0000600669 00000 n 0000002663 00000 n 0000002840 00000 n -0000052285 00000 n -0000600184 00000 n +0000052281 00000 n +0000600582 00000 n 0000002898 00000 n 0000003090 00000 n -0000055602 00000 n -0000600110 00000 n +0000055598 00000 n +0000600508 00000 n 0000003148 00000 n 0000003370 00000 n -0000060473 00000 n -0000599986 00000 n +0000060423 00000 n +0000600384 00000 n 0000003423 00000 n 0000003631 00000 n -0000060533 00000 n -0000599912 00000 n +0000060483 00000 n +0000600310 00000 n 0000003689 00000 n 0000004011 00000 n -0000060594 00000 n -0000599825 00000 n +0000060544 00000 n +0000600223 00000 n 0000004069 00000 n 0000004445 00000 n -0000064103 00000 n -0000599751 00000 n +0000063970 00000 n +0000600149 00000 n 0000004503 00000 n 0000004899 00000 n -0000068061 00000 n -0000599627 00000 n +0000068114 00000 n +0000600025 00000 n 0000004952 00000 n 0000005150 00000 n -0000068122 00000 n -0000599553 00000 n +0000068174 00000 n +0000599951 00000 n 0000005208 00000 n 0000005327 00000 n -0000068183 00000 n -0000599479 00000 n +0000068235 00000 n +0000599877 00000 n 0000005385 00000 n 0000005504 00000 n -0000073600 00000 n -0000599392 00000 n +0000073651 00000 n +0000599790 00000 n 0000005557 00000 n 0000005813 00000 n -0000073661 00000 n -0000599318 00000 n +0000073712 00000 n +0000599716 00000 n 0000005866 00000 n 0000005972 00000 n -0000073722 00000 n -0000599186 00000 n +0000073773 00000 n +0000599584 00000 n 0000006021 00000 n 0000006103 00000 n -0000073784 00000 n -0000599107 00000 n +0000073835 00000 n +0000599505 00000 n 0000006157 00000 n 0000006282 00000 n -0000077358 00000 n -0000599014 00000 n +0000077409 00000 n +0000599412 00000 n 0000006336 00000 n 0000006560 00000 n -0000081980 00000 n -0000598921 00000 n +0000082031 00000 n +0000599319 00000 n 0000006614 00000 n 0000006780 00000 n -0000087539 00000 n -0000598828 00000 n +0000087590 00000 n +0000599226 00000 n 0000006834 00000 n 0000007074 00000 n -0000090703 00000 n -0000598749 00000 n +0000090754 00000 n +0000599147 00000 n 0000007128 00000 n 0000007271 00000 n -0000098882 00000 n -0000598616 00000 n +0000098933 00000 n +0000599014 00000 n 0000007320 00000 n 0000007432 00000 n -0000098944 00000 n -0000598537 00000 n +0000098995 00000 n +0000598935 00000 n 0000007486 00000 n 0000007598 00000 n -0000102408 00000 n -0000598404 00000 n +0000102459 00000 n +0000598802 00000 n 0000007652 00000 n 0000007884 00000 n -0000102470 00000 n -0000598325 00000 n +0000102521 00000 n +0000598723 00000 n 0000007943 00000 n 0000008144 00000 n -0000115339 00000 n -0000598232 00000 n +0000115390 00000 n +0000598630 00000 n 0000008203 00000 n 0000008454 00000 n -0000133659 00000 n -0000598139 00000 n +0000133774 00000 n +0000598537 00000 n 0000008513 00000 n 0000008725 00000 n -0000148322 00000 n -0000598046 00000 n +0000148437 00000 n +0000598444 00000 n 0000008784 00000 n 0000008906 00000 n -0000157517 00000 n -0000597953 00000 n +0000157632 00000 n +0000598351 00000 n 0000008965 00000 n 0000009159 00000 n -0000158207 00000 n -0000597860 00000 n +0000158322 00000 n +0000598258 00000 n 0000009218 00000 n 0000009481 00000 n -0000160030 00000 n -0000597767 00000 n +0000160145 00000 n +0000598165 00000 n 0000009540 00000 n 0000009891 00000 n -0000191128 00000 n -0000597674 00000 n +0000191246 00000 n +0000598072 00000 n 0000009950 00000 n 0000010065 00000 n -0000202091 00000 n -0000597581 00000 n +0000202209 00000 n +0000597979 00000 n 0000010124 00000 n 0000010277 00000 n -0000207360 00000 n -0000597488 00000 n +0000207478 00000 n +0000597886 00000 n 0000010337 00000 n 0000010555 00000 n -0000212542 00000 n -0000597395 00000 n +0000212660 00000 n +0000597793 00000 n 0000010615 00000 n 0000010722 00000 n -0000213253 00000 n -0000597316 00000 n +0000213371 00000 n +0000597714 00000 n 0000010782 00000 n 0000011029 00000 n -0000219657 00000 n -0000597198 00000 n +0000219775 00000 n +0000597596 00000 n 0000011083 00000 n 0000011320 00000 n -0000224117 00000 n -0000597119 00000 n +0000224235 00000 n +0000597517 00000 n 0000011379 00000 n 0000011628 00000 n -0000235678 00000 n -0000597026 00000 n +0000235796 00000 n +0000597424 00000 n 0000011687 00000 n 0000011830 00000 n -0000295559 00000 n -0000596933 00000 n +0000295677 00000 n +0000597331 00000 n 0000011889 00000 n 0000012027 00000 n -0000324153 00000 n -0000596840 00000 n +0000324271 00000 n +0000597238 00000 n 0000012086 00000 n 0000012244 00000 n -0000330524 00000 n -0000596747 00000 n +0000330642 00000 n +0000597145 00000 n 0000012303 00000 n 0000012709 00000 n -0000331171 00000 n -0000596654 00000 n +0000331289 00000 n +0000597052 00000 n 0000012768 00000 n 0000013078 00000 n -0000338022 00000 n -0000596575 00000 n +0000338140 00000 n +0000596973 00000 n 0000013137 00000 n 0000013354 00000 n -0000343313 00000 n -0000596481 00000 n +0000343079 00000 n +0000596879 00000 n 0000013403 00000 n 0000013480 00000 n -0000349192 00000 n -0000596401 00000 n +0000346999 00000 n +0000596799 00000 n 0000013524 00000 n 0000013593 00000 n -0000017138 00000 n -0000017328 00000 n -0000017639 00000 n -0000017484 00000 n -0000018329 00000 n +0000017143 00000 n +0000017333 00000 n +0000017644 00000 n +0000017489 00000 n +0000018334 00000 n 0000013657 00000 n -0000018019 00000 n -0000018081 00000 n -0000535373 00000 n -0000532481 00000 n -0000594443 00000 n -0000530277 00000 n -0000526345 00000 n -0000522999 00000 n -0000520367 00000 n -0000515204 00000 n -0000513091 00000 n -0000505799 00000 n -0000495134 00000 n -0000491571 00000 n -0000488468 00000 n -0000477876 00000 n -0000474281 00000 n -0000594801 00000 n -0000594083 00000 n -0000594264 00000 n -0000594977 00000 n -0000594623 00000 n -0000468405 00000 n -0000460397 00000 n -0000456162 00000 n -0000018203 00000 n -0000453052 00000 n -0000449634 00000 n -0000017831 00000 n -0000018266 00000 n -0000595151 00000 n -0000017275 00000 n -0000022576 00000 n -0000022737 00000 n -0000022898 00000 n -0000023421 00000 n -0000022394 00000 n -0000018765 00000 n -0000023054 00000 n -0000442056 00000 n -0000435436 00000 n -0000023358 00000 n -0000022531 00000 n -0000028162 00000 n -0000028318 00000 n -0000028781 00000 n -0000027988 00000 n -0000023662 00000 n -0000028473 00000 n -0000427024 00000 n -0000028657 00000 n -0000028719 00000 n -0000028125 00000 n -0000033149 00000 n -0000033310 00000 n -0000033470 00000 n -0000033625 00000 n -0000033781 00000 n -0000033947 00000 n -0000034301 00000 n -0000032943 00000 n -0000029074 00000 n -0000034113 00000 n -0000424228 00000 n -0000421113 00000 n -0000034175 00000 n -0000034238 00000 n -0000033080 00000 n -0000039643 00000 n -0000039804 00000 n -0000039960 00000 n -0000040118 00000 n -0000040273 00000 n -0000040698 00000 n -0000039445 00000 n -0000034568 00000 n -0000040451 00000 n -0000409763 00000 n -0000040574 00000 n -0000040637 00000 n -0000039582 00000 n -0000094116 00000 n -0000044373 00000 n -0000044534 00000 n -0000044940 00000 n -0000044199 00000 n -0000041056 00000 n -0000044695 00000 n -0000044336 00000 n -0000047331 00000 n -0000047148 00000 n -0000045168 00000 n -0000047269 00000 n -0000051301 00000 n -0000051462 00000 n -0000051623 00000 n -0000051784 00000 n -0000051945 00000 n -0000052409 00000 n -0000051103 00000 n -0000047507 00000 n -0000052101 00000 n -0000052346 00000 n -0000051240 00000 n -0000055663 00000 n -0000055419 00000 n -0000052663 00000 n -0000055540 00000 n -0000059784 00000 n -0000059941 00000 n -0000060098 00000 n -0000060254 00000 n -0000060906 00000 n -0000059594 00000 n -0000055878 00000 n -0000060411 00000 n -0000060655 00000 n -0000060718 00000 n -0000060781 00000 n -0000060844 00000 n -0000059731 00000 n -0000064164 00000 n -0000063920 00000 n -0000061173 00000 n -0000064041 00000 n -0000595304 00000 n -0000067842 00000 n -0000068307 00000 n -0000067676 00000 n -0000064353 00000 n -0000067999 00000 n -0000068244 00000 n -0000067813 00000 n -0000073218 00000 n -0000073378 00000 n -0000073846 00000 n -0000073044 00000 n -0000068574 00000 n -0000073538 00000 n -0000073181 00000 n -0000077420 00000 n -0000077175 00000 n -0000074087 00000 n -0000077296 00000 n -0000081283 00000 n -0000081444 00000 n -0000081605 00000 n -0000081762 00000 n -0000082166 00000 n -0000081093 00000 n -0000077609 00000 n -0000081918 00000 n -0000082042 00000 n -0000082104 00000 n -0000081230 00000 n -0000086067 00000 n -0000086224 00000 n -0000086381 00000 n -0000086538 00000 n -0000086695 00000 n -0000086856 00000 n -0000087017 00000 n -0000087174 00000 n -0000087787 00000 n -0000085845 00000 n -0000082407 00000 n -0000087351 00000 n -0000406071 00000 n -0000087413 00000 n -0000087476 00000 n -0000087601 00000 n -0000087664 00000 n -0000087726 00000 n -0000085982 00000 n -0000090765 00000 n -0000090520 00000 n -0000088054 00000 n -0000090641 00000 n -0000403872 00000 n -0000391699 00000 n -0000376960 00000 n -0000091774 00000 n -0000091591 00000 n -0000090993 00000 n -0000091712 00000 n -0000094178 00000 n -0000093933 00000 n -0000091911 00000 n -0000094054 00000 n -0000098193 00000 n -0000098350 00000 n -0000098506 00000 n -0000098663 00000 n -0000099256 00000 n -0000098003 00000 n -0000094341 00000 n -0000098820 00000 n -0000099006 00000 n -0000099069 00000 n -0000099132 00000 n -0000099195 00000 n -0000098140 00000 n -0000104983 00000 n -0000102225 00000 n -0000099549 00000 n -0000102346 00000 n -0000593938 00000 n -0000102532 00000 n -0000102595 00000 n -0000102658 00000 n -0000102721 00000 n -0000102784 00000 n -0000102847 00000 n -0000102910 00000 n -0000102971 00000 n -0000103034 00000 n -0000103097 00000 n -0000103160 00000 n -0000103223 00000 n -0000103286 00000 n -0000103348 00000 n -0000103411 00000 n -0000103474 00000 n -0000103537 00000 n -0000103600 00000 n -0000103663 00000 n -0000103726 00000 n -0000103789 00000 n -0000103852 00000 n -0000103915 00000 n -0000103978 00000 n -0000104041 00000 n -0000104104 00000 n -0000104167 00000 n -0000104230 00000 n -0000104293 00000 n -0000104356 00000 n -0000104418 00000 n -0000104481 00000 n -0000104544 00000 n -0000104607 00000 n -0000104670 00000 n -0000104733 00000 n -0000104796 00000 n -0000104859 00000 n -0000104921 00000 n -0000595457 00000 n -0000110792 00000 n -0000107340 00000 n -0000105186 00000 n -0000107461 00000 n -0000107523 00000 n -0000107586 00000 n -0000107648 00000 n -0000107711 00000 n -0000107774 00000 n -0000107836 00000 n -0000107898 00000 n -0000107961 00000 n -0000108024 00000 n -0000108087 00000 n -0000108150 00000 n -0000108213 00000 n -0000108276 00000 n -0000108339 00000 n -0000108402 00000 n -0000108464 00000 n -0000108527 00000 n -0000108590 00000 n -0000108653 00000 n -0000108716 00000 n -0000108779 00000 n -0000108842 00000 n -0000108905 00000 n -0000108968 00000 n -0000109031 00000 n -0000109094 00000 n -0000109157 00000 n -0000109220 00000 n -0000109283 00000 n -0000109346 00000 n -0000109409 00000 n -0000109472 00000 n -0000109535 00000 n -0000109598 00000 n -0000109660 00000 n -0000109723 00000 n -0000109786 00000 n -0000109849 00000 n -0000109912 00000 n -0000109975 00000 n -0000110038 00000 n -0000110101 00000 n -0000110164 00000 n -0000110227 00000 n -0000110290 00000 n -0000110352 00000 n -0000110415 00000 n -0000110478 00000 n -0000110541 00000 n -0000110604 00000 n -0000110667 00000 n -0000110730 00000 n -0000116029 00000 n -0000114025 00000 n -0000110955 00000 n -0000114146 00000 n -0000114208 00000 n -0000114271 00000 n -0000114333 00000 n -0000114396 00000 n -0000114459 00000 n -0000114522 00000 n -0000114585 00000 n -0000114648 00000 n -0000114711 00000 n -0000114774 00000 n -0000114837 00000 n -0000114898 00000 n -0000114961 00000 n -0000115024 00000 n -0000115087 00000 n -0000115150 00000 n -0000115213 00000 n -0000115276 00000 n -0000115401 00000 n -0000115464 00000 n -0000115527 00000 n -0000115590 00000 n -0000115653 00000 n -0000115716 00000 n -0000115779 00000 n -0000115842 00000 n -0000115905 00000 n -0000115967 00000 n -0000120618 00000 n -0000118675 00000 n -0000116231 00000 n -0000118796 00000 n -0000118858 00000 n -0000118921 00000 n -0000118984 00000 n -0000119045 00000 n -0000119108 00000 n -0000119171 00000 n -0000119234 00000 n -0000119297 00000 n -0000119360 00000 n -0000119423 00000 n -0000119486 00000 n -0000119548 00000 n -0000119611 00000 n -0000119674 00000 n -0000119737 00000 n -0000119800 00000 n -0000119863 00000 n -0000119926 00000 n -0000119989 00000 n -0000120052 00000 n -0000120115 00000 n -0000120178 00000 n -0000120240 00000 n -0000120303 00000 n -0000120366 00000 n -0000120429 00000 n -0000120492 00000 n -0000120555 00000 n -0000125461 00000 n -0000123200 00000 n -0000120781 00000 n -0000123321 00000 n -0000123383 00000 n -0000123446 00000 n -0000123509 00000 n -0000123572 00000 n -0000123635 00000 n -0000123698 00000 n -0000123761 00000 n -0000123824 00000 n -0000123887 00000 n -0000123950 00000 n -0000124013 00000 n -0000124076 00000 n -0000124139 00000 n -0000124201 00000 n -0000124264 00000 n -0000124327 00000 n -0000124390 00000 n -0000124453 00000 n -0000124516 00000 n -0000124579 00000 n -0000124642 00000 n -0000124705 00000 n -0000124768 00000 n -0000124831 00000 n -0000124894 00000 n -0000124957 00000 n -0000125020 00000 n -0000125083 00000 n -0000125146 00000 n -0000125209 00000 n -0000125272 00000 n -0000125335 00000 n -0000125398 00000 n -0000130865 00000 n -0000127600 00000 n -0000125637 00000 n -0000127721 00000 n -0000127783 00000 n -0000127846 00000 n -0000127909 00000 n -0000127972 00000 n -0000128035 00000 n -0000128098 00000 n -0000128161 00000 n -0000128224 00000 n -0000128287 00000 n -0000128350 00000 n -0000128413 00000 n -0000128476 00000 n -0000128539 00000 n -0000128602 00000 n -0000128665 00000 n -0000128728 00000 n -0000128790 00000 n -0000128853 00000 n -0000128916 00000 n -0000128979 00000 n -0000129042 00000 n -0000129105 00000 n -0000129168 00000 n -0000129231 00000 n -0000129294 00000 n -0000129357 00000 n -0000129420 00000 n -0000129482 00000 n -0000129545 00000 n -0000129608 00000 n -0000129671 00000 n -0000129734 00000 n -0000129797 00000 n -0000129860 00000 n -0000129923 00000 n -0000129986 00000 n -0000130049 00000 n -0000130112 00000 n -0000130174 00000 n -0000130237 00000 n -0000130300 00000 n -0000130363 00000 n -0000130426 00000 n -0000130489 00000 n -0000130552 00000 n -0000130615 00000 n -0000130678 00000 n -0000130741 00000 n -0000130803 00000 n -0000136926 00000 n -0000133476 00000 n -0000131028 00000 n -0000133597 00000 n -0000133721 00000 n -0000133783 00000 n -0000133846 00000 n -0000133909 00000 n -0000133972 00000 n -0000134035 00000 n -0000134098 00000 n -0000134161 00000 n -0000134224 00000 n -0000134287 00000 n -0000134350 00000 n -0000134413 00000 n -0000134475 00000 n -0000134538 00000 n -0000134601 00000 n -0000134664 00000 n -0000134727 00000 n -0000134790 00000 n -0000134853 00000 n -0000134916 00000 n -0000134979 00000 n -0000135041 00000 n -0000135104 00000 n -0000135167 00000 n -0000135230 00000 n -0000135293 00000 n -0000135356 00000 n -0000135418 00000 n -0000135481 00000 n -0000135544 00000 n -0000135607 00000 n -0000135670 00000 n -0000135733 00000 n -0000135796 00000 n -0000135859 00000 n -0000135922 00000 n -0000135984 00000 n -0000136047 00000 n -0000136110 00000 n -0000136173 00000 n -0000136236 00000 n -0000136299 00000 n -0000136362 00000 n -0000136425 00000 n -0000136488 00000 n -0000136550 00000 n -0000136613 00000 n -0000136676 00000 n -0000136739 00000 n -0000136802 00000 n -0000136864 00000 n -0000143173 00000 n -0000139659 00000 n -0000137102 00000 n -0000139780 00000 n -0000139842 00000 n -0000139905 00000 n -0000139967 00000 n -0000140030 00000 n -0000140093 00000 n -0000140156 00000 n -0000140219 00000 n -0000140282 00000 n -0000140345 00000 n -0000140408 00000 n -0000140471 00000 n -0000140534 00000 n -0000140597 00000 n -0000140660 00000 n -0000140722 00000 n -0000140785 00000 n -0000140848 00000 n -0000140911 00000 n -0000140974 00000 n -0000141037 00000 n -0000141100 00000 n -0000141163 00000 n -0000141226 00000 n -0000141289 00000 n -0000141352 00000 n -0000141415 00000 n -0000141478 00000 n -0000141541 00000 n -0000141604 00000 n -0000141667 00000 n -0000141730 00000 n -0000141793 00000 n -0000141856 00000 n -0000141917 00000 n -0000141980 00000 n -0000142043 00000 n -0000142106 00000 n -0000142169 00000 n -0000142232 00000 n -0000142295 00000 n -0000142358 00000 n -0000142420 00000 n -0000142483 00000 n -0000142546 00000 n -0000142609 00000 n -0000142672 00000 n -0000142735 00000 n -0000142798 00000 n -0000142861 00000 n -0000142923 00000 n -0000142986 00000 n -0000143049 00000 n -0000143111 00000 n -0000148760 00000 n -0000145373 00000 n -0000143336 00000 n -0000145494 00000 n -0000145556 00000 n -0000145619 00000 n -0000145681 00000 n -0000145744 00000 n -0000145806 00000 n -0000145869 00000 n -0000145932 00000 n -0000145995 00000 n -0000146058 00000 n -0000146121 00000 n -0000146184 00000 n -0000146247 00000 n -0000146310 00000 n -0000146373 00000 n -0000146436 00000 n -0000146499 00000 n -0000146562 00000 n -0000146625 00000 n -0000146688 00000 n -0000146751 00000 n -0000146814 00000 n -0000146877 00000 n -0000146939 00000 n -0000147002 00000 n -0000147065 00000 n -0000147128 00000 n -0000147191 00000 n -0000147254 00000 n -0000147317 00000 n -0000147380 00000 n -0000147443 00000 n -0000147505 00000 n -0000147568 00000 n -0000147631 00000 n -0000147694 00000 n -0000147757 00000 n -0000147820 00000 n -0000147883 00000 n -0000147946 00000 n -0000148009 00000 n -0000148070 00000 n -0000148133 00000 n -0000148196 00000 n -0000148259 00000 n -0000148384 00000 n -0000148447 00000 n -0000148510 00000 n -0000148573 00000 n -0000148636 00000 n -0000148698 00000 n -0000155022 00000 n -0000151130 00000 n -0000148949 00000 n -0000151251 00000 n -0000151313 00000 n -0000151376 00000 n -0000151438 00000 n -0000151501 00000 n -0000151564 00000 n -0000151627 00000 n -0000151690 00000 n -0000151753 00000 n -0000151816 00000 n -0000151879 00000 n -0000151942 00000 n -0000152004 00000 n -0000152067 00000 n -0000152130 00000 n -0000152193 00000 n -0000152256 00000 n -0000152319 00000 n -0000152382 00000 n -0000152445 00000 n -0000152508 00000 n -0000152570 00000 n -0000152633 00000 n -0000152696 00000 n -0000152759 00000 n -0000152822 00000 n -0000152885 00000 n -0000152948 00000 n -0000153011 00000 n -0000153074 00000 n -0000153136 00000 n -0000153199 00000 n -0000153262 00000 n -0000153325 00000 n -0000153388 00000 n -0000153451 00000 n -0000153514 00000 n -0000153577 00000 n -0000153640 00000 n -0000153702 00000 n -0000153765 00000 n -0000153828 00000 n -0000153891 00000 n -0000153954 00000 n -0000154017 00000 n -0000154080 00000 n -0000154143 00000 n -0000154206 00000 n -0000154268 00000 n -0000154331 00000 n -0000154394 00000 n -0000154457 00000 n -0000154520 00000 n -0000154583 00000 n -0000154646 00000 n -0000154709 00000 n -0000154772 00000 n -0000154834 00000 n -0000154897 00000 n -0000154960 00000 n -0000160657 00000 n -0000157334 00000 n -0000155185 00000 n -0000157455 00000 n -0000157579 00000 n -0000157641 00000 n -0000157703 00000 n -0000157766 00000 n -0000157829 00000 n -0000157892 00000 n -0000157955 00000 n -0000158018 00000 n -0000158081 00000 n -0000158144 00000 n -0000158269 00000 n -0000158332 00000 n -0000158395 00000 n -0000158458 00000 n -0000158521 00000 n -0000158584 00000 n -0000158647 00000 n -0000158710 00000 n -0000158772 00000 n -0000158835 00000 n -0000158898 00000 n -0000158961 00000 n -0000159024 00000 n -0000159087 00000 n -0000159150 00000 n -0000159213 00000 n -0000159276 00000 n -0000159339 00000 n -0000159401 00000 n -0000159464 00000 n -0000159527 00000 n -0000159590 00000 n -0000159653 00000 n -0000159716 00000 n -0000159779 00000 n -0000159842 00000 n -0000159905 00000 n -0000159967 00000 n -0000160092 00000 n -0000160155 00000 n -0000160218 00000 n -0000160281 00000 n -0000160344 00000 n -0000160407 00000 n -0000160470 00000 n -0000160533 00000 n -0000160595 00000 n -0000595610 00000 n -0000166612 00000 n -0000162945 00000 n -0000160833 00000 n -0000163066 00000 n -0000163128 00000 n -0000163191 00000 n -0000163253 00000 n -0000163316 00000 n -0000163379 00000 n -0000163442 00000 n -0000163505 00000 n -0000163568 00000 n -0000163631 00000 n -0000163694 00000 n -0000163757 00000 n -0000163819 00000 n -0000163882 00000 n -0000163945 00000 n -0000164008 00000 n -0000164071 00000 n -0000164134 00000 n -0000164197 00000 n -0000164260 00000 n -0000164322 00000 n -0000164385 00000 n -0000164448 00000 n -0000164511 00000 n -0000164574 00000 n -0000164637 00000 n -0000164700 00000 n -0000164763 00000 n -0000164825 00000 n -0000164889 00000 n -0000164953 00000 n -0000165017 00000 n -0000165081 00000 n -0000165145 00000 n -0000165209 00000 n -0000165273 00000 n -0000165337 00000 n -0000165400 00000 n -0000165464 00000 n -0000165528 00000 n -0000165592 00000 n -0000165656 00000 n -0000165720 00000 n -0000165784 00000 n -0000165847 00000 n -0000165911 00000 n -0000165975 00000 n -0000166039 00000 n -0000166103 00000 n -0000166167 00000 n -0000166231 00000 n -0000166295 00000 n -0000166359 00000 n -0000166422 00000 n -0000166486 00000 n -0000166549 00000 n -0000172828 00000 n -0000168943 00000 n -0000166775 00000 n -0000169067 00000 n -0000169131 00000 n -0000169196 00000 n -0000169260 00000 n -0000169325 00000 n -0000169390 00000 n -0000169455 00000 n -0000169520 00000 n -0000169585 00000 n -0000169650 00000 n -0000169715 00000 n -0000169780 00000 n -0000169844 00000 n -0000169909 00000 n -0000169974 00000 n -0000170039 00000 n -0000170104 00000 n -0000170169 00000 n -0000170234 00000 n -0000170298 00000 n -0000170363 00000 n -0000170428 00000 n -0000170493 00000 n -0000170558 00000 n -0000170623 00000 n -0000170688 00000 n -0000170753 00000 n -0000170818 00000 n -0000170882 00000 n -0000170947 00000 n -0000171012 00000 n -0000171077 00000 n -0000171142 00000 n -0000171207 00000 n -0000171272 00000 n -0000171337 00000 n -0000171402 00000 n -0000171466 00000 n -0000171531 00000 n -0000171596 00000 n -0000171661 00000 n -0000171726 00000 n -0000171791 00000 n -0000171856 00000 n -0000171921 00000 n -0000171986 00000 n -0000172051 00000 n -0000172116 00000 n -0000172181 00000 n -0000172246 00000 n -0000172311 00000 n -0000172376 00000 n -0000172441 00000 n -0000172506 00000 n -0000172570 00000 n -0000172635 00000 n -0000172700 00000 n -0000172764 00000 n -0000179088 00000 n -0000175465 00000 n -0000172992 00000 n -0000175589 00000 n -0000175653 00000 n -0000175718 00000 n -0000175782 00000 n -0000175847 00000 n -0000175912 00000 n -0000175976 00000 n -0000176041 00000 n -0000176106 00000 n -0000176171 00000 n -0000176236 00000 n -0000176301 00000 n -0000176365 00000 n -0000176430 00000 n -0000176495 00000 n -0000176560 00000 n -0000176625 00000 n -0000176690 00000 n -0000176755 00000 n -0000176820 00000 n -0000176885 00000 n -0000176949 00000 n -0000177014 00000 n -0000177079 00000 n -0000177144 00000 n -0000177209 00000 n -0000177274 00000 n -0000177339 00000 n -0000177404 00000 n -0000177469 00000 n -0000177534 00000 n -0000177599 00000 n -0000177664 00000 n -0000177729 00000 n -0000177794 00000 n -0000177859 00000 n -0000177922 00000 n -0000177987 00000 n -0000178052 00000 n -0000178117 00000 n -0000178182 00000 n -0000178247 00000 n -0000178312 00000 n -0000178377 00000 n -0000178442 00000 n -0000178506 00000 n -0000178571 00000 n -0000178636 00000 n -0000178701 00000 n -0000178765 00000 n -0000178830 00000 n -0000178895 00000 n -0000178960 00000 n -0000179024 00000 n -0000185497 00000 n -0000181938 00000 n -0000179252 00000 n -0000182062 00000 n -0000182126 00000 n -0000182191 00000 n -0000182255 00000 n -0000182320 00000 n -0000182385 00000 n -0000182450 00000 n -0000182515 00000 n -0000182580 00000 n -0000182645 00000 n -0000182710 00000 n -0000182775 00000 n -0000182839 00000 n -0000182904 00000 n -0000182969 00000 n -0000183033 00000 n -0000183098 00000 n -0000183163 00000 n -0000183228 00000 n -0000183293 00000 n -0000183358 00000 n -0000183423 00000 n -0000183487 00000 n -0000183552 00000 n -0000183617 00000 n -0000183682 00000 n -0000183747 00000 n -0000183812 00000 n -0000183877 00000 n -0000183941 00000 n -0000184006 00000 n -0000184071 00000 n -0000184136 00000 n -0000184201 00000 n -0000184266 00000 n -0000184331 00000 n -0000184396 00000 n -0000184461 00000 n -0000184525 00000 n -0000184590 00000 n -0000184655 00000 n -0000184720 00000 n -0000184785 00000 n -0000184850 00000 n -0000184915 00000 n -0000184980 00000 n -0000185045 00000 n -0000185109 00000 n -0000185174 00000 n -0000185239 00000 n -0000185304 00000 n -0000185369 00000 n -0000185433 00000 n -0000191255 00000 n -0000188218 00000 n -0000185674 00000 n -0000188342 00000 n -0000188406 00000 n -0000188471 00000 n -0000188535 00000 n -0000188600 00000 n -0000188665 00000 n -0000188730 00000 n -0000188795 00000 n -0000188860 00000 n -0000188925 00000 n -0000188990 00000 n -0000189055 00000 n -0000189119 00000 n -0000189184 00000 n -0000189249 00000 n -0000189314 00000 n -0000189379 00000 n -0000189444 00000 n -0000189509 00000 n -0000189574 00000 n -0000189639 00000 n -0000189704 00000 n -0000189769 00000 n -0000189834 00000 n -0000189899 00000 n -0000189964 00000 n -0000190029 00000 n -0000190094 00000 n -0000190157 00000 n -0000190222 00000 n -0000190287 00000 n -0000190352 00000 n -0000190417 00000 n -0000190482 00000 n -0000190547 00000 n -0000190612 00000 n -0000190677 00000 n -0000190742 00000 n -0000190807 00000 n -0000190868 00000 n -0000190933 00000 n -0000190998 00000 n -0000191063 00000 n -0000191191 00000 n -0000197487 00000 n -0000193410 00000 n -0000191445 00000 n -0000193534 00000 n -0000193598 00000 n -0000193661 00000 n -0000193726 00000 n -0000193791 00000 n -0000193856 00000 n -0000193921 00000 n -0000193986 00000 n -0000194051 00000 n -0000194116 00000 n -0000194181 00000 n -0000194245 00000 n -0000194310 00000 n -0000194375 00000 n -0000194440 00000 n -0000194505 00000 n -0000194570 00000 n -0000194635 00000 n -0000194700 00000 n -0000194765 00000 n -0000194829 00000 n -0000194894 00000 n -0000194959 00000 n -0000195024 00000 n -0000195089 00000 n -0000195154 00000 n -0000195219 00000 n -0000195284 00000 n -0000195349 00000 n -0000195413 00000 n -0000195478 00000 n -0000195543 00000 n -0000195608 00000 n -0000195673 00000 n -0000195738 00000 n -0000195803 00000 n -0000195868 00000 n -0000195933 00000 n -0000195998 00000 n -0000196062 00000 n -0000196127 00000 n -0000196192 00000 n -0000196257 00000 n -0000196322 00000 n -0000196387 00000 n -0000196452 00000 n -0000196517 00000 n -0000196582 00000 n -0000196645 00000 n -0000196710 00000 n -0000196775 00000 n -0000196840 00000 n -0000196905 00000 n -0000196970 00000 n -0000197035 00000 n -0000197100 00000 n -0000197165 00000 n -0000197229 00000 n -0000197294 00000 n -0000197359 00000 n -0000197423 00000 n -0000203384 00000 n -0000199568 00000 n -0000197638 00000 n -0000199692 00000 n -0000199756 00000 n -0000199821 00000 n -0000199885 00000 n -0000199950 00000 n -0000200015 00000 n -0000200080 00000 n -0000200145 00000 n -0000200210 00000 n -0000200275 00000 n -0000200339 00000 n -0000200404 00000 n -0000200469 00000 n -0000200534 00000 n -0000200599 00000 n -0000200664 00000 n -0000200729 00000 n -0000200794 00000 n -0000200859 00000 n -0000200923 00000 n -0000200988 00000 n -0000201053 00000 n -0000201118 00000 n -0000201183 00000 n -0000201248 00000 n -0000201313 00000 n -0000201378 00000 n -0000201443 00000 n -0000201507 00000 n -0000201572 00000 n -0000201637 00000 n -0000201702 00000 n -0000201767 00000 n -0000201832 00000 n -0000201897 00000 n -0000201962 00000 n -0000202027 00000 n -0000202154 00000 n -0000202219 00000 n -0000202283 00000 n -0000202348 00000 n -0000202413 00000 n -0000202478 00000 n -0000202543 00000 n -0000202608 00000 n -0000202673 00000 n -0000202738 00000 n -0000202803 00000 n -0000202866 00000 n -0000202931 00000 n -0000202996 00000 n -0000203061 00000 n -0000203126 00000 n -0000203191 00000 n -0000203256 00000 n -0000203320 00000 n -0000208982 00000 n -0000206458 00000 n -0000203548 00000 n -0000206582 00000 n -0000206646 00000 n -0000206711 00000 n -0000206775 00000 n -0000206840 00000 n -0000206905 00000 n -0000206970 00000 n -0000207035 00000 n -0000207100 00000 n -0000207165 00000 n -0000207230 00000 n -0000207295 00000 n -0000207423 00000 n -0000207488 00000 n -0000207553 00000 n -0000207618 00000 n -0000207683 00000 n -0000207748 00000 n -0000207813 00000 n -0000207878 00000 n -0000207943 00000 n -0000208008 00000 n -0000208073 00000 n -0000208138 00000 n -0000208203 00000 n -0000208268 00000 n -0000208333 00000 n -0000208397 00000 n -0000208462 00000 n -0000208527 00000 n -0000208592 00000 n -0000208657 00000 n -0000208722 00000 n -0000208787 00000 n -0000208852 00000 n -0000208917 00000 n -0000215195 00000 n -0000211382 00000 n -0000209172 00000 n -0000211506 00000 n -0000211570 00000 n -0000211635 00000 n -0000211699 00000 n -0000211764 00000 n -0000211829 00000 n -0000211894 00000 n -0000211958 00000 n -0000212023 00000 n -0000212088 00000 n -0000212152 00000 n -0000212217 00000 n -0000212282 00000 n -0000212347 00000 n -0000212412 00000 n -0000212477 00000 n -0000212605 00000 n -0000212669 00000 n -0000212734 00000 n -0000212799 00000 n -0000212864 00000 n -0000212929 00000 n -0000212994 00000 n -0000213059 00000 n -0000213124 00000 n -0000213189 00000 n -0000213316 00000 n -0000213381 00000 n -0000213446 00000 n -0000213511 00000 n -0000213576 00000 n -0000213641 00000 n -0000213706 00000 n -0000213770 00000 n -0000213835 00000 n -0000213900 00000 n -0000213965 00000 n -0000214030 00000 n -0000214095 00000 n -0000214160 00000 n -0000214225 00000 n -0000214290 00000 n -0000214353 00000 n -0000214418 00000 n -0000214483 00000 n -0000214548 00000 n -0000214613 00000 n -0000214678 00000 n -0000214743 00000 n -0000214808 00000 n -0000214873 00000 n -0000214937 00000 n -0000215002 00000 n -0000215067 00000 n -0000215131 00000 n -0000220497 00000 n -0000217520 00000 n -0000215372 00000 n -0000217645 00000 n -0000217709 00000 n -0000217774 00000 n -0000217838 00000 n -0000217903 00000 n -0000217968 00000 n -0000218033 00000 n -0000218098 00000 n -0000218163 00000 n -0000218228 00000 n -0000218293 00000 n -0000218358 00000 n -0000218423 00000 n -0000218488 00000 n -0000218552 00000 n -0000218617 00000 n -0000218682 00000 n -0000218747 00000 n -0000218812 00000 n -0000218877 00000 n -0000218942 00000 n -0000219007 00000 n -0000219072 00000 n -0000219137 00000 n -0000219202 00000 n -0000219267 00000 n -0000219332 00000 n -0000219397 00000 n -0000219462 00000 n -0000219527 00000 n -0000219592 00000 n -0000219720 00000 n -0000219785 00000 n -0000219850 00000 n -0000219915 00000 n -0000219979 00000 n -0000220043 00000 n -0000220108 00000 n -0000220172 00000 n -0000220237 00000 n -0000220302 00000 n -0000220367 00000 n -0000220432 00000 n -0000595771 00000 n -0000229596 00000 n -0000225739 00000 n -0000223928 00000 n -0000220674 00000 n -0000224053 00000 n -0000224180 00000 n -0000224245 00000 n -0000224310 00000 n -0000224375 00000 n -0000224440 00000 n -0000224505 00000 n -0000224569 00000 n -0000224634 00000 n -0000224699 00000 n -0000224764 00000 n -0000224829 00000 n -0000224894 00000 n -0000224959 00000 n -0000225024 00000 n -0000225089 00000 n -0000225154 00000 n -0000225219 00000 n -0000225284 00000 n -0000225349 00000 n -0000225414 00000 n -0000225479 00000 n -0000225544 00000 n -0000225609 00000 n -0000225674 00000 n -0000229752 00000 n -0000231594 00000 n -0000229414 00000 n -0000225968 00000 n -0000229910 00000 n -0000229974 00000 n -0000230039 00000 n -0000230104 00000 n -0000230169 00000 n -0000230234 00000 n -0000230299 00000 n -0000230363 00000 n -0000230428 00000 n -0000230492 00000 n -0000230557 00000 n -0000230622 00000 n -0000230687 00000 n -0000230752 00000 n -0000230817 00000 n -0000230882 00000 n -0000230947 00000 n -0000231012 00000 n -0000231076 00000 n -0000231141 00000 n -0000231206 00000 n -0000231271 00000 n -0000231336 00000 n -0000231401 00000 n -0000231466 00000 n -0000231530 00000 n -0000229556 00000 n -0000237619 00000 n -0000234516 00000 n -0000231862 00000 n -0000234641 00000 n -0000234705 00000 n -0000234770 00000 n -0000234834 00000 n -0000234899 00000 n -0000234964 00000 n -0000235029 00000 n -0000235093 00000 n -0000235158 00000 n -0000235223 00000 n -0000235288 00000 n -0000235353 00000 n -0000235418 00000 n -0000235483 00000 n -0000235548 00000 n -0000235613 00000 n -0000235740 00000 n -0000235805 00000 n -0000235870 00000 n -0000235935 00000 n -0000236000 00000 n -0000236065 00000 n -0000236130 00000 n -0000236195 00000 n -0000236260 00000 n -0000236325 00000 n -0000236390 00000 n -0000236453 00000 n -0000236518 00000 n -0000236583 00000 n -0000236648 00000 n -0000236713 00000 n -0000236778 00000 n -0000236843 00000 n -0000236908 00000 n -0000236973 00000 n -0000237037 00000 n -0000237102 00000 n -0000237167 00000 n -0000237232 00000 n -0000237297 00000 n -0000237362 00000 n -0000237427 00000 n -0000237492 00000 n -0000237556 00000 n -0000243929 00000 n -0000240952 00000 n -0000237822 00000 n -0000241077 00000 n -0000241141 00000 n -0000241206 00000 n -0000241270 00000 n -0000241335 00000 n -0000241400 00000 n -0000241465 00000 n -0000241530 00000 n -0000241595 00000 n -0000241660 00000 n -0000241725 00000 n -0000241790 00000 n -0000241854 00000 n -0000241919 00000 n -0000241984 00000 n -0000242049 00000 n -0000242114 00000 n -0000242179 00000 n -0000242244 00000 n -0000242309 00000 n -0000242374 00000 n -0000242438 00000 n -0000242503 00000 n -0000242568 00000 n -0000242633 00000 n -0000242698 00000 n -0000242763 00000 n -0000242828 00000 n -0000242893 00000 n -0000242958 00000 n -0000243022 00000 n -0000243087 00000 n -0000243152 00000 n -0000243217 00000 n -0000243282 00000 n -0000243347 00000 n -0000243412 00000 n -0000243477 00000 n -0000243542 00000 n -0000243607 00000 n -0000243671 00000 n -0000243736 00000 n -0000243801 00000 n -0000243865 00000 n -0000247952 00000 n -0000248109 00000 n -0000250079 00000 n -0000247770 00000 n -0000244132 00000 n -0000248266 00000 n -0000248330 00000 n -0000248395 00000 n -0000248459 00000 n -0000248524 00000 n -0000248589 00000 n -0000248653 00000 n -0000248718 00000 n -0000248783 00000 n -0000248847 00000 n -0000248912 00000 n -0000248977 00000 n -0000249041 00000 n -0000249106 00000 n -0000249171 00000 n -0000249236 00000 n -0000249301 00000 n -0000249366 00000 n -0000249431 00000 n -0000249496 00000 n -0000249561 00000 n -0000249626 00000 n -0000249690 00000 n -0000249755 00000 n -0000249820 00000 n -0000249885 00000 n -0000249950 00000 n -0000250015 00000 n -0000247912 00000 n -0000256168 00000 n -0000252540 00000 n -0000250360 00000 n -0000252665 00000 n -0000252729 00000 n -0000252794 00000 n -0000252858 00000 n -0000252923 00000 n -0000252988 00000 n -0000253053 00000 n -0000253118 00000 n -0000253183 00000 n -0000253248 00000 n -0000253313 00000 n -0000253378 00000 n -0000253443 00000 n -0000253508 00000 n -0000253572 00000 n -0000253637 00000 n -0000253702 00000 n -0000253767 00000 n -0000253832 00000 n -0000253897 00000 n -0000253962 00000 n -0000254027 00000 n -0000254092 00000 n -0000254156 00000 n -0000254221 00000 n -0000254286 00000 n -0000254351 00000 n -0000254416 00000 n -0000254481 00000 n -0000254546 00000 n -0000254611 00000 n -0000254676 00000 n -0000254741 00000 n -0000254806 00000 n -0000254871 00000 n -0000254936 00000 n -0000255001 00000 n -0000255066 00000 n -0000255131 00000 n -0000255196 00000 n -0000255261 00000 n -0000255326 00000 n -0000255390 00000 n -0000255454 00000 n -0000255519 00000 n -0000255584 00000 n -0000255649 00000 n -0000255714 00000 n -0000255779 00000 n -0000255844 00000 n -0000255908 00000 n -0000255973 00000 n -0000256038 00000 n -0000256103 00000 n -0000262299 00000 n -0000258283 00000 n -0000256371 00000 n -0000258408 00000 n -0000258472 00000 n -0000258537 00000 n -0000258601 00000 n -0000258666 00000 n -0000258731 00000 n -0000258796 00000 n -0000258861 00000 n -0000258926 00000 n -0000258991 00000 n -0000259056 00000 n -0000259121 00000 n -0000259186 00000 n -0000259251 00000 n -0000259315 00000 n -0000259380 00000 n -0000259445 00000 n -0000259510 00000 n -0000259575 00000 n -0000259640 00000 n -0000259705 00000 n -0000259770 00000 n -0000259835 00000 n -0000259899 00000 n -0000259964 00000 n -0000260029 00000 n -0000260094 00000 n -0000260159 00000 n -0000260224 00000 n -0000260289 00000 n -0000260352 00000 n -0000260417 00000 n -0000260482 00000 n -0000260547 00000 n -0000260612 00000 n -0000260677 00000 n -0000260742 00000 n -0000260807 00000 n -0000260872 00000 n -0000260937 00000 n -0000261002 00000 n -0000261067 00000 n -0000261132 00000 n -0000261197 00000 n -0000261262 00000 n -0000261327 00000 n -0000261392 00000 n -0000261457 00000 n -0000261522 00000 n -0000261586 00000 n -0000261651 00000 n -0000261716 00000 n -0000261781 00000 n -0000261846 00000 n -0000261911 00000 n -0000261976 00000 n -0000262041 00000 n -0000262106 00000 n -0000262171 00000 n -0000262235 00000 n -0000265483 00000 n -0000268234 00000 n -0000265310 00000 n -0000262463 00000 n -0000265641 00000 n -0000265705 00000 n -0000265770 00000 n -0000265834 00000 n -0000265899 00000 n -0000265964 00000 n -0000266029 00000 n -0000266094 00000 n -0000266159 00000 n -0000266224 00000 n -0000266289 00000 n -0000266354 00000 n -0000266418 00000 n -0000266483 00000 n -0000266548 00000 n -0000266613 00000 n -0000266678 00000 n -0000266743 00000 n -0000266808 00000 n -0000266873 00000 n -0000266938 00000 n -0000267003 00000 n -0000267067 00000 n -0000267132 00000 n -0000267197 00000 n -0000267262 00000 n -0000267327 00000 n -0000267392 00000 n -0000267457 00000 n -0000267522 00000 n -0000267587 00000 n -0000267651 00000 n -0000267716 00000 n -0000267781 00000 n -0000267846 00000 n -0000267910 00000 n -0000267975 00000 n -0000268040 00000 n -0000268105 00000 n -0000268170 00000 n -0000265452 00000 n -0000274296 00000 n -0000270153 00000 n -0000268502 00000 n -0000270278 00000 n -0000270342 00000 n -0000270407 00000 n -0000270471 00000 n -0000270536 00000 n -0000270601 00000 n -0000270666 00000 n -0000270731 00000 n -0000270796 00000 n -0000270861 00000 n -0000270926 00000 n -0000270991 00000 n -0000271055 00000 n -0000271120 00000 n -0000271185 00000 n -0000271250 00000 n -0000271315 00000 n -0000271379 00000 n -0000271444 00000 n -0000271509 00000 n -0000271574 00000 n -0000271638 00000 n -0000271703 00000 n -0000271768 00000 n -0000271833 00000 n -0000271898 00000 n -0000271963 00000 n -0000272028 00000 n -0000272093 00000 n -0000272158 00000 n -0000272222 00000 n -0000272287 00000 n -0000272352 00000 n -0000272417 00000 n -0000272482 00000 n -0000272547 00000 n -0000272612 00000 n -0000272677 00000 n -0000272742 00000 n -0000272807 00000 n -0000272871 00000 n -0000272936 00000 n -0000273001 00000 n -0000273066 00000 n -0000273131 00000 n -0000273196 00000 n -0000273261 00000 n -0000273326 00000 n -0000273391 00000 n -0000273454 00000 n -0000273519 00000 n -0000273584 00000 n -0000273649 00000 n -0000273714 00000 n -0000273779 00000 n -0000273844 00000 n -0000273909 00000 n -0000273974 00000 n -0000274038 00000 n -0000274103 00000 n -0000274168 00000 n -0000274232 00000 n -0000280172 00000 n -0000277136 00000 n -0000274460 00000 n -0000277261 00000 n -0000277325 00000 n -0000277390 00000 n -0000277454 00000 n -0000277519 00000 n -0000277584 00000 n -0000277649 00000 n -0000277714 00000 n -0000277779 00000 n -0000277844 00000 n -0000277909 00000 n -0000277974 00000 n -0000278038 00000 n -0000278101 00000 n -0000278166 00000 n -0000278231 00000 n -0000278296 00000 n -0000278361 00000 n -0000278425 00000 n -0000278490 00000 n -0000278554 00000 n -0000278619 00000 n -0000278684 00000 n -0000278749 00000 n -0000278814 00000 n -0000278879 00000 n -0000278944 00000 n -0000279007 00000 n -0000279072 00000 n -0000279137 00000 n -0000279202 00000 n -0000279267 00000 n -0000279332 00000 n -0000279397 00000 n -0000279461 00000 n -0000279525 00000 n -0000279590 00000 n -0000279655 00000 n -0000279720 00000 n -0000279785 00000 n -0000279850 00000 n -0000279915 00000 n -0000279980 00000 n -0000280044 00000 n -0000280108 00000 n -0000595935 00000 n -0000285852 00000 n -0000283716 00000 n -0000280375 00000 n -0000283841 00000 n -0000283905 00000 n -0000283970 00000 n -0000284034 00000 n -0000284099 00000 n -0000284164 00000 n -0000284229 00000 n -0000284294 00000 n -0000284359 00000 n -0000284424 00000 n -0000284489 00000 n -0000284554 00000 n -0000284619 00000 n -0000284684 00000 n -0000284749 00000 n -0000284814 00000 n -0000284879 00000 n -0000284944 00000 n -0000285009 00000 n -0000285074 00000 n -0000285139 00000 n -0000285203 00000 n -0000285268 00000 n -0000285333 00000 n -0000285397 00000 n -0000285462 00000 n -0000285527 00000 n -0000285592 00000 n -0000285657 00000 n -0000285722 00000 n -0000285787 00000 n -0000294300 00000 n -0000291442 00000 n -0000288528 00000 n -0000286068 00000 n -0000288653 00000 n -0000288717 00000 n -0000288781 00000 n -0000288846 00000 n -0000288911 00000 n -0000288976 00000 n -0000289041 00000 n -0000289106 00000 n -0000289171 00000 n -0000289236 00000 n -0000289300 00000 n -0000289365 00000 n -0000289429 00000 n -0000289494 00000 n -0000289558 00000 n -0000289623 00000 n -0000289688 00000 n -0000289753 00000 n -0000289818 00000 n -0000289883 00000 n -0000289948 00000 n -0000290013 00000 n -0000290078 00000 n -0000290142 00000 n -0000290207 00000 n -0000290272 00000 n -0000290337 00000 n -0000290402 00000 n -0000290467 00000 n -0000290532 00000 n -0000290597 00000 n -0000290662 00000 n -0000290727 00000 n -0000290792 00000 n -0000290857 00000 n -0000290922 00000 n -0000290987 00000 n -0000291052 00000 n -0000291117 00000 n -0000291182 00000 n -0000291247 00000 n -0000291312 00000 n -0000291377 00000 n -0000298022 00000 n -0000294127 00000 n -0000291645 00000 n -0000294458 00000 n -0000294522 00000 n -0000294587 00000 n -0000294652 00000 n -0000294717 00000 n -0000294781 00000 n -0000294846 00000 n -0000294911 00000 n -0000294976 00000 n -0000295041 00000 n -0000295106 00000 n -0000295171 00000 n -0000295236 00000 n -0000295301 00000 n -0000295365 00000 n -0000295430 00000 n -0000295494 00000 n -0000295622 00000 n -0000295687 00000 n -0000295752 00000 n -0000295817 00000 n -0000295882 00000 n -0000295947 00000 n -0000296012 00000 n -0000296077 00000 n -0000296141 00000 n -0000296206 00000 n -0000296271 00000 n -0000296336 00000 n -0000296401 00000 n -0000296466 00000 n -0000296531 00000 n -0000296596 00000 n -0000296661 00000 n -0000296725 00000 n -0000296790 00000 n -0000296855 00000 n -0000296920 00000 n -0000296985 00000 n -0000297050 00000 n -0000297115 00000 n -0000297180 00000 n -0000297245 00000 n -0000297309 00000 n -0000297374 00000 n -0000297439 00000 n -0000297504 00000 n -0000297569 00000 n -0000297634 00000 n -0000297699 00000 n -0000297764 00000 n -0000297829 00000 n -0000297893 00000 n -0000297958 00000 n -0000294269 00000 n -0000304189 00000 n -0000300371 00000 n -0000298251 00000 n -0000300496 00000 n -0000300560 00000 n -0000300625 00000 n -0000300689 00000 n -0000300754 00000 n -0000300819 00000 n -0000300884 00000 n -0000300949 00000 n -0000301014 00000 n -0000301079 00000 n -0000301144 00000 n -0000301209 00000 n -0000301273 00000 n -0000301338 00000 n -0000301403 00000 n -0000301468 00000 n -0000301533 00000 n -0000301598 00000 n -0000301663 00000 n -0000301728 00000 n -0000301792 00000 n -0000301857 00000 n -0000301922 00000 n -0000301986 00000 n -0000302051 00000 n -0000302115 00000 n -0000302180 00000 n -0000302245 00000 n -0000302310 00000 n -0000302375 00000 n -0000302440 00000 n -0000302505 00000 n -0000302570 00000 n -0000302635 00000 n -0000302699 00000 n -0000302764 00000 n -0000302828 00000 n -0000302893 00000 n -0000302958 00000 n -0000303023 00000 n -0000303088 00000 n -0000303153 00000 n -0000303218 00000 n -0000303283 00000 n -0000303348 00000 n -0000303412 00000 n -0000303477 00000 n -0000303542 00000 n -0000303607 00000 n -0000303672 00000 n -0000303737 00000 n -0000303802 00000 n -0000303867 00000 n -0000303932 00000 n -0000303996 00000 n -0000304061 00000 n -0000304125 00000 n -0000310143 00000 n -0000306064 00000 n -0000304353 00000 n -0000306189 00000 n -0000306253 00000 n -0000306318 00000 n -0000306382 00000 n -0000306447 00000 n -0000306512 00000 n -0000306577 00000 n -0000306642 00000 n -0000306707 00000 n -0000306772 00000 n -0000306837 00000 n -0000306902 00000 n -0000306966 00000 n -0000307031 00000 n -0000307096 00000 n -0000307161 00000 n -0000307226 00000 n -0000307291 00000 n -0000307356 00000 n -0000307421 00000 n -0000307486 00000 n -0000307550 00000 n -0000307615 00000 n -0000307680 00000 n -0000307745 00000 n -0000307810 00000 n -0000307875 00000 n -0000307940 00000 n -0000308005 00000 n -0000308070 00000 n -0000308134 00000 n -0000308199 00000 n -0000308263 00000 n -0000308328 00000 n -0000308393 00000 n -0000308458 00000 n -0000308522 00000 n -0000308587 00000 n -0000308652 00000 n -0000308717 00000 n -0000308782 00000 n -0000308847 00000 n -0000308912 00000 n -0000308977 00000 n -0000309042 00000 n -0000309106 00000 n -0000309171 00000 n -0000309236 00000 n -0000309301 00000 n -0000309366 00000 n -0000309431 00000 n -0000309496 00000 n -0000309561 00000 n -0000309626 00000 n -0000309691 00000 n -0000309756 00000 n -0000309820 00000 n -0000309885 00000 n -0000309950 00000 n -0000310015 00000 n -0000310079 00000 n -0000315812 00000 n -0000312899 00000 n -0000310307 00000 n -0000313024 00000 n -0000313088 00000 n -0000313153 00000 n -0000313217 00000 n -0000313282 00000 n -0000313347 00000 n -0000313412 00000 n -0000313477 00000 n -0000313542 00000 n -0000313607 00000 n -0000313672 00000 n -0000313737 00000 n -0000313802 00000 n -0000313867 00000 n -0000313932 00000 n -0000313997 00000 n -0000314062 00000 n -0000314126 00000 n -0000314191 00000 n -0000314256 00000 n -0000314321 00000 n -0000314386 00000 n -0000314451 00000 n -0000314516 00000 n -0000314581 00000 n -0000314646 00000 n -0000314710 00000 n -0000314775 00000 n -0000314840 00000 n -0000314904 00000 n -0000314968 00000 n -0000315033 00000 n -0000315098 00000 n -0000315163 00000 n -0000315228 00000 n -0000315293 00000 n -0000315358 00000 n -0000315423 00000 n -0000315488 00000 n -0000315553 00000 n -0000315618 00000 n -0000315683 00000 n -0000315748 00000 n -0000318293 00000 n -0000321627 00000 n -0000318120 00000 n -0000316015 00000 n -0000318451 00000 n -0000318515 00000 n -0000318579 00000 n -0000318644 00000 n -0000318709 00000 n -0000318774 00000 n -0000318839 00000 n -0000318904 00000 n -0000318969 00000 n -0000319032 00000 n -0000319097 00000 n -0000319161 00000 n -0000319226 00000 n -0000319291 00000 n -0000319356 00000 n -0000319421 00000 n -0000319486 00000 n -0000319551 00000 n -0000319615 00000 n -0000319680 00000 n -0000319745 00000 n -0000319810 00000 n -0000319875 00000 n -0000319940 00000 n -0000320005 00000 n -0000320070 00000 n -0000320135 00000 n -0000320198 00000 n -0000320263 00000 n -0000320328 00000 n -0000320393 00000 n -0000320458 00000 n -0000320523 00000 n -0000320588 00000 n -0000320653 00000 n -0000320718 00000 n -0000320783 00000 n -0000320848 00000 n -0000320913 00000 n -0000320977 00000 n -0000321042 00000 n -0000321107 00000 n -0000321172 00000 n -0000321237 00000 n -0000321302 00000 n -0000321367 00000 n -0000321432 00000 n -0000321497 00000 n -0000321562 00000 n -0000318262 00000 n -0000327331 00000 n -0000323964 00000 n -0000321856 00000 n -0000324089 00000 n -0000324216 00000 n -0000324281 00000 n -0000324346 00000 n -0000324410 00000 n -0000324475 00000 n -0000324540 00000 n -0000324605 00000 n -0000324670 00000 n -0000324735 00000 n -0000324800 00000 n -0000324865 00000 n -0000324930 00000 n -0000324994 00000 n -0000325059 00000 n -0000325124 00000 n -0000325189 00000 n -0000325254 00000 n -0000325319 00000 n -0000325384 00000 n -0000325449 00000 n -0000325514 00000 n -0000325578 00000 n -0000325643 00000 n -0000325708 00000 n -0000325773 00000 n -0000325838 00000 n -0000325903 00000 n -0000325968 00000 n -0000326033 00000 n -0000326098 00000 n -0000326163 00000 n -0000326227 00000 n -0000326292 00000 n -0000326357 00000 n -0000326422 00000 n -0000326487 00000 n -0000326552 00000 n -0000326617 00000 n -0000326682 00000 n -0000326747 00000 n -0000326811 00000 n -0000326876 00000 n -0000326941 00000 n -0000327006 00000 n -0000327071 00000 n -0000327136 00000 n -0000327201 00000 n -0000327266 00000 n -0000332855 00000 n -0000330335 00000 n -0000327534 00000 n -0000330460 00000 n -0000330587 00000 n -0000330651 00000 n -0000330716 00000 n -0000330781 00000 n -0000330846 00000 n -0000330911 00000 n -0000330976 00000 n -0000331041 00000 n -0000331106 00000 n -0000331234 00000 n -0000331299 00000 n -0000331364 00000 n -0000331429 00000 n -0000331493 00000 n -0000331558 00000 n -0000331623 00000 n -0000331688 00000 n -0000331753 00000 n -0000331818 00000 n -0000331883 00000 n -0000331948 00000 n -0000332013 00000 n -0000332077 00000 n -0000332142 00000 n -0000332207 00000 n -0000332272 00000 n -0000332337 00000 n -0000332402 00000 n -0000332467 00000 n -0000332532 00000 n -0000332597 00000 n -0000332662 00000 n -0000332726 00000 n -0000332791 00000 n -0000338472 00000 n -0000335300 00000 n -0000333084 00000 n -0000335425 00000 n -0000335489 00000 n -0000335554 00000 n -0000335619 00000 n -0000335684 00000 n -0000335749 00000 n -0000335814 00000 n -0000335879 00000 n -0000335944 00000 n -0000336009 00000 n -0000336074 00000 n -0000336139 00000 n -0000336204 00000 n -0000336269 00000 n -0000336334 00000 n -0000336399 00000 n -0000336464 00000 n -0000336529 00000 n -0000336594 00000 n -0000336658 00000 n -0000336723 00000 n -0000336788 00000 n -0000336853 00000 n -0000336918 00000 n -0000336983 00000 n -0000337048 00000 n -0000337113 00000 n -0000337178 00000 n -0000337243 00000 n -0000337308 00000 n -0000337373 00000 n -0000337438 00000 n -0000337503 00000 n -0000337568 00000 n -0000337633 00000 n -0000337698 00000 n -0000337762 00000 n -0000337827 00000 n -0000337892 00000 n -0000337957 00000 n -0000338085 00000 n -0000338149 00000 n -0000338214 00000 n -0000338279 00000 n -0000338344 00000 n -0000338408 00000 n -0000596099 00000 n -0000343568 00000 n -0000340855 00000 n -0000338675 00000 n -0000340980 00000 n -0000341044 00000 n -0000341109 00000 n -0000341174 00000 n -0000341238 00000 n -0000341303 00000 n -0000341368 00000 n -0000341433 00000 n -0000341498 00000 n -0000341563 00000 n -0000341628 00000 n -0000341693 00000 n -0000341758 00000 n -0000341821 00000 n -0000341886 00000 n -0000341951 00000 n -0000342016 00000 n -0000342081 00000 n -0000342146 00000 n -0000342210 00000 n -0000342275 00000 n -0000342340 00000 n -0000342405 00000 n -0000342470 00000 n -0000342535 00000 n -0000342599 00000 n -0000342664 00000 n -0000342729 00000 n -0000342794 00000 n -0000342859 00000 n -0000342924 00000 n -0000342989 00000 n -0000343054 00000 n -0000343119 00000 n -0000343183 00000 n -0000343248 00000 n -0000343376 00000 n -0000343440 00000 n -0000343504 00000 n -0000347191 00000 n -0000347347 00000 n -0000347503 00000 n -0000347661 00000 n -0000347822 00000 n -0000347982 00000 n -0000348137 00000 n -0000348298 00000 n -0000348457 00000 n -0000356458 00000 n -0000349319 00000 n -0000346946 00000 n -0000343758 00000 n -0000348616 00000 n -0000348680 00000 n -0000348744 00000 n -0000348808 00000 n -0000348872 00000 n -0000348936 00000 n -0000349000 00000 n -0000349064 00000 n -0000349128 00000 n -0000349255 00000 n -0000347088 00000 n -0000356614 00000 n -0000356775 00000 n -0000356936 00000 n -0000357102 00000 n -0000357269 00000 n -0000357434 00000 n -0000357593 00000 n -0000357759 00000 n -0000357926 00000 n -0000358093 00000 n -0000358252 00000 n -0000358419 00000 n -0000358586 00000 n -0000358746 00000 n -0000358907 00000 n -0000359063 00000 n -0000359223 00000 n -0000359383 00000 n -0000359543 00000 n -0000359703 00000 n -0000359863 00000 n -0000360019 00000 n -0000360180 00000 n -0000360341 00000 n -0000360508 00000 n -0000360674 00000 n -0000360841 00000 n -0000361008 00000 n -0000361175 00000 n -0000361341 00000 n -0000361506 00000 n -0000361673 00000 n -0000361840 00000 n -0000362008 00000 n -0000362175 00000 n -0000362343 00000 n -0000362504 00000 n -0000362671 00000 n -0000362838 00000 n -0000363005 00000 n -0000363172 00000 n -0000363339 00000 n -0000363505 00000 n -0000363672 00000 n -0000363892 00000 n -0000355889 00000 n -0000349496 00000 n -0000363828 00000 n -0000356031 00000 n -0000364148 00000 n -0000364173 00000 n -0000376158 00000 n -0000364401 00000 n -0000364504 00000 n -0000376400 00000 n -0000377124 00000 n -0000377358 00000 n -0000390870 00000 n -0000377681 00000 n -0000377788 00000 n -0000391104 00000 n -0000391855 00000 n -0000392081 00000 n -0000403115 00000 n -0000392228 00000 n -0000392326 00000 n -0000403355 00000 n -0000404033 00000 n -0000404264 00000 n -0000405375 00000 n -0000404319 00000 n -0000404416 00000 n -0000405618 00000 n -0000406228 00000 n -0000406432 00000 n -0000408983 00000 n -0000406639 00000 n -0000406745 00000 n -0000409231 00000 n -0000409926 00000 n -0000410136 00000 n -0000419946 00000 n -0000410762 00000 n -0000410897 00000 n -0000420186 00000 n -0000421270 00000 n -0000421474 00000 n -0000423479 00000 n -0000421618 00000 n -0000421724 00000 n -0000423726 00000 n -0000424391 00000 n -0000424601 00000 n -0000426286 00000 n -0000424714 00000 n -0000424820 00000 n -0000426535 00000 n -0000427188 00000 n -0000427399 00000 n -0000434480 00000 n -0000427837 00000 n -0000427952 00000 n -0000434720 00000 n -0000435592 00000 n -0000435795 00000 n -0000441197 00000 n -0000436148 00000 n -0000436262 00000 n -0000441441 00000 n -0000442214 00000 n -0000442419 00000 n -0000448674 00000 n -0000442868 00000 n -0000442976 00000 n -0000448914 00000 n -0000449791 00000 n -0000449995 00000 n -0000452307 00000 n -0000450151 00000 n -0000450257 00000 n -0000452550 00000 n -0000453209 00000 n -0000453413 00000 n -0000455433 00000 n -0000453527 00000 n -0000453631 00000 n -0000455675 00000 n -0000456320 00000 n -0000456525 00000 n -0000459578 00000 n -0000456816 00000 n -0000456923 00000 n -0000459818 00000 n -0000460554 00000 n -0000460758 00000 n -0000467467 00000 n -0000461184 00000 n -0000461299 00000 n -0000467708 00000 n -0000468563 00000 n -0000593687 00000 n -0000468768 00000 n -0000593775 00000 n -0000468795 00000 n -0000593572 00000 n -0000468822 00000 n -0000468847 00000 n -0000469080 00000 n -0000469297 00000 n -0000473453 00000 n -0000469617 00000 n -0000469723 00000 n -0000473695 00000 n -0000474438 00000 n -0000474642 00000 n -0000477110 00000 n -0000474854 00000 n -0000474960 00000 n -0000477350 00000 n -0000478033 00000 n -0000478237 00000 n -0000487392 00000 n -0000478716 00000 n -0000478837 00000 n -0000487633 00000 n -0000488626 00000 n -0000488831 00000 n -0000490841 00000 n -0000488945 00000 n -0000489049 00000 n -0000491083 00000 n -0000491729 00000 n -0000491934 00000 n -0000494352 00000 n -0000492170 00000 n -0000492276 00000 n -0000494593 00000 n -0000495292 00000 n -0000495497 00000 n -0000504730 00000 n -0000496048 00000 n -0000496174 00000 n -0000504972 00000 n -0000505958 00000 n -0000506164 00000 n -0000512185 00000 n -0000506556 00000 n -0000506664 00000 n -0000512425 00000 n -0000513247 00000 n -0000513450 00000 n -0000514499 00000 n -0000513528 00000 n -0000513628 00000 n -0000514739 00000 n -0000515361 00000 n -0000515565 00000 n -0000519551 00000 n -0000515855 00000 n -0000515961 00000 n -0000519792 00000 n -0000520525 00000 n -0000520730 00000 n -0000522289 00000 n -0000520823 00000 n -0000520924 00000 n -0000522528 00000 n -0000523154 00000 n -0000523356 00000 n -0000525593 00000 n -0000523535 00000 n -0000523641 00000 n -0000525834 00000 n -0000526503 00000 n -0000526708 00000 n -0000529498 00000 n -0000526903 00000 n -0000527010 00000 n -0000529740 00000 n -0000530436 00000 n -0000530642 00000 n -0000530730 00000 n -0000531774 00000 n -0000530808 00000 n -0000530908 00000 n -0000532015 00000 n -0000532639 00000 n -0000532844 00000 n -0000534647 00000 n -0000532955 00000 n -0000533058 00000 n -0000534889 00000 n -0000535532 00000 n -0000542709 00000 n -0000535738 00000 n -0000546482 00000 n -0000542942 00000 n -0000549242 00000 n -0000546762 00000 n -0000572900 00000 n -0000549483 00000 n -0000587282 00000 n -0000573207 00000 n -0000590554 00000 n -0000587520 00000 n -0000593320 00000 n -0000590820 00000 n -0000596208 00000 n -0000596325 00000 n -0000601463 00000 n -0000602128 00000 n -0000602797 00000 n -0000603466 00000 n -0000604132 00000 n -0000604801 00000 n -0000605469 00000 n -0000606140 00000 n -0000606804 00000 n -0000607473 00000 n -0000608142 00000 n -0000608808 00000 n -0000609477 00000 n -0000610146 00000 n -0000610811 00000 n -0000611482 00000 n -0000612150 00000 n -0000612819 00000 n -0000613485 00000 n -0000614154 00000 n -0000614823 00000 n -0000615489 00000 n -0000616158 00000 n -0000616826 00000 n -0000617497 00000 n -0000618162 00000 n -0000618831 00000 n -0000619500 00000 n -0000620166 00000 n -0000620835 00000 n -0000621504 00000 n -0000622157 00000 n -0000622761 00000 n -0000623367 00000 n -0000623973 00000 n -0000624576 00000 n -0000625183 00000 n -0000625788 00000 n -0000626394 00000 n -0000626998 00000 n -0000627604 00000 n -0000628210 00000 n -0000628814 00000 n -0000629444 00000 n -0000630078 00000 n -0000630715 00000 n -0000631345 00000 n -0000631980 00000 n -0000632615 00000 n -0000633247 00000 n -0000633882 00000 n -0000634517 00000 n -0000635148 00000 n -0000635785 00000 n -0000636419 00000 n -0000637054 00000 n -0000637686 00000 n -0000638321 00000 n -0000638956 00000 n -0000639618 00000 n -0000640409 00000 n -0000641057 00000 n -0000641738 00000 n -0000642529 00000 n -0000643511 00000 n -0000644148 00000 n -0000644503 00000 n -0000644871 00000 n -0000644960 00000 n -0000645054 00000 n -0000645094 00000 n -0000645226 00000 n +0000018024 00000 n +0000018086 00000 n +0000535771 00000 n +0000532879 00000 n +0000594841 00000 n +0000530675 00000 n +0000526754 00000 n +0000523408 00000 n +0000520776 00000 n +0000515613 00000 n +0000513500 00000 n +0000506208 00000 n +0000495543 00000 n +0000491980 00000 n +0000488877 00000 n +0000478285 00000 n +0000474690 00000 n +0000595199 00000 n +0000594481 00000 n +0000594662 00000 n +0000595375 00000 n +0000595021 00000 n +0000468814 00000 n +0000460806 00000 n +0000456571 00000 n +0000018208 00000 n +0000453461 00000 n +0000450043 00000 n +0000017836 00000 n +0000018271 00000 n +0000595549 00000 n +0000017280 00000 n +0000022581 00000 n +0000022742 00000 n +0000022903 00000 n +0000023426 00000 n +0000022399 00000 n +0000018770 00000 n +0000023059 00000 n +0000442465 00000 n +0000435845 00000 n +0000023363 00000 n +0000022536 00000 n +0000028167 00000 n +0000028323 00000 n +0000028786 00000 n +0000027993 00000 n +0000023667 00000 n +0000028478 00000 n +0000427433 00000 n +0000028662 00000 n +0000028724 00000 n +0000028130 00000 n +0000033154 00000 n +0000033315 00000 n +0000033475 00000 n +0000033630 00000 n +0000033786 00000 n +0000033952 00000 n +0000034306 00000 n +0000032948 00000 n +0000029079 00000 n +0000034118 00000 n +0000424637 00000 n +0000421193 00000 n +0000034180 00000 n +0000034243 00000 n +0000033085 00000 n +0000039639 00000 n +0000039800 00000 n +0000039956 00000 n +0000040114 00000 n +0000040269 00000 n +0000040694 00000 n +0000039441 00000 n +0000034573 00000 n +0000040447 00000 n +0000409843 00000 n +0000040570 00000 n +0000040633 00000 n +0000039578 00000 n +0000094167 00000 n +0000044369 00000 n +0000044530 00000 n +0000044936 00000 n +0000044195 00000 n +0000041052 00000 n +0000044691 00000 n +0000044332 00000 n +0000047327 00000 n +0000047144 00000 n +0000045164 00000 n +0000047265 00000 n +0000051297 00000 n +0000051458 00000 n +0000051619 00000 n +0000051780 00000 n +0000051941 00000 n +0000052405 00000 n +0000051099 00000 n +0000047503 00000 n +0000052097 00000 n +0000052342 00000 n +0000051236 00000 n +0000055659 00000 n +0000055415 00000 n +0000052659 00000 n +0000055536 00000 n +0000059734 00000 n +0000059891 00000 n +0000060048 00000 n +0000060204 00000 n +0000060857 00000 n +0000059544 00000 n +0000055874 00000 n +0000060361 00000 n +0000060605 00000 n +0000060668 00000 n +0000060731 00000 n +0000060794 00000 n +0000059681 00000 n +0000064031 00000 n +0000063787 00000 n +0000061111 00000 n +0000063908 00000 n +0000595702 00000 n +0000067895 00000 n +0000068358 00000 n +0000067729 00000 n +0000064220 00000 n +0000068052 00000 n +0000068295 00000 n +0000067866 00000 n +0000073269 00000 n +0000073429 00000 n +0000073897 00000 n +0000073095 00000 n +0000068625 00000 n +0000073589 00000 n +0000073232 00000 n +0000077471 00000 n +0000077226 00000 n +0000074138 00000 n +0000077347 00000 n +0000081334 00000 n +0000081495 00000 n +0000081656 00000 n +0000081813 00000 n +0000082217 00000 n +0000081144 00000 n +0000077660 00000 n +0000081969 00000 n +0000082093 00000 n +0000082155 00000 n +0000081281 00000 n +0000086118 00000 n +0000086275 00000 n +0000086432 00000 n +0000086589 00000 n +0000086746 00000 n +0000086907 00000 n +0000087068 00000 n +0000087225 00000 n +0000087838 00000 n +0000085896 00000 n +0000082458 00000 n +0000087402 00000 n +0000406151 00000 n +0000087464 00000 n +0000087527 00000 n +0000087652 00000 n +0000087715 00000 n +0000087777 00000 n +0000086033 00000 n +0000090816 00000 n +0000090571 00000 n +0000088105 00000 n +0000090692 00000 n +0000403952 00000 n +0000391779 00000 n +0000377040 00000 n +0000091825 00000 n +0000091642 00000 n +0000091044 00000 n +0000091763 00000 n +0000094229 00000 n +0000093984 00000 n +0000091962 00000 n +0000094105 00000 n +0000098244 00000 n +0000098401 00000 n +0000098557 00000 n +0000098714 00000 n +0000099307 00000 n +0000098054 00000 n +0000094392 00000 n +0000098871 00000 n +0000099057 00000 n +0000099120 00000 n +0000099183 00000 n +0000099246 00000 n +0000098191 00000 n +0000105034 00000 n +0000102276 00000 n +0000099600 00000 n +0000102397 00000 n +0000594336 00000 n +0000102583 00000 n +0000102646 00000 n +0000102709 00000 n +0000102772 00000 n +0000102835 00000 n +0000102898 00000 n +0000102961 00000 n +0000103022 00000 n +0000103085 00000 n +0000103148 00000 n +0000103211 00000 n +0000103274 00000 n +0000103337 00000 n +0000103399 00000 n +0000103462 00000 n +0000103525 00000 n +0000103588 00000 n +0000103651 00000 n +0000103714 00000 n +0000103777 00000 n +0000103840 00000 n +0000103903 00000 n +0000103966 00000 n +0000104029 00000 n +0000104092 00000 n +0000104155 00000 n +0000104218 00000 n +0000104281 00000 n +0000104344 00000 n +0000104407 00000 n +0000104469 00000 n +0000104532 00000 n +0000104595 00000 n +0000104658 00000 n +0000104721 00000 n +0000104784 00000 n +0000104847 00000 n +0000104910 00000 n +0000104972 00000 n +0000595855 00000 n +0000110843 00000 n +0000107391 00000 n +0000105237 00000 n +0000107512 00000 n +0000107574 00000 n +0000107637 00000 n +0000107699 00000 n +0000107762 00000 n +0000107825 00000 n +0000107887 00000 n +0000107949 00000 n +0000108012 00000 n +0000108075 00000 n +0000108138 00000 n +0000108201 00000 n +0000108264 00000 n +0000108327 00000 n +0000108390 00000 n +0000108453 00000 n +0000108515 00000 n +0000108578 00000 n +0000108641 00000 n +0000108704 00000 n +0000108767 00000 n +0000108830 00000 n +0000108893 00000 n +0000108956 00000 n +0000109019 00000 n +0000109082 00000 n +0000109145 00000 n +0000109208 00000 n +0000109271 00000 n +0000109334 00000 n +0000109397 00000 n +0000109460 00000 n +0000109523 00000 n +0000109586 00000 n +0000109649 00000 n +0000109711 00000 n +0000109774 00000 n +0000109837 00000 n +0000109900 00000 n +0000109963 00000 n +0000110026 00000 n +0000110089 00000 n +0000110152 00000 n +0000110215 00000 n +0000110278 00000 n +0000110341 00000 n +0000110403 00000 n +0000110466 00000 n +0000110529 00000 n +0000110592 00000 n +0000110655 00000 n +0000110718 00000 n +0000110781 00000 n +0000116080 00000 n +0000114076 00000 n +0000111006 00000 n +0000114197 00000 n +0000114259 00000 n +0000114322 00000 n +0000114384 00000 n +0000114447 00000 n +0000114510 00000 n +0000114573 00000 n +0000114636 00000 n +0000114699 00000 n +0000114762 00000 n +0000114825 00000 n +0000114888 00000 n +0000114949 00000 n +0000115012 00000 n +0000115075 00000 n +0000115138 00000 n +0000115201 00000 n +0000115264 00000 n +0000115327 00000 n +0000115452 00000 n +0000115515 00000 n +0000115578 00000 n +0000115641 00000 n +0000115704 00000 n +0000115767 00000 n +0000115830 00000 n +0000115893 00000 n +0000115956 00000 n +0000116018 00000 n +0000120669 00000 n +0000118726 00000 n +0000116282 00000 n +0000118847 00000 n +0000118909 00000 n +0000118972 00000 n +0000119035 00000 n +0000119096 00000 n +0000119159 00000 n +0000119222 00000 n +0000119285 00000 n +0000119348 00000 n +0000119411 00000 n +0000119474 00000 n +0000119537 00000 n +0000119599 00000 n +0000119662 00000 n +0000119725 00000 n +0000119788 00000 n +0000119851 00000 n +0000119914 00000 n +0000119977 00000 n +0000120040 00000 n +0000120103 00000 n +0000120166 00000 n +0000120229 00000 n +0000120291 00000 n +0000120354 00000 n +0000120417 00000 n +0000120480 00000 n +0000120543 00000 n +0000120606 00000 n +0000125512 00000 n +0000123251 00000 n +0000120832 00000 n +0000123372 00000 n +0000123434 00000 n +0000123497 00000 n +0000123560 00000 n +0000123623 00000 n +0000123686 00000 n +0000123749 00000 n +0000123812 00000 n +0000123875 00000 n +0000123938 00000 n +0000124001 00000 n +0000124064 00000 n +0000124127 00000 n +0000124190 00000 n +0000124252 00000 n +0000124315 00000 n +0000124378 00000 n +0000124441 00000 n +0000124504 00000 n +0000124567 00000 n +0000124630 00000 n +0000124693 00000 n +0000124756 00000 n +0000124819 00000 n +0000124882 00000 n +0000124945 00000 n +0000125008 00000 n +0000125071 00000 n +0000125134 00000 n +0000125197 00000 n +0000125260 00000 n +0000125323 00000 n +0000125386 00000 n +0000125449 00000 n +0000130916 00000 n +0000127651 00000 n +0000125688 00000 n +0000127772 00000 n +0000127834 00000 n +0000127897 00000 n +0000127960 00000 n +0000128023 00000 n +0000128086 00000 n +0000128149 00000 n +0000128212 00000 n +0000128275 00000 n +0000128338 00000 n +0000128401 00000 n +0000128464 00000 n +0000128527 00000 n +0000128590 00000 n +0000128653 00000 n +0000128716 00000 n +0000128779 00000 n +0000128841 00000 n +0000128904 00000 n +0000128967 00000 n +0000129030 00000 n +0000129093 00000 n +0000129156 00000 n +0000129219 00000 n +0000129282 00000 n +0000129345 00000 n +0000129408 00000 n +0000129471 00000 n +0000129533 00000 n +0000129596 00000 n +0000129659 00000 n +0000129722 00000 n +0000129785 00000 n +0000129848 00000 n +0000129911 00000 n +0000129974 00000 n +0000130037 00000 n +0000130100 00000 n +0000130163 00000 n +0000130225 00000 n +0000130288 00000 n +0000130351 00000 n +0000130414 00000 n +0000130477 00000 n +0000130540 00000 n +0000130603 00000 n +0000130666 00000 n +0000130729 00000 n +0000130792 00000 n +0000130854 00000 n +0000137041 00000 n +0000133591 00000 n +0000131079 00000 n +0000133712 00000 n +0000133836 00000 n +0000133898 00000 n +0000133961 00000 n +0000134024 00000 n +0000134087 00000 n +0000134150 00000 n +0000134213 00000 n +0000134276 00000 n +0000134339 00000 n +0000134402 00000 n +0000134465 00000 n +0000134528 00000 n +0000134590 00000 n +0000134653 00000 n +0000134716 00000 n +0000134779 00000 n +0000134842 00000 n +0000134905 00000 n +0000134968 00000 n +0000135031 00000 n +0000135094 00000 n +0000135156 00000 n +0000135219 00000 n +0000135282 00000 n +0000135345 00000 n +0000135408 00000 n +0000135471 00000 n +0000135533 00000 n +0000135596 00000 n +0000135659 00000 n +0000135722 00000 n +0000135785 00000 n +0000135848 00000 n +0000135911 00000 n +0000135974 00000 n +0000136037 00000 n +0000136099 00000 n +0000136162 00000 n +0000136225 00000 n +0000136288 00000 n +0000136351 00000 n +0000136414 00000 n +0000136477 00000 n +0000136540 00000 n +0000136603 00000 n +0000136665 00000 n +0000136728 00000 n +0000136791 00000 n +0000136854 00000 n +0000136917 00000 n +0000136979 00000 n +0000143288 00000 n +0000139774 00000 n +0000137217 00000 n +0000139895 00000 n +0000139957 00000 n +0000140020 00000 n +0000140082 00000 n +0000140145 00000 n +0000140208 00000 n +0000140271 00000 n +0000140334 00000 n +0000140397 00000 n +0000140460 00000 n +0000140523 00000 n +0000140586 00000 n +0000140649 00000 n +0000140712 00000 n +0000140775 00000 n +0000140837 00000 n +0000140900 00000 n +0000140963 00000 n +0000141026 00000 n +0000141089 00000 n +0000141152 00000 n +0000141215 00000 n +0000141278 00000 n +0000141341 00000 n +0000141404 00000 n +0000141467 00000 n +0000141530 00000 n +0000141593 00000 n +0000141656 00000 n +0000141719 00000 n +0000141782 00000 n +0000141845 00000 n +0000141908 00000 n +0000141971 00000 n +0000142032 00000 n +0000142095 00000 n +0000142158 00000 n +0000142221 00000 n +0000142284 00000 n +0000142347 00000 n +0000142410 00000 n +0000142473 00000 n +0000142535 00000 n +0000142598 00000 n +0000142661 00000 n +0000142724 00000 n +0000142787 00000 n +0000142850 00000 n +0000142913 00000 n +0000142976 00000 n +0000143038 00000 n +0000143101 00000 n +0000143164 00000 n +0000143226 00000 n +0000148875 00000 n +0000145488 00000 n +0000143451 00000 n +0000145609 00000 n +0000145671 00000 n +0000145734 00000 n +0000145796 00000 n +0000145859 00000 n +0000145921 00000 n +0000145984 00000 n +0000146047 00000 n +0000146110 00000 n +0000146173 00000 n +0000146236 00000 n +0000146299 00000 n +0000146362 00000 n +0000146425 00000 n +0000146488 00000 n +0000146551 00000 n +0000146614 00000 n +0000146677 00000 n +0000146740 00000 n +0000146803 00000 n +0000146866 00000 n +0000146929 00000 n +0000146992 00000 n +0000147054 00000 n +0000147117 00000 n +0000147180 00000 n +0000147243 00000 n +0000147306 00000 n +0000147369 00000 n +0000147432 00000 n +0000147495 00000 n +0000147558 00000 n +0000147620 00000 n +0000147683 00000 n +0000147746 00000 n +0000147809 00000 n +0000147872 00000 n +0000147935 00000 n +0000147998 00000 n +0000148061 00000 n +0000148124 00000 n +0000148185 00000 n +0000148248 00000 n +0000148311 00000 n +0000148374 00000 n +0000148499 00000 n +0000148562 00000 n +0000148625 00000 n +0000148688 00000 n +0000148751 00000 n +0000148813 00000 n +0000155137 00000 n +0000151245 00000 n +0000149064 00000 n +0000151366 00000 n +0000151428 00000 n +0000151491 00000 n +0000151553 00000 n +0000151616 00000 n +0000151679 00000 n +0000151742 00000 n +0000151805 00000 n +0000151868 00000 n +0000151931 00000 n +0000151994 00000 n +0000152057 00000 n +0000152119 00000 n +0000152182 00000 n +0000152245 00000 n +0000152308 00000 n +0000152371 00000 n +0000152434 00000 n +0000152497 00000 n +0000152560 00000 n +0000152623 00000 n +0000152685 00000 n +0000152748 00000 n +0000152811 00000 n +0000152874 00000 n +0000152937 00000 n +0000153000 00000 n +0000153063 00000 n +0000153126 00000 n +0000153189 00000 n +0000153251 00000 n +0000153314 00000 n +0000153377 00000 n +0000153440 00000 n +0000153503 00000 n +0000153566 00000 n +0000153629 00000 n +0000153692 00000 n +0000153755 00000 n +0000153817 00000 n +0000153880 00000 n +0000153943 00000 n +0000154006 00000 n +0000154069 00000 n +0000154132 00000 n +0000154195 00000 n +0000154258 00000 n +0000154321 00000 n +0000154383 00000 n +0000154446 00000 n +0000154509 00000 n +0000154572 00000 n +0000154635 00000 n +0000154698 00000 n +0000154761 00000 n +0000154824 00000 n +0000154887 00000 n +0000154949 00000 n +0000155012 00000 n +0000155075 00000 n +0000160772 00000 n +0000157449 00000 n +0000155300 00000 n +0000157570 00000 n +0000157694 00000 n +0000157756 00000 n +0000157818 00000 n +0000157881 00000 n +0000157944 00000 n +0000158007 00000 n +0000158070 00000 n +0000158133 00000 n +0000158196 00000 n +0000158259 00000 n +0000158384 00000 n +0000158447 00000 n +0000158510 00000 n +0000158573 00000 n +0000158636 00000 n +0000158699 00000 n +0000158762 00000 n +0000158825 00000 n +0000158887 00000 n +0000158950 00000 n +0000159013 00000 n +0000159076 00000 n +0000159139 00000 n +0000159202 00000 n +0000159265 00000 n +0000159328 00000 n +0000159391 00000 n +0000159454 00000 n +0000159516 00000 n +0000159579 00000 n +0000159642 00000 n +0000159705 00000 n +0000159768 00000 n +0000159831 00000 n +0000159894 00000 n +0000159957 00000 n +0000160020 00000 n +0000160082 00000 n +0000160207 00000 n +0000160270 00000 n +0000160333 00000 n +0000160396 00000 n +0000160459 00000 n +0000160522 00000 n +0000160585 00000 n +0000160648 00000 n +0000160710 00000 n +0000596008 00000 n +0000166727 00000 n +0000163060 00000 n +0000160948 00000 n +0000163181 00000 n +0000163243 00000 n +0000163306 00000 n +0000163368 00000 n +0000163431 00000 n +0000163494 00000 n +0000163557 00000 n +0000163620 00000 n +0000163683 00000 n +0000163746 00000 n +0000163809 00000 n +0000163872 00000 n +0000163934 00000 n +0000163997 00000 n +0000164060 00000 n +0000164123 00000 n +0000164186 00000 n +0000164249 00000 n +0000164312 00000 n +0000164375 00000 n +0000164437 00000 n +0000164500 00000 n +0000164563 00000 n +0000164626 00000 n +0000164689 00000 n +0000164752 00000 n +0000164815 00000 n +0000164878 00000 n +0000164940 00000 n +0000165004 00000 n +0000165068 00000 n +0000165132 00000 n +0000165196 00000 n +0000165260 00000 n +0000165324 00000 n +0000165388 00000 n +0000165452 00000 n +0000165515 00000 n +0000165579 00000 n +0000165643 00000 n +0000165707 00000 n +0000165771 00000 n +0000165835 00000 n +0000165899 00000 n +0000165962 00000 n +0000166026 00000 n +0000166090 00000 n +0000166154 00000 n +0000166218 00000 n +0000166282 00000 n +0000166346 00000 n +0000166410 00000 n +0000166474 00000 n +0000166537 00000 n +0000166601 00000 n +0000166664 00000 n +0000172943 00000 n +0000169058 00000 n +0000166890 00000 n +0000169182 00000 n +0000169246 00000 n +0000169311 00000 n +0000169375 00000 n +0000169440 00000 n +0000169505 00000 n +0000169570 00000 n +0000169635 00000 n +0000169700 00000 n +0000169765 00000 n +0000169830 00000 n +0000169895 00000 n +0000169959 00000 n +0000170024 00000 n +0000170089 00000 n +0000170154 00000 n +0000170219 00000 n +0000170284 00000 n +0000170349 00000 n +0000170413 00000 n +0000170478 00000 n +0000170543 00000 n +0000170608 00000 n +0000170673 00000 n +0000170738 00000 n +0000170803 00000 n +0000170868 00000 n +0000170933 00000 n +0000170997 00000 n +0000171062 00000 n +0000171127 00000 n +0000171192 00000 n +0000171257 00000 n +0000171322 00000 n +0000171387 00000 n +0000171452 00000 n +0000171517 00000 n +0000171581 00000 n +0000171646 00000 n +0000171711 00000 n +0000171776 00000 n +0000171841 00000 n +0000171906 00000 n +0000171971 00000 n +0000172036 00000 n +0000172101 00000 n +0000172166 00000 n +0000172231 00000 n +0000172296 00000 n +0000172361 00000 n +0000172426 00000 n +0000172491 00000 n +0000172556 00000 n +0000172621 00000 n +0000172685 00000 n +0000172750 00000 n +0000172815 00000 n +0000172879 00000 n +0000179206 00000 n +0000175583 00000 n +0000173107 00000 n +0000175707 00000 n +0000175771 00000 n +0000175836 00000 n +0000175900 00000 n +0000175965 00000 n +0000176030 00000 n +0000176094 00000 n +0000176159 00000 n +0000176224 00000 n +0000176289 00000 n +0000176354 00000 n +0000176419 00000 n +0000176483 00000 n +0000176548 00000 n +0000176613 00000 n +0000176678 00000 n +0000176743 00000 n +0000176808 00000 n +0000176873 00000 n +0000176938 00000 n +0000177003 00000 n +0000177067 00000 n +0000177132 00000 n +0000177197 00000 n +0000177262 00000 n +0000177327 00000 n +0000177392 00000 n +0000177457 00000 n +0000177522 00000 n +0000177587 00000 n +0000177652 00000 n +0000177717 00000 n +0000177782 00000 n +0000177847 00000 n +0000177912 00000 n +0000177977 00000 n +0000178040 00000 n +0000178105 00000 n +0000178170 00000 n +0000178235 00000 n +0000178300 00000 n +0000178365 00000 n +0000178430 00000 n +0000178495 00000 n +0000178560 00000 n +0000178624 00000 n +0000178689 00000 n +0000178754 00000 n +0000178819 00000 n +0000178883 00000 n +0000178948 00000 n +0000179013 00000 n +0000179078 00000 n +0000179142 00000 n +0000185615 00000 n +0000182056 00000 n +0000179370 00000 n +0000182180 00000 n +0000182244 00000 n +0000182309 00000 n +0000182373 00000 n +0000182438 00000 n +0000182503 00000 n +0000182568 00000 n +0000182633 00000 n +0000182698 00000 n +0000182763 00000 n +0000182828 00000 n +0000182893 00000 n +0000182957 00000 n +0000183022 00000 n +0000183087 00000 n +0000183151 00000 n +0000183216 00000 n +0000183281 00000 n +0000183346 00000 n +0000183411 00000 n +0000183476 00000 n +0000183541 00000 n +0000183605 00000 n +0000183670 00000 n +0000183735 00000 n +0000183800 00000 n +0000183865 00000 n +0000183930 00000 n +0000183995 00000 n +0000184059 00000 n +0000184124 00000 n +0000184189 00000 n +0000184254 00000 n +0000184319 00000 n +0000184384 00000 n +0000184449 00000 n +0000184514 00000 n +0000184579 00000 n +0000184643 00000 n +0000184708 00000 n +0000184773 00000 n +0000184838 00000 n +0000184903 00000 n +0000184968 00000 n +0000185033 00000 n +0000185098 00000 n +0000185163 00000 n +0000185227 00000 n +0000185292 00000 n +0000185357 00000 n +0000185422 00000 n +0000185487 00000 n +0000185551 00000 n +0000191373 00000 n +0000188336 00000 n +0000185792 00000 n +0000188460 00000 n +0000188524 00000 n +0000188589 00000 n +0000188653 00000 n +0000188718 00000 n +0000188783 00000 n +0000188848 00000 n +0000188913 00000 n +0000188978 00000 n +0000189043 00000 n +0000189108 00000 n +0000189173 00000 n +0000189237 00000 n +0000189302 00000 n +0000189367 00000 n +0000189432 00000 n +0000189497 00000 n +0000189562 00000 n +0000189627 00000 n +0000189692 00000 n +0000189757 00000 n +0000189822 00000 n +0000189887 00000 n +0000189952 00000 n +0000190017 00000 n +0000190082 00000 n +0000190147 00000 n +0000190212 00000 n +0000190275 00000 n +0000190340 00000 n +0000190405 00000 n +0000190470 00000 n +0000190535 00000 n +0000190600 00000 n +0000190665 00000 n +0000190730 00000 n +0000190795 00000 n +0000190860 00000 n +0000190925 00000 n +0000190986 00000 n +0000191051 00000 n +0000191116 00000 n +0000191181 00000 n +0000191309 00000 n +0000197605 00000 n +0000193528 00000 n +0000191563 00000 n +0000193652 00000 n +0000193716 00000 n +0000193779 00000 n +0000193844 00000 n +0000193909 00000 n +0000193974 00000 n +0000194039 00000 n +0000194104 00000 n +0000194169 00000 n +0000194234 00000 n +0000194299 00000 n +0000194363 00000 n +0000194428 00000 n +0000194493 00000 n +0000194558 00000 n +0000194623 00000 n +0000194688 00000 n +0000194753 00000 n +0000194818 00000 n +0000194883 00000 n +0000194947 00000 n +0000195012 00000 n +0000195077 00000 n +0000195142 00000 n +0000195207 00000 n +0000195272 00000 n +0000195337 00000 n +0000195402 00000 n +0000195467 00000 n +0000195531 00000 n +0000195596 00000 n +0000195661 00000 n +0000195726 00000 n +0000195791 00000 n +0000195856 00000 n +0000195921 00000 n +0000195986 00000 n +0000196051 00000 n +0000196116 00000 n +0000196180 00000 n +0000196245 00000 n +0000196310 00000 n +0000196375 00000 n +0000196440 00000 n +0000196505 00000 n +0000196570 00000 n +0000196635 00000 n +0000196700 00000 n +0000196763 00000 n +0000196828 00000 n +0000196893 00000 n +0000196958 00000 n +0000197023 00000 n +0000197088 00000 n +0000197153 00000 n +0000197218 00000 n +0000197283 00000 n +0000197347 00000 n +0000197412 00000 n +0000197477 00000 n +0000197541 00000 n +0000203502 00000 n +0000199686 00000 n +0000197756 00000 n +0000199810 00000 n +0000199874 00000 n +0000199939 00000 n +0000200003 00000 n +0000200068 00000 n +0000200133 00000 n +0000200198 00000 n +0000200263 00000 n +0000200328 00000 n +0000200393 00000 n +0000200457 00000 n +0000200522 00000 n +0000200587 00000 n +0000200652 00000 n +0000200717 00000 n +0000200782 00000 n +0000200847 00000 n +0000200912 00000 n +0000200977 00000 n +0000201041 00000 n +0000201106 00000 n +0000201171 00000 n +0000201236 00000 n +0000201301 00000 n +0000201366 00000 n +0000201431 00000 n +0000201496 00000 n +0000201561 00000 n +0000201625 00000 n +0000201690 00000 n +0000201755 00000 n +0000201820 00000 n +0000201885 00000 n +0000201950 00000 n +0000202015 00000 n +0000202080 00000 n +0000202145 00000 n +0000202272 00000 n +0000202337 00000 n +0000202401 00000 n +0000202466 00000 n +0000202531 00000 n +0000202596 00000 n +0000202661 00000 n +0000202726 00000 n +0000202791 00000 n +0000202856 00000 n +0000202921 00000 n +0000202984 00000 n +0000203049 00000 n +0000203114 00000 n +0000203179 00000 n +0000203244 00000 n +0000203309 00000 n +0000203374 00000 n +0000203438 00000 n +0000209100 00000 n +0000206576 00000 n +0000203666 00000 n +0000206700 00000 n +0000206764 00000 n +0000206829 00000 n +0000206893 00000 n +0000206958 00000 n +0000207023 00000 n +0000207088 00000 n +0000207153 00000 n +0000207218 00000 n +0000207283 00000 n +0000207348 00000 n +0000207413 00000 n +0000207541 00000 n +0000207606 00000 n +0000207671 00000 n +0000207736 00000 n +0000207801 00000 n +0000207866 00000 n +0000207931 00000 n +0000207996 00000 n +0000208061 00000 n +0000208126 00000 n +0000208191 00000 n +0000208256 00000 n +0000208321 00000 n +0000208386 00000 n +0000208451 00000 n +0000208515 00000 n +0000208580 00000 n +0000208645 00000 n +0000208710 00000 n +0000208775 00000 n +0000208840 00000 n +0000208905 00000 n +0000208970 00000 n +0000209035 00000 n +0000215313 00000 n +0000211500 00000 n +0000209290 00000 n +0000211624 00000 n +0000211688 00000 n +0000211753 00000 n +0000211817 00000 n +0000211882 00000 n +0000211947 00000 n +0000212012 00000 n +0000212076 00000 n +0000212141 00000 n +0000212206 00000 n +0000212270 00000 n +0000212335 00000 n +0000212400 00000 n +0000212465 00000 n +0000212530 00000 n +0000212595 00000 n +0000212723 00000 n +0000212787 00000 n +0000212852 00000 n +0000212917 00000 n +0000212982 00000 n +0000213047 00000 n +0000213112 00000 n +0000213177 00000 n +0000213242 00000 n +0000213307 00000 n +0000213434 00000 n +0000213499 00000 n +0000213564 00000 n +0000213629 00000 n +0000213694 00000 n +0000213759 00000 n +0000213824 00000 n +0000213888 00000 n +0000213953 00000 n +0000214018 00000 n +0000214083 00000 n +0000214148 00000 n +0000214213 00000 n +0000214278 00000 n +0000214343 00000 n +0000214408 00000 n +0000214471 00000 n +0000214536 00000 n +0000214601 00000 n +0000214666 00000 n +0000214731 00000 n +0000214796 00000 n +0000214861 00000 n +0000214926 00000 n +0000214991 00000 n +0000215055 00000 n +0000215120 00000 n +0000215185 00000 n +0000215249 00000 n +0000220615 00000 n +0000217638 00000 n +0000215490 00000 n +0000217763 00000 n +0000217827 00000 n +0000217892 00000 n +0000217956 00000 n +0000218021 00000 n +0000218086 00000 n +0000218151 00000 n +0000218216 00000 n +0000218281 00000 n +0000218346 00000 n +0000218411 00000 n +0000218476 00000 n +0000218541 00000 n +0000218606 00000 n +0000218670 00000 n +0000218735 00000 n +0000218800 00000 n +0000218865 00000 n +0000218930 00000 n +0000218995 00000 n +0000219060 00000 n +0000219125 00000 n +0000219190 00000 n +0000219255 00000 n +0000219320 00000 n +0000219385 00000 n +0000219450 00000 n +0000219515 00000 n +0000219580 00000 n +0000219645 00000 n +0000219710 00000 n +0000219838 00000 n +0000219903 00000 n +0000219968 00000 n +0000220033 00000 n +0000220097 00000 n +0000220161 00000 n +0000220226 00000 n +0000220290 00000 n +0000220355 00000 n +0000220420 00000 n +0000220485 00000 n +0000220550 00000 n +0000596169 00000 n +0000229714 00000 n +0000225857 00000 n +0000224046 00000 n +0000220792 00000 n +0000224171 00000 n +0000224298 00000 n +0000224363 00000 n +0000224428 00000 n +0000224493 00000 n +0000224558 00000 n +0000224623 00000 n +0000224687 00000 n +0000224752 00000 n +0000224817 00000 n +0000224882 00000 n +0000224947 00000 n +0000225012 00000 n +0000225077 00000 n +0000225142 00000 n +0000225207 00000 n +0000225272 00000 n +0000225337 00000 n +0000225402 00000 n +0000225467 00000 n +0000225532 00000 n +0000225597 00000 n +0000225662 00000 n +0000225727 00000 n +0000225792 00000 n +0000229870 00000 n +0000231712 00000 n +0000229532 00000 n +0000226086 00000 n +0000230028 00000 n +0000230092 00000 n +0000230157 00000 n +0000230222 00000 n +0000230287 00000 n +0000230352 00000 n +0000230417 00000 n +0000230481 00000 n +0000230546 00000 n +0000230610 00000 n +0000230675 00000 n +0000230740 00000 n +0000230805 00000 n +0000230870 00000 n +0000230935 00000 n +0000231000 00000 n +0000231065 00000 n +0000231130 00000 n +0000231194 00000 n +0000231259 00000 n +0000231324 00000 n +0000231389 00000 n +0000231454 00000 n +0000231519 00000 n +0000231584 00000 n +0000231648 00000 n +0000229674 00000 n +0000237737 00000 n +0000234634 00000 n +0000231980 00000 n +0000234759 00000 n +0000234823 00000 n +0000234888 00000 n +0000234952 00000 n +0000235017 00000 n +0000235082 00000 n +0000235147 00000 n +0000235211 00000 n +0000235276 00000 n +0000235341 00000 n +0000235406 00000 n +0000235471 00000 n +0000235536 00000 n +0000235601 00000 n +0000235666 00000 n +0000235731 00000 n +0000235858 00000 n +0000235923 00000 n +0000235988 00000 n +0000236053 00000 n +0000236118 00000 n +0000236183 00000 n +0000236248 00000 n +0000236313 00000 n +0000236378 00000 n +0000236443 00000 n +0000236508 00000 n +0000236571 00000 n +0000236636 00000 n +0000236701 00000 n +0000236766 00000 n +0000236831 00000 n +0000236896 00000 n +0000236961 00000 n +0000237026 00000 n +0000237091 00000 n +0000237155 00000 n +0000237220 00000 n +0000237285 00000 n +0000237350 00000 n +0000237415 00000 n +0000237480 00000 n +0000237545 00000 n +0000237610 00000 n +0000237674 00000 n +0000244047 00000 n +0000241070 00000 n +0000237940 00000 n +0000241195 00000 n +0000241259 00000 n +0000241324 00000 n +0000241388 00000 n +0000241453 00000 n +0000241518 00000 n +0000241583 00000 n +0000241648 00000 n +0000241713 00000 n +0000241778 00000 n +0000241843 00000 n +0000241908 00000 n +0000241972 00000 n +0000242037 00000 n +0000242102 00000 n +0000242167 00000 n +0000242232 00000 n +0000242297 00000 n +0000242362 00000 n +0000242427 00000 n +0000242492 00000 n +0000242556 00000 n +0000242621 00000 n +0000242686 00000 n +0000242751 00000 n +0000242816 00000 n +0000242881 00000 n +0000242946 00000 n +0000243011 00000 n +0000243076 00000 n +0000243140 00000 n +0000243205 00000 n +0000243270 00000 n +0000243335 00000 n +0000243400 00000 n +0000243465 00000 n +0000243530 00000 n +0000243595 00000 n +0000243660 00000 n +0000243725 00000 n +0000243789 00000 n +0000243854 00000 n +0000243919 00000 n +0000243983 00000 n +0000248070 00000 n +0000248227 00000 n +0000250197 00000 n +0000247888 00000 n +0000244250 00000 n +0000248384 00000 n +0000248448 00000 n +0000248513 00000 n +0000248577 00000 n +0000248642 00000 n +0000248707 00000 n +0000248771 00000 n +0000248836 00000 n +0000248901 00000 n +0000248965 00000 n +0000249030 00000 n +0000249095 00000 n +0000249159 00000 n +0000249224 00000 n +0000249289 00000 n +0000249354 00000 n +0000249419 00000 n +0000249484 00000 n +0000249549 00000 n +0000249614 00000 n +0000249679 00000 n +0000249744 00000 n +0000249808 00000 n +0000249873 00000 n +0000249938 00000 n +0000250003 00000 n +0000250068 00000 n +0000250133 00000 n +0000248030 00000 n +0000256286 00000 n +0000252658 00000 n +0000250478 00000 n +0000252783 00000 n +0000252847 00000 n +0000252912 00000 n +0000252976 00000 n +0000253041 00000 n +0000253106 00000 n +0000253171 00000 n +0000253236 00000 n +0000253301 00000 n +0000253366 00000 n +0000253431 00000 n +0000253496 00000 n +0000253561 00000 n +0000253626 00000 n +0000253690 00000 n +0000253755 00000 n +0000253820 00000 n +0000253885 00000 n +0000253950 00000 n +0000254015 00000 n +0000254080 00000 n +0000254145 00000 n +0000254210 00000 n +0000254274 00000 n +0000254339 00000 n +0000254404 00000 n +0000254469 00000 n +0000254534 00000 n +0000254599 00000 n +0000254664 00000 n +0000254729 00000 n +0000254794 00000 n +0000254859 00000 n +0000254924 00000 n +0000254989 00000 n +0000255054 00000 n +0000255119 00000 n +0000255184 00000 n +0000255249 00000 n +0000255314 00000 n +0000255379 00000 n +0000255444 00000 n +0000255508 00000 n +0000255572 00000 n +0000255637 00000 n +0000255702 00000 n +0000255767 00000 n +0000255832 00000 n +0000255897 00000 n +0000255962 00000 n +0000256026 00000 n +0000256091 00000 n +0000256156 00000 n +0000256221 00000 n +0000262417 00000 n +0000258401 00000 n +0000256489 00000 n +0000258526 00000 n +0000258590 00000 n +0000258655 00000 n +0000258719 00000 n +0000258784 00000 n +0000258849 00000 n +0000258914 00000 n +0000258979 00000 n +0000259044 00000 n +0000259109 00000 n +0000259174 00000 n +0000259239 00000 n +0000259304 00000 n +0000259369 00000 n +0000259433 00000 n +0000259498 00000 n +0000259563 00000 n +0000259628 00000 n +0000259693 00000 n +0000259758 00000 n +0000259823 00000 n +0000259888 00000 n +0000259953 00000 n +0000260017 00000 n +0000260082 00000 n +0000260147 00000 n +0000260212 00000 n +0000260277 00000 n +0000260342 00000 n +0000260407 00000 n +0000260470 00000 n +0000260535 00000 n +0000260600 00000 n +0000260665 00000 n +0000260730 00000 n +0000260795 00000 n +0000260860 00000 n +0000260925 00000 n +0000260990 00000 n +0000261055 00000 n +0000261120 00000 n +0000261185 00000 n +0000261250 00000 n +0000261315 00000 n +0000261380 00000 n +0000261445 00000 n +0000261510 00000 n +0000261575 00000 n +0000261640 00000 n +0000261704 00000 n +0000261769 00000 n +0000261834 00000 n +0000261899 00000 n +0000261964 00000 n +0000262029 00000 n +0000262094 00000 n +0000262159 00000 n +0000262224 00000 n +0000262289 00000 n +0000262353 00000 n +0000265601 00000 n +0000268352 00000 n +0000265428 00000 n +0000262581 00000 n +0000265759 00000 n +0000265823 00000 n +0000265888 00000 n +0000265952 00000 n +0000266017 00000 n +0000266082 00000 n +0000266147 00000 n +0000266212 00000 n +0000266277 00000 n +0000266342 00000 n +0000266407 00000 n +0000266472 00000 n +0000266536 00000 n +0000266601 00000 n +0000266666 00000 n +0000266731 00000 n +0000266796 00000 n +0000266861 00000 n +0000266926 00000 n +0000266991 00000 n +0000267056 00000 n +0000267121 00000 n +0000267185 00000 n +0000267250 00000 n +0000267315 00000 n +0000267380 00000 n +0000267445 00000 n +0000267510 00000 n +0000267575 00000 n +0000267640 00000 n +0000267705 00000 n +0000267769 00000 n +0000267834 00000 n +0000267899 00000 n +0000267964 00000 n +0000268028 00000 n +0000268093 00000 n +0000268158 00000 n +0000268223 00000 n +0000268288 00000 n +0000265570 00000 n +0000274414 00000 n +0000270271 00000 n +0000268620 00000 n +0000270396 00000 n +0000270460 00000 n +0000270525 00000 n +0000270589 00000 n +0000270654 00000 n +0000270719 00000 n +0000270784 00000 n +0000270849 00000 n +0000270914 00000 n +0000270979 00000 n +0000271044 00000 n +0000271109 00000 n +0000271173 00000 n +0000271238 00000 n +0000271303 00000 n +0000271368 00000 n +0000271433 00000 n +0000271497 00000 n +0000271562 00000 n +0000271627 00000 n +0000271692 00000 n +0000271756 00000 n +0000271821 00000 n +0000271886 00000 n +0000271951 00000 n +0000272016 00000 n +0000272081 00000 n +0000272146 00000 n +0000272211 00000 n +0000272276 00000 n +0000272340 00000 n +0000272405 00000 n +0000272470 00000 n +0000272535 00000 n +0000272600 00000 n +0000272665 00000 n +0000272730 00000 n +0000272795 00000 n +0000272860 00000 n +0000272925 00000 n +0000272989 00000 n +0000273054 00000 n +0000273119 00000 n +0000273184 00000 n +0000273249 00000 n +0000273314 00000 n +0000273379 00000 n +0000273444 00000 n +0000273509 00000 n +0000273572 00000 n +0000273637 00000 n +0000273702 00000 n +0000273767 00000 n +0000273832 00000 n +0000273897 00000 n +0000273962 00000 n +0000274027 00000 n +0000274092 00000 n +0000274156 00000 n +0000274221 00000 n +0000274286 00000 n +0000274350 00000 n +0000280290 00000 n +0000277254 00000 n +0000274578 00000 n +0000277379 00000 n +0000277443 00000 n +0000277508 00000 n +0000277572 00000 n +0000277637 00000 n +0000277702 00000 n +0000277767 00000 n +0000277832 00000 n +0000277897 00000 n +0000277962 00000 n +0000278027 00000 n +0000278092 00000 n +0000278156 00000 n +0000278219 00000 n +0000278284 00000 n +0000278349 00000 n +0000278414 00000 n +0000278479 00000 n +0000278543 00000 n +0000278608 00000 n +0000278672 00000 n +0000278737 00000 n +0000278802 00000 n +0000278867 00000 n +0000278932 00000 n +0000278997 00000 n +0000279062 00000 n +0000279125 00000 n +0000279190 00000 n +0000279255 00000 n +0000279320 00000 n +0000279385 00000 n +0000279450 00000 n +0000279515 00000 n +0000279579 00000 n +0000279643 00000 n +0000279708 00000 n +0000279773 00000 n +0000279838 00000 n +0000279903 00000 n +0000279968 00000 n +0000280033 00000 n +0000280098 00000 n +0000280162 00000 n +0000280226 00000 n +0000596333 00000 n +0000285970 00000 n +0000283834 00000 n +0000280493 00000 n +0000283959 00000 n +0000284023 00000 n +0000284088 00000 n +0000284152 00000 n +0000284217 00000 n +0000284282 00000 n +0000284347 00000 n +0000284412 00000 n +0000284477 00000 n +0000284542 00000 n +0000284607 00000 n +0000284672 00000 n +0000284737 00000 n +0000284802 00000 n +0000284867 00000 n +0000284932 00000 n +0000284997 00000 n +0000285062 00000 n +0000285127 00000 n +0000285192 00000 n +0000285257 00000 n +0000285321 00000 n +0000285386 00000 n +0000285451 00000 n +0000285515 00000 n +0000285580 00000 n +0000285645 00000 n +0000285710 00000 n +0000285775 00000 n +0000285840 00000 n +0000285905 00000 n +0000294418 00000 n +0000291560 00000 n +0000288646 00000 n +0000286186 00000 n +0000288771 00000 n +0000288835 00000 n +0000288899 00000 n +0000288964 00000 n +0000289029 00000 n +0000289094 00000 n +0000289159 00000 n +0000289224 00000 n +0000289289 00000 n +0000289354 00000 n +0000289418 00000 n +0000289483 00000 n +0000289547 00000 n +0000289612 00000 n +0000289676 00000 n +0000289741 00000 n +0000289806 00000 n +0000289871 00000 n +0000289936 00000 n +0000290001 00000 n +0000290066 00000 n +0000290131 00000 n +0000290196 00000 n +0000290260 00000 n +0000290325 00000 n +0000290390 00000 n +0000290455 00000 n +0000290520 00000 n +0000290585 00000 n +0000290650 00000 n +0000290715 00000 n +0000290780 00000 n +0000290845 00000 n +0000290910 00000 n +0000290975 00000 n +0000291040 00000 n +0000291105 00000 n +0000291170 00000 n +0000291235 00000 n +0000291300 00000 n +0000291365 00000 n +0000291430 00000 n +0000291495 00000 n +0000298140 00000 n +0000294245 00000 n +0000291763 00000 n +0000294576 00000 n +0000294640 00000 n +0000294705 00000 n +0000294770 00000 n +0000294835 00000 n +0000294899 00000 n +0000294964 00000 n +0000295029 00000 n +0000295094 00000 n +0000295159 00000 n +0000295224 00000 n +0000295289 00000 n +0000295354 00000 n +0000295419 00000 n +0000295483 00000 n +0000295548 00000 n +0000295612 00000 n +0000295740 00000 n +0000295805 00000 n +0000295870 00000 n +0000295935 00000 n +0000296000 00000 n +0000296065 00000 n +0000296130 00000 n +0000296195 00000 n +0000296259 00000 n +0000296324 00000 n +0000296389 00000 n +0000296454 00000 n +0000296519 00000 n +0000296584 00000 n +0000296649 00000 n +0000296714 00000 n +0000296779 00000 n +0000296843 00000 n +0000296908 00000 n +0000296973 00000 n +0000297038 00000 n +0000297103 00000 n +0000297168 00000 n +0000297233 00000 n +0000297298 00000 n +0000297363 00000 n +0000297427 00000 n +0000297492 00000 n +0000297557 00000 n +0000297622 00000 n +0000297687 00000 n +0000297752 00000 n +0000297817 00000 n +0000297882 00000 n +0000297947 00000 n +0000298011 00000 n +0000298076 00000 n +0000294387 00000 n +0000304307 00000 n +0000300489 00000 n +0000298369 00000 n +0000300614 00000 n +0000300678 00000 n +0000300743 00000 n +0000300807 00000 n +0000300872 00000 n +0000300937 00000 n +0000301002 00000 n +0000301067 00000 n +0000301132 00000 n +0000301197 00000 n +0000301262 00000 n +0000301327 00000 n +0000301391 00000 n +0000301456 00000 n +0000301521 00000 n +0000301586 00000 n +0000301651 00000 n +0000301716 00000 n +0000301781 00000 n +0000301846 00000 n +0000301910 00000 n +0000301975 00000 n +0000302040 00000 n +0000302104 00000 n +0000302169 00000 n +0000302233 00000 n +0000302298 00000 n +0000302363 00000 n +0000302428 00000 n +0000302493 00000 n +0000302558 00000 n +0000302623 00000 n +0000302688 00000 n +0000302753 00000 n +0000302817 00000 n +0000302882 00000 n +0000302946 00000 n +0000303011 00000 n +0000303076 00000 n +0000303141 00000 n +0000303206 00000 n +0000303271 00000 n +0000303336 00000 n +0000303401 00000 n +0000303466 00000 n +0000303530 00000 n +0000303595 00000 n +0000303660 00000 n +0000303725 00000 n +0000303790 00000 n +0000303855 00000 n +0000303920 00000 n +0000303985 00000 n +0000304050 00000 n +0000304114 00000 n +0000304179 00000 n +0000304243 00000 n +0000310261 00000 n +0000306182 00000 n +0000304471 00000 n +0000306307 00000 n +0000306371 00000 n +0000306436 00000 n +0000306500 00000 n +0000306565 00000 n +0000306630 00000 n +0000306695 00000 n +0000306760 00000 n +0000306825 00000 n +0000306890 00000 n +0000306955 00000 n +0000307020 00000 n +0000307084 00000 n +0000307149 00000 n +0000307214 00000 n +0000307279 00000 n +0000307344 00000 n +0000307409 00000 n +0000307474 00000 n +0000307539 00000 n +0000307604 00000 n +0000307668 00000 n +0000307733 00000 n +0000307798 00000 n +0000307863 00000 n +0000307928 00000 n +0000307993 00000 n +0000308058 00000 n +0000308123 00000 n +0000308188 00000 n +0000308252 00000 n +0000308317 00000 n +0000308381 00000 n +0000308446 00000 n +0000308511 00000 n +0000308576 00000 n +0000308640 00000 n +0000308705 00000 n +0000308770 00000 n +0000308835 00000 n +0000308900 00000 n +0000308965 00000 n +0000309030 00000 n +0000309095 00000 n +0000309160 00000 n +0000309224 00000 n +0000309289 00000 n +0000309354 00000 n +0000309419 00000 n +0000309484 00000 n +0000309549 00000 n +0000309614 00000 n +0000309679 00000 n +0000309744 00000 n +0000309809 00000 n +0000309874 00000 n +0000309938 00000 n +0000310003 00000 n +0000310068 00000 n +0000310133 00000 n +0000310197 00000 n +0000315930 00000 n +0000313017 00000 n +0000310425 00000 n +0000313142 00000 n +0000313206 00000 n +0000313271 00000 n +0000313335 00000 n +0000313400 00000 n +0000313465 00000 n +0000313530 00000 n +0000313595 00000 n +0000313660 00000 n +0000313725 00000 n +0000313790 00000 n +0000313855 00000 n +0000313920 00000 n +0000313985 00000 n +0000314050 00000 n +0000314115 00000 n +0000314180 00000 n +0000314244 00000 n +0000314309 00000 n +0000314374 00000 n +0000314439 00000 n +0000314504 00000 n +0000314569 00000 n +0000314634 00000 n +0000314699 00000 n +0000314764 00000 n +0000314828 00000 n +0000314893 00000 n +0000314958 00000 n +0000315022 00000 n +0000315086 00000 n +0000315151 00000 n +0000315216 00000 n +0000315281 00000 n +0000315346 00000 n +0000315411 00000 n +0000315476 00000 n +0000315541 00000 n +0000315606 00000 n +0000315671 00000 n +0000315736 00000 n +0000315801 00000 n +0000315866 00000 n +0000318411 00000 n +0000321745 00000 n +0000318238 00000 n +0000316133 00000 n +0000318569 00000 n +0000318633 00000 n +0000318697 00000 n +0000318762 00000 n +0000318827 00000 n +0000318892 00000 n +0000318957 00000 n +0000319022 00000 n +0000319087 00000 n +0000319150 00000 n +0000319215 00000 n +0000319279 00000 n +0000319344 00000 n +0000319409 00000 n +0000319474 00000 n +0000319539 00000 n +0000319604 00000 n +0000319669 00000 n +0000319733 00000 n +0000319798 00000 n +0000319863 00000 n +0000319928 00000 n +0000319993 00000 n +0000320058 00000 n +0000320123 00000 n +0000320188 00000 n +0000320253 00000 n +0000320316 00000 n +0000320381 00000 n +0000320446 00000 n +0000320511 00000 n +0000320576 00000 n +0000320641 00000 n +0000320706 00000 n +0000320771 00000 n +0000320836 00000 n +0000320901 00000 n +0000320966 00000 n +0000321031 00000 n +0000321095 00000 n +0000321160 00000 n +0000321225 00000 n +0000321290 00000 n +0000321355 00000 n +0000321420 00000 n +0000321485 00000 n +0000321550 00000 n +0000321615 00000 n +0000321680 00000 n +0000318380 00000 n +0000327449 00000 n +0000324082 00000 n +0000321974 00000 n +0000324207 00000 n +0000324334 00000 n +0000324399 00000 n +0000324464 00000 n +0000324528 00000 n +0000324593 00000 n +0000324658 00000 n +0000324723 00000 n +0000324788 00000 n +0000324853 00000 n +0000324918 00000 n +0000324983 00000 n +0000325048 00000 n +0000325112 00000 n +0000325177 00000 n +0000325242 00000 n +0000325307 00000 n +0000325372 00000 n +0000325437 00000 n +0000325502 00000 n +0000325567 00000 n +0000325632 00000 n +0000325696 00000 n +0000325761 00000 n +0000325826 00000 n +0000325891 00000 n +0000325956 00000 n +0000326021 00000 n +0000326086 00000 n +0000326151 00000 n +0000326216 00000 n +0000326281 00000 n +0000326345 00000 n +0000326410 00000 n +0000326475 00000 n +0000326540 00000 n +0000326605 00000 n +0000326670 00000 n +0000326735 00000 n +0000326800 00000 n +0000326865 00000 n +0000326929 00000 n +0000326994 00000 n +0000327059 00000 n +0000327124 00000 n +0000327189 00000 n +0000327254 00000 n +0000327319 00000 n +0000327384 00000 n +0000332973 00000 n +0000330453 00000 n +0000327652 00000 n +0000330578 00000 n +0000330705 00000 n +0000330769 00000 n +0000330834 00000 n +0000330899 00000 n +0000330964 00000 n +0000331029 00000 n +0000331094 00000 n +0000331159 00000 n +0000331224 00000 n +0000331352 00000 n +0000331417 00000 n +0000331482 00000 n +0000331547 00000 n +0000331611 00000 n +0000331676 00000 n +0000331741 00000 n +0000331806 00000 n +0000331871 00000 n +0000331936 00000 n +0000332001 00000 n +0000332066 00000 n +0000332131 00000 n +0000332195 00000 n +0000332260 00000 n +0000332325 00000 n +0000332390 00000 n +0000332455 00000 n +0000332520 00000 n +0000332585 00000 n +0000332650 00000 n +0000332715 00000 n +0000332780 00000 n +0000332844 00000 n +0000332909 00000 n +0000338590 00000 n +0000335418 00000 n +0000333202 00000 n +0000335543 00000 n +0000335607 00000 n +0000335672 00000 n +0000335737 00000 n +0000335802 00000 n +0000335867 00000 n +0000335932 00000 n +0000335997 00000 n +0000336062 00000 n +0000336127 00000 n +0000336192 00000 n +0000336257 00000 n +0000336322 00000 n +0000336387 00000 n +0000336452 00000 n +0000336517 00000 n +0000336582 00000 n +0000336647 00000 n +0000336712 00000 n +0000336776 00000 n +0000336841 00000 n +0000336906 00000 n +0000336971 00000 n +0000337036 00000 n +0000337101 00000 n +0000337166 00000 n +0000337231 00000 n +0000337296 00000 n +0000337361 00000 n +0000337426 00000 n +0000337491 00000 n +0000337556 00000 n +0000337621 00000 n +0000337686 00000 n +0000337751 00000 n +0000337816 00000 n +0000337880 00000 n +0000337945 00000 n +0000338010 00000 n +0000338075 00000 n +0000338203 00000 n +0000338267 00000 n +0000338332 00000 n +0000338397 00000 n +0000338462 00000 n +0000338526 00000 n +0000596497 00000 n +0000343270 00000 n +0000340621 00000 n +0000338793 00000 n +0000340746 00000 n +0000340810 00000 n +0000340875 00000 n +0000340940 00000 n +0000341004 00000 n +0000341069 00000 n +0000341134 00000 n +0000341199 00000 n +0000341264 00000 n +0000341329 00000 n +0000341394 00000 n +0000341459 00000 n +0000341524 00000 n +0000341587 00000 n +0000341652 00000 n +0000341717 00000 n +0000341782 00000 n +0000341847 00000 n +0000341912 00000 n +0000341976 00000 n +0000342041 00000 n +0000342106 00000 n +0000342171 00000 n +0000342236 00000 n +0000342301 00000 n +0000342365 00000 n +0000342430 00000 n +0000342495 00000 n +0000342560 00000 n +0000342625 00000 n +0000342690 00000 n +0000342755 00000 n +0000342820 00000 n +0000342885 00000 n +0000342949 00000 n +0000343014 00000 n +0000343142 00000 n +0000343206 00000 n +0000346208 00000 n +0000355270 00000 n +0000355426 00000 n +0000347126 00000 n +0000346035 00000 n +0000343473 00000 n +0000346362 00000 n +0000346426 00000 n +0000346490 00000 n +0000346554 00000 n +0000346617 00000 n +0000346680 00000 n +0000346744 00000 n +0000346808 00000 n +0000346872 00000 n +0000346936 00000 n +0000347062 00000 n +0000346177 00000 n +0000355586 00000 n +0000355747 00000 n +0000355907 00000 n +0000356063 00000 n +0000356224 00000 n +0000356385 00000 n +0000356546 00000 n +0000356702 00000 n +0000356863 00000 n +0000357024 00000 n +0000357191 00000 n +0000357358 00000 n +0000357523 00000 n +0000357683 00000 n +0000357849 00000 n +0000358016 00000 n +0000358183 00000 n +0000358343 00000 n +0000358510 00000 n +0000358677 00000 n +0000358837 00000 n +0000358998 00000 n +0000359154 00000 n +0000359312 00000 n +0000359473 00000 n +0000359632 00000 n +0000359793 00000 n +0000359952 00000 n +0000360108 00000 n +0000360268 00000 n +0000360428 00000 n +0000360595 00000 n +0000360760 00000 n +0000360927 00000 n +0000361093 00000 n +0000361260 00000 n +0000361427 00000 n +0000361594 00000 n +0000361760 00000 n +0000361927 00000 n +0000362091 00000 n +0000362259 00000 n +0000362426 00000 n +0000362587 00000 n +0000362754 00000 n +0000362921 00000 n +0000363088 00000 n +0000363255 00000 n +0000363422 00000 n +0000363589 00000 n +0000363756 00000 n +0000363972 00000 n +0000354629 00000 n +0000347303 00000 n +0000363908 00000 n +0000354771 00000 n +0000364228 00000 n +0000364253 00000 n +0000376238 00000 n +0000364481 00000 n +0000364584 00000 n +0000376480 00000 n +0000377204 00000 n +0000377438 00000 n +0000390950 00000 n +0000377761 00000 n +0000377868 00000 n +0000391184 00000 n +0000391935 00000 n +0000392161 00000 n +0000403195 00000 n +0000392308 00000 n +0000392406 00000 n +0000403435 00000 n +0000404113 00000 n +0000404344 00000 n +0000405455 00000 n +0000404399 00000 n +0000404496 00000 n +0000405698 00000 n +0000406308 00000 n +0000406512 00000 n +0000409063 00000 n +0000406719 00000 n +0000406825 00000 n +0000409311 00000 n +0000410006 00000 n +0000410216 00000 n +0000420026 00000 n +0000410842 00000 n +0000410977 00000 n +0000420266 00000 n +0000421350 00000 n +0000421554 00000 n +0000423880 00000 n +0000421721 00000 n +0000421827 00000 n +0000424127 00000 n +0000424800 00000 n +0000425010 00000 n +0000426695 00000 n +0000425123 00000 n +0000425229 00000 n +0000426944 00000 n +0000427597 00000 n +0000427808 00000 n +0000434889 00000 n +0000428246 00000 n +0000428361 00000 n +0000435129 00000 n +0000436001 00000 n +0000436204 00000 n +0000441606 00000 n +0000436557 00000 n +0000436671 00000 n +0000441850 00000 n +0000442623 00000 n +0000442828 00000 n +0000449083 00000 n +0000443277 00000 n +0000443385 00000 n +0000449323 00000 n +0000450200 00000 n +0000450404 00000 n +0000452716 00000 n +0000450560 00000 n +0000450666 00000 n +0000452959 00000 n +0000453618 00000 n +0000453822 00000 n +0000455842 00000 n +0000453936 00000 n +0000454040 00000 n +0000456084 00000 n +0000456729 00000 n +0000456934 00000 n +0000459987 00000 n +0000457225 00000 n +0000457332 00000 n +0000460227 00000 n +0000460963 00000 n +0000461167 00000 n +0000467876 00000 n +0000461593 00000 n +0000461708 00000 n +0000468117 00000 n +0000468972 00000 n +0000594085 00000 n +0000469177 00000 n +0000594173 00000 n +0000469204 00000 n +0000593970 00000 n +0000469231 00000 n +0000469256 00000 n +0000469489 00000 n +0000469706 00000 n +0000473862 00000 n +0000470026 00000 n +0000470132 00000 n +0000474104 00000 n +0000474847 00000 n +0000475051 00000 n +0000477519 00000 n +0000475263 00000 n +0000475369 00000 n +0000477759 00000 n +0000478442 00000 n +0000478646 00000 n +0000487801 00000 n +0000479125 00000 n +0000479246 00000 n +0000488042 00000 n +0000489035 00000 n +0000489240 00000 n +0000491250 00000 n +0000489354 00000 n +0000489458 00000 n +0000491492 00000 n +0000492138 00000 n +0000492343 00000 n +0000494761 00000 n +0000492579 00000 n +0000492685 00000 n +0000495002 00000 n +0000495701 00000 n +0000495906 00000 n +0000505139 00000 n +0000496457 00000 n +0000496583 00000 n +0000505381 00000 n +0000506367 00000 n +0000506573 00000 n +0000512594 00000 n +0000506965 00000 n +0000507073 00000 n +0000512834 00000 n +0000513656 00000 n +0000513859 00000 n +0000514908 00000 n +0000513937 00000 n +0000514037 00000 n +0000515148 00000 n +0000515770 00000 n +0000515974 00000 n +0000519960 00000 n +0000516264 00000 n +0000516370 00000 n +0000520201 00000 n +0000520934 00000 n +0000521139 00000 n +0000522698 00000 n +0000521232 00000 n +0000521333 00000 n +0000522937 00000 n +0000523563 00000 n +0000523765 00000 n +0000526002 00000 n +0000523944 00000 n +0000524050 00000 n +0000526243 00000 n +0000526912 00000 n +0000527117 00000 n +0000529898 00000 n +0000527305 00000 n +0000527412 00000 n +0000530140 00000 n +0000530834 00000 n +0000531040 00000 n +0000531128 00000 n +0000532172 00000 n +0000531206 00000 n +0000531306 00000 n +0000532413 00000 n +0000533037 00000 n +0000533242 00000 n +0000535045 00000 n +0000533353 00000 n +0000533456 00000 n +0000535287 00000 n +0000535930 00000 n +0000543107 00000 n +0000536136 00000 n +0000546880 00000 n +0000543340 00000 n +0000549640 00000 n +0000547160 00000 n +0000573298 00000 n +0000549881 00000 n +0000587680 00000 n +0000573605 00000 n +0000590952 00000 n +0000587918 00000 n +0000593718 00000 n +0000591218 00000 n +0000596606 00000 n +0000596723 00000 n +0000601861 00000 n +0000602526 00000 n +0000603195 00000 n +0000603864 00000 n +0000604530 00000 n +0000605199 00000 n +0000605867 00000 n +0000606538 00000 n +0000607202 00000 n +0000607871 00000 n +0000608540 00000 n +0000609206 00000 n +0000609875 00000 n +0000610544 00000 n +0000611209 00000 n +0000611880 00000 n +0000612548 00000 n +0000613217 00000 n +0000613883 00000 n +0000614552 00000 n +0000615221 00000 n +0000615887 00000 n +0000616556 00000 n +0000617224 00000 n +0000617895 00000 n +0000618560 00000 n +0000619229 00000 n +0000619898 00000 n +0000620564 00000 n +0000621233 00000 n +0000621902 00000 n +0000622555 00000 n +0000623159 00000 n +0000623765 00000 n +0000624371 00000 n +0000624974 00000 n +0000625581 00000 n +0000626186 00000 n +0000626792 00000 n +0000627396 00000 n +0000628002 00000 n +0000628608 00000 n +0000629212 00000 n +0000629842 00000 n +0000630476 00000 n +0000631113 00000 n +0000631743 00000 n +0000632378 00000 n +0000633013 00000 n +0000633645 00000 n +0000634280 00000 n +0000634915 00000 n +0000635546 00000 n +0000636183 00000 n +0000636817 00000 n +0000637452 00000 n +0000638084 00000 n +0000638719 00000 n +0000639354 00000 n +0000640016 00000 n +0000640807 00000 n +0000641455 00000 n +0000642136 00000 n +0000642927 00000 n +0000643909 00000 n +0000644546 00000 n +0000644901 00000 n +0000645269 00000 n +0000645358 00000 n +0000645452 00000 n +0000645492 00000 n +0000645624 00000 n trailer -<< /Size 2874 /Root 2872 0 R /Info 2873 0 R /ID [ ] >> +<< /Size 2874 /Root 2872 0 R /Info 2873 0 R /ID [ <42D6E246E3124F0765D2813A534851DE> <42D6E246E3124F0765D2813A534851DE> ] >> startxref -645787 +646185 %%EOF diff --git a/support/latexindent/LatexIndent/Document.pm b/support/latexindent/LatexIndent/Document.pm index 4a99721a34..16a01bf209 100644 --- a/support/latexindent/LatexIndent/Document.pm +++ b/support/latexindent/LatexIndent/Document.pm @@ -240,15 +240,7 @@ sub output_indented_text { } elsif ( $switches{outputToFile} ) { - # diacritics in file names (highlighted in https://github.com/cmhughes/latexindent.pl/pull/439) - # - # note, related: - # - # git config --add core.quotePath false - ${$self}{outputToFile} = decode( "utf-8", ${$self}{outputToFile} ); - $logger->info("Outputting to file ${$self}{outputToFile}"); - open( OUTPUTFILE, ">", ${$self}{outputToFile} ); print OUTPUTFILE ${$self}{body}; close(OUTPUTFILE); diff --git a/support/latexindent/LatexIndent/FileExtension.pm b/support/latexindent/LatexIndent/FileExtension.pm index b0f49f246d..b61ffc1bb4 100644 --- a/support/latexindent/LatexIndent/FileExtension.pm +++ b/support/latexindent/LatexIndent/FileExtension.pm @@ -21,6 +21,7 @@ use PerlIO::encoding; use open ':std', ':encoding(UTF-8)'; use File::Basename; # to get the filename and directory path use Exporter qw/import/; +use Encode qw/decode/; use LatexIndent::GetYamlSettings qw/%mainSettings/; use LatexIndent::Switches qw/%switches $is_check_switch_active/; use LatexIndent::LogFile qw/$logger/; @@ -114,7 +115,12 @@ sub file_extension_check { $logger->info("*-o switch active: output file check"); - ${$self}{outputToFile} = $switches{outputToFile}; + # diacritics in file names (highlighted in https://github.com/cmhughes/latexindent.pl/pull/439) + # + # note, related: + # + # git config --add core.quotePath false + ${$self}{outputToFile} = decode( "utf-8", $switches{outputToFile} ); if ( $fileName eq "-" and $switches{outputToFile} =~ m/^\+/ ) { $logger->info("STDIN input mode active, -o switch is removing all + symbols"); @@ -124,7 +130,7 @@ sub file_extension_check { # the -o file name might begin with a + symbol if ( $switches{outputToFile} =~ m/^\+(.*)/ and $1 ne "+" ) { $logger->info("-o switch called with + symbol at the beginning: ${$self}{outputToFile}"); - ${$self}{outputToFile} = ${$self}{baseName} . $1; + ${$self}{outputToFile} = decode( "utf-8", ${$self}{baseName} . $1 ); $logger->info("output file is now: ${$self}{outputToFile}"); } @@ -137,7 +143,8 @@ sub file_extension_check { # if there is no extension, then add the extension from the file to be operated upon if ( !$ext ) { - $logger->info("-o switch called with file name without extension: $switches{outputToFile}"); + $logger->info( + "-o switch called with file name without extension: " . decode( "utf-8", $switches{outputToFile} ) ); ${$self}{outputToFile} = $name . ( $name =~ m/\.\z/ ? q() : "." ) . $strippedFileExtension; $logger->info( "Updated to ${$self}{outputToFile} as the file extension of the input file is $strippedFileExtension"); diff --git a/support/latexindent/LatexIndent/LogFile.pm b/support/latexindent/LatexIndent/LogFile.pm index 93b6ad0930..5847ca42f4 100644 --- a/support/latexindent/LatexIndent/LogFile.pm +++ b/support/latexindent/LatexIndent/LogFile.pm @@ -129,12 +129,9 @@ ENDQUOTE # cruft directory ${$self}{cruftDirectory} = $switches{cruftDirectory} || ( dirname ${$self}{fileName} ); - # diacritics in cruft directory (highlighted in https://github.com/cmhughes/latexindent.pl/pull/439) - ${$self}{cruftDirectory} = decode( "utf-8", ${$self}{cruftDirectory} ); - # if cruft directory does not exist if ( !( -d ${$self}{cruftDirectory} ) ) { - $logger->fatal("*Could not find directory ${$self}{cruftDirectory}"); + $logger->fatal( "*Could not find directory " . decode( "utf-8", ${$self}{cruftDirectory} ) ); $logger->fatal("Exiting, no indentation done."); $self->output_logfile(); exit(6); @@ -143,6 +140,8 @@ ENDQUOTE my $logfileName = ( $switches{cruftDirectory} ? ${$self}{cruftDirectory} . "/" : '' ) . ( $switches{logFileName} || "indent.log" ); + $logfileName = decode( "utf-8", $logfileName ); + # details of the script to log file $logger->info("*$FindBin::Script version $versionNumber, $versionDate, a script to indent .tex files"); $logger->info("$FindBin::Script lives here: $FindBin::RealBin/"); @@ -247,7 +246,7 @@ ENDQUOTE } $logger->info("*Directory for backup files and $logfileName:"); - $logger->info("${$self}{cruftDirectory}"); + $logger->info( $switches{cruftDirectory} ? decode( "utf-8", ${$self}{cruftDirectory} ) : ${$self}{cruftDirectory} ); # output location of modules if ( $FindBin::Script eq 'latexindent.pl' or ( $FindBin::Script eq 'latexindent.exe' and $switches{trace} ) ) { diff --git a/support/latexindent/LatexIndent/Version.pm b/support/latexindent/LatexIndent/Version.pm index 457e9c83bf..998d3dbfe3 100644 --- a/support/latexindent/LatexIndent/Version.pm +++ b/support/latexindent/LatexIndent/Version.pm @@ -20,6 +20,6 @@ use warnings; use Exporter qw/import/; our @EXPORT_OK = qw/$versionNumber $versionDate/; -our $versionNumber = '3.20.5'; -our $versionDate = '2023-04-07'; +our $versionNumber = '3.20.6'; +our $versionDate = '2023-04-11'; 1 diff --git a/support/latexindent/README b/support/latexindent/README index 4a3d96433c..95461bf24f 100644 --- a/support/latexindent/README +++ b/support/latexindent/README @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - latexindent.pl, version 3.20.5, 2023-04-07 + latexindent.pl, version 3.20.6, 2023-04-11 PERL script to indent code within environments, and align delimited environments in .tex files. diff --git a/support/latexindent/bin/linux/latexindent b/support/latexindent/bin/linux/latexindent index 3941080085..b4d88492d7 100644 Binary files a/support/latexindent/bin/linux/latexindent and b/support/latexindent/bin/linux/latexindent differ diff --git a/support/latexindent/bin/macos/latexindent b/support/latexindent/bin/macos/latexindent index ef6d8e84b2..e4d021aaba 100644 Binary files a/support/latexindent/bin/macos/latexindent and b/support/latexindent/bin/macos/latexindent differ diff --git a/support/latexindent/defaultSettings.yaml b/support/latexindent/defaultSettings.yaml index 51a8b22229..309ba003af 100644 --- a/support/latexindent/defaultSettings.yaml +++ b/support/latexindent/defaultSettings.yaml @@ -1,5 +1,5 @@ # -# latexindent.pl, version 3.20.5, 2023-04-07 +# latexindent.pl, version 3.20.6, 2023-04-11 # # defaultSettings.yaml, the default settings for latexindent.pl # diff --git a/support/latexindent/documentation/latexindent-yaml-schema.json b/support/latexindent/documentation/latexindent-yaml-schema.json index f2089565dc..ec760e70ac 100644 --- a/support/latexindent/documentation/latexindent-yaml-schema.json +++ b/support/latexindent/documentation/latexindent-yaml-schema.json @@ -2,7 +2,7 @@ "$schema": "http://json-schema.org/schema", "$id": "latexindent-yaml-schema.json", "title": "latexindent.pl YAML schema", - "description": "latexindent.pl YAML schema helper, V3.20.5 2023-04-07", + "description": "latexindent.pl YAML schema helper, V3.20.6 2023-04-11", "type": "object", "properties": { "fileExtensionPreference": { diff --git a/support/latexindent/documentation/latexindent.pdf b/support/latexindent/documentation/latexindent.pdf index e6d1ead45d..deaf1a130f 100644 Binary files a/support/latexindent/documentation/latexindent.pdf and b/support/latexindent/documentation/latexindent.pdf differ diff --git a/support/latexindent/latexindent.pl b/support/latexindent/latexindent.pl index 90e9408b0a..8a041b5435 100755 --- a/support/latexindent/latexindent.pl +++ b/support/latexindent/latexindent.pl @@ -1,5 +1,5 @@ #!/usr/bin/env perl -# latexindent.pl, version 3.20.5, 2023-04-07 +# latexindent.pl, version 3.20.6, 2023-04-11 # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/support/texlab/CHANGELOG.md b/support/texlab/CHANGELOG.md index 39bb7e4e54..557b8ea682 100644 --- a/support/texlab/CHANGELOG.md +++ b/support/texlab/CHANGELOG.md @@ -5,6 +5,13 @@ 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.4.2] - 2023-04-11 + +### Fixed + +- Fix memory leak when editing documents over a long time ([#856](https://github.com/latex-lsp/texlab/issues/856)) +- Fix parsing parentheses in file paths ([#874](https://github.com/latex-lsp/texlab/issues/874)) + ## [5.4.1] - 2023-03-26 ### Fixed diff --git a/support/texlab/Cargo.lock b/support/texlab/Cargo.lock index 7349b26f7d..724266ddb8 100644 --- a/support/texlab/Cargo.lock +++ b/support/texlab/Cargo.lock @@ -8,17 +8,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - [[package]] name = "aho-corasick" version = "0.7.20" @@ -44,16 +33,50 @@ dependencies = [ ] [[package]] -name = "anyhow" -version = "1.0.69" +name = "anstream" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-wincon", + "concolor-override", + "concolor-query", + "is-terminal", + "utf8parse", +] [[package]] -name = "arc-swap" -version = "1.6.0" +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + +[[package]] +name = "anstyle-parse" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-wincon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +dependencies = [ + "anstyle", + "windows-sys 0.45.0", +] + +[[package]] +name = "anyhow" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "assert_unordered" @@ -81,6 +104,25 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "base-db" +version = "0.0.0" +dependencies = [ + "dirs", + "distro", + "itertools", + "log", + "notify", + "once_cell", + "parser", + "regex", + "rowan", + "rustc-hash", + "syntax", + "text-size", + "url", +] + [[package]] name = "beef" version = "0.5.2" @@ -104,9 +146,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "serde", @@ -138,9 +180,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "num-integer", "num-traits", @@ -173,6 +215,24 @@ dependencies = [ "half", ] +[[package]] +name = "citeproc" +version = "0.0.0" +dependencies = [ + "chrono", + "human_name", + "insta", + "isocountry", + "itertools", + "parser", + "rowan", + "rustc-hash", + "syntax", + "titlecase", + "unicode-normalization", + "url", +] + [[package]] name = "clap" version = "3.2.23" @@ -187,30 +247,38 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.8" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" dependencies = [ - "bitflags", + "clap_builder", "clap_derive", - "clap_lex 0.3.2", - "is-terminal", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex 0.4.1", "strsim", - "termcolor", ] [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck", - "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -224,11 +292,23 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" + +[[package]] +name = "concolor-override" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" + +[[package]] +name = "concolor-query" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" dependencies = [ - "os_str_bytes", + "windows-sys 0.45.0", ] [[package]] @@ -251,9 +331,9 @@ checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" [[package]] name = "cpufeatures" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" dependencies = [ "libc", ] @@ -303,25 +383,11 @@ dependencies = [ "itertools", ] -[[package]] -name = "crossbeam" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" -dependencies = [ - "cfg-if", - "crossbeam-channel", - "crossbeam-deque", - "crossbeam-epoch", - "crossbeam-queue", - "crossbeam-utils", -] - [[package]] name = "crossbeam-channel" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" dependencies = [ "cfg-if", "crossbeam-utils", @@ -347,20 +413,10 @@ dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset 0.8.0", + "memoffset", "scopeguard", ] -[[package]] -name = "crossbeam-queue" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.15" @@ -405,22 +461,30 @@ dependencies = [ [[package]] name = "dirs" -version = "4.0.0" +version = "5.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +checksum = "dece029acd3353e3a58ac2e3eb3c8d6c35827a892edc6cc4138ef9c33df46ecd" dependencies = [ "dirs-sys", ] [[package]] name = "dirs-sys" -version = "0.3.7" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +checksum = "04414300db88f70d74c5ff54e50f9e1d1737d9a5b90f53fcf2e95ca2a9ab554b" dependencies = [ "libc", "redox_users", - "winapi", + "windows-sys 0.45.0", +] + +[[package]] +name = "distro" +version = "0.0.0" +dependencies = [ + "anyhow", + "rustc-hash", ] [[package]] @@ -455,13 +519,13 @@ dependencies = [ [[package]] name = "errno" -version = "0.2.8" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" dependencies = [ "errno-dragonfly", "libc", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -474,16 +538,6 @@ dependencies = [ "libc", ] -[[package]] -name = "eyre" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c2b6b5a29c02cdc822728b7d7b8ae1bab3e3b05d44522770ddd49722eeac7eb" -dependencies = [ - "indenter", - "once_cell", -] - [[package]] name = "fastrand" version = "1.9.0" @@ -495,23 +549,23 @@ dependencies = [ [[package]] name = "fern" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdd7b0849075e79ee9a1836df22c717d1eba30451796fdc631b04565dd11e2a" +checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" dependencies = [ "log", ] [[package]] name = "filetime" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" dependencies = [ "cfg-if", "libc", - "redox_syscall", - "windows-sys 0.45.0", + "redox_syscall 0.2.16", + "windows-sys 0.48.0", ] [[package]] @@ -524,19 +578,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "flume" -version = "0.10.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" -dependencies = [ - "futures-core", - "futures-sink", - "nanorand", - "pin-project", - "spin", -] - [[package]] name = "fnv" version = "1.0.7" @@ -561,18 +602,6 @@ dependencies = [ "libc", ] -[[package]] -name = "futures-core" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" - -[[package]] -name = "futures-sink" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" - [[package]] name = "fuzzy-matcher" version = "0.3.7" @@ -584,9 +613,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.6" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", @@ -594,15 +623,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi", - "wasm-bindgen", ] [[package]] @@ -629,18 +656,6 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashlink" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa" -dependencies = [ - "hashbrown", -] [[package]] name = "heck" @@ -702,17 +717,11 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "indenter" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" - [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -740,9 +749,9 @@ dependencies = [ [[package]] name = "insta" -version = "1.28.0" +version = "1.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea5b3894afe466b4bcf0388630fc15e11938a6074af0cd637c825ba2ec8a099" +checksum = "9a28d25139df397cbca21408bb742cf6837e04cdbebf1b07b760caf971d6a972" dependencies = [ "console", "globset", @@ -767,24 +776,25 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" dependencies = [ + "hermit-abi 0.3.1", "libc", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", "rustix", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] [[package]] @@ -855,9 +865,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.140" +version = "0.2.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" +checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" [[package]] name = "linked-hash-map" @@ -867,9 +877,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" [[package]] name = "lock_api" @@ -892,25 +902,34 @@ dependencies = [ [[package]] name = "logos" -version = "0.12.1" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf8b031682c67a8e3d5446840f9573eb7fe26efe7ec8d195c9ac4c0647c502f1" +checksum = "c000ca4d908ff18ac99b93a062cb8958d331c3220719c52e77cb19cc6ac5d2c1" dependencies = [ "logos-derive", ] [[package]] -name = "logos-derive" -version = "0.12.1" +name = "logos-codegen" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d849148dbaf9661a6151d1ca82b13bb4c4c128146a88d05253b38d4e2f496c" +checksum = "dc487311295e0002e452025d6b580b77bb17286de87b57138f3b5db711cded68" dependencies = [ "beef", "fnv", "proc-macro2", "quote", "regex-syntax", - "syn", + "syn 2.0.13", +] + +[[package]] +name = "logos-derive" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbfc0d229f1f42d790440136d941afd806bc9e949e2bcb8faa813b0f00d1267e" +dependencies = [ + "logos-codegen", ] [[package]] @@ -944,15 +963,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.8.0" @@ -983,15 +993,6 @@ dependencies = [ "windows-sys 0.45.0", ] -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom", -] - [[package]] name = "notify" version = "5.1.0" @@ -1053,9 +1054,9 @@ checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "parking_lot" @@ -1075,11 +1076,23 @@ checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.2.16", "smallvec", "windows-sys 0.45.0", ] +[[package]] +name = "parser" +version = "0.0.0" +dependencies = [ + "insta", + "logos", + "once_cell", + "regex", + "rowan", + "syntax", +] + [[package]] name = "percent-encoding" version = "2.2.0" @@ -1088,9 +1101,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" +checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122" dependencies = [ "thiserror", "ucd-trie", @@ -1098,9 +1111,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" +checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15" dependencies = [ "pest", "pest_generator", @@ -1108,22 +1121,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" +checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] name = "pest_meta" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" +checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e" dependencies = [ "once_cell", "pest", @@ -1168,26 +1181,6 @@ dependencies = [ "siphasher", ] -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "plotters" version = "0.3.4" @@ -1216,44 +1209,20 @@ dependencies = [ "plotters-backend", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -1304,6 +1273,15 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_users" version = "0.4.3" @@ -1311,15 +1289,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom", - "redox_syscall", + "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "regex" -version = "1.7.1" +version = "1.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" dependencies = [ "aho-corasick", "memchr", @@ -1328,19 +1306,19 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "rowan" -version = "0.15.10" +version = "0.15.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5811547e7ba31e903fe48c8ceab10d40d70a101f3d15523c847cce91aa71f332" +checksum = "64449cfef9483a475ed56ae30e2da5ee96448789fb2aa240a04beb6a055078bf" dependencies = [ "countme", "hashbrown", - "memoffset 0.6.5", + "memoffset", "rustc-hash", "text-size", ] @@ -1353,60 +1331,24 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustix" -version = "0.36.9" +version = "0.37.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "85597d61f83914ddeba6a47b3b8ffe7365107221c2e557ed94426489fefb5f77" dependencies = [ "bitflags", "errno", "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.45.0", + "windows-sys 0.48.0", ] -[[package]] -name = "rustversion" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" - [[package]] name = "ryu" version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" -[[package]] -name = "salsa-2022" -version = "0.1.0" -source = "git+https://github.com/salsa-rs/salsa?rev=ef7c0f12c8159e7025316e959c26f6278a576fa5#ef7c0f12c8159e7025316e959c26f6278a576fa5" -dependencies = [ - "arc-swap", - "crossbeam", - "crossbeam-utils", - "dashmap", - "hashlink", - "indexmap", - "log", - "parking_lot", - "rustc-hash", - "salsa-2022-macros", - "smallvec", -] - -[[package]] -name = "salsa-2022-macros" -version = "0.1.0" -source = "git+https://github.com/salsa-rs/salsa?rev=ef7c0f12c8159e7025316e959c26f6278a576fa5#ef7c0f12c8159e7025316e959c26f6278a576fa5" -dependencies = [ - "eyre", - "heck", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "same-file" version = "1.0.6" @@ -1424,29 +1366,29 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.154" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.154" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" dependencies = [ "itoa", "ryu", @@ -1465,13 +1407,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -1521,15 +1463,6 @@ dependencies = [ "serde", ] -[[package]] -name = "spin" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" -dependencies = [ - "lock_api", -] - [[package]] name = "strsim" version = "0.10.0" @@ -1537,32 +1470,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" -dependencies = [ - "strum_macros", -] - -[[package]] -name = "strum_macros" -version = "0.24.3" +name = "syn" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ - "heck", "proc-macro2", "quote", - "rustversion", - "syn", + "unicode-ident", ] [[package]] name = "syn" -version = "1.0.109" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" dependencies = [ "proc-macro2", "quote", @@ -1570,70 +1492,68 @@ dependencies = [ ] [[package]] -name = "tempfile" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +name = "syntax" +version = "0.0.0" dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.42.0", + "itertools", + "rowan", ] [[package]] -name = "termcolor" -version = "1.2.0" +name = "tempfile" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" dependencies = [ - "winapi-util", + "cfg-if", + "fastrand", + "redox_syscall 0.3.5", + "rustix", + "windows-sys 0.45.0", ] [[package]] name = "texlab" -version = "5.4.1" +version = "5.4.2" dependencies = [ "anyhow", "assert_unordered", - "chrono", - "clap 4.1.8", + "base-db", + "citeproc", + "clap 4.2.1", "criterion", "crossbeam-channel", "dashmap", "dirs", + "distro", "encoding_rs", "encoding_rs_io", "fern", "flate2", - "flume", "fuzzy-matcher", "human_name", "insta", - "isocountry", "itertools", "log", - "logos", "lsp-server", "lsp-types", "notify", "once_cell", + "parking_lot", + "parser", "regex", "rowan", "rustc-hash", - "salsa-2022", "serde", "serde_json", "serde_regex", "serde_repr", "smol_str", - "strum", + "syntax", "tempfile", "thiserror", "threadpool", "titlecase", - "unicode-normalization", ] [[package]] @@ -1650,22 +1570,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.13", ] [[package]] @@ -1737,9 +1657,9 @@ checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-case-mapping" @@ -1786,6 +1706,12 @@ dependencies = [ "serde", ] +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "version_check" version = "0.9.4" @@ -1794,12 +1720,11 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -1830,7 +1755,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -1852,7 +1777,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -1910,13 +1835,13 @@ version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "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", ] [[package]] @@ -1925,65 +1850,131 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "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.0", +] + +[[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", ] [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[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.42.1" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "yaml-rust" diff --git a/support/texlab/Cargo.toml b/support/texlab/Cargo.toml index dfa23f744a..59e182bf20 100644 --- a/support/texlab/Cargo.toml +++ b/support/texlab/Cargo.toml @@ -1,84 +1,14 @@ -[package] -name = "texlab" -description = "LaTeX Language Server" -version = "5.4.1" +[workspace] +members = ["crates/*"] + +[workspace.package] license = "GPL-3.0" -readme = "README.md" authors = [ - "Eric Förster ", - "Patrick Förster ", + "Eric Förster ", + "Patrick Förster ", ] edition = "2021" rust-version = "1.65" -homepage = "https://github.com/latex-lsp/texlab" -repository = "https://github.com/latex-lsp/texlab" -documentation = "https://github.com/latex-lsp/texlab" -keywords = ["lsp", "server", "latex", "bibtex"] -categories = ["development-tools"] -exclude = [ - ".gitattributes", - ".gitignore", - ".github/**", - "tests/it/**", - "*.snap", - "texlab.1", - "texlab.pdf", - "texlab.tex", -] - -[[bin]] -name = "texlab" -test = false - -[lib] -doctest = false - -[dependencies] -anyhow = "1.0.69" -chrono = { version = "0.4.23", default-features = false, features = ["std"] } -clap = { version = "4.1.6", features = ["derive"] } -crossbeam-channel = "0.5.6" -dashmap = "5.4.0" -dirs = "4.0.0" -encoding_rs = "0.8.32" -encoding_rs_io = "0.1.7" -fern = "0.6.1" -flate2 = "1.0.25" -flume = "0.10.14" -fuzzy-matcher = { version = "0.3.7", features = ["compact"] } -human_name = { version = "2.0.1", default-features = false } -isocountry = "0.3.2" -itertools = "0.10.5" -log = "0.4.17" -logos = "0.12.1" -lsp-server = "0.7.0" -lsp-types = "0.94.0" -notify = "5.1.0" -once_cell = "1.17.1" -regex = "1.7.1" -rowan = "0.15.10" -rustc-hash = "1.1.0" -serde = "1.0.152" -serde_json = "1.0.93" -serde_regex = "1.1.0" -serde_repr = "0.1.10" -smol_str = { version = "0.1.24", features = ["serde"] } -strum = { version = "0.24.1", features = ["derive"] } -tempfile = "3.3.0" -thiserror = "1.0.38" -threadpool = "1.8.1" -titlecase = "2.2.1" -unicode-normalization = "0.1.22" - -[dependencies.salsa] -git = "https://github.com/salsa-rs/salsa" -rev = "ef7c0f12c8159e7025316e959c26f6278a576fa5" -package = "salsa-2022" - -[dev-dependencies] -assert_unordered = "0.3.5" -criterion = { version = "0.4.0" } -insta = { version = "1.28.0", features = ["glob", "redactions", "json"] } [profile.release] lto = "thin" @@ -87,8 +17,3 @@ incremental = true [profile.bench] lto = "thin" incremental = true - -[[bench]] -name = "bench_main" -path = "benches/bench_main.rs" -harness = false diff --git a/support/texlab/benches/bench_main.rs b/support/texlab/benches/bench_main.rs deleted file mode 100644 index 196afb1f43..0000000000 --- a/support/texlab/benches/bench_main.rs +++ /dev/null @@ -1,25 +0,0 @@ -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use lsp_types::{Position, Url}; -use texlab::{ - db::{Language, Owner, Workspace}, - parser::parse_latex, - Database, -}; - -fn criterion_benchmark(c: &mut Criterion) { - c.bench_function("LaTeX/Parser", |b| { - b.iter(|| parse_latex(black_box(include_str!("../texlab.tex")))); - }); - - c.bench_function("LaTeX/Completion/Command", |b| { - let uri = Url::parse("http://example.com/texlab.tex").unwrap(); - let text = include_str!("../texlab.tex").to_string(); - let mut db = Database::default(); - Workspace::get(&db).open(&mut db, uri.clone(), text, Language::Tex, Owner::Client); - b.iter(|| texlab::features::completion::complete(&db, &uri, Position::new(0, 1))); - }); -} - -criterion_group!(benches, criterion_benchmark); - -criterion_main!(benches); diff --git a/support/texlab/crates/base-db/Cargo.toml b/support/texlab/crates/base-db/Cargo.toml new file mode 100644 index 0000000000..2c7efe9ac0 --- /dev/null +++ b/support/texlab/crates/base-db/Cargo.toml @@ -0,0 +1,25 @@ +[package] +name = "base-db" +version = "0.0.0" +license.workspace = true +authors.workspace = true +edition.workspace = true +rust-version.workspace = true + +[dependencies] +dirs = "5.0.0" +distro = { path = "../distro" } +itertools = "0.10.5" +log = "0.4.17" +notify = "5.1.0" +once_cell = "1.17.1" +parser = { path = "../parser" } +regex = "1.7.3" +rowan = "0.15.11" +rustc-hash = "1.1.0" +syntax = { path = "../syntax" } +text-size = "1.1.0" +url = "2.3.1" + +[lib] +doctest = false diff --git a/support/texlab/crates/base-db/src/config.rs b/support/texlab/crates/base-db/src/config.rs new file mode 100644 index 0000000000..56ee5ee237 --- /dev/null +++ b/support/texlab/crates/base-db/src/config.rs @@ -0,0 +1,233 @@ +use std::time::Duration; + +use regex::Regex; +use rustc_hash::FxHashSet; + +#[derive(Debug)] +pub struct Config { + pub root_dir: Option, + pub build: BuildConfig, + pub diagnostics: DiagnosticsConfig, + pub formatting: FormattingConfig, + pub synctex: Option, + pub symbols: SymbolConfig, + pub syntax: SyntaxConfig, +} + +#[derive(Debug)] +pub struct BuildConfig { + pub program: String, + pub args: Vec, + pub on_save: bool, + pub forward_search_after: bool, + pub output_dir: String, +} + +#[derive(Debug)] +pub struct DiagnosticsConfig { + pub allowed_patterns: Vec, + pub ignored_patterns: Vec, + pub chktex: ChktexConfig, + pub delay: Duration, +} + +#[derive(Debug)] +pub struct ChktexConfig { + pub on_open: bool, + pub on_save: bool, + pub on_edit: bool, +} + +#[derive(Debug)] +pub struct SynctexConfig { + pub program: String, + pub args: Vec, +} + +#[derive(Debug)] +pub struct FormattingConfig { + pub tex_formatter: Formatter, + pub bib_formatter: Formatter, + pub latex_indent: LatexIndentConfig, + pub line_length: usize, +} + +#[derive(Debug)] +pub enum Formatter { + Null, + Server, + LatexIndent, +} + +#[derive(Debug)] +pub struct LatexIndentConfig { + pub local: Option, + pub modify_line_breaks: bool, +} + +#[derive(Debug)] +pub struct SymbolConfig { + pub allowed_patterns: Vec, + pub ignored_patterns: Vec, +} + +#[derive(Debug)] +pub struct SyntaxConfig { + pub math_environments: FxHashSet, + pub enum_environments: FxHashSet, + pub verbatim_environments: FxHashSet, +} + +impl Default for Config { + fn default() -> Self { + Self { + root_dir: None, + build: BuildConfig::default(), + diagnostics: DiagnosticsConfig::default(), + formatting: FormattingConfig::default(), + synctex: None, + symbols: SymbolConfig::default(), + syntax: SyntaxConfig::default(), + } + } +} + +impl Default for BuildConfig { + fn default() -> Self { + Self { + program: String::from("latexmk"), + args: ["-pdf", "-interaction=nonstopmode", "-synctex=1", "%f"] + .into_iter() + .map(String::from) + .collect(), + on_save: false, + forward_search_after: false, + output_dir: String::from("."), + } + } +} + +impl Default for DiagnosticsConfig { + fn default() -> Self { + Self { + allowed_patterns: Vec::new(), + ignored_patterns: Vec::new(), + delay: Duration::from_millis(300), + chktex: ChktexConfig::default(), + } + } +} + +impl Default for ChktexConfig { + fn default() -> Self { + Self { + on_open: false, + on_save: false, + on_edit: false, + } + } +} + +impl Default for FormattingConfig { + fn default() -> Self { + Self { + tex_formatter: Formatter::LatexIndent, + bib_formatter: Formatter::Server, + line_length: 80, + latex_indent: LatexIndentConfig::default(), + } + } +} + +impl Default for LatexIndentConfig { + fn default() -> Self { + Self { + local: None, + modify_line_breaks: false, + } + } +} + +impl Default for SymbolConfig { + fn default() -> Self { + Self { + allowed_patterns: Vec::new(), + ignored_patterns: Vec::new(), + } + } +} + +impl Default for SyntaxConfig { + fn default() -> Self { + let math_environments = DEFAULT_MATH_ENVIRONMENTS + .iter() + .copied() + .map(String::from) + .collect(); + + let enum_environments = ["enumerate", "itemize", "description"] + .into_iter() + .map(String::from) + .collect(); + + let verbatim_environments = ["pycode", "minted", "asy", "lstlisting", "verbatim"] + .into_iter() + .map(String::from) + .collect(); + + Self { + math_environments, + enum_environments, + verbatim_environments, + } + } +} + +static DEFAULT_MATH_ENVIRONMENTS: &[&str] = &[ + "align", + "align*", + "alignat", + "alignat*", + "aligned", + "aligned*", + "alignedat", + "alignedat*", + "array", + "array*", + "Bmatrix", + "Bmatrix*", + "bmatrix", + "bmatrix*", + "cases", + "cases*", + "CD", + "CD*", + "eqnarray", + "eqnarray*", + "equation", + "equation*", + "IEEEeqnarray", + "IEEEeqnarray*", + "subequations", + "subequations*", + "gather", + "gather*", + "gathered", + "gathered*", + "matrix", + "matrix*", + "multline", + "multline*", + "pmatrix", + "pmatrix*", + "smallmatrix", + "smallmatrix*", + "split", + "split*", + "subarray", + "subarray*", + "Vmatrix", + "Vmatrix*", + "vmatrix", + "vmatrix*", +]; diff --git a/support/texlab/crates/base-db/src/diagnostics.rs b/support/texlab/crates/base-db/src/diagnostics.rs new file mode 100644 index 0000000000..f5d13400a6 --- /dev/null +++ b/support/texlab/crates/base-db/src/diagnostics.rs @@ -0,0 +1,25 @@ +pub mod bib; +pub mod log; +pub mod tex; + +use rowan::TextRange; +use syntax::BuildError; + +#[derive(Debug, Clone)] +pub struct Diagnostic { + pub range: TextRange, + pub code: ErrorCode, +} + +#[derive(Debug, Clone)] +pub enum ErrorCode { + UnexpectedRCurly, + RCurlyInserted, + MismatchedEnvironment, + ExpectingLCurly, + ExpectingKey, + ExpectingRCurly, + ExpectingEq, + ExpectingFieldValue, + Build(BuildError), +} diff --git a/support/texlab/crates/base-db/src/diagnostics/bib.rs b/support/texlab/crates/base-db/src/diagnostics/bib.rs new file mode 100644 index 0000000000..f931a43c51 --- /dev/null +++ b/support/texlab/crates/base-db/src/diagnostics/bib.rs @@ -0,0 +1,69 @@ +use rowan::{ast::AstNode, TextRange}; +use syntax::bibtex::{self, HasDelims, HasEq, HasName, HasType, HasValue}; + +use crate::{Document, DocumentData}; + +use super::{Diagnostic, ErrorCode}; + +pub fn analyze(document: &mut Document) { + let DocumentData::Bib(data) = &document.data else { return }; + + for node in bibtex::SyntaxNode::new_root(data.green.clone()).descendants() { + if let Some(entry) = bibtex::Entry::cast(node.clone()) { + analyze_entry(document, entry); + } else if let Some(field) = bibtex::Field::cast(node.clone()) { + analyze_field(document, field); + } + } +} + +fn analyze_entry(document: &mut Document, entry: bibtex::Entry) { + if entry.left_delim_token().is_none() { + document.diagnostics.push(Diagnostic { + range: entry.type_token().unwrap().text_range(), + code: ErrorCode::ExpectingLCurly, + }); + + return; + } + + if entry.name_token().is_none() { + document.diagnostics.push(Diagnostic { + range: entry.left_delim_token().unwrap().text_range(), + code: ErrorCode::ExpectingKey, + }); + + return; + } + + if entry.right_delim_token().is_none() { + document.diagnostics.push(Diagnostic { + range: TextRange::empty(entry.syntax().text_range().end()), + code: ErrorCode::ExpectingRCurly, + }); + + return; + } +} + +fn analyze_field(document: &mut Document, field: bibtex::Field) { + if field.eq_token().is_none() { + let code = ErrorCode::ExpectingEq; + document.diagnostics.push(Diagnostic { + range: field.name_token().unwrap().text_range(), + code, + }); + + return; + } + + if field.value().is_none() { + let code = ErrorCode::ExpectingFieldValue; + document.diagnostics.push(Diagnostic { + range: field.name_token().unwrap().text_range(), + code, + }); + + return; + } +} diff --git a/support/texlab/crates/base-db/src/diagnostics/log.rs b/support/texlab/crates/base-db/src/diagnostics/log.rs new file mode 100644 index 0000000000..9e97a4e788 --- /dev/null +++ b/support/texlab/crates/base-db/src/diagnostics/log.rs @@ -0,0 +1,68 @@ +use rowan::{TextLen, TextRange, TextSize}; +use rustc_hash::FxHashMap; +use syntax::BuildError; +use url::Url; + +use crate::{Document, DocumentData, Workspace}; + +use super::{Diagnostic, ErrorCode}; + +pub fn analyze<'a>( + workspace: &'a Workspace, + log_document: &'a Document, +) -> FxHashMap<&'a Document, Vec> { + let mut results = FxHashMap::default(); + + let DocumentData::Log(data) = &log_document.data else { return results }; + + let parents = workspace.parents(log_document); + let Some(root_document) = parents.iter().next() else { return results }; + + let Some(base_path) = root_document.path + .as_deref() + .and_then(|path| path.parent()) else { return results }; + + for error in &data.errors { + let full_path = base_path.join(&error.relative_path); + 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 + .line_index + .newlines + .get(line as usize) + .unwrap_or(&TextSize::from(0)); + + TextRange::empty(offset) + }); + + let diagnostic = Diagnostic { + range, + code: ErrorCode::Build(error.clone()), + }; + + results.entry(tex_document).or_default().push(diagnostic); + } + + results +} + +fn find_range_of_hint(document: &Document, error: &BuildError) -> Option { + let line = error.line? as usize; + let hint = error.hint.as_deref()?; + let line_index = &document.line_index; + + let line_start = line_index.newlines.get(line).copied()?; + let line_end = line_index + .newlines + .get(line + 1) + .copied() + .unwrap_or((&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(); + let hint_end = hint_start + hint.text_len(); + Some(TextRange::new(hint_start, hint_end)) +} diff --git a/support/texlab/crates/base-db/src/diagnostics/tex.rs b/support/texlab/crates/base-db/src/diagnostics/tex.rs new file mode 100644 index 0000000000..81b6e4401a --- /dev/null +++ b/support/texlab/crates/base-db/src/diagnostics/tex.rs @@ -0,0 +1,116 @@ +use rowan::{ast::AstNode, NodeOrToken, TextRange}; +use syntax::latex; + +use crate::{Config, Document, DocumentData}; + +use super::{Diagnostic, ErrorCode}; + +pub fn analyze(document: &mut Document, config: &Config) { + if !document.uri.as_str().ends_with(".tex") { + return; + } + + let DocumentData::Tex(data) = &document.data else { return }; + + let mut traversal = latex::SyntaxNode::new_root(data.green.clone()).preorder(); + while let Some(event) = traversal.next() { + match event { + rowan::WalkEvent::Enter(node) => { + if let Some(environment) = latex::Environment::cast(node.clone()) { + if environment + .begin() + .and_then(|begin| begin.name()) + .and_then(|name| name.key()) + .map_or(false, |name| { + config + .syntax + .verbatim_environments + .contains(&name.to_string()) + }) + { + traversal.skip_subtree(); + continue; + } + } + + analyze_environment(document, node.clone()) + .or_else(|| analyze_curly_group(document, node.clone(), config)) + .or_else(|| analyze_curly_braces(document, node)); + } + rowan::WalkEvent::Leave(_) => { + continue; + } + }; + } +} + +fn analyze_environment(document: &mut Document, node: latex::SyntaxNode) -> Option<()> { + let environment = latex::Environment::cast(node)?; + let begin = environment.begin()?.name()?.key()?; + let end = environment.end()?.name()?.key()?; + if begin != end { + document.diagnostics.push(Diagnostic { + range: latex::small_range(&begin), + code: ErrorCode::MismatchedEnvironment, + }); + } + + Some(()) +} + +fn analyze_curly_group( + document: &mut Document, + node: latex::SyntaxNode, + config: &Config, +) -> Option<()> { + if !matches!( + node.kind(), + latex::CURLY_GROUP + | latex::CURLY_GROUP_COMMAND + | latex::CURLY_GROUP_KEY_VALUE + | latex::CURLY_GROUP_WORD + | latex::CURLY_GROUP_WORD_LIST + ) { + return None; + } + + let is_inside_verbatim_environment = node + .ancestors() + .filter_map(latex::Environment::cast) + .filter_map(|env| env.begin()) + .filter_map(|begin| begin.name()) + .filter_map(|name| name.key()) + .any(|name| { + config + .syntax + .verbatim_environments + .contains(&name.to_string()) + }); + + if !is_inside_verbatim_environment + && !node + .children_with_tokens() + .filter_map(NodeOrToken::into_token) + .any(|token| token.kind() == latex::R_CURLY) + { + document.diagnostics.push(Diagnostic { + range: TextRange::empty(node.text_range().end()), + code: ErrorCode::RCurlyInserted, + }); + } + + Some(()) +} + +fn analyze_curly_braces(document: &mut Document, node: latex::SyntaxNode) -> Option<()> { + if node.kind() == latex::ERROR && node.first_token()?.text() == "}" { + document.diagnostics.push(Diagnostic { + range: node.text_range(), + code: ErrorCode::UnexpectedRCurly, + }); + + Some(()) + } else { + None + } +} diff --git a/support/texlab/crates/base-db/src/document.rs b/support/texlab/crates/base-db/src/document.rs new file mode 100644 index 0000000000..39d9ec3cf7 --- /dev/null +++ b/support/texlab/crates/base-db/src/document.rs @@ -0,0 +1,196 @@ +use std::path::PathBuf; + +use distro::Language; +use rowan::TextSize; +use syntax::{bibtex, latex, BuildError}; +use url::Url; + +use crate::{ + diagnostics::{self, Diagnostic}, + line_index::LineIndex, + semantics, Config, +}; + +#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] +pub enum Owner { + Client, + Server, +} + +#[derive(Debug, Clone)] +pub struct Document { + pub uri: Url, + pub dir: Url, + pub path: Option, + pub text: String, + pub line_index: LineIndex, + pub owner: Owner, + pub cursor: TextSize, + pub language: Language, + pub data: DocumentData, + pub diagnostics: Vec, +} + +impl Document { + pub fn parse( + uri: Url, + text: String, + language: Language, + owner: Owner, + cursor: TextSize, + config: &Config, + ) -> Self { + let dir = uri.join(".").unwrap(); + + let path = if uri.scheme() == "file" { + uri.to_file_path().ok() + } else { + None + }; + + let line_index = LineIndex::new(&text); + + let diagnostics = Vec::new(); + let data = match language { + Language::Tex => { + let green = parser::parse_latex(&text); + let mut semantics = semantics::tex::Semantics::default(); + semantics.process_root(&latex::SyntaxNode::new_root(green.clone())); + DocumentData::Tex(TexDocumentData { green, semantics }) + } + Language::Bib => { + let green = parser::parse_bibtex(&text); + DocumentData::Bib(BibDocumentData { green }) + } + Language::Aux => { + let green = parser::parse_latex(&text); + let mut semantics = semantics::auxiliary::Semantics::default(); + semantics.process_root(&latex::SyntaxNode::new_root(green.clone())); + DocumentData::Aux(AuxDocumentData { green, semantics }) + } + Language::Log => { + let errors = parser::parse_build_log(&text).errors; + DocumentData::Log(LogDocumentData { errors }) + } + Language::Root => DocumentData::Root, + Language::Tectonic => DocumentData::Tectonic, + }; + + let mut document = Self { + uri, + dir, + path, + text, + line_index, + owner, + cursor, + language, + data, + diagnostics, + }; + + match language { + Language::Tex => diagnostics::tex::analyze(&mut document, config), + Language::Bib => diagnostics::bib::analyze(&mut document), + Language::Aux | Language::Log | Language::Root | Language::Tectonic => (), + }; + + document + } +} + +impl std::borrow::Borrow for Document { + fn borrow(&self) -> &Url { + &self.uri + } +} + +impl std::borrow::Borrow for Document { + fn borrow(&self) -> &str { + self.uri.as_str() + } +} + +impl PartialEq for Document { + fn eq(&self, other: &Self) -> bool { + self.uri == other.uri + } +} + +impl Eq for Document {} + +impl std::hash::Hash for Document { + fn hash(&self, state: &mut H) { + self.uri.hash(state) + } +} + +#[derive(Debug, Clone)] +pub enum DocumentData { + Tex(TexDocumentData), + Bib(BibDocumentData), + Aux(AuxDocumentData), + Log(LogDocumentData), + Root, + Tectonic, +} + +impl DocumentData { + pub fn as_tex(&self) -> Option<&TexDocumentData> { + if let DocumentData::Tex(data) = self { + Some(data) + } else { + None + } + } + + pub fn as_bib(&self) -> Option<&BibDocumentData> { + if let DocumentData::Bib(data) = self { + Some(data) + } else { + None + } + } + + pub fn as_aux(&self) -> Option<&AuxDocumentData> { + if let DocumentData::Aux(data) = self { + Some(data) + } else { + None + } + } +} + +#[derive(Debug, Clone)] +pub struct TexDocumentData { + pub green: rowan::GreenNode, + pub semantics: semantics::tex::Semantics, +} + +impl TexDocumentData { + pub fn root_node(&self) -> latex::SyntaxNode { + latex::SyntaxNode::new_root(self.green.clone()) + } +} + +#[derive(Debug, Clone)] +pub struct BibDocumentData { + pub green: rowan::GreenNode, +} + +impl BibDocumentData { + pub fn root_node(&self) -> bibtex::SyntaxNode { + bibtex::SyntaxNode::new_root(self.green.clone()) + } +} + +#[derive(Debug, Clone)] +pub struct LogDocumentData { + pub errors: Vec, +} + +#[derive(Debug, Clone)] +pub struct AuxDocumentData { + pub green: rowan::GreenNode, + pub semantics: semantics::auxiliary::Semantics, +} diff --git a/support/texlab/crates/base-db/src/graph.rs b/support/texlab/crates/base-db/src/graph.rs new file mode 100644 index 0000000000..2103aa8a73 --- /dev/null +++ b/support/texlab/crates/base-db/src/graph.rs @@ -0,0 +1,161 @@ +use std::{ffi::OsStr, path::PathBuf}; + +use distro::Language; +use itertools::Itertools; +use once_cell::sync::Lazy; +use rustc_hash::FxHashSet; +use url::Url; + +use crate::{semantics, Document, DocumentData, Workspace}; + +pub static HOME_DIR: Lazy> = Lazy::new(dirs::home_dir); + +#[derive(Debug, PartialEq, Eq, Clone, Hash)] +pub struct Edge<'a> { + pub source: &'a Document, + pub target: &'a Document, + pub weight: Option>, +} + +#[derive(Debug, PartialEq, Eq, Clone, Hash)] +pub struct EdgeWeight<'a> { + pub link: &'a semantics::tex::Link, + pub old_base_dir: Url, + pub new_base_dir: Url, +} + +#[derive(Debug)] +pub struct Graph<'a> { + pub workspace: &'a Workspace, + pub start: &'a Document, + pub edges: Vec>, + pub missing: Vec, +} + +impl<'a> Graph<'a> { + pub fn new(workspace: &'a Workspace, start: &'a Document) -> Self { + let mut graph = Self { + workspace, + start, + edges: Vec::new(), + missing: Vec::new(), + }; + + let base_dir = workspace.current_dir(&start.dir); + let mut stack = vec![(start, base_dir)]; + let mut visited = FxHashSet::default(); + + while let Some((source, base_dir)) = stack.pop() { + let index = graph.edges.len(); + graph.explicit_edges(source, &base_dir); + for edge in &graph.edges[index..] { + let Some(weight) = edge.weight.as_ref() else { continue }; + if visited.insert(&edge.target.uri) { + stack.push((edge.target, weight.new_base_dir.clone())); + } + } + + graph.implicit_edges(source, &base_dir); + } + + graph + } + + pub fn preorder(&self) -> impl DoubleEndedIterator + '_ { + std::iter::once(self.start) + .chain(self.edges.iter().map(|group| group.target)) + .unique_by(|document| &document.uri) + } + + fn explicit_edges(&mut self, source: &'a Document, base_dir: &Url) { + let DocumentData::Tex(data) = &source.data else { return }; + for link in &data.semantics.links { + self.explicit_edge(source, base_dir, link); + } + } + + fn explicit_edge( + &mut self, + source: &'a Document, + base_dir: &Url, + link: &'a semantics::tex::Link, + ) { + let home_dir = HOME_DIR.as_deref(); + + let stem = &link.path.text; + let mut file_names = vec![stem.clone()]; + link.kind + .extensions() + .iter() + .map(|ext| format!("{stem}.{ext}")) + .for_each(|name| file_names.push(name)); + + let file_name_db = &self.workspace.distro().file_name_db; + let distro_files = file_names + .iter() + .filter_map(|name| file_name_db.get(name)) + .filter(|path| home_dir.map_or(false, |dir| path.starts_with(dir))) + .flat_map(Url::from_file_path); + + for target_uri in file_names + .iter() + .flat_map(|file_name| base_dir.join(file_name)) + .chain(distro_files) + { + match self.workspace.lookup(&target_uri) { + Some(target) => { + let new_base_dir = link + .base_dir + .as_deref() + .and_then(|path| base_dir.join(&path).ok()) + .unwrap_or_else(|| base_dir.clone()); + + let weight = Some(EdgeWeight { + link, + old_base_dir: base_dir.clone(), + new_base_dir, + }); + + self.edges.push(Edge { + source, + target, + weight, + }); + } + None => { + self.missing.push(target_uri); + } + }; + } + } + + fn implicit_edges(&mut self, source: &'a Document, base_dir: &Url) { + let uri = source.uri.as_str(); + if source.language == Language::Tex && !uri.ends_with(".aux") { + self.implicit_edge(source, base_dir, "log"); + self.implicit_edge(source, base_dir, "aux"); + } + } + + fn implicit_edge(&mut self, source: &'a Document, base_dir: &Url, extension: &str) { + let Some(target_uri) = source.uri.to_file_path().ok().and_then(|mut path| { + path.set_extension(extension); + path.file_name() + .and_then(OsStr::to_str) + .and_then(|name| self.workspace.output_dir(base_dir).join(&name).ok()) + }) else { return }; + + match self.workspace.lookup(&target_uri) { + Some(target) => { + self.edges.push(Edge { + source, + target, + weight: None, + }); + } + None => { + self.missing.push(target_uri); + } + } + } +} diff --git a/support/texlab/crates/base-db/src/lib.rs b/support/texlab/crates/base-db/src/lib.rs new file mode 100644 index 0000000000..fae6ad5416 --- /dev/null +++ b/support/texlab/crates/base-db/src/lib.rs @@ -0,0 +1,9 @@ +mod config; +pub mod diagnostics; +mod document; +pub mod graph; +mod line_index; +pub mod semantics; +mod workspace; + +pub use self::{config::*, document::*, line_index::*, workspace::*}; diff --git a/support/texlab/crates/base-db/src/line_index.rs b/support/texlab/crates/base-db/src/line_index.rs new file mode 100644 index 0000000000..70e8f8128b --- /dev/null +++ b/support/texlab/crates/base-db/src/line_index.rs @@ -0,0 +1,217 @@ +// The following code has been copied from rust-analyzer. + +//! `LineIndex` maps flat `TextSize` offsets into `(Line, Column)` +//! representation. +use std::iter; + +use rowan::{TextRange, TextSize}; +use rustc_hash::FxHashMap; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct LineIndex { + /// Offset the the beginning of each line, zero-based + pub(crate) newlines: Vec, + /// List of non-ASCII characters on each line + pub(crate) utf16_lines: FxHashMap>, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct LineColUtf16 { + /// Zero-based + pub line: u32, + /// Zero-based + pub col: u32, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub struct LineCol { + /// Zero-based + pub line: u32, + /// Zero-based utf8 offset + pub col: u32, +} + +#[derive(Clone, Debug, Hash, PartialEq, Eq)] +pub(crate) struct Utf16Char { + /// Start offset of a character inside a line, zero-based + pub(crate) start: TextSize, + /// End offset of a character inside a line, zero-based + pub(crate) end: TextSize, +} + +impl Utf16Char { + /// Returns the length in 8-bit UTF-8 code units. + fn len(&self) -> TextSize { + self.end - self.start + } + + /// Returns the length in 16-bit UTF-16 code units. + fn len_utf16(&self) -> usize { + if self.len() == TextSize::from(4) { + 2 + } else { + 1 + } + } +} + +impl LineIndex { + pub fn new(text: &str) -> LineIndex { + let mut utf16_lines = FxHashMap::default(); + let mut utf16_chars = Vec::new(); + + let mut newlines = vec![0.into()]; + let mut curr_row = 0.into(); + let mut curr_col = 0.into(); + let mut line = 0; + for c in text.chars() { + let c_len = TextSize::of(c); + curr_row += c_len; + if c == '\n' { + newlines.push(curr_row); + + // Save any utf-16 characters seen in the previous line + if !utf16_chars.is_empty() { + utf16_lines.insert(line, utf16_chars); + utf16_chars = Vec::new(); + } + + // Prepare for processing the next line + curr_col = 0.into(); + line += 1; + continue; + } + + if !c.is_ascii() { + utf16_chars.push(Utf16Char { + start: curr_col, + end: curr_col + c_len, + }); + } + + curr_col += c_len; + } + + // Save any utf-16 characters seen in the last line + if !utf16_chars.is_empty() { + utf16_lines.insert(line, utf16_chars); + } + + LineIndex { + newlines, + utf16_lines, + } + } + + pub fn line_col(&self, offset: TextSize) -> LineCol { + let line = partition_point(&self.newlines, |&it| it <= offset) - 1; + let line_start_offset = self.newlines[line]; + let col = offset - line_start_offset; + LineCol { + line: line as u32, + col: col.into(), + } + } + + pub fn offset(&self, line_col: LineCol) -> TextSize { + self.newlines[line_col.line as usize] + TextSize::from(line_col.col) + } + + pub fn to_utf16(&self, line_col: LineCol) -> LineColUtf16 { + let col = self.utf8_to_utf16_col(line_col.line, line_col.col.into()); + LineColUtf16 { + line: line_col.line, + col: col as u32, + } + } + + pub fn to_utf8(&self, line_col: LineColUtf16) -> LineCol { + let col = self.utf16_to_utf8_col(line_col.line, line_col.col); + LineCol { + line: line_col.line, + col: col.into(), + } + } + + pub fn lines(&self, range: TextRange) -> impl Iterator + '_ { + let lo = partition_point(&self.newlines, |&it| it < range.start()); + let hi = partition_point(&self.newlines, |&it| it <= range.end()); + let all = iter::once(range.start()) + .chain(self.newlines[lo..hi].iter().copied()) + .chain(iter::once(range.end())); + + all.clone() + .zip(all.skip(1)) + .map(|(lo, hi)| TextRange::new(lo, hi)) + .filter(|it| !it.is_empty()) + } + + fn utf8_to_utf16_col(&self, line: u32, col: TextSize) -> usize { + let mut res: usize = col.into(); + if let Some(utf16_chars) = self.utf16_lines.get(&line) { + for c in utf16_chars { + if c.end <= col { + res -= usize::from(c.len()) - c.len_utf16(); + } else { + // From here on, all utf16 characters come *after* the character we are mapping, + // so we don't need to take them into account + break; + } + } + } + res + } + + fn utf16_to_utf8_col(&self, line: u32, mut col: u32) -> TextSize { + if let Some(utf16_chars) = self.utf16_lines.get(&line) { + for c in utf16_chars { + if col > u32::from(c.start) { + col += u32::from(c.len()) - c.len_utf16() as u32; + } else { + // From here on, all utf16 characters come *after* the character we are mapping, + // so we don't need to take them into account + break; + } + } + } + + col.into() + } +} + +/// Returns `idx` such that: +/// +/// ```text +/// ∀ x in slice[..idx]: pred(x) +/// && ∀ x in slice[idx..]: !pred(x) +/// ``` +/// +/// https://github.com/rust-lang/rust/issues/73831 +fn partition_point(slice: &[T], mut pred: P) -> usize +where + P: FnMut(&T) -> bool, +{ + let mut left = 0; + let mut right = slice.len(); + + while left != right { + let mid = left + (right - left) / 2; + // SAFETY: + // When left < right, left <= mid < right. + // Therefore left always increases and right always decreases, + // and either of them is selected. + // In both cases left <= right is satisfied. + // Therefore if left < right in a step, + // left <= right is satisfied in the next step. + // Therefore as long as left != right, 0 <= left < right <= len is satisfied + // and if this case 0 <= mid < len is satisfied too. + let value = unsafe { slice.get_unchecked(mid) }; + if pred(value) { + left = mid + 1; + } else { + right = mid; + } + } + + left +} diff --git a/support/texlab/crates/base-db/src/semantics.rs b/support/texlab/crates/base-db/src/semantics.rs new file mode 100644 index 0000000000..94a9c15973 --- /dev/null +++ b/support/texlab/crates/base-db/src/semantics.rs @@ -0,0 +1,17 @@ +pub mod auxiliary; +pub mod tex; + +#[derive(Debug, PartialEq, Eq, Clone, Hash)] +pub struct Span { + pub text: String, + pub range: rowan::TextRange, +} + +impl From<&syntax::latex::Key> for Span { + fn from(key: &syntax::latex::Key) -> Self { + Span { + text: key.to_string(), + range: syntax::latex::small_range(key), + } + } +} diff --git a/support/texlab/crates/base-db/src/semantics/auxiliary.rs b/support/texlab/crates/base-db/src/semantics/auxiliary.rs new file mode 100644 index 0000000000..719953974c --- /dev/null +++ b/support/texlab/crates/base-db/src/semantics/auxiliary.rs @@ -0,0 +1,39 @@ +use rowan::ast::AstNode; +use rustc_hash::FxHashMap; +use syntax::latex; + +#[derive(Debug, Clone, Default)] +pub struct Semantics { + pub label_numbers: FxHashMap, +} + +impl Semantics { + pub fn process_root(&mut self, root: &latex::SyntaxNode) { + for node in root.descendants() { + self.process_node(&node); + } + } + + fn process_node(&mut self, node: &latex::SyntaxNode) { + if let Some(label_number) = latex::LabelNumber::cast(node.clone()) { + self.process_label_number(&label_number); + } + } + + fn process_label_number(&mut self, label_number: &latex::LabelNumber) { + let Some(name) = label_number + .name() + .and_then(|group| group.key()) + .map(|key| key.to_string()) else { return }; + + let Some(text) = label_number + .text() + .map(|node| node.syntax().descendants()) + .into_iter() + .flatten() + .find(|node| node.kind() == latex::TEXT || node.kind() == latex::MIXED_GROUP) + .map(|node| node.text().to_string()) else { return }; + + self.label_numbers.insert(name, text); + } +} diff --git a/support/texlab/crates/base-db/src/semantics/tex.rs b/support/texlab/crates/base-db/src/semantics/tex.rs new file mode 100644 index 0000000000..2b506ee878 --- /dev/null +++ b/support/texlab/crates/base-db/src/semantics/tex.rs @@ -0,0 +1,292 @@ +use rowan::{ast::AstNode, TextLen}; +use rustc_hash::FxHashSet; +use syntax::latex::{self, HasBrack, HasCurly}; +use text_size::TextRange; + +use super::Span; + +#[derive(Debug, Clone, Default)] +pub struct Semantics { + pub links: Vec, + pub labels: Vec