From ffeb659c44a1bdaf8043d1672b066114918c340a Mon Sep 17 00:00:00 2001 From: malle-pietje Date: Fri, 26 Nov 2021 10:33:19 +0100 Subject: [PATCH] executed composer update --- composer.lock | 12 +- vendor/composer/InstalledVersions.php | 10 +- vendor/composer/installed.json | 14 +- vendor/composer/installed.php | 10 +- vendor/twig/twig/.gitattributes | 1 + vendor/twig/twig/CHANGELOG | 4 + vendor/twig/twig/README.rst | 2 +- vendor/twig/twig/doc/.doctor-rst.yaml | 55 - vendor/twig/twig/doc/_build/.requirements.txt | 6 - vendor/twig/twig/doc/_build/Makefile | 153 --- vendor/twig/twig/doc/_build/conf.py | 271 ----- vendor/twig/twig/doc/advanced.rst | 959 ------------------ vendor/twig/twig/doc/api.rst | 594 ----------- vendor/twig/twig/doc/coding_standards.rst | 101 -- vendor/twig/twig/doc/deprecated.rst | 224 ---- vendor/twig/twig/doc/filters/abs.rst | 18 - vendor/twig/twig/doc/filters/batch.rst | 48 - vendor/twig/twig/doc/filters/capitalize.rst | 11 - .../twig/doc/filters/convert_encoding.rst | 29 - vendor/twig/twig/doc/filters/date.rst | 100 -- vendor/twig/twig/doc/filters/date_modify.rst | 24 - vendor/twig/twig/doc/filters/default.rst | 42 - vendor/twig/twig/doc/filters/escape.rst | 129 --- vendor/twig/twig/doc/filters/filter.rst | 59 -- vendor/twig/twig/doc/filters/first.rst | 26 - vendor/twig/twig/doc/filters/format.rst | 18 - vendor/twig/twig/doc/filters/index.rst | 41 - vendor/twig/twig/doc/filters/join.rst | 36 - vendor/twig/twig/doc/filters/json_encode.rst | 23 - vendor/twig/twig/doc/filters/keys.rst | 11 - vendor/twig/twig/doc/filters/last.rst | 26 - vendor/twig/twig/doc/filters/length.rst | 23 - vendor/twig/twig/doc/filters/lower.rst | 10 - vendor/twig/twig/doc/filters/map.rst | 38 - vendor/twig/twig/doc/filters/merge.rst | 48 - vendor/twig/twig/doc/filters/nl2br.rst | 23 - .../twig/twig/doc/filters/number_format.rst | 55 - vendor/twig/twig/doc/filters/raw.rst | 38 - vendor/twig/twig/doc/filters/reduce.rst | 33 - vendor/twig/twig/doc/filters/replace.rst | 27 - vendor/twig/twig/doc/filters/reverse.rst | 48 - vendor/twig/twig/doc/filters/round.rst | 38 - vendor/twig/twig/doc/filters/slice.rst | 72 -- vendor/twig/twig/doc/filters/sort.rst | 18 - vendor/twig/twig/doc/filters/spaceless.rst | 65 -- vendor/twig/twig/doc/filters/split.rst | 54 - vendor/twig/twig/doc/filters/striptags.rst | 29 - vendor/twig/twig/doc/filters/title.rst | 11 - vendor/twig/twig/doc/filters/trim.rst | 47 - vendor/twig/twig/doc/filters/upper.rst | 10 - vendor/twig/twig/doc/filters/url_encode.rst | 36 - vendor/twig/twig/doc/functions/attribute.rst | 27 - vendor/twig/twig/doc/functions/block.rst | 45 - vendor/twig/twig/doc/functions/constant.rst | 31 - vendor/twig/twig/doc/functions/cycle.rst | 28 - vendor/twig/twig/doc/functions/date.rst | 55 - vendor/twig/twig/doc/functions/dump.rst | 70 -- vendor/twig/twig/doc/functions/include.rst | 85 -- vendor/twig/twig/doc/functions/index.rst | 20 - vendor/twig/twig/doc/functions/max.rst | 21 - vendor/twig/twig/doc/functions/min.rst | 21 - vendor/twig/twig/doc/functions/parent.rst | 22 - vendor/twig/twig/doc/functions/random.rst | 37 - vendor/twig/twig/doc/functions/range.rst | 58 -- vendor/twig/twig/doc/functions/source.rst | 34 - .../doc/functions/template_from_string.rst | 45 - vendor/twig/twig/doc/index.rst | 19 - vendor/twig/twig/doc/installation.rst | 72 -- vendor/twig/twig/doc/internals.rst | 145 --- vendor/twig/twig/doc/intro.rst | 80 -- vendor/twig/twig/doc/recipes.rst | 568 ----------- vendor/twig/twig/doc/tags/apply.rst | 24 - vendor/twig/twig/doc/tags/autoescape.rst | 81 -- vendor/twig/twig/doc/tags/block.rst | 12 - vendor/twig/twig/doc/tags/deprecated.rst | 31 - vendor/twig/twig/doc/tags/do.rst | 13 - vendor/twig/twig/doc/tags/embed.rst | 181 ---- vendor/twig/twig/doc/tags/extends.rst | 271 ----- vendor/twig/twig/doc/tags/filter.rst | 26 - vendor/twig/twig/doc/tags/flush.rst | 18 - vendor/twig/twig/doc/tags/for.rst | 180 ---- vendor/twig/twig/doc/tags/from.rst | 6 - vendor/twig/twig/doc/tags/if.rst | 79 -- vendor/twig/twig/doc/tags/import.rst | 6 - vendor/twig/twig/doc/tags/include.rst | 116 --- vendor/twig/twig/doc/tags/index.rst | 27 - vendor/twig/twig/doc/tags/macro.rst | 139 --- vendor/twig/twig/doc/tags/sandbox.rst | 30 - vendor/twig/twig/doc/tags/set.rst | 78 -- vendor/twig/twig/doc/tags/spaceless.rst | 41 - vendor/twig/twig/doc/tags/use.rst | 126 --- vendor/twig/twig/doc/tags/verbatim.rst | 25 - vendor/twig/twig/doc/tags/with.rst | 45 - vendor/twig/twig/doc/templates.rst | 896 ---------------- vendor/twig/twig/doc/tests/constant.rst | 23 - vendor/twig/twig/doc/tests/defined.rst | 30 - vendor/twig/twig/doc/tests/divisibleby.rst | 15 - vendor/twig/twig/doc/tests/empty.rst | 22 - vendor/twig/twig/doc/tests/even.rst | 12 - vendor/twig/twig/doc/tests/index.rst | 15 - vendor/twig/twig/doc/tests/iterable.rst | 20 - vendor/twig/twig/doc/tests/null.rst | 12 - vendor/twig/twig/doc/tests/odd.rst | 12 - vendor/twig/twig/doc/tests/sameas.rst | 15 - vendor/twig/twig/src/Environment.php | 6 +- 105 files changed, 32 insertions(+), 7864 deletions(-) delete mode 100644 vendor/twig/twig/doc/.doctor-rst.yaml delete mode 100644 vendor/twig/twig/doc/_build/.requirements.txt delete mode 100644 vendor/twig/twig/doc/_build/Makefile delete mode 100644 vendor/twig/twig/doc/_build/conf.py delete mode 100644 vendor/twig/twig/doc/advanced.rst delete mode 100644 vendor/twig/twig/doc/api.rst delete mode 100644 vendor/twig/twig/doc/coding_standards.rst delete mode 100644 vendor/twig/twig/doc/deprecated.rst delete mode 100644 vendor/twig/twig/doc/filters/abs.rst delete mode 100644 vendor/twig/twig/doc/filters/batch.rst delete mode 100644 vendor/twig/twig/doc/filters/capitalize.rst delete mode 100644 vendor/twig/twig/doc/filters/convert_encoding.rst delete mode 100644 vendor/twig/twig/doc/filters/date.rst delete mode 100644 vendor/twig/twig/doc/filters/date_modify.rst delete mode 100644 vendor/twig/twig/doc/filters/default.rst delete mode 100644 vendor/twig/twig/doc/filters/escape.rst delete mode 100644 vendor/twig/twig/doc/filters/filter.rst delete mode 100644 vendor/twig/twig/doc/filters/first.rst delete mode 100644 vendor/twig/twig/doc/filters/format.rst delete mode 100644 vendor/twig/twig/doc/filters/index.rst delete mode 100644 vendor/twig/twig/doc/filters/join.rst delete mode 100644 vendor/twig/twig/doc/filters/json_encode.rst delete mode 100644 vendor/twig/twig/doc/filters/keys.rst delete mode 100644 vendor/twig/twig/doc/filters/last.rst delete mode 100644 vendor/twig/twig/doc/filters/length.rst delete mode 100644 vendor/twig/twig/doc/filters/lower.rst delete mode 100644 vendor/twig/twig/doc/filters/map.rst delete mode 100644 vendor/twig/twig/doc/filters/merge.rst delete mode 100644 vendor/twig/twig/doc/filters/nl2br.rst delete mode 100644 vendor/twig/twig/doc/filters/number_format.rst delete mode 100644 vendor/twig/twig/doc/filters/raw.rst delete mode 100644 vendor/twig/twig/doc/filters/reduce.rst delete mode 100644 vendor/twig/twig/doc/filters/replace.rst delete mode 100644 vendor/twig/twig/doc/filters/reverse.rst delete mode 100644 vendor/twig/twig/doc/filters/round.rst delete mode 100644 vendor/twig/twig/doc/filters/slice.rst delete mode 100644 vendor/twig/twig/doc/filters/sort.rst delete mode 100644 vendor/twig/twig/doc/filters/spaceless.rst delete mode 100644 vendor/twig/twig/doc/filters/split.rst delete mode 100644 vendor/twig/twig/doc/filters/striptags.rst delete mode 100644 vendor/twig/twig/doc/filters/title.rst delete mode 100644 vendor/twig/twig/doc/filters/trim.rst delete mode 100644 vendor/twig/twig/doc/filters/upper.rst delete mode 100644 vendor/twig/twig/doc/filters/url_encode.rst delete mode 100644 vendor/twig/twig/doc/functions/attribute.rst delete mode 100644 vendor/twig/twig/doc/functions/block.rst delete mode 100644 vendor/twig/twig/doc/functions/constant.rst delete mode 100644 vendor/twig/twig/doc/functions/cycle.rst delete mode 100644 vendor/twig/twig/doc/functions/date.rst delete mode 100644 vendor/twig/twig/doc/functions/dump.rst delete mode 100644 vendor/twig/twig/doc/functions/include.rst delete mode 100644 vendor/twig/twig/doc/functions/index.rst delete mode 100644 vendor/twig/twig/doc/functions/max.rst delete mode 100644 vendor/twig/twig/doc/functions/min.rst delete mode 100644 vendor/twig/twig/doc/functions/parent.rst delete mode 100644 vendor/twig/twig/doc/functions/random.rst delete mode 100644 vendor/twig/twig/doc/functions/range.rst delete mode 100644 vendor/twig/twig/doc/functions/source.rst delete mode 100644 vendor/twig/twig/doc/functions/template_from_string.rst delete mode 100644 vendor/twig/twig/doc/index.rst delete mode 100644 vendor/twig/twig/doc/installation.rst delete mode 100644 vendor/twig/twig/doc/internals.rst delete mode 100644 vendor/twig/twig/doc/intro.rst delete mode 100644 vendor/twig/twig/doc/recipes.rst delete mode 100644 vendor/twig/twig/doc/tags/apply.rst delete mode 100644 vendor/twig/twig/doc/tags/autoescape.rst delete mode 100644 vendor/twig/twig/doc/tags/block.rst delete mode 100644 vendor/twig/twig/doc/tags/deprecated.rst delete mode 100644 vendor/twig/twig/doc/tags/do.rst delete mode 100644 vendor/twig/twig/doc/tags/embed.rst delete mode 100644 vendor/twig/twig/doc/tags/extends.rst delete mode 100644 vendor/twig/twig/doc/tags/filter.rst delete mode 100644 vendor/twig/twig/doc/tags/flush.rst delete mode 100644 vendor/twig/twig/doc/tags/for.rst delete mode 100644 vendor/twig/twig/doc/tags/from.rst delete mode 100644 vendor/twig/twig/doc/tags/if.rst delete mode 100644 vendor/twig/twig/doc/tags/import.rst delete mode 100644 vendor/twig/twig/doc/tags/include.rst delete mode 100644 vendor/twig/twig/doc/tags/index.rst delete mode 100644 vendor/twig/twig/doc/tags/macro.rst delete mode 100644 vendor/twig/twig/doc/tags/sandbox.rst delete mode 100644 vendor/twig/twig/doc/tags/set.rst delete mode 100644 vendor/twig/twig/doc/tags/spaceless.rst delete mode 100644 vendor/twig/twig/doc/tags/use.rst delete mode 100644 vendor/twig/twig/doc/tags/verbatim.rst delete mode 100644 vendor/twig/twig/doc/tags/with.rst delete mode 100644 vendor/twig/twig/doc/templates.rst delete mode 100644 vendor/twig/twig/doc/tests/constant.rst delete mode 100644 vendor/twig/twig/doc/tests/defined.rst delete mode 100644 vendor/twig/twig/doc/tests/divisibleby.rst delete mode 100644 vendor/twig/twig/doc/tests/empty.rst delete mode 100644 vendor/twig/twig/doc/tests/even.rst delete mode 100644 vendor/twig/twig/doc/tests/index.rst delete mode 100644 vendor/twig/twig/doc/tests/iterable.rst delete mode 100644 vendor/twig/twig/doc/tests/null.rst delete mode 100644 vendor/twig/twig/doc/tests/odd.rst delete mode 100644 vendor/twig/twig/doc/tests/sameas.rst diff --git a/composer.lock b/composer.lock index fd2c307..0c694fa 100755 --- a/composer.lock +++ b/composer.lock @@ -213,16 +213,16 @@ }, { "name": "twig/twig", - "version": "v1.44.5", + "version": "v1.44.6", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "dd4353357c5a116322e92a00d16043a31881a81e" + "reference": "ae39480f010ef88adc7938503c9b02d3baf2f3b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/dd4353357c5a116322e92a00d16043a31881a81e", - "reference": "dd4353357c5a116322e92a00d16043a31881a81e", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/ae39480f010ef88adc7938503c9b02d3baf2f3b3", + "reference": "ae39480f010ef88adc7938503c9b02d3baf2f3b3", "shasum": "" }, "require": { @@ -275,7 +275,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v1.44.5" + "source": "https://github.com/twigphp/Twig/tree/v1.44.6" }, "funding": [ { @@ -287,7 +287,7 @@ "type": "tidelift" } ], - "time": "2021-09-17T08:35:19+00:00" + "time": "2021-11-25T13:31:46+00:00" } ], "packages-dev": [], diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index 56e7e74..68434b1 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -32,7 +32,7 @@ class InstalledVersions 'aliases' => array ( ), - 'reference' => 'fa83cf8d1315a6fced6e8553e17f0638f4dc5f7a', + 'reference' => '54b39af910b0860239a6dde7ec23231716621ce0', 'name' => '__root__', ), 'versions' => @@ -44,7 +44,7 @@ class InstalledVersions 'aliases' => array ( ), - 'reference' => 'fa83cf8d1315a6fced6e8553e17f0638f4dc5f7a', + 'reference' => '54b39af910b0860239a6dde7ec23231716621ce0', ), 'art-of-wifi/unifi-api-client' => array ( @@ -75,12 +75,12 @@ class InstalledVersions ), 'twig/twig' => array ( - 'pretty_version' => 'v1.44.5', - 'version' => '1.44.5.0', + 'pretty_version' => 'v1.44.6', + 'version' => '1.44.6.0', 'aliases' => array ( ), - 'reference' => 'dd4353357c5a116322e92a00d16043a31881a81e', + 'reference' => 'ae39480f010ef88adc7938503c9b02d3baf2f3b3', ), ), ); diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index fad4219..cebaaac 100755 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -216,17 +216,17 @@ }, { "name": "twig/twig", - "version": "v1.44.5", - "version_normalized": "1.44.5.0", + "version": "v1.44.6", + "version_normalized": "1.44.6.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "dd4353357c5a116322e92a00d16043a31881a81e" + "reference": "ae39480f010ef88adc7938503c9b02d3baf2f3b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/dd4353357c5a116322e92a00d16043a31881a81e", - "reference": "dd4353357c5a116322e92a00d16043a31881a81e", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/ae39480f010ef88adc7938503c9b02d3baf2f3b3", + "reference": "ae39480f010ef88adc7938503c9b02d3baf2f3b3", "shasum": "" }, "require": { @@ -237,7 +237,7 @@ "psr/container": "^1.0", "symfony/phpunit-bridge": "^4.4.9|^5.0.9" }, - "time": "2021-09-17T08:35:19+00:00", + "time": "2021-11-25T13:31:46+00:00", "type": "library", "extra": { "branch-alias": { @@ -281,7 +281,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v1.44.5" + "source": "https://github.com/twigphp/Twig/tree/v1.44.6" }, "funding": [ { diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index f294e4b..1596633 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -6,7 +6,7 @@ 'aliases' => array ( ), - 'reference' => 'fa83cf8d1315a6fced6e8553e17f0638f4dc5f7a', + 'reference' => '54b39af910b0860239a6dde7ec23231716621ce0', 'name' => '__root__', ), 'versions' => @@ -18,7 +18,7 @@ 'aliases' => array ( ), - 'reference' => 'fa83cf8d1315a6fced6e8553e17f0638f4dc5f7a', + 'reference' => '54b39af910b0860239a6dde7ec23231716621ce0', ), 'art-of-wifi/unifi-api-client' => array ( @@ -49,12 +49,12 @@ ), 'twig/twig' => array ( - 'pretty_version' => 'v1.44.5', - 'version' => '1.44.5.0', + 'pretty_version' => 'v1.44.6', + 'version' => '1.44.6.0', 'aliases' => array ( ), - 'reference' => 'dd4353357c5a116322e92a00d16043a31881a81e', + 'reference' => 'ae39480f010ef88adc7938503c9b02d3baf2f3b3', ), ), ); diff --git a/vendor/twig/twig/.gitattributes b/vendor/twig/twig/.gitattributes index 3a3ce6e..c46c1b9 100644 --- a/vendor/twig/twig/.gitattributes +++ b/vendor/twig/twig/.gitattributes @@ -1,2 +1,3 @@ +/doc/** export-ignore /tests export-ignore /phpunit.xml.dist export-ignore diff --git a/vendor/twig/twig/CHANGELOG b/vendor/twig/twig/CHANGELOG index 055d460..ea1319a 100644 --- a/vendor/twig/twig/CHANGELOG +++ b/vendor/twig/twig/CHANGELOG @@ -1,3 +1,7 @@ +# 1.44.6 (2021-11-25) + + * Last version for the 1.x series + # 1.44.5 (2021-09-17) * Improve compatibility with PHP 8.1 diff --git a/vendor/twig/twig/README.rst b/vendor/twig/twig/README.rst index 7bd3954..5c7bb54 100644 --- a/vendor/twig/twig/README.rst +++ b/vendor/twig/twig/README.rst @@ -7,7 +7,7 @@ and documentation). Twig uses a syntax similar to the Django and Jinja template languages which inspired the Twig runtime environment. -**Twig version 1 will stop being maintained at the end of November 2021.** +**Twig version 1 is not maintained anymore.** Please, upgrade at your earliest convenience. Sponsors diff --git a/vendor/twig/twig/doc/.doctor-rst.yaml b/vendor/twig/twig/doc/.doctor-rst.yaml deleted file mode 100644 index 754f972..0000000 --- a/vendor/twig/twig/doc/.doctor-rst.yaml +++ /dev/null @@ -1,55 +0,0 @@ -rules: - american_english: ~ - avoid_repetetive_words: ~ - blank_line_after_directive: ~ - blank_line_before_directive: ~ - composer_dev_option_not_at_the_end: ~ - correct_code_block_directive_based_on_the_content: ~ - deprecated_directive_should_have_version: ~ - ensure_order_of_code_blocks_in_configuration_block: ~ - extension_xlf_instead_of_xliff: ~ - indention: ~ - lowercase_as_in_use_statements: ~ - max_blank_lines: - max: 2 - no_blank_line_after_filepath_in_php_code_block: ~ - no_blank_line_after_filepath_in_twig_code_block: ~ - no_blank_line_after_filepath_in_xml_code_block: ~ - no_blank_line_after_filepath_in_yaml_code_block: ~ - no_composer_req: ~ - no_explicit_use_of_code_block_php: ~ - no_inheritdoc: ~ - no_namespace_after_use_statements: ~ - no_php_open_tag_in_code_block_php_directive: ~ - no_space_before_self_xml_closing_tag: ~ - ordered_use_statements: ~ - php_prefix_before_bin_console: ~ - replace_code_block_types: ~ - replacement: ~ - short_array_syntax: ~ - typo: ~ - unused_links: ~ - use_deprecated_directive_instead_of_versionadded: ~ - use_https_xsd_urls: ~ - valid_inline_highlighted_namespaces: ~ - valid_use_statements: ~ - versionadded_directive_should_have_version: ~ - yaml_instead_of_yml_suffix: ~ - yarn_dev_option_at_the_end: ~ - - versionadded_directive_major_version: - major_version: 1 - - versionadded_directive_min_version: - min_version: '1.0' - - deprecated_directive_major_version: - major_version: 1 - - deprecated_directive_min_version: - min_version: '1.0' - -whitelist: - lines: - - '``C:\\php-sdk\\phpdev\\vcXX\\x86\\php-source-directory\\Release``' - - 'I like Twig.
' diff --git a/vendor/twig/twig/doc/_build/.requirements.txt b/vendor/twig/twig/doc/_build/.requirements.txt deleted file mode 100644 index 47f076e..0000000 --- a/vendor/twig/twig/doc/_build/.requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -docutils==0.13.1 -Pygments==2.2.0 -sphinx==1.8.5 -git+https://github.com/fabpot/sphinx-php.git@v2.0.0#egg_name=sphinx-php -jsx-lexer===0.0.8 -sphinx_rtd_theme==0.5.0 diff --git a/vendor/twig/twig/doc/_build/Makefile b/vendor/twig/twig/doc/_build/Makefile deleted file mode 100644 index 25b6600..0000000 --- a/vendor/twig/twig/doc/_build/Makefile +++ /dev/null @@ -1,153 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = . - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -c $(BUILDDIR) -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) ../ -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Symfony.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Symfony.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/Symfony" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Symfony" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/vendor/twig/twig/doc/_build/conf.py b/vendor/twig/twig/doc/_build/conf.py deleted file mode 100644 index 1e3a8ab..0000000 --- a/vendor/twig/twig/doc/_build/conf.py +++ /dev/null @@ -1,271 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Symfony documentation build configuration file, created by -# sphinx-quickstart on Sat Jul 28 21:58:57 2012. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.append(os.path.abspath('_exts')) - -# adding PhpLexer -from sphinx.highlighting import lexers -from pygments.lexers.special import TextLexer -from pygments.lexers.text import RstLexer -from pygments.lexers.web import PhpLexer - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = '1.8.5' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [ - 'sphinx.ext.autodoc', 'sphinx.ext.doctest', - 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.ifconfig', - 'sphinx.ext.viewcode', 'sphinx.ext.extlinks', - 'sensio.sphinx.codeblock', 'sensio.sphinx.configurationblock', 'sensio.sphinx.phpcode', 'sensio.sphinx.bestpractice' -] - -#spelling_show_sugestions=True -#spelling_lang='en_US' -#spelling_word_list_filename='_build/spelling_word_list.txt' - -# Add any paths that contain templates here, relative to this directory. -# templates_path = ['_theme/_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = 'Twig' -copyright = '' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -# version = '2.2' -# The full version, including alpha/beta/rc tags. -# release = '2.2.13' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -#pygments_style = 'symfonycom.sphinx.SensioStyle' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# -- Settings for symfony doc extension --------------------------------------------------- - -# enable highlighting for PHP code not between ```` by default -lexers['php'] = PhpLexer(startinline=True) -lexers['rst'] = RstLexer() - -config_block = { - 'rst': 'reStructuredText', -} - -# don't enable Sphinx Domains -primary_domain = None - -# set url for API links -#api_url = 'https://github.com/symfony/symfony/blob/master/src/%s.php' - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = "sphinx_rtd_theme" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - 'logo_only': True, - 'prev_next_buttons_location': None, - 'style_nav_header_background': '#f0f0f0' -} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = '_static/symfony-logo.svg' - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -#html_static_path = ['_static'] -#html_css_files = ['rtd_custom.css'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'Twig' - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -#latex_documents = [] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -#man_pages = [] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -#texinfo_documents = [] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# Use PHP syntax highlighting in code examples by default -highlight_language='php' diff --git a/vendor/twig/twig/doc/advanced.rst b/vendor/twig/twig/doc/advanced.rst deleted file mode 100644 index ce97c71..0000000 --- a/vendor/twig/twig/doc/advanced.rst +++ /dev/null @@ -1,959 +0,0 @@ -Extending Twig -============== - -Twig can be extended in many ways; you can add extra tags, filters, tests, -operators, global variables, and functions. You can even extend the parser -itself with node visitors. - -.. note:: - - The first section of this chapter describes how to extend Twig. If you want - to reuse your changes in different projects or if you want to share them - with others, you should then create an extension as described in the - following section. - -.. caution:: - - When extending Twig without creating an extension, Twig won't be able to - recompile your templates when the PHP code is updated. To see your changes - in real-time, either disable template caching or package your code into an - extension (see the next section of this chapter). - -Before extending Twig, you must understand the differences between all the -different possible extension points and when to use them. - -First, remember that Twig has two main language constructs: - -* ``{{ }}``: used to print the result of an expression evaluation; - -* ``{% %}``: used to execute statements. - -To understand why Twig exposes so many extension points, let's see how to -implement a *Lorem ipsum* generator (it needs to know the number of words to -generate). - -You can use a ``lipsum`` *tag*: - -.. code-block:: twig - - {% lipsum 40 %} - -That works, but using a tag for ``lipsum`` is not a good idea for at least -three main reasons: - -* ``lipsum`` is not a language construct; -* The tag outputs something; -* The tag is not flexible as you cannot use it in an expression: - - .. code-block:: twig - - {{ 'some text' ~ {% lipsum 40 %} ~ 'some more text' }} - -In fact, you rarely need to create tags; and that's good news because tags are -the most complex extension point. - -Now, let's use a ``lipsum`` *filter*: - -.. code-block:: twig - - {{ 40|lipsum }} - -Again, it works. But a filter should transform the passed value to something -else. Here, we use the value to indicate the number of words to generate (so, -``40`` is an argument of the filter, not the value we want to transform). - -Next, let's use a ``lipsum`` *function*: - -.. code-block:: twig - - {{ lipsum(40) }} - -Here we go. For this specific example, the creation of a function is the -extension point to use. And you can use it anywhere an expression is accepted: - -.. code-block:: twig - - {{ 'some text' ~ lipsum(40) ~ 'some more text' }} - - {% set lipsum = lipsum(40) %} - -Lastly, you can also use a *global* object with a method able to generate lorem -ipsum text: - -.. code-block:: twig - - {{ text.lipsum(40) }} - -As a rule of thumb, use functions for frequently used features and global -objects for everything else. - -Keep in mind the following when you want to extend Twig: - -========== ========================== ========== ========================= -What? Implementation difficulty? How often? When? -========== ========================== ========== ========================= -*macro* simple frequent Content generation -*global* simple frequent Helper object -*function* simple frequent Content generation -*filter* simple frequent Value transformation -*tag* complex rare DSL language construct -*test* simple rare Boolean decision -*operator* simple rare Values transformation -========== ========================== ========== ========================= - -Globals -------- - -A global variable is like any other template variable, except that it's -available in all templates and macros:: - - $twig = new \Twig\Environment($loader); - $twig->addGlobal('text', new Text()); - -You can then use the ``text`` variable anywhere in a template: - -.. code-block:: twig - - {{ text.lipsum(40) }} - -Filters -------- - -Creating a filter consists of associating a name with a PHP callable:: - - // an anonymous function - $filter = new \Twig\TwigFilter('rot13', function ($string) { - return str_rot13($string); - }); - - // or a simple PHP function - $filter = new \Twig\TwigFilter('rot13', 'str_rot13'); - - // or a class static method - $filter = new \Twig\TwigFilter('rot13', ['SomeClass', 'rot13Filter']); - $filter = new \Twig\TwigFilter('rot13', 'SomeClass::rot13Filter'); - - // or a class method - $filter = new \Twig\TwigFilter('rot13', [$this, 'rot13Filter']); - // the one below needs a runtime implementation (see below for more information) - $filter = new \Twig\TwigFilter('rot13', ['SomeClass', 'rot13Filter']); - -The first argument passed to the ``\Twig\TwigFilter`` constructor is the name -of the filter you will use in templates and the second one is the PHP callable -to associate with it. - -Then, add the filter to the Twig environment:: - - $twig = new \Twig\Environment($loader); - $twig->addFilter($filter); - -And here is how to use it in a template: - -.. code-block:: twig - - {{ 'Twig'|rot13 }} - - {# will output Gjvt #} - -When called by Twig, the PHP callable receives the left side of the filter -(before the pipe ``|``) as the first argument and the extra arguments passed -to the filter (within parentheses ``()``) as extra arguments. - -For instance, the following code: - -.. code-block:: twig - - {{ 'TWIG'|lower }} - {{ now|date('d/m/Y') }} - -is compiled to something like the following:: - - - - -The ``\Twig\TwigFilter`` class takes an array of options as its last -argument:: - - $filter = new \Twig\TwigFilter('rot13', 'str_rot13', $options); - -Environment-aware Filters -~~~~~~~~~~~~~~~~~~~~~~~~~ - -If you want to access the current environment instance in your filter, set the -``needs_environment`` option to ``true``; Twig will pass the current -environment as the first argument to the filter call:: - - $filter = new \Twig\TwigFilter('rot13', function (\Twig\Environment $env, $string) { - // get the current charset for instance - $charset = $env->getCharset(); - - return str_rot13($string); - }, ['needs_environment' => true]); - -Context-aware Filters -~~~~~~~~~~~~~~~~~~~~~ - -If you want to access the current context in your filter, set the -``needs_context`` option to ``true``; Twig will pass the current context as -the first argument to the filter call (or the second one if -``needs_environment`` is also set to ``true``):: - - $filter = new \Twig\TwigFilter('rot13', function ($context, $string) { - // ... - }, ['needs_context' => true]); - - $filter = new \Twig\TwigFilter('rot13', function (\Twig\Environment $env, $context, $string) { - // ... - }, ['needs_context' => true, 'needs_environment' => true]); - -Automatic Escaping -~~~~~~~~~~~~~~~~~~ - -If automatic escaping is enabled, the output of the filter may be escaped -before printing. If your filter acts as an escaper (or explicitly outputs HTML -or JavaScript code), you will want the raw output to be printed. In such a -case, set the ``is_safe`` option:: - - $filter = new \Twig\TwigFilter('nl2br', 'nl2br', ['is_safe' => ['html']]); - -Some filters may need to work on input that is already escaped or safe, for -example when adding (safe) HTML tags to originally unsafe output. In such a -case, set the ``pre_escape`` option to escape the input data before it is run -through your filter:: - - $filter = new \Twig\TwigFilter('somefilter', 'somefilter', ['pre_escape' => 'html', 'is_safe' => ['html']]); - -Variadic Filters -~~~~~~~~~~~~~~~~ - -.. versionadded:: 1.19 - - Support for variadic filters was added in Twig 1.19. - -When a filter should accept an arbitrary number of arguments, set the -``is_variadic`` option to ``true``; Twig will pass the extra arguments as the -last argument to the filter call as an array:: - - $filter = new \Twig\TwigFilter('thumbnail', function ($file, array $options = []) { - // ... - }, ['is_variadic' => true]); - -Be warned that :ref:`named arguments ` passed to a variadic -filter cannot be checked for validity as they will automatically end up in the -option array. - -Dynamic Filters -~~~~~~~~~~~~~~~ - -A filter name containing the special ``*`` character is a dynamic filter and -the ``*`` part will match any string:: - - $filter = new \Twig\TwigFilter('*_path', function ($name, $arguments) { - // ... - }); - -The following filters are matched by the above defined dynamic filter: - -* ``product_path`` -* ``category_path`` - -A dynamic filter can define more than one dynamic parts:: - - $filter = new \Twig\TwigFilter('*_path_*', function ($name, $suffix, $arguments) { - // ... - }); - -The filter receives all dynamic part values before the normal filter arguments, -but after the environment and the context. For instance, a call to -``'foo'|a_path_b()`` will result in the following arguments to be passed to the -filter: ``('a', 'b', 'foo')``. - -Deprecated Filters -~~~~~~~~~~~~~~~~~~ - -.. versionadded:: 1.21 - - Support for ``deprecated`` filters was added in Twig 1.21. - -You can mark a filter as being deprecated by setting the ``deprecated`` option -to ``true``. You can also give an alternative filter that replaces the -deprecated one when that makes sense:: - - $filter = new \Twig\TwigFilter('obsolete', function () { - // ... - }, ['deprecated' => true, 'alternative' => 'new_one']); - -When a filter is deprecated, Twig emits a deprecation notice when compiling a -template using it. See :ref:`deprecation-notices` for more information. - -Functions ---------- - -Functions are defined in the exact same way as filters, but you need to create -an instance of ``\Twig\TwigFunction``:: - - $twig = new \Twig\Environment($loader); - $function = new \Twig\TwigFunction('function_name', function () { - // ... - }); - $twig->addFunction($function); - -Functions support the same features as filters, except for the ``pre_escape`` -and ``preserves_safety`` options. - -Tests ------ - -Tests are defined in the exact same way as filters and functions, but you need -to create an instance of ``\Twig\TwigTest``:: - - $twig = new \Twig\Environment($loader); - $test = new \Twig\TwigTest('test_name', function () { - // ... - }); - $twig->addTest($test); - -Tests allow you to create custom application specific logic for evaluating -boolean conditions. As a simple example, let's create a Twig test that checks if -objects are 'red':: - - $twig = new \Twig\Environment($loader); - $test = new \Twig\TwigTest('red', function ($value) { - if (isset($value->color) && $value->color == 'red') { - return true; - } - if (isset($value->paint) && $value->paint == 'red') { - return true; - } - return false; - }); - $twig->addTest($test); - -Test functions must always return ``true``/``false``. - -When creating tests you can use the ``node_class`` option to provide custom test -compilation. This is useful if your test can be compiled into PHP primitives. -This is used by many of the tests built into Twig:: - - namespace App; - - use Twig\Environment; - use Twig\Node\Expression\TestExpression; - use Twig\TwigTest; - - $twig = new Environment($loader); - $test = new TwigTest( - 'odd', - null, - ['node_class' => OddTestExpression::class]); - $twig->addTest($test); - - class OddTestExpression extends TestExpression - { - public function compile(\Twig\Compiler $compiler) - { - $compiler - ->raw('(') - ->subcompile($this->getNode('node')) - ->raw(' % 2 != 0') - ->raw(')') - ; - } - } - -The above example shows how you can create tests that use a node class. The node -class has access to one sub-node called ``node``. This sub-node contains the -value that is being tested. When the ``odd`` filter is used in code such as: - -.. code-block:: twig - - {% if my_value is odd %} - -The ``node`` sub-node will contain an expression of ``my_value``. Node-based -tests also have access to the ``arguments`` node. This node will contain the -various other arguments that have been provided to your test. - -.. versionadded:: 1.36 - - Dynamic tests support was added in Twig 1.36. - -If you want to pass a variable number of positional or named arguments to the -test, set the ``is_variadic`` option to ``true``. Tests support dynamic -names (see dynamic filters for the syntax). - -Tags ----- - -One of the most exciting features of a template engine like Twig is the -possibility to define new **language constructs**. This is also the most complex -feature as you need to understand how Twig's internals work. - -Most of the time though, a tag is not needed: - -* If your tag generates some output, use a **function** instead. - -* If your tag modifies some content and returns it, use a **filter** instead. - - For instance, if you want to create a tag that converts a Markdown formatted - text to HTML, create a ``markdown`` filter instead: - - .. code-block:: twig - - {{ '**markdown** text'|markdown }} - - If you want use this filter on large amounts of text, wrap it with the - :doc:`apply ` tag: - - .. code-block:: twig - - {% apply markdown %} - Title - ===== - - Much better than creating a tag as you can **compose** filters. - {% endapply %} - - .. note:: - - The ``apply`` tag was introduced in Twig 1.40; use the ``filter`` tag with - previous versions. - -* If your tag does not output anything, but only exists because of a side - effect, create a **function** that returns nothing and call it via the - :doc:`filter ` tag. - - For instance, if you want to create a tag that logs text, create a ``log`` - function instead and call it via the :doc:`do ` tag: - - .. code-block:: twig - - {% do log('Log some things') %} - -If you still want to create a tag for a new language construct, great! - -Let's create a ``set`` tag that allows the definition of simple variables from -within a template. The tag can be used like follows: - -.. code-block:: twig - - {% set name = "value" %} - - {{ name }} - - {# should output value #} - -.. note:: - - The ``set`` tag is part of the Core extension and as such is always - available. The built-in version is slightly more powerful and supports - multiple assignments by default. - -Three steps are needed to define a new tag: - -* Defining a Token Parser class (responsible for parsing the template code); - -* Defining a Node class (responsible for converting the parsed code to PHP); - -* Registering the tag. - -Registering a new tag -~~~~~~~~~~~~~~~~~~~~~ - -Add a tag by calling the ``addTokenParser`` method on the ``\Twig\Environment`` -instance:: - - $twig = new \Twig\Environment($loader); - $twig->addTokenParser(new Project_Set_TokenParser()); - -Defining a Token Parser -~~~~~~~~~~~~~~~~~~~~~~~ - -Now, let's see the actual code of this class:: - - class Project_Set_TokenParser extends \Twig\TokenParser\AbstractTokenParser - { - public function parse(\Twig\Token $token) - { - $parser = $this->parser; - $stream = $parser->getStream(); - - $name = $stream->expect(\Twig\Token::NAME_TYPE)->getValue(); - $stream->expect(\Twig\Token::OPERATOR_TYPE, '='); - $value = $parser->getExpressionParser()->parseExpression(); - $stream->expect(\Twig\Token::BLOCK_END_TYPE); - - return new Project_Set_Node($name, $value, $token->getLine(), $this->getTag()); - } - - public function getTag() - { - return 'set'; - } - } - -The ``getTag()`` method must return the tag we want to parse, here ``set``. - -The ``parse()`` method is invoked whenever the parser encounters a ``set`` -tag. It should return a ``\Twig\Node\Node`` instance that represents the node (the -``Project_Set_Node`` calls creating is explained in the next section). - -The parsing process is simplified thanks to a bunch of methods you can call -from the token stream (``$this->parser->getStream()``): - -* ``getCurrent()``: Gets the current token in the stream. - -* ``next()``: Moves to the next token in the stream, *but returns the old one*. - -* ``test($type)``, ``test($value)`` or ``test($type, $value)``: Determines whether - the current token is of a particular type or value (or both). The value may be an - array of several possible values. - -* ``expect($type[, $value[, $message]])``: If the current token isn't of the given - type/value a syntax error is thrown. Otherwise, if the type and value are correct, - the token is returned and the stream moves to the next token. - -* ``look()``: Looks at the next token without consuming it. - -Parsing expressions is done by calling the ``parseExpression()`` like we did for -the ``set`` tag. - -.. tip:: - - Reading the existing ``TokenParser`` classes is the best way to learn all - the nitty-gritty details of the parsing process. - -Defining a Node -~~~~~~~~~~~~~~~ - -The ``Project_Set_Node`` class itself is quite short:: - - class Project_Set_Node extends \Twig\Node\Node - { - public function __construct($name, \Twig\Node\Expression\AbstractExpression $value, $line, $tag = null) - { - parent::__construct(['value' => $value], ['name' => $name], $line, $tag); - } - - public function compile(\Twig\Compiler $compiler) - { - $compiler - ->addDebugInfo($this) - ->write('$context[\''.$this->getAttribute('name').'\'] = ') - ->subcompile($this->getNode('value')) - ->raw(";\n") - ; - } - } - -The compiler implements a fluid interface and provides methods that helps the -developer generate beautiful and readable PHP code: - -* ``subcompile()``: Compiles a node. - -* ``raw()``: Writes the given string as is. - -* ``write()``: Writes the given string by adding indentation at the beginning - of each line. - -* ``string()``: Writes a quoted string. - -* ``repr()``: Writes a PHP representation of a given value (see - ``\Twig\Node\ForNode`` for a usage example). - -* ``addDebugInfo()``: Adds the line of the original template file related to - the current node as a comment. - -* ``indent()``: Indents the generated code (see ``\Twig\Node\BlockNode`` for a - usage example). - -* ``outdent()``: Outdents the generated code (see ``\Twig\Node\BlockNode`` for a - usage example). - -.. _creating_extensions: - -Creating an Extension ---------------------- - -The main motivation for writing an extension is to move often used code into a -reusable class like adding support for internationalization. An extension can -define tags, filters, tests, operators, functions, and node visitors. - -Most of the time, it is useful to create a single extension for your project, -to host all the specific tags and filters you want to add to Twig. - -.. tip:: - - When packaging your code into an extension, Twig is smart enough to - recompile your templates whenever you make a change to it (when - ``auto_reload`` is enabled). - -An extension is a class that implements the following interface:: - - interface Twig_ExtensionInterface - { - /** - * Initializes the runtime environment. - * - * This is where you can load some file that contains filter functions for instance. - * - * @deprecated since 1.23 (to be removed in 2.0), implement \Twig\Extension\InitRuntimeInterface instead - */ - function initRuntime(\Twig\Environment $environment); - - /** - * Returns the token parser instances to add to the existing list. - * - * @return (Twig_TokenParserInterface|Twig_TokenParserBrokerInterface)[] - */ - function getTokenParsers(); - - /** - * Returns the node visitor instances to add to the existing list. - * - * @return \Twig\NodeVisitor\NodeVisitorInterface[] - */ - function getNodeVisitors(); - - /** - * Returns a list of filters to add to the existing list. - * - * @return \Twig\TwigFilter[] - */ - function getFilters(); - - /** - * Returns a list of tests to add to the existing list. - * - * @return \Twig\TwigTest[] - */ - function getTests(); - - /** - * Returns a list of functions to add to the existing list. - * - * @return \Twig\TwigFunction[] - */ - function getFunctions(); - - /** - * Returns a list of operators to add to the existing list. - * - * @return array First array of unary operators, second array of binary operators - */ - function getOperators(); - - /** - * Returns a list of global variables to add to the existing list. - * - * @return array An array of global variables - * - * @deprecated since 1.23 (to be removed in 2.0), implement \Twig\Extension\GlobalsInterface instead - */ - function getGlobals(); - - /** - * Returns the name of the extension. - * - * @return string The extension name - * - * @deprecated since 1.26 (to be removed in 2.0), not used anymore internally - */ - function getName(); - } - -To keep your extension class clean and lean, inherit from the built-in -``\Twig\Extension\AbstractExtension`` class instead of implementing the interface as it provides -empty implementations for all methods:: - - class Project_Twig_Extension extends \Twig\Extension\AbstractExtension - { - } - -This extension does nothing for now. We will customize it in the next sections. - -.. note:: - - Prior to Twig 1.26, you must implement the ``getName()`` method which must - return a unique identifier for the extension. - -You can save your extension anywhere on the filesystem, as all extensions must -be registered explicitly to be available in your templates. - -You can register an extension by using the ``addExtension()`` method on your -main ``Environment`` object:: - - $twig = new \Twig\Environment($loader); - $twig->addExtension(new Project_Twig_Extension()); - -.. tip:: - - The Twig core extensions are great examples of how extensions work. - -Globals -~~~~~~~ - -Global variables can be registered in an extension via the ``getGlobals()`` -method:: - - class Project_Twig_Extension extends \Twig\Extension\AbstractExtension implements \Twig\Extension\GlobalsInterface - { - public function getGlobals() - { - return [ - 'text' => new Text(), - ]; - } - - // ... - } - -Functions -~~~~~~~~~ - -Functions can be registered in an extension via the ``getFunctions()`` -method:: - - class Project_Twig_Extension extends \Twig\Extension\AbstractExtension - { - public function getFunctions() - { - return [ - new \Twig\TwigFunction('lipsum', 'generate_lipsum'), - ]; - } - - // ... - } - -Filters -~~~~~~~ - -To add a filter to an extension, you need to override the ``getFilters()`` -method. This method must return an array of filters to add to the Twig -environment:: - - class Project_Twig_Extension extends \Twig\Extension\AbstractExtension - { - public function getFilters() - { - return [ - new \Twig\TwigFilter('rot13', 'str_rot13'), - ]; - } - - // ... - } - -Tags -~~~~ - -Adding a tag in an extension can be done by overriding the -``getTokenParsers()`` method. This method must return an array of tags to add -to the Twig environment:: - - class Project_Twig_Extension extends \Twig\Extension\AbstractExtension - { - public function getTokenParsers() - { - return [new Project_Set_TokenParser()]; - } - - // ... - } - -In the above code, we have added a single new tag, defined by the -``Project_Set_TokenParser`` class. The ``Project_Set_TokenParser`` class is -responsible for parsing the tag and compiling it to PHP. - -Operators -~~~~~~~~~ - -The ``getOperators()`` methods lets you add new operators. Here is how to add -the ``!``, ``||``, and ``&&`` operators:: - - class Project_Twig_Extension extends \Twig\Extension\AbstractExtension - { - public function getOperators() - { - return [ - [ - '!' => ['precedence' => 50, 'class' => '\Twig\Node\Expression\Unary\NotUnary'], - ], - [ - '||' => ['precedence' => 10, 'class' => '\Twig\Node\Expression\Binary\OrBinary', 'associativity' => \Twig\ExpressionParser::OPERATOR_LEFT], - '&&' => ['precedence' => 15, 'class' => '\Twig\Node\Expression\Binary\AndBinary', 'associativity' => \Twig\ExpressionParser::OPERATOR_LEFT], - ], - ]; - } - - // ... - } - -Tests -~~~~~ - -The ``getTests()`` method lets you add new test functions:: - - class Project_Twig_Extension extends \Twig\Extension\AbstractExtension - { - public function getTests() - { - return [ - new \Twig\TwigTest('even', 'twig_test_even'), - ]; - } - - // ... - } - -Definition vs Runtime -~~~~~~~~~~~~~~~~~~~~~ - -Twig filters, functions, and tests runtime implementations can be defined as -any valid PHP callable: - -* **functions/static methods**: Simple to implement and fast (used by all Twig - core extensions); but it is hard for the runtime to depend on external - objects; - -* **closures**: Simple to implement; - -* **object methods**: More flexible and required if your runtime code depends - on external objects. - -The simplest way to use methods is to define them on the extension itself:: - - class Project_Twig_Extension extends \Twig\Extension\AbstractExtension - { - private $rot13Provider; - - public function __construct($rot13Provider) - { - $this->rot13Provider = $rot13Provider; - } - - public function getFunctions() - { - return [ - new \Twig\TwigFunction('rot13', [$this, 'rot13']), - ]; - } - - public function rot13($value) - { - return $this->rot13Provider->rot13($value); - } - } - -This is very convenient but not recommended as it makes template compilation -depend on runtime dependencies even if they are not needed (think for instance -as a dependency that connects to a database engine). - -As of Twig 1.26, you can decouple the extension definitions from their -runtime implementations by registering a ``\Twig\RuntimeLoader\RuntimeLoaderInterface`` -instance on the environment that knows how to instantiate such runtime classes -(runtime classes must be autoload-able):: - - class RuntimeLoader implements \Twig\RuntimeLoader\RuntimeLoaderInterface - { - public function load($class) - { - // implement the logic to create an instance of $class - // and inject its dependencies - // most of the time, it means using your dependency injection container - if ('Project_Twig_RuntimeExtension' === $class) { - return new $class(new Rot13Provider()); - } else { - // ... - } - } - } - - $twig->addRuntimeLoader(new RuntimeLoader()); - -.. note:: - - As of Twig 1.32, Twig comes with a PSR-11 compatible runtime loader - (``\Twig\RuntimeLoader\ContainerRuntimeLoader``). - -It is now possible to move the runtime logic to a new -``Project_Twig_RuntimeExtension`` class and use it directly in the extension:: - - class Project_Twig_RuntimeExtension - { - private $rot13Provider; - - public function __construct($rot13Provider) - { - $this->rot13Provider = $rot13Provider; - } - - public function rot13($value) - { - return $this->rot13Provider->rot13($value); - } - } - - class Project_Twig_Extension extends \Twig\Extension\AbstractExtension - { - public function getFunctions() - { - return [ - new \Twig\TwigFunction('rot13', ['Project_Twig_RuntimeExtension', 'rot13']), - // or - new \Twig\TwigFunction('rot13', 'Project_Twig_RuntimeExtension::rot13'), - ]; - } - } - -Testing an Extension --------------------- - -Functional Tests -~~~~~~~~~~~~~~~~ - -You can create functional tests for extensions by creating the following file -structure in your test directory:: - - Fixtures/ - filters/ - foo.test - bar.test - functions/ - foo.test - bar.test - tags/ - foo.test - bar.test - IntegrationTest.php - -The ``IntegrationTest.php`` file should look like this:: - - class Project_Tests_IntegrationTest extends \Twig\Test\IntegrationTestCase - { - public function getExtensions() - { - return [ - new Project_Twig_Extension1(), - new Project_Twig_Extension2(), - ]; - } - - public function getFixturesDir() - { - return __DIR__.'/Fixtures/'; - } - } - -Fixtures examples can be found within the Twig repository -`tests/Twig/Fixtures`_ directory. - -Node Tests -~~~~~~~~~~ - -Testing the node visitors can be complex, so extend your test cases from -``\Twig\Test\NodeTestCase``. Examples can be found in the Twig repository -`tests/Twig/Node`_ directory. - -.. _`tests/Twig/Fixtures`: https://github.com/twigphp/Twig/tree/1.x/tests/Fixtures -.. _`tests/Twig/Node`: https://github.com/twigphp/Twig/tree/1.x/tests/Node diff --git a/vendor/twig/twig/doc/api.rst b/vendor/twig/twig/doc/api.rst deleted file mode 100644 index 0c50cd7..0000000 --- a/vendor/twig/twig/doc/api.rst +++ /dev/null @@ -1,594 +0,0 @@ -Twig for Developers -=================== - -This chapter describes the API to Twig and not the template language. It will -be most useful as reference to those implementing the template interface to -the application and not those who are creating Twig templates. - -Basics ------- - -Twig uses a central object called the **environment** (of class -``\Twig\Environment``). Instances of this class are used to store the -configuration and extensions, and are used to load templates. - -Most applications create one ``\Twig\Environment`` object on application -initialization and use that to load templates. In some cases, it might be useful -to have multiple environments side by side, with different configurations. - -The typical way to configure Twig to load templates for an application looks -roughly like this:: - - require_once '/path/to/vendor/autoload.php'; - - $loader = new \Twig\Loader\FilesystemLoader('/path/to/templates'); - $twig = new \Twig\Environment($loader, [ - 'cache' => '/path/to/compilation_cache', - ]); - -This creates a template environment with a default configuration and a loader -that looks up templates in the ``/path/to/templates/`` directory. Different -loaders are available and you can also write your own if you want to load -templates from a database or other resources. - -.. note:: - - Notice that the second argument of the environment is an array of options. - The ``cache`` option is a compilation cache directory, where Twig caches - the compiled templates to avoid the parsing phase for sub-sequent - requests. It is very different from the cache you might want to add for - the evaluated templates. For such a need, you can use any available PHP - cache library. - -Rendering Templates -------------------- - -To load a template from a Twig environment, call the ``load()`` method which -returns a ``\Twig\TemplateWrapper`` instance:: - - $template = $twig->load('index.html'); - -.. note:: - - Before Twig 1.28, use ``loadTemplate()`` instead which returns a - ``\Twig\Template`` instance. - -To render the template with some variables, call the ``render()`` method:: - - echo $template->render(['the' => 'variables', 'go' => 'here']); - -.. note:: - - The ``display()`` method is a shortcut to output the rendered template. - -You can also load and render the template in one fell swoop:: - - echo $twig->render('index.html', ['the' => 'variables', 'go' => 'here']); - -.. versionadded:: 1.28 - - The possibility to render blocks from the API was added in Twig 1.28. - -If a template defines blocks, they can be rendered individually via the -``renderBlock()`` call:: - - echo $template->renderBlock('block_name', ['the' => 'variables', 'go' => 'here']); - -.. _environment_options: - -Environment Options -------------------- - -When creating a new ``\Twig\Environment`` instance, you can pass an array of -options as the constructor second argument:: - - $twig = new \Twig\Environment($loader, ['debug' => true]); - -The following options are available: - -* ``debug`` *boolean* - - When set to ``true``, the generated templates have a - ``__toString()`` method that you can use to display the generated nodes - (default to ``false``). - -* ``charset`` *string* (defaults to ``utf-8``) - - The charset used by the templates. - -* ``base_template_class`` *string* (defaults to ``\Twig\Template``) - - The base template class to use for generated - templates. - -* ``cache`` *string* or ``false`` - - An absolute path where to store the compiled templates, or - ``false`` to disable caching (which is the default). - -* ``auto_reload`` *boolean* - - When developing with Twig, it's useful to recompile the - template whenever the source code changes. If you don't provide a value for - the ``auto_reload`` option, it will be determined automatically based on the - ``debug`` value. - -* ``strict_variables`` *boolean* - - If set to ``false``, Twig will silently ignore invalid - variables (variables and or attributes/methods that do not exist) and - replace them with a ``null`` value. When set to ``true``, Twig throws an - exception instead (default to ``false``). - -* ``autoescape`` *string* or *boolean* - - If set to ``true``, HTML auto-escaping will be enabled by - default for all templates (default to ``true``). - - As of Twig 1.8, you can set the escaping strategy to use (``html``, ``js``, - ``false`` to disable). - - As of Twig 1.9, you can set the escaping strategy to use (``css``, ``url``, - ``html_attr``, or a PHP callback that takes the template name and must - return the escaping strategy to use -- the callback cannot be a function name - to avoid collision with built-in escaping strategies). - - As of Twig 1.17, the ``filename`` escaping strategy (renamed to ``name`` as - of Twig 1.27) determines the escaping strategy to use for a template based on - the template filename extension (this strategy does not incur any overhead at - runtime as auto-escaping is done at compilation time.) - -* ``optimizations`` *integer* - - A flag that indicates which optimizations to apply - (default to ``-1`` -- all optimizations are enabled; set it to ``0`` to - disable). - -Loaders -------- - -Loaders are responsible for loading templates from a resource such as the file -system. - -Compilation Cache -~~~~~~~~~~~~~~~~~ - -All template loaders can cache the compiled templates on the filesystem for -future reuse. It speeds up Twig a lot as templates are only compiled once. - -Built-in Loaders -~~~~~~~~~~~~~~~~ - -Here is a list of the built-in loaders: - -``\Twig\Loader\FilesystemLoader`` -................................. - -.. versionadded:: 1.10 - - The ``prependPath()`` and support for namespaces were added in Twig 1.10. - -.. versionadded:: 1.27 - - Relative paths support was added in Twig 1.27. - -``\Twig\Loader\FilesystemLoader`` loads templates from the file system. This loader -can find templates in folders on the file system and is the preferred way to -load them:: - - $loader = new \Twig\Loader\FilesystemLoader($templateDir); - -It can also look for templates in an array of directories:: - - $loader = new \Twig\Loader\FilesystemLoader([$templateDir1, $templateDir2]); - -With such a configuration, Twig will first look for templates in -``$templateDir1`` and if they do not exist, it will fallback to look for them -in the ``$templateDir2``. - -You can add or prepend paths via the ``addPath()`` and ``prependPath()`` -methods:: - - $loader->addPath($templateDir3); - $loader->prependPath($templateDir4); - -The filesystem loader also supports namespaced templates. This allows to group -your templates under different namespaces which have their own template paths. - -When using the ``setPaths()``, ``addPath()``, and ``prependPath()`` methods, -specify the namespace as the second argument (when not specified, these -methods act on the "main" namespace):: - - $loader->addPath($templateDir, 'admin'); - -Namespaced templates can be accessed via the special -``@namespace_name/template_path`` notation:: - - $twig->render('@admin/index.html', []); - -``\Twig\Loader\FilesystemLoader`` support absolute and relative paths. Using relative -paths is preferred as it makes the cache keys independent of the project root -directory (for instance, it allows warming the cache from a build server where -the directory might be different from the one used on production servers):: - - $loader = new \Twig\Loader\FilesystemLoader('templates', getcwd().'/..'); - -.. note:: - - When not passing the root path as a second argument, Twig uses ``getcwd()`` - for relative paths. - -``\Twig\Loader\ArrayLoader`` -............................ - -``\Twig\Loader\ArrayLoader`` loads a template from a PHP array. It is passed an -array of strings bound to template names:: - - $loader = new \Twig\Loader\ArrayLoader([ - 'index.html' => 'Hello {{ name }}!', - ]); - $twig = new \Twig\Environment($loader); - - echo $twig->render('index.html', ['name' => 'Fabien']); - -This loader is very useful for unit testing. It can also be used for small -projects where storing all templates in a single PHP file might make sense. - -.. tip:: - - When using the ``Array`` loaders with a cache mechanism, you should know - that a new cache key is generated each time a template content "changes" - (the cache key being the source code of the template). If you don't want to - see your cache grows out of control, you need to take care of clearing the - old cache file by yourself. - -``\Twig\Loader\ChainLoader`` -............................ - -``\Twig\Loader\ChainLoader`` delegates the loading of templates to other loaders:: - - $loader1 = new \Twig\Loader\ArrayLoader([ - 'base.html' => '{% block content %}{% endblock %}', - ]); - $loader2 = new \Twig\Loader\ArrayLoader([ - 'index.html' => '{% extends "base.html" %}{% block content %}Hello {{ name }}{% endblock %}', - 'base.html' => 'Will never be loaded', - ]); - - $loader = new \Twig\Loader\ChainLoader([$loader1, $loader2]); - - $twig = new \Twig\Environment($loader); - -When looking for a template, Twig tries each loader in turn and returns as soon -as the template is found. When rendering the ``index.html`` template from the -above example, Twig will load it with ``$loader2`` but the ``base.html`` -template will be loaded from ``$loader1``. - -.. note:: - - You can also add loaders via the ``addLoader()`` method. - -Create your own Loader -~~~~~~~~~~~~~~~~~~~~~~ - -All loaders implement the ``\Twig\Loader\LoaderInterface``:: - - interface Twig_LoaderInterface - { - /** - * Gets the source code of a template, given its name. - * - * @param string $name string The name of the template to load - * - * @return string The template source code - * - * @deprecated since 1.27 (to be removed in 2.0), implement \Twig\Loader\SourceContextLoaderInterface - */ - function getSource($name); - - /** - * Gets the cache key to use for the cache for a given template name. - * - * @param string $name string The name of the template to load - * - * @return string The cache key - */ - function getCacheKey($name); - - /** - * Returns true if the template is still fresh. - * - * @param string $name The template name - * @param timestamp $time The last modification time of the cached template - */ - function isFresh($name, $time); - } - -The ``isFresh()`` method must return ``true`` if the current cached template -is still fresh, given the last modification time, or ``false`` otherwise. - -.. note:: - - As of Twig 1.27, you should also implement - ``\Twig\Loader\SourceContextLoaderInterface`` to avoid deprecation notices. - -.. tip:: - - As of Twig 1.11.0, you can also implement ``\Twig\Loader\ExistsLoaderInterface`` - to make your loader faster when used with the chain loader. - -Using Extensions ----------------- - -Twig extensions are packages that add new features to Twig. Register an -extension via the ``addExtension()`` method:: - - $twig->addExtension(new \Twig\Extension\SandboxExtension()); - -Twig comes bundled with the following extensions: - -* *Twig\Extension\CoreExtension*: Defines all the core features of Twig. - -* *Twig\Extension\DebugExtension*: Defines the ``dump`` function to help debug - template variables. - -* *Twig\Extension\EscaperExtension*: Adds automatic output-escaping and the - possibility to escape/unescape blocks of code. - -* *Twig\Extension\SandboxExtension*: Adds a sandbox mode to the default Twig - environment, making it safe to evaluate untrusted code. - -* *Twig\Extension\ProfilerExtension*: Enables the built-in Twig profiler (as of - Twig 1.18). - -* *Twig\Extension\OptimizerExtension*: Optimizes the node tree before - compilation. - -* *Twig\Extension\StringLoaderExtension*: Defines the ``template_from_string`` - function to allow loading templates from string in a template. - -The Core, Escaper, and Optimizer extensions are registered by default. - -Built-in Extensions -------------------- - -This section describes the features added by the built-in extensions. - -.. tip:: - - Read the chapter about :doc:`extending Twig ` to learn how to - create your own extensions. - -Core Extension -~~~~~~~~~~~~~~ - -The ``core`` extension defines all the core features of Twig: - -* :doc:`Tags `; -* :doc:`Filters `; -* :doc:`Functions `; -* :doc:`Tests `. - -Escaper Extension -~~~~~~~~~~~~~~~~~ - -The ``escaper`` extension adds automatic output escaping to Twig. It defines a -tag, ``autoescape``, and a filter, ``raw``. - -When creating the escaper extension, you can switch on or off the global -output escaping strategy:: - - $escaper = new \Twig\Extension\EscaperExtension('html'); - $twig->addExtension($escaper); - -If set to ``html``, all variables in templates are escaped (using the ``html`` -escaping strategy), except those using the ``raw`` filter: - -.. code-block:: twig - - {{ article.to_html|raw }} - -You can also change the escaping mode locally by using the ``autoescape`` tag -(see the :doc:`autoescape` doc for the syntax used before -Twig 1.8): - -.. code-block:: twig - - {% autoescape 'html' %} - {{ var }} - {{ var|raw }} {# var won't be escaped #} - {{ var|escape }} {# var won't be double-escaped #} - {% endautoescape %} - -.. warning:: - - The ``autoescape`` tag has no effect on included files. - -The escaping rules are implemented as follows: - -* Literals (integers, booleans, arrays, ...) used in the template directly as - variables or filter arguments are never automatically escaped: - - .. code-block:: html+twig - - {{ "Twig
" }} {# won't be escaped #} - - {% set text = "Twig
" %} - {{ text }} {# will be escaped #} - -* Expressions which the result is a literal or a variable marked safe - are never automatically escaped: - - .. code-block:: html+twig - - {{ foo ? "Twig
" : "
Twig" }} {# won't be escaped #} - - {% set text = "Twig
" %} - {{ true ? text : "
Twig" }} {# will be escaped #} - {{ false ? text : "
Twig" }} {# won't be escaped #} - - {% set text = "Twig
" %} - {{ foo ? text|raw : "
Twig" }} {# won't be escaped #} - -* Escaping is applied before printing, after any other filter is applied: - - .. code-block:: twig - - {{ var|upper }} {# is equivalent to {{ var|upper|escape }} #} - -* The `raw` filter should only be used at the end of the filter chain: - - .. code-block:: twig - - {{ var|raw|upper }} {# will be escaped #} - - {{ var|upper|raw }} {# won't be escaped #} - -* Automatic escaping is not applied if the last filter in the chain is marked - safe for the current context (e.g. ``html`` or ``js``). ``escape`` and - ``escape('html')`` are marked safe for HTML, ``escape('js')`` is marked - safe for JavaScript, ``raw`` is marked safe for everything. - - .. code-block:: twig - - {% autoescape 'js' %} - {{ var|escape('html') }} {# will be escaped for HTML and JavaScript #} - {{ var }} {# will be escaped for JavaScript #} - {{ var|escape('js') }} {# won't be double-escaped #} - {% endautoescape %} - -.. note:: - - Note that autoescaping has some limitations as escaping is applied on - expressions after evaluation. For instance, when working with - concatenation, ``{{ foo|raw ~ bar }}`` won't give the expected result as - escaping is applied on the result of the concatenation, not on the - individual variables (so, the ``raw`` filter won't have any effect here). - -Sandbox Extension -~~~~~~~~~~~~~~~~~ - -The ``sandbox`` extension can be used to evaluate untrusted code. Access to -unsafe attributes and methods is prohibited. The sandbox security is managed -by a policy instance. By default, Twig comes with one policy class: -``\Twig\Sandbox\SecurityPolicy``. This class allows you to white-list some -tags, filters, properties, and methods:: - - $tags = ['if']; - $filters = ['upper']; - $methods = [ - 'Article' => ['getTitle', 'getBody'], - ]; - $properties = [ - 'Article' => ['title', 'body'], - ]; - $functions = ['range']; - $policy = new \Twig\Sandbox\SecurityPolicy($tags, $filters, $methods, $properties, $functions); - -With the previous configuration, the security policy will only allow usage of -the ``if`` tag, and the ``upper`` filter. Moreover, the templates will only be -able to call the ``getTitle()`` and ``getBody()`` methods on ``Article`` -objects, and the ``title`` and ``body`` public properties. Everything else -won't be allowed and will generate a ``\Twig\Sandbox\SecurityError`` exception. - -The policy object is the first argument of the sandbox constructor:: - - $sandbox = new \Twig\Extension\SandboxExtension($policy); - $twig->addExtension($sandbox); - -By default, the sandbox mode is disabled and should be enabled when including -untrusted template code by using the ``sandbox`` tag: - -.. code-block:: twig - - {% sandbox %} - {% include 'user.html' %} - {% endsandbox %} - -You can sandbox all templates by passing ``true`` as the second argument of -the extension constructor:: - - $sandbox = new \Twig\Extension\SandboxExtension($policy, true); - -Profiler Extension -~~~~~~~~~~~~~~~~~~ - -.. versionadded:: 1.18 - - The Profile extension was added in Twig 1.18. - -The ``profiler`` extension enables a profiler for Twig templates; it should -only be used on your development machines as it adds some overhead:: - - $profile = new \Twig\Profiler\Profile(); - $twig->addExtension(new \Twig\Extension\ProfilerExtension($profile)); - - $dumper = new \Twig\Profiler\Dumper\TextDumper(); - echo $dumper->dump($profile); - -A profile contains information about time and memory consumption for template, -block, and macro executions. - -You can also dump the data in a `Blackfire.io `_ -compatible format:: - - $dumper = new \Twig\Profiler\Dumper\BlackfireDumper(); - file_put_contents('/path/to/profile.prof', $dumper->dump($profile)); - -Upload the profile to visualize it (create a `free account -`_ -first): - -.. code-block:: sh - - blackfire --slot=7 upload /path/to/profile.prof - -Optimizer Extension -~~~~~~~~~~~~~~~~~~~ - -The ``optimizer`` extension optimizes the node tree before compilation:: - - $twig->addExtension(new \Twig\Extension\OptimizerExtension()); - -By default, all optimizations are turned on. You can select the ones you want -to enable by passing them to the constructor:: - - $optimizer = new \Twig\Extension\OptimizerExtension(\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_FOR); - - $twig->addExtension($optimizer); - -Twig supports the following optimizations: - -* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_ALL``, enables all optimizations - (this is the default value). - -* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_NONE``, disables all optimizations. - This reduces the compilation time, but it can increase the execution time - and the consumed memory. - -* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_FOR``, optimizes the ``for`` tag by - removing the ``loop`` variable creation whenever possible. - -* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_RAW_FILTER``, removes the ``raw`` - filter whenever possible. - -* ``\Twig\NodeVisitor\OptimizerNodeVisitor::OPTIMIZE_VAR_ACCESS``, simplifies the creation - and access of variables in the compiled templates whenever possible. - -Exceptions ----------- - -Twig can throw exceptions: - -* ``\Twig\Error\Error``: The base exception for all errors. - -* ``\Twig\Error\SyntaxError``: Thrown to tell the user that there is a problem with - the template syntax. - -* ``\Twig\Error\RuntimeError``: Thrown when an error occurs at runtime (when a filter - does not exist for instance). - -* ``\Twig\Error\LoaderError``: Thrown when an error occurs during template loading. - -* ``\Twig\Sandbox\SecurityError``: Thrown when an unallowed tag, filter, or - method is called in a sandboxed template. diff --git a/vendor/twig/twig/doc/coding_standards.rst b/vendor/twig/twig/doc/coding_standards.rst deleted file mode 100644 index 721b0f1..0000000 --- a/vendor/twig/twig/doc/coding_standards.rst +++ /dev/null @@ -1,101 +0,0 @@ -Coding Standards -================ - -When writing Twig templates, we recommend you to follow these official coding -standards: - -* Put one (and only one) space after the start of a delimiter (``{{``, ``{%``, - and ``{#``) and before the end of a delimiter (``}}``, ``%}``, and ``#}``): - - .. code-block:: twig - - {{ foo }} - {# comment #} - {% if foo %}{% endif %} - - When using the whitespace control character, do not put any spaces between - it and the delimiter: - - .. code-block:: twig - - {{- foo -}} - {#- comment -#} - {%- if foo -%}{%- endif -%} - -* Put one (and only one) space before and after the following operators: - comparison operators (``==``, ``!=``, ``<``, ``>``, ``>=``, ``<=``), math - operators (``+``, ``-``, ``/``, ``*``, ``%``, ``//``, ``**``), logic - operators (``not``, ``and``, ``or``), ``~``, ``is``, ``in``, and the ternary - operator (``?:``): - - .. code-block:: twig - - {{ 1 + 2 }} - {{ foo ~ bar }} - {{ true ? true : false }} - -* Put one (and only one) space after the ``:`` sign in hashes and ``,`` in - arrays and hashes: - - .. code-block:: twig - - {{ [1, 2, 3] }} - {{ {'foo': 'bar'} }} - -* Do not put any spaces after an opening parenthesis and before a closing - parenthesis in expressions: - - .. code-block:: twig - - {{ 1 + (2 * 3) }} - -* Do not put any spaces before and after string delimiters: - - .. code-block:: twig - - {{ 'foo' }} - {{ "foo" }} - -* Do not put any spaces before and after the following operators: ``|``, - ``.``, ``..``, ``[]``: - - .. code-block:: twig - - {{ foo|upper|lower }} - {{ user.name }} - {{ user[name] }} - {% for i in 1..12 %}{% endfor %} - -* Do not put any spaces before and after the parenthesis used for filter and - function calls: - - .. code-block:: twig - - {{ foo|default('foo') }} - {{ range(1..10) }} - -* Do not put any spaces before and after the opening and the closing of arrays - and hashes: - - .. code-block:: twig - - {{ [1, 2, 3] }} - {{ {'foo': 'bar'} }} - -* Use lower cased and underscored variable names: - - .. code-block:: twig - - {% set foo = 'foo' %} - {% set foo_bar = 'foo' %} - -* Indent your code inside tags (use the same indentation as the one used for - the target language of the rendered template): - - .. code-block:: twig - - {% block foo %} - {% if true %} - true - {% endif %} - {% endblock %} diff --git a/vendor/twig/twig/doc/deprecated.rst b/vendor/twig/twig/doc/deprecated.rst deleted file mode 100644 index 1d01fcc..0000000 --- a/vendor/twig/twig/doc/deprecated.rst +++ /dev/null @@ -1,224 +0,0 @@ -Deprecated Features -=================== - -This document lists all deprecated features in Twig. Deprecated features are -kept for backward compatibility and removed in the next major release (a -feature that was deprecated in Twig 1.x is removed in Twig 2.0). - -Deprecation Notices -------------------- - -As of Twig 1.21, Twig generates deprecation notices when a template uses -deprecated features. See :ref:`deprecation-notices` for more information. - -Macros ------- - -As of Twig 2.0, macros imported in a file are not available in child templates -anymore (via an ``include`` call for instance). You need to import macros -explicitly in each file where you are using them. - -Token Parsers -------------- - -* As of Twig 1.x, the token parser broker sub-system is deprecated. The - following class and interface will be removed in 2.0: - - * ``Twig_TokenParserBrokerInterface`` - * ``Twig_TokenParserBroker`` - -* As of Twig 1.27, ``\Twig\Parser::getFilename()`` is deprecated. From a token - parser, use ``$this->parser->getStream()->getSourceContext()->getPath()`` instead. - -* As of Twig 1.27, ``\Twig\Parser::getEnvironment()`` is deprecated. - -Extensions ----------- - -* As of Twig 1.x, the ability to remove an extension is deprecated and the - ``\Twig\Environment::removeExtension()`` method will be removed in 2.0. - -* As of Twig 1.23, the ``\Twig\Extension\ExtensionInterface::initRuntime()`` method is - deprecated. You have two options to avoid the deprecation notice: if you - implement this method to store the environment for your custom filters, - functions, or tests, use the ``needs_environment`` option instead; if you - have more complex needs, explicitly implement - ``\Twig\Extension\InitRuntimeInterface`` (not recommended). - -* As of Twig 1.23, the ``\Twig\Extension\ExtensionInterface::getGlobals()`` method is - deprecated. Implement ``\Twig\Extension\GlobalsInterface`` to avoid - deprecation notices. - -* As of Twig 1.26, the ``\Twig\Extension\ExtensionInterface::getName()`` method is - deprecated and it is not used internally anymore. - -PEAR ----- - -PEAR support has been discontinued in Twig 1.15.1, and no PEAR packages are -provided anymore. Use Composer instead. - -Filters -------- - -* As of Twig 1.x, use ``\Twig\TwigFilter`` to add a filter. The following - classes and interfaces will be removed in 2.0: - - * ``Twig_FilterInterface`` - * ``Twig_FilterCallableInterface`` - * ``Twig_Filter`` - * ``Twig_Filter_Function`` - * ``Twig_Filter_Method`` - * ``Twig_Filter_Node`` - -* As of Twig 2.x, the ``Twig_SimpleFilter`` class is deprecated and will be - removed in Twig 3.x (use ``\Twig\TwigFilter`` instead). In Twig 2.x, - ``Twig_SimpleFilter`` is just an alias for ``\Twig\TwigFilter``. - -Functions ---------- - -* As of Twig 1.x, use ``\Twig\TwigFunction`` to add a function. The following - classes and interfaces will be removed in 2.0: - - * ``Twig_FunctionInterface`` - * ``Twig_FunctionCallableInterface`` - * ``Twig_Function`` - * ``Twig_Function_Function`` - * ``Twig_Function_Method`` - * ``Twig_Function_Node`` - -* As of Twig 2.x, the ``Twig_SimpleFunction`` class is deprecated and will be - removed in Twig 3.x (use ``\Twig\TwigFunction`` instead). In Twig 2.x, - ``Twig_SimpleFunction`` is just an alias for ``\Twig\TwigFunction``. - -Tests ------ - -* As of Twig 1.x, use ``\Twig\TwigTest`` to add a test. The following classes - and interfaces will be removed in 2.0: - - * ``Twig_TestInterface`` - * ``Twig_TestCallableInterface`` - * ``Twig_Test`` - * ``Twig_Test_Function`` - * ``Twig_Test_Method`` - * ``Twig_Test_Node`` - -* As of Twig 2.x, the ``Twig_SimpleTest`` class is deprecated and will be - removed in Twig 3.x (use ``\Twig\TwigTest`` instead). In Twig 2.x, - ``Twig_SimpleTest`` is just an alias for ``\Twig\TwigTest``. - -* The ``sameas`` and ``divisibleby`` tests are deprecated in favor of ``same - as`` and ``divisible by`` respectively. - -Tags ----- - -* As of Twig 1.x, the ``raw`` tag is deprecated. You should use ``verbatim`` - instead. - -Nodes ------ - -* As of Twig 1.x, ``Node::toXml()`` is deprecated and will be removed in Twig - 2.0. - -* As of Twig 1.26, ``Node::$nodes`` should only contains ``\Twig\Node\Node`` - instances, storing a ``null`` value is deprecated and won't be possible in - Twig 2.x. - -* As of Twig 1.27, the ``filename`` attribute on ``\Twig\Node\ModuleNode`` is - deprecated. Use ``getName()`` instead. - -* As of Twig 1.27, the ``\Twig\Node\Node::getFilename()/\Twig\Node\Node::getLine()`` - methods are deprecated, use - ``\Twig\Node\Node::getTemplateName()/\Twig\Node\Node::getTemplateLine()`` instead. - -Interfaces ----------- - -* As of Twig 2.x, the following interfaces are deprecated and empty (they will - be removed in Twig 3.0): - -* ``Twig_CompilerInterface`` (use ``\Twig\Compiler`` instead) -* ``Twig_LexerInterface`` (use ``\Twig\Lexer`` instead) -* ``Twig_NodeInterface`` (use ``\Twig\Node\Node`` instead) -* ``Twig_ParserInterface`` (use ``\Twig\Parser`` instead) -* ``\Twig\Loader\ExistsLoaderInterface`` (merged with ``\Twig\Loader\LoaderInterface``) -* ``\Twig\Loader\SourceContextLoaderInterface`` (merged with ``\Twig\Loader\LoaderInterface``) -* ``Twig_TemplateInterface`` (use ``\Twig\Template`` instead, and use - those constants \Twig\Template::ANY_CALL, \Twig\Template::ARRAY_CALL, - \Twig\Template::METHOD_CALL) - -Compiler --------- - -* As of Twig 1.26, the ``\Twig\Compiler::getFilename()`` has been deprecated. - You should not use it anyway as its values is not reliable. - -* As of Twig 1.27, the ``\Twig\Compiler::addIndentation()`` has been deprecated. - Use ``\Twig\Compiler::write('')`` instead. - -Loaders -------- - -* As of Twig 1.x, ``Twig_Loader_String`` is deprecated and will be removed in - 2.0. You can render a string via ``\Twig\Environment::createTemplate()``. - -* As of Twig 1.27, ``\Twig\Loader\LoaderInterface::getSource()`` is deprecated. - Implement ``\Twig\Loader\SourceContextLoaderInterface`` instead and use - ``getSourceContext()``. - -Node Visitors -------------- - -* Because of the removal of ``Twig_NodeInterface`` in 2.0, you need to extend - ``\Twig\NodeVisitor\AbstractNodeVisitor`` instead of implementing ``\Twig\NodeVisitor\NodeVisitorInterface`` - directly to make your node visitors compatible with both Twig 1.x and 2.x. - -Globals -------- - -* As of Twig 2.x, the ability to register a global variable after the runtime - or the extensions have been initialized is not possible anymore (but - changing the value of an already registered global is possible). - -* As of Twig 1.x, using the ``_self`` global variable to get access to the - current ``\Twig\Template`` instance is deprecated; most usages only need the - current template name, which will continue to work in Twig 2.0. In Twig 2.0, - ``_self`` returns the current template name instead of the current - ``\Twig\Template`` instance. If you are using ``{{ _self.templateName }}``, - just replace it with ``{{ _self }}``. - -Miscellaneous -------------- - -* As of Twig 1.x, ``\Twig\Environment::clearTemplateCache()``, - ``\Twig\Environment::writeCacheFile()``, - ``\Twig\Environment::clearCacheFiles()``, - ``\Twig\Environment::getCacheFilename()``, - ``\Twig\Environment::getTemplateClassPrefix()``, - ``\Twig\Environment::getLexer()``, ``\Twig\Environment::getParser()``, and - ``\Twig\Environment::getCompiler()`` are deprecated and will be removed in 2.0. - -* As of Twig 1.x, ``\Twig\Template::getEnvironment()`` and - ``Twig_TemplateInterface::getEnvironment()`` are deprecated and will be - removed in 2.0. - -* As of Twig 1.21, setting the environment option ``autoescape`` to ``true`` is - deprecated and will be removed in 2.0. Use ``"html"`` instead. - -* As of Twig 1.27, ``\Twig\Error\Error::getTemplateFile()`` and - ``\Twig\Error\Error::setTemplateFile()`` are deprecated. Use - ``\Twig\Error\Error::getTemplateName()`` and ``\Twig\Error\Error::setTemplateName()`` - instead. - -* As of Twig 1.27, ``\Twig\Template::getSource()`` is deprecated. Use - ``\Twig\Template::getSourceContext()`` instead. - -* As of Twig 1.27, ``\Twig\Parser::addHandler()`` and - ``\Twig\Parser::addNodeVisitor()`` are deprecated and will be removed in 2.0. - -* As of Twig 1.29, some classes are marked as being final via the `@final` - annotation. Those classes will be marked as final in 2.0. diff --git a/vendor/twig/twig/doc/filters/abs.rst b/vendor/twig/twig/doc/filters/abs.rst deleted file mode 100644 index fea1175..0000000 --- a/vendor/twig/twig/doc/filters/abs.rst +++ /dev/null @@ -1,18 +0,0 @@ -``abs`` -======= - -The ``abs`` filter returns the absolute value. - -.. code-block:: twig - - {# number = -5 #} - - {{ number|abs }} - - {# outputs 5 #} - -.. note:: - - Internally, Twig uses the PHP `abs`_ function. - -.. _`abs`: https://www.php.net/abs diff --git a/vendor/twig/twig/doc/filters/batch.rst b/vendor/twig/twig/doc/filters/batch.rst deleted file mode 100644 index c103c81..0000000 --- a/vendor/twig/twig/doc/filters/batch.rst +++ /dev/null @@ -1,48 +0,0 @@ -``batch`` -========= - -.. versionadded:: 1.12.3 - - The ``batch`` filter was added in Twig 1.12.3. - -The ``batch`` filter "batches" items by returning a list of lists with the -given number of items. A second parameter can be provided and used to fill in -missing items: - -.. code-block:: html+twig - - {% set items = ['a', 'b', 'c', 'd'] %} - - - {% for row in items|batch(3, 'No item') %} - - {% for column in row %} - - {% endfor %} - - {% endfor %} -
{{ column }}
- -The above example will be rendered as: - -.. code-block:: html+twig - - - - - - - - - - - - -
abc
dNo itemNo item
- -Arguments ---------- - -* ``size``: The size of the batch; fractional numbers will be rounded up -* ``fill``: Used to fill in missing items -* ``preserve_keys``: Whether to preserve keys or not diff --git a/vendor/twig/twig/doc/filters/capitalize.rst b/vendor/twig/twig/doc/filters/capitalize.rst deleted file mode 100644 index 2353658..0000000 --- a/vendor/twig/twig/doc/filters/capitalize.rst +++ /dev/null @@ -1,11 +0,0 @@ -``capitalize`` -============== - -The ``capitalize`` filter capitalizes a value. The first character will be -uppercase, all others lowercase: - -.. code-block:: twig - - {{ 'my first car'|capitalize }} - - {# outputs 'My first car' #} diff --git a/vendor/twig/twig/doc/filters/convert_encoding.rst b/vendor/twig/twig/doc/filters/convert_encoding.rst deleted file mode 100644 index 9269efd..0000000 --- a/vendor/twig/twig/doc/filters/convert_encoding.rst +++ /dev/null @@ -1,29 +0,0 @@ -``convert_encoding`` -==================== - -.. versionadded:: 1.4 - - The ``convert_encoding`` filter was added in Twig 1.4. - -The ``convert_encoding`` filter converts a string from one encoding to -another. The first argument is the expected output charset and the second one -is the input charset: - -.. code-block:: twig - - {{ data|convert_encoding('UTF-8', 'iso-2022-jp') }} - -.. note:: - - This filter relies on the `iconv`_ or `mbstring`_ extension, so one of - them must be installed. In case both are installed, `mbstring`_ is used by - default (Twig before 1.8.1 uses `iconv`_ by default). - -Arguments ---------- - -* ``to``: The output charset -* ``from``: The input charset - -.. _`iconv`: https://www.php.net/iconv -.. _`mbstring`: https://www.php.net/mbstring diff --git a/vendor/twig/twig/doc/filters/date.rst b/vendor/twig/twig/doc/filters/date.rst deleted file mode 100644 index f719dc6..0000000 --- a/vendor/twig/twig/doc/filters/date.rst +++ /dev/null @@ -1,100 +0,0 @@ -``date`` -======== - -.. versionadded:: 1.1 - - The timezone support has been added in Twig 1.1. - -.. versionadded:: 1.5 - - The default date format support has been added in Twig 1.5. - -.. versionadded:: 1.6.1 - - The default timezone support has been added in Twig 1.6.1. - -.. versionadded:: 1.11.0 - - The introduction of the false value for the timezone was introduced in Twig 1.11.0 - -The ``date`` filter formats a date to a given format: - -.. code-block:: twig - - {{ post.published_at|date("m/d/Y") }} - -The format specifier is the same as supported by `date`_, -except when the filtered data is of type `DateInterval`_, when the format must conform to -`DateInterval::format`_ instead. - -The ``date`` filter accepts strings (it must be in a format supported by the -`strtotime`_ function), `DateTime`_ instances, or `DateInterval`_ instances. For -instance, to display the current date, filter the word "now": - -.. code-block:: twig - - {{ "now"|date("m/d/Y") }} - -To escape words and characters in the date format use ``\\`` in front of each -character: - -.. code-block:: twig - - {{ post.published_at|date("F jS \\a\\t g:ia") }} - -If the value passed to the ``date`` filter is ``null``, it will return the -current date by default. If an empty string is desired instead of the current -date, use a ternary operator: - -.. code-block:: twig - - {{ post.published_at is empty ? "" : post.published_at|date("m/d/Y") }} - -If no format is provided, Twig will use the default one: ``F j, Y H:i``. This -default can be changed by calling the ``setDateFormat()`` method on the -``core`` extension instance. The first argument is the default format for -dates and the second one is the default format for date intervals:: - - $twig = new \Twig\Environment($loader); - $twig->getExtension('\Twig\Extension\CoreExtension')->setDateFormat('d/m/Y', '%d days'); - - // before Twig 1.26 - $twig->getExtension('core')->setDateFormat('d/m/Y', '%d days'); - -Timezone --------- - -By default, the date is displayed by applying the default timezone (the one -specified in php.ini or declared in Twig -- see below), but you can override -it by explicitly specifying a timezone: - -.. code-block:: twig - - {{ post.published_at|date("m/d/Y", "Europe/Paris") }} - -If the date is already a DateTime object, and if you want to keep its current -timezone, pass ``false`` as the timezone value: - -.. code-block:: twig - - {{ post.published_at|date("m/d/Y", false) }} - -The default timezone can also be set globally by calling ``setTimezone()``:: - - $twig = new \Twig\Environment($loader); - $twig->getExtension('\Twig\Extension\CoreExtension')->setTimezone('Europe/Paris'); - - // before Twig 1.26 - $twig->getExtension('core')->setTimezone('Europe/Paris'); - -Arguments ---------- - -* ``format``: The date format -* ``timezone``: The date timezone - -.. _`strtotime`: https://www.php.net/strtotime -.. _`DateTime`: https://www.php.net/DateTime -.. _`DateInterval`: https://www.php.net/DateInterval -.. _`date`: https://www.php.net/date -.. _`DateInterval::format`: https://www.php.net/DateInterval.format diff --git a/vendor/twig/twig/doc/filters/date_modify.rst b/vendor/twig/twig/doc/filters/date_modify.rst deleted file mode 100644 index 7cd50c2..0000000 --- a/vendor/twig/twig/doc/filters/date_modify.rst +++ /dev/null @@ -1,24 +0,0 @@ -``date_modify`` -=============== - -.. versionadded:: 1.9.0 - - The date_modify filter has been added in Twig 1.9.0. - -The ``date_modify`` filter modifies a date with a given modifier string: - -.. code-block:: twig - - {{ post.published_at|date_modify("+1 day")|date("m/d/Y") }} - -The ``date_modify`` filter accepts strings (it must be in a format supported -by the `strtotime`_ function) or `DateTime`_ instances. You can combine -it with the :doc:`date` filter for formatting. - -Arguments ---------- - -* ``modifier``: The modifier - -.. _`strtotime`: https://www.php.net/strtotime -.. _`DateTime`: https://www.php.net/DateTime diff --git a/vendor/twig/twig/doc/filters/default.rst b/vendor/twig/twig/doc/filters/default.rst deleted file mode 100644 index 2376fe7..0000000 --- a/vendor/twig/twig/doc/filters/default.rst +++ /dev/null @@ -1,42 +0,0 @@ -``default`` -=========== - -The ``default`` filter returns the passed default value if the value is -undefined or empty, otherwise the value of the variable: - -.. code-block:: twig - - {{ var|default('var is not defined') }} - - {{ var.foo|default('foo item on var is not defined') }} - - {{ var['foo']|default('foo item on var is not defined') }} - - {{ ''|default('passed var is empty') }} - -When using the ``default`` filter on an expression that uses variables in some -method calls, be sure to use the ``default`` filter whenever a variable can be -undefined: - -.. code-block:: twig - - {{ var.method(foo|default('foo'))|default('foo') }} - -Using the ``default`` filter on a boolean variable might trigger unexpected behavior, as -``false`` is treated as an empty value. Consider using ``??`` instead: - -.. code-block:: twig - - {% set foo = false %} - {{ foo|default(true) }} {# true #} - {{ foo ?? true }} {# false #} - -.. note:: - - Read the documentation for the :doc:`defined<../tests/defined>` and - :doc:`empty<../tests/empty>` tests to learn more about their semantics. - -Arguments ---------- - -* ``default``: The default value diff --git a/vendor/twig/twig/doc/filters/escape.rst b/vendor/twig/twig/doc/filters/escape.rst deleted file mode 100644 index 1592460..0000000 --- a/vendor/twig/twig/doc/filters/escape.rst +++ /dev/null @@ -1,129 +0,0 @@ -``escape`` -========== - -.. versionadded:: 1.9.0 - - The ``css``, ``url``, and ``html_attr`` strategies were added in Twig - 1.9.0. - -.. versionadded:: 1.14.0 - - The ability to define custom escapers was added in Twig 1.14.0. - -The ``escape`` filter escapes a string using strategies that depend on the -context. - -By default, it uses the HTML escaping strategy: - -.. code-block:: html+twig - -

- {{ user.username|escape }} -

- -For convenience, the ``e`` filter is defined as an alias: - -.. code-block:: html+twig - -

- {{ user.username|e }} -

- -The ``escape`` filter can also be used in other contexts than HTML thanks to -an optional argument which defines the escaping strategy to use: - -.. code-block:: twig - - {{ user.username|e }} - {# is equivalent to #} - {{ user.username|e('html') }} - -And here is how to escape variables included in JavaScript code: - -.. code-block:: twig - - {{ user.username|escape('js') }} - {{ user.username|e('js') }} - -The ``escape`` filter supports the following escaping strategies for HTML -documents: - -* ``html``: escapes a string for the **HTML body** context. - -* ``js``: escapes a string for the **JavaScript** context. - -* ``css``: escapes a string for the **CSS** context. CSS escaping can be - applied to any string being inserted into CSS and escapes everything except - alphanumerics. - -* ``url``: escapes a string for the **URI or parameter** contexts. This should - not be used to escape an entire URI; only a subcomponent being inserted. - -* ``html_attr``: escapes a string for the **HTML attribute** context. - -Note that doing contextual escaping in HTML documents is hard and choosing the -right escaping strategy depends on a lot of factors. Please, read related -documentation like `the OWASP prevention cheat sheet -`_ -to learn more about this topic. - -.. note:: - - Internally, ``escape`` uses the PHP native `htmlspecialchars`_ function - for the HTML escaping strategy. - -.. caution:: - - When using automatic escaping, Twig tries to not double-escape a variable - when the automatic escaping strategy is the same as the one applied by the - escape filter; but that does not work when using a variable as the - escaping strategy: - - .. code-block:: twig - - {% set strategy = 'html' %} - - {% autoescape 'html' %} - {{ var|escape('html') }} {# won't be double-escaped #} - {{ var|escape(strategy) }} {# will be double-escaped #} - {% endautoescape %} - - When using a variable as the escaping strategy, you should disable - automatic escaping: - - .. code-block:: twig - - {% set strategy = 'html' %} - - {% autoescape 'html' %} - {{ var|escape(strategy)|raw }} {# won't be double-escaped #} - {% endautoescape %} - -Custom Escapers ---------------- - -You can define custom escapers by calling the ``setEscaper()`` method on the -``core`` extension instance. The first argument is the escaper name (to be -used in the ``escape`` call) and the second one must be a valid PHP callable:: - - $twig = new \Twig\Environment($loader); - $twig->getExtension('\Twig\Extension\CoreExtension')->setEscaper('csv', 'csv_escaper'); - - // before Twig 1.26 - $twig->getExtension('core')->setEscaper('csv', 'csv_escaper'); - -When called by Twig, the callable receives the Twig environment instance, the -string to escape, and the charset. - -.. note:: - - Built-in escapers cannot be overridden mainly because they should be - considered as the final implementation and also for better performance. - -Arguments ---------- - -* ``strategy``: The escaping strategy -* ``charset``: The string charset - -.. _`htmlspecialchars`: https://www.php.net/htmlspecialchars diff --git a/vendor/twig/twig/doc/filters/filter.rst b/vendor/twig/twig/doc/filters/filter.rst deleted file mode 100644 index ddd607b..0000000 --- a/vendor/twig/twig/doc/filters/filter.rst +++ /dev/null @@ -1,59 +0,0 @@ -``filter`` -========== - -.. versionadded:: 1.41 - - The ``filter`` filter was added in Twig 1.41. - -The ``filter`` filter filters elements of a sequence or a mapping using an arrow -function. The arrow function receives the value of the sequence or mapping: - -.. code-block:: twig - - {% set sizes = [34, 36, 38, 40, 42] %} - - {{ sizes|filter(v => v > 38)|join(', ') }} - {# output 40, 42 #} - -Combined with the ``for`` tag, it allows to filter the items to iterate over: - -.. code-block:: twig - - {% for v in sizes|filter(v => v > 38) -%} - {{ v }} - {% endfor %} - {# output 40 42 #} - -It also works with mappings: - -.. code-block:: twig - - {% set sizes = { - xs: 34, - s: 36, - m: 38, - l: 40, - xl: 42, - } %} - - {% for k, v in sizes|filter(v => v > 38) -%} - {{ k }} = {{ v }} - {% endfor %} - {# output l = 40 xl = 42 #} - -The arrow function also receives the key as a second argument: - -.. code-block:: twig - - {% for k, v in sizes|filter((v, k) => v > 38 and k != "xl") -%} - {{ k }} = {{ v }} - {% endfor %} - {# output l = 40 #} - -Note that the arrow function has access to the current context. - -Arguments ---------- - -* ``array``: The sequence or mapping -* ``arrow``: The arrow function diff --git a/vendor/twig/twig/doc/filters/first.rst b/vendor/twig/twig/doc/filters/first.rst deleted file mode 100644 index 30bde3a..0000000 --- a/vendor/twig/twig/doc/filters/first.rst +++ /dev/null @@ -1,26 +0,0 @@ -``first`` -========= - -.. versionadded:: 1.12.2 - - The ``first`` filter was added in Twig 1.12.2. - -The ``first`` filter returns the first "element" of a sequence, a mapping, or -a string: - -.. code-block:: twig - - {{ [1, 2, 3, 4]|first }} - {# outputs 1 #} - - {{ { a: 1, b: 2, c: 3, d: 4 }|first }} - {# outputs 1 #} - - {{ '1234'|first }} - {# outputs 1 #} - -.. note:: - - It also works with objects implementing the `Traversable`_ interface. - -.. _`Traversable`: https://www.php.net/manual/en/class.traversable.php diff --git a/vendor/twig/twig/doc/filters/format.rst b/vendor/twig/twig/doc/filters/format.rst deleted file mode 100644 index ec1eb00..0000000 --- a/vendor/twig/twig/doc/filters/format.rst +++ /dev/null @@ -1,18 +0,0 @@ -``format`` -========== - -The ``format`` filter formats a given string by replacing the placeholders -(placeholders follows the `sprintf`_ notation): - -.. code-block:: twig - - {{ "I like %s and %s."|format(foo, "bar") }} - - {# outputs I like foo and bar - if the foo parameter equals to the foo string. #} - -.. _`sprintf`: https://www.php.net/sprintf - -.. seealso:: - - :doc:`replace` diff --git a/vendor/twig/twig/doc/filters/index.rst b/vendor/twig/twig/doc/filters/index.rst deleted file mode 100644 index 8524fc0..0000000 --- a/vendor/twig/twig/doc/filters/index.rst +++ /dev/null @@ -1,41 +0,0 @@ -Filters -======= - -.. toctree:: - :maxdepth: 1 - - abs - batch - capitalize - convert_encoding - date - date_modify - default - escape - filter - first - format - join - json_encode - keys - last - length - lower - map - merge - nl2br - number_format - raw - reduce - replace - reverse - round - slice - sort - spaceless - split - striptags - title - trim - upper - url_encode diff --git a/vendor/twig/twig/doc/filters/join.rst b/vendor/twig/twig/doc/filters/join.rst deleted file mode 100644 index afd8768..0000000 --- a/vendor/twig/twig/doc/filters/join.rst +++ /dev/null @@ -1,36 +0,0 @@ -``join`` -======== - -.. versionadded:: 1.37 - - The ``and`` argument was added in Twig 1.37. - -The ``join`` filter returns a string which is the concatenation of the items -of a sequence: - -.. code-block:: twig - - {{ [1, 2, 3]|join }} - {# returns 123 #} - -The separator between elements is an empty string per default, but you can -define it with the optional first parameter: - -.. code-block:: twig - - {{ [1, 2, 3]|join('|') }} - {# outputs 1|2|3 #} - -A second parameter can also be provided that will be the separator used between -the last two items of the sequence: - -.. code-block:: twig - - {{ [1, 2, 3]|join(', ', ' and ') }} - {# outputs 1, 2 and 3 #} - -Arguments ---------- - -* ``glue``: The separator -* ``and``: The separator for the last pair of input items diff --git a/vendor/twig/twig/doc/filters/json_encode.rst b/vendor/twig/twig/doc/filters/json_encode.rst deleted file mode 100644 index 34e7136..0000000 --- a/vendor/twig/twig/doc/filters/json_encode.rst +++ /dev/null @@ -1,23 +0,0 @@ -``json_encode`` -=============== - -The ``json_encode`` filter returns the JSON representation of a value: - -.. code-block:: twig - - {{ data|json_encode() }} - -.. note:: - - Internally, Twig uses the PHP `json_encode`_ function. - -Arguments ---------- - -* ``options``: A bitmask of `json_encode options`_: ``{{ - data|json_encode(constant('JSON_PRETTY_PRINT')) }}``. - Combine constants using :ref:`bitwise operators`: - ``{{ data|json_encode(constant('JSON_PRETTY_PRINT') b-or constant('JSON_HEX_QUOT')) }}`` - -.. _`json_encode`: https://www.php.net/json_encode -.. _`json_encode options`: https://www.php.net/manual/en/json.constants.php diff --git a/vendor/twig/twig/doc/filters/keys.rst b/vendor/twig/twig/doc/filters/keys.rst deleted file mode 100644 index 5860947..0000000 --- a/vendor/twig/twig/doc/filters/keys.rst +++ /dev/null @@ -1,11 +0,0 @@ -``keys`` -======== - -The ``keys`` filter returns the keys of an array. It is useful when you want to -iterate over the keys of an array: - -.. code-block:: twig - - {% for key in array|keys %} - ... - {% endfor %} diff --git a/vendor/twig/twig/doc/filters/last.rst b/vendor/twig/twig/doc/filters/last.rst deleted file mode 100644 index b9f5ef0..0000000 --- a/vendor/twig/twig/doc/filters/last.rst +++ /dev/null @@ -1,26 +0,0 @@ -``last`` -======== - -.. versionadded:: 1.12.2 - - The ``last`` filter was added in Twig 1.12.2. - -The ``last`` filter returns the last "element" of a sequence, a mapping, or -a string: - -.. code-block:: twig - - {{ [1, 2, 3, 4]|last }} - {# outputs 4 #} - - {{ { a: 1, b: 2, c: 3, d: 4 }|last }} - {# outputs 4 #} - - {{ '1234'|last }} - {# outputs 4 #} - -.. note:: - - It also works with objects implementing the `Traversable`_ interface. - -.. _`Traversable`: https://www.php.net/manual/en/class.traversable.php diff --git a/vendor/twig/twig/doc/filters/length.rst b/vendor/twig/twig/doc/filters/length.rst deleted file mode 100644 index 37209f8..0000000 --- a/vendor/twig/twig/doc/filters/length.rst +++ /dev/null @@ -1,23 +0,0 @@ -``length`` -========== - -.. versionadded:: 1.33 - - Support for the ``__toString()`` magic method has been added in Twig 1.33. - -The ``length`` filter returns the number of items of a sequence or mapping, or -the length of a string. - -For objects that implement the ``Countable`` interface, ``length`` will use the -return value of the ``count()`` method. - -For objects that implement the ``__toString()`` magic method (and not ``Countable``), -it will return the length of the string provided by that method. - -For objects that implement the ``Traversable`` interface, ``length`` will use the return value of the ``iterator_count()`` method. - -.. code-block:: twig - - {% if users|length > 10 %} - ... - {% endif %} diff --git a/vendor/twig/twig/doc/filters/lower.rst b/vendor/twig/twig/doc/filters/lower.rst deleted file mode 100644 index c0a0e0c..0000000 --- a/vendor/twig/twig/doc/filters/lower.rst +++ /dev/null @@ -1,10 +0,0 @@ -``lower`` -========= - -The ``lower`` filter converts a value to lowercase: - -.. code-block:: twig - - {{ 'WELCOME'|lower }} - - {# outputs 'welcome' #} diff --git a/vendor/twig/twig/doc/filters/map.rst b/vendor/twig/twig/doc/filters/map.rst deleted file mode 100644 index 035e2c0..0000000 --- a/vendor/twig/twig/doc/filters/map.rst +++ /dev/null @@ -1,38 +0,0 @@ -``map`` -======= - -.. versionadded:: 1.41 - - The ``map`` filter was added in Twig 1.41. - -The ``map`` filter applies an arrow function to the elements of a sequence or a -mapping. The arrow function receives the value of the sequence or mapping: - -.. code-block:: twig - - {% set people = [ - {first: "Bob", last: "Smith"}, - {first: "Alice", last: "Dupond"}, - ] %} - - {{ people|map(p => "#{p.first} #{p.last}")|join(', ') }} - {# outputs Bob Smith, Alice Dupond #} - -The arrow function also receives the key as a second argument: - -.. code-block:: twig - - {% set people = { - "Bob": "Smith", - "Alice": "Dupond", - } %} - - {{ people|map((last, first) => "#{first} #{last}")|join(', ') }} - {# outputs Bob Smith, Alice Dupond #} - -Note that the arrow function has access to the current context. - -Arguments ---------- - -* ``arrow``: The arrow function diff --git a/vendor/twig/twig/doc/filters/merge.rst b/vendor/twig/twig/doc/filters/merge.rst deleted file mode 100644 index 40146b5..0000000 --- a/vendor/twig/twig/doc/filters/merge.rst +++ /dev/null @@ -1,48 +0,0 @@ -``merge`` -========= - -The ``merge`` filter merges an array with another array: - -.. code-block:: twig - - {% set values = [1, 2] %} - - {% set values = values|merge(['apple', 'orange']) %} - - {# values now contains [1, 2, 'apple', 'orange'] #} - -New values are added at the end of the existing ones. - -The ``merge`` filter also works on hashes: - -.. code-block:: twig - - {% set items = { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'unknown' } %} - - {% set items = items|merge({ 'peugeot': 'car', 'renault': 'car' }) %} - - {# items now contains { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'car', 'renault': 'car' } #} - -For hashes, the merging process occurs on the keys: if the key does not -already exist, it is added but if the key already exists, its value is -overridden. - -.. tip:: - - If you want to ensure that some values are defined in an array (by given - default values), reverse the two elements in the call: - - .. code-block:: twig - - {% set items = { 'apple': 'fruit', 'orange': 'fruit' } %} - - {% set items = { 'apple': 'unknown' }|merge(items) %} - - {# items now contains { 'apple': 'fruit', 'orange': 'fruit' } #} - -.. note:: - - Internally, Twig uses the PHP `array_merge`_ function. It supports - Traversable objects by transforming those to arrays. - -.. _`array_merge`: https://www.php.net/array_merge diff --git a/vendor/twig/twig/doc/filters/nl2br.rst b/vendor/twig/twig/doc/filters/nl2br.rst deleted file mode 100644 index 170609a..0000000 --- a/vendor/twig/twig/doc/filters/nl2br.rst +++ /dev/null @@ -1,23 +0,0 @@ -``nl2br`` -========= - -.. versionadded:: 1.5 - - The ``nl2br`` filter was added in Twig 1.5. - -The ``nl2br`` filter inserts HTML line breaks before all newlines in a string: - -.. code-block:: html+twig - - {{ "I like Twig.\nYou will like it too."|nl2br }} - {# outputs - - I like Twig.
- You will like it too. - - #} - -.. note:: - - The ``nl2br`` filter pre-escapes the input before applying the - transformation. diff --git a/vendor/twig/twig/doc/filters/number_format.rst b/vendor/twig/twig/doc/filters/number_format.rst deleted file mode 100644 index a417154..0000000 --- a/vendor/twig/twig/doc/filters/number_format.rst +++ /dev/null @@ -1,55 +0,0 @@ -``number_format`` -================= - -.. versionadded:: 1.5 - - The ``number_format`` filter was added in Twig 1.5 - -The ``number_format`` filter formats numbers. It is a wrapper around PHP's -`number_format`_ function: - -.. code-block:: twig - - {{ 200.35|number_format }} - -You can control the number of decimal places, decimal point, and thousands -separator using the additional arguments: - -.. code-block:: twig - - {{ 9800.333|number_format(2, '.', ',') }} - -To format negative numbers, wrap the number with parentheses (needed because of -Twig's :ref:`precedence of operators `: - -.. code-block:: twig - - {{ -9800.333|number_format(2, '.', ',') }} {# outputs : -9 #} - {{ (-9800.333)|number_format(2, '.', ',') }} {# outputs : -9,800.33 #} - -If no formatting options are provided then Twig will use the default formatting -options of: - -* 0 decimal places. -* ``.`` as the decimal point. -* ``,`` as the thousands separator. - -These defaults can be changed through the core extension:: - - $twig = new \Twig\Environment($loader); - $twig->getExtension('\Twig\Extension\CoreExtension')->setNumberFormat(3, '.', ','); - - // before Twig 1.26 - $twig->getExtension('core')->setNumberFormat(3, '.', ','); - -The defaults set for ``number_format`` can be over-ridden upon each call using the -additional parameters. - -Arguments ---------- - -* ``decimal``: The number of decimal points to display -* ``decimal_point``: The character(s) to use for the decimal point -* ``thousand_sep``: The character(s) to use for the thousands separator - -.. _`number_format`: https://www.php.net/number_format diff --git a/vendor/twig/twig/doc/filters/raw.rst b/vendor/twig/twig/doc/filters/raw.rst deleted file mode 100644 index 243037a..0000000 --- a/vendor/twig/twig/doc/filters/raw.rst +++ /dev/null @@ -1,38 +0,0 @@ -``raw`` -======= - -The ``raw`` filter marks the value as being "safe", which means that in an -environment with automatic escaping enabled this variable will not be escaped -if ``raw`` is the last filter applied to it: - -.. code-block:: twig - - {% autoescape %} - {{ var|raw }} {# var won't be escaped #} - {% endautoescape %} - -.. note:: - - **This note only applies to Twig before versions 1.39 and 2.8**. - - Be careful when using the ``raw`` filter inside expressions: - - .. code-block:: html+twig - - {% autoescape %} - {% set hello = 'Hello' %} - {% set hola = 'Hola' %} - - {{ false ? 'Hola' : hello|raw }} - does not render the same as - {{ false ? hola : hello|raw }} - but renders the same as - {{ (false ? hola : hello)|raw }} - {% endautoescape %} - - The first ternary statement is not escaped: ``hello`` is marked as being - safe and Twig does not escape static values (see - :doc:`escape<../tags/autoescape>`). In the second ternary statement, even - if ``hello`` is marked as safe, ``hola`` remains unsafe and so is the whole - expression. The third ternary statement is marked as safe and the result is - not escaped. diff --git a/vendor/twig/twig/doc/filters/reduce.rst b/vendor/twig/twig/doc/filters/reduce.rst deleted file mode 100644 index cc74f58..0000000 --- a/vendor/twig/twig/doc/filters/reduce.rst +++ /dev/null @@ -1,33 +0,0 @@ -``reduce`` -========== - -.. versionadded:: 1.41 - - The ``reduce`` filter was added in Twig 1.41. - -The ``reduce`` filter iteratively reduces a sequence or a mapping to a single -value using an arrow function, so as to reduce it to a single value. The arrow -function receives the return value of the previous iteration and the current -value of the sequence or mapping: - -.. code-block:: twig - - {% set numbers = [1, 2, 3] %} - - {{ numbers|reduce((carry, v) => carry + v) }} - {# output 6 #} - -The ``reduce`` filter takes an ``initial`` value as a second argument: - -.. code-block:: twig - - {{ numbers|reduce((carry, v) => carry + v, 10) }} - {# output 16 #} - -Note that the arrow function has access to the current context. - -Arguments ---------- - -* ``arrow``: The arrow function -* ``initial``: The initial value diff --git a/vendor/twig/twig/doc/filters/replace.rst b/vendor/twig/twig/doc/filters/replace.rst deleted file mode 100644 index 5761a21..0000000 --- a/vendor/twig/twig/doc/filters/replace.rst +++ /dev/null @@ -1,27 +0,0 @@ -``replace`` -=========== - -The ``replace`` filter formats a given string by replacing the placeholders -(placeholders are free-form): - -.. code-block:: twig - - {{ "I like %this% and %that%."|replace({'%this%': foo, '%that%': "bar"}) }} - - {# outputs I like foo and bar - if the foo parameter equals to the foo string. #} - - {# using % as a delimiter is purely conventional and optional #} - - {{ "I like this and --that--."|replace({'this': foo, '--that--': "bar"}) }} - - {# outputs I like foo and bar #} - -Arguments ---------- - -* ``from``: The placeholder values - -.. seealso:: - - :doc:`format` diff --git a/vendor/twig/twig/doc/filters/reverse.rst b/vendor/twig/twig/doc/filters/reverse.rst deleted file mode 100644 index ee40aac..0000000 --- a/vendor/twig/twig/doc/filters/reverse.rst +++ /dev/null @@ -1,48 +0,0 @@ -``reverse`` -=========== - -.. versionadded:: 1.6 - - Support for strings has been added in Twig 1.6. - -The ``reverse`` filter reverses a sequence, a mapping, or a string: - -.. code-block:: twig - - {% for user in users|reverse %} - ... - {% endfor %} - - {{ '1234'|reverse }} - - {# outputs 4321 #} - -.. tip:: - - For sequences and mappings, numeric keys are not preserved. To reverse - them as well, pass ``true`` as an argument to the ``reverse`` filter: - - .. code-block:: twig - - {% for key, value in {1: "a", 2: "b", 3: "c"}|reverse %} - {{ key }}: {{ value }} - {%- endfor %} - - {# output: 0: c 1: b 2: a #} - - {% for key, value in {1: "a", 2: "b", 3: "c"}|reverse(true) %} - {{ key }}: {{ value }} - {%- endfor %} - - {# output: 3: c 2: b 1: a #} - -.. note:: - - It also works with objects implementing the `Traversable`_ interface. - -Arguments ---------- - -* ``preserve_keys``: Preserve keys when reversing a mapping or a sequence. - -.. _`Traversable`: https://www.php.net/Traversable diff --git a/vendor/twig/twig/doc/filters/round.rst b/vendor/twig/twig/doc/filters/round.rst deleted file mode 100644 index 1b33830..0000000 --- a/vendor/twig/twig/doc/filters/round.rst +++ /dev/null @@ -1,38 +0,0 @@ -``round`` -========= - -.. versionadded:: 1.15.0 - - The ``round`` filter was added in Twig 1.15.0. - -The ``round`` filter rounds a number to a given precision: - -.. code-block:: twig - - {{ 42.55|round }} - {# outputs 43 #} - - {{ 42.55|round(1, 'floor') }} - {# outputs 42.5 #} - -The ``round`` filter takes two optional arguments; the first one specifies the -precision (default is ``0``) and the second the rounding method (default is -``common``): - -* ``common`` rounds either up or down (rounds the value up to precision decimal - places away from zero, when it is half way there -- making 1.5 into 2 and - -1.5 into -2); - -* ``ceil`` always rounds up; - -* ``floor`` always rounds down. - -.. note:: - - The ``//`` operator is equivalent to ``|round(0, 'floor')``. - -Arguments ---------- - -* ``precision``: The rounding precision -* ``method``: The rounding method diff --git a/vendor/twig/twig/doc/filters/slice.rst b/vendor/twig/twig/doc/filters/slice.rst deleted file mode 100644 index d34f2d6..0000000 --- a/vendor/twig/twig/doc/filters/slice.rst +++ /dev/null @@ -1,72 +0,0 @@ -``slice`` -=========== - -.. versionadded:: 1.6 - - The ``slice`` filter was added in Twig 1.6. - -The ``slice`` filter extracts a slice of a sequence, a mapping, or a string: - -.. code-block:: twig - - {% for i in [1, 2, 3, 4, 5]|slice(1, 2) %} - {# will iterate over 2 and 3 #} - {% endfor %} - - {{ '12345'|slice(1, 2) }} - - {# outputs 23 #} - -You can use any valid expression for both the start and the length: - -.. code-block:: twig - - {% for i in [1, 2, 3, 4, 5]|slice(start, length) %} - {# ... #} - {% endfor %} - -As syntactic sugar, you can also use the ``[]`` notation: - -.. code-block:: twig - - {% for i in [1, 2, 3, 4, 5][start:length] %} - {# ... #} - {% endfor %} - - {{ '12345'[1:2] }} {# will display "23" #} - - {# you can omit the first argument -- which is the same as 0 #} - {{ '12345'[:2] }} {# will display "12" #} - - {# you can omit the last argument -- which will select everything till the end #} - {{ '12345'[2:] }} {# will display "345" #} - -The ``slice`` filter works as the `array_slice`_ PHP function for arrays and -`mb_substr`_ for strings with a fallback to `substr`_. - -If the start is non-negative, the sequence will start at that start in the -variable. If start is negative, the sequence will start that far from the end -of the variable. - -If length is given and is positive, then the sequence will have up to that -many elements in it. If the variable is shorter than the length, then only the -available variable elements will be present. If length is given and is -negative then the sequence will stop that many elements from the end of the -variable. If it is omitted, then the sequence will have everything from offset -up until the end of the variable. - -.. note:: - - It also works with objects implementing the `Traversable`_ interface. - -Arguments ---------- - -* ``start``: The start of the slice -* ``length``: The size of the slice -* ``preserve_keys``: Whether to preserve key or not (when the input is an array) - -.. _`Traversable`: https://www.php.net/manual/en/class.traversable.php -.. _`array_slice`: https://www.php.net/array_slice -.. _`mb_substr`: https://www.php.net/mb-substr -.. _`substr`: https://www.php.net/substr diff --git a/vendor/twig/twig/doc/filters/sort.rst b/vendor/twig/twig/doc/filters/sort.rst deleted file mode 100644 index e8c9b2b..0000000 --- a/vendor/twig/twig/doc/filters/sort.rst +++ /dev/null @@ -1,18 +0,0 @@ -``sort`` -======== - -The ``sort`` filter sorts an array: - -.. code-block:: twig - - {% for user in users|sort %} - ... - {% endfor %} - -.. note:: - - Internally, Twig uses the PHP `asort`_ function to maintain index - association. It supports Traversable objects by transforming - those to arrays. - -.. _`asort`: https://www.php.net/asort diff --git a/vendor/twig/twig/doc/filters/spaceless.rst b/vendor/twig/twig/doc/filters/spaceless.rst deleted file mode 100644 index 3308cda..0000000 --- a/vendor/twig/twig/doc/filters/spaceless.rst +++ /dev/null @@ -1,65 +0,0 @@ -``spaceless`` -============= - -.. versionadded:: 1.38 - - The ``spaceless`` filter was added in Twig 1.38. - -Use the ``spaceless`` filter to remove whitespace *between HTML tags*, not -whitespace within HTML tags or whitespace in plain text: - -.. code-block:: html+twig - - {{ - "
- foo -
- "|spaceless }} - - {# output will be
foo
#} - -You can combine ``spaceless`` with the ``apply`` tag to apply the transformation -on large amounts of HTML: - -.. code-block:: html+twig - - {% apply spaceless %} -
- foo -
- {% endapply %} - - {# output will be
foo
#} - -.. note:: - - The ``apply`` tag was introduced in Twig 1.40; use the ``filter`` tag with - previous versions. - -This tag is not meant to "optimize" the size of the generated HTML content but -merely to avoid extra whitespace between HTML tags to avoid browser rendering -quirks under some circumstances. - -.. caution:: - - As the filter uses a regular expression behind the scenes, its performance - is directly related to the text size you are working on (remember that - filters are executed at runtime). - -.. tip:: - - If you want to optimize the size of the generated HTML content, gzip - compress the output instead. - -.. tip:: - - If you want to create a tag that actually removes all extra whitespace in - an HTML string, be warned that this is not as easy as it seems to be - (think of ``textarea`` or ``pre`` tags for instance). Using a third-party - library like Tidy is probably a better idea. - -.. tip:: - - For more information on whitespace control, read the - :ref:`dedicated section ` of the documentation and learn how - you can also use the whitespace control modifier on your tags. diff --git a/vendor/twig/twig/doc/filters/split.rst b/vendor/twig/twig/doc/filters/split.rst deleted file mode 100644 index 7b714ad..0000000 --- a/vendor/twig/twig/doc/filters/split.rst +++ /dev/null @@ -1,54 +0,0 @@ -``split`` -========= - -.. versionadded:: 1.10.3 - - The ``split`` filter was added in Twig 1.10.3. - -The ``split`` filter splits a string by the given delimiter and returns a list -of strings: - -.. code-block:: twig - - {% set foo = "one,two,three"|split(',') %} - {# foo contains ['one', 'two', 'three'] #} - -You can also pass a ``limit`` argument: - -* If ``limit`` is positive, the returned array will contain a maximum of - limit elements with the last element containing the rest of string; - -* If ``limit`` is negative, all components except the last -limit are - returned; - -* If ``limit`` is zero, then this is treated as 1. - -.. code-block:: twig - - {% set foo = "one,two,three,four,five"|split(',', 3) %} - {# foo contains ['one', 'two', 'three,four,five'] #} - -If the ``delimiter`` is an empty string, then value will be split by equal -chunks. Length is set by the ``limit`` argument (one character by default). - -.. code-block:: twig - - {% set foo = "123"|split('') %} - {# foo contains ['1', '2', '3'] #} - - {% set bar = "aabbcc"|split('', 2) %} - {# bar contains ['aa', 'bb', 'cc'] #} - -.. note:: - - Internally, Twig uses the PHP `explode`_ or `str_split`_ (if delimiter is - empty) functions for string splitting. - -Arguments ---------- - -* ``delimiter``: The delimiter -* ``limit``: The limit argument - -.. _`explode`: https://www.php.net/explode -.. _`str_split`: https://www.php.net/str_split diff --git a/vendor/twig/twig/doc/filters/striptags.rst b/vendor/twig/twig/doc/filters/striptags.rst deleted file mode 100644 index d5f542b..0000000 --- a/vendor/twig/twig/doc/filters/striptags.rst +++ /dev/null @@ -1,29 +0,0 @@ -``striptags`` -============= - -The ``striptags`` filter strips SGML/XML tags and replace adjacent whitespace -by one space: - -.. code-block:: twig - - {{ some_html|striptags }} - -You can also provide tags which should not be stripped: - -.. code-block:: html+twig - - {{ some_html|striptags('

') }} - -In this example, the ``
``, ``
``, ``

``, and ``

`` tags won't be -removed from the string. - -.. note:: - - Internally, Twig uses the PHP `strip_tags`_ function. - -Arguments ---------- - -* ``allowable_tags``: Tags which should not be stripped - -.. _`strip_tags`: https://www.php.net/strip_tags diff --git a/vendor/twig/twig/doc/filters/title.rst b/vendor/twig/twig/doc/filters/title.rst deleted file mode 100644 index dd0311c..0000000 --- a/vendor/twig/twig/doc/filters/title.rst +++ /dev/null @@ -1,11 +0,0 @@ -``title`` -========= - -The ``title`` filter returns a titlecased version of the value. Words will -start with uppercase letters, all remaining characters are lowercase: - -.. code-block:: twig - - {{ 'my first car'|title }} - - {# outputs 'My First Car' #} diff --git a/vendor/twig/twig/doc/filters/trim.rst b/vendor/twig/twig/doc/filters/trim.rst deleted file mode 100644 index d830866..0000000 --- a/vendor/twig/twig/doc/filters/trim.rst +++ /dev/null @@ -1,47 +0,0 @@ -``trim`` -======== - -.. versionadded:: 1.32 - - The ``side`` argument was added in Twig 1.32. - -.. versionadded:: 1.6.2 - - The ``trim`` filter was added in Twig 1.6.2. - -The ``trim`` filter strips whitespace (or other characters) from the beginning -and end of a string: - -.. code-block:: twig - - {{ ' I like Twig. '|trim }} - - {# outputs 'I like Twig.' #} - - {{ ' I like Twig.'|trim('.') }} - - {# outputs ' I like Twig' #} - - {{ ' I like Twig. '|trim(side='left') }} - - {# outputs 'I like Twig. ' #} - - {{ ' I like Twig. '|trim(' ', 'right') }} - - {# outputs ' I like Twig.' #} - -.. note:: - - Internally, Twig uses the PHP `trim`_, `ltrim`_, and `rtrim`_ functions. - -Arguments ---------- - -* ``character_mask``: The characters to strip - -* ``side``: The default is to strip from the left and the right (`both`) sides, but `left` - and `right` will strip from either the left side or right side only - -.. _`trim`: https://www.php.net/trim -.. _`ltrim`: https://www.php.net/ltrim -.. _`rtrim`: https://www.php.net/rtrim diff --git a/vendor/twig/twig/doc/filters/upper.rst b/vendor/twig/twig/doc/filters/upper.rst deleted file mode 100644 index 01c9fbb..0000000 --- a/vendor/twig/twig/doc/filters/upper.rst +++ /dev/null @@ -1,10 +0,0 @@ -``upper`` -========= - -The ``upper`` filter converts a value to uppercase: - -.. code-block:: twig - - {{ 'welcome'|upper }} - - {# outputs 'WELCOME' #} diff --git a/vendor/twig/twig/doc/filters/url_encode.rst b/vendor/twig/twig/doc/filters/url_encode.rst deleted file mode 100644 index eac04f9..0000000 --- a/vendor/twig/twig/doc/filters/url_encode.rst +++ /dev/null @@ -1,36 +0,0 @@ -``url_encode`` -============== - -.. versionadded:: 1.12.3 - - Support for encoding an array as query string was added in Twig 1.12.3. - -.. versionadded:: 1.16.0 - - The ``raw`` argument was removed in Twig 1.16.0. Twig now always encodes - according to RFC 3986. - -The ``url_encode`` filter percent encodes a given string as URL segment -or an array as query string: - -.. code-block:: twig - - {{ "path-seg*ment"|url_encode }} - {# outputs "path-seg%2Ament" #} - - {{ "string with spaces"|url_encode }} - {# outputs "string%20with%20spaces" #} - - {{ {'param': 'value', 'foo': 'bar'}|url_encode }} - {# outputs "param=value&foo=bar" #} - -.. note:: - - Internally, Twig uses the PHP `urlencode`_ (or `rawurlencode`_ if you pass - ``true`` as the first parameter) or the `http_build_query`_ function. Note - that as of Twig 1.16.0, ``urlencode`` **always** uses ``rawurlencode`` (the - ``raw`` argument was removed.) - -.. _`urlencode`: https://www.php.net/urlencode -.. _`rawurlencode`: https://www.php.net/rawurlencode -.. _`http_build_query`: https://www.php.net/http_build_query diff --git a/vendor/twig/twig/doc/functions/attribute.rst b/vendor/twig/twig/doc/functions/attribute.rst deleted file mode 100644 index e455342..0000000 --- a/vendor/twig/twig/doc/functions/attribute.rst +++ /dev/null @@ -1,27 +0,0 @@ -``attribute`` -============= - -.. versionadded:: 1.2 - - The ``attribute`` function was added in Twig 1.2. - -The ``attribute`` function can be used to access a "dynamic" attribute of a -variable: - -.. code-block:: twig - - {{ attribute(object, method) }} - {{ attribute(object, method, arguments) }} - {{ attribute(array, item) }} - -In addition, the ``defined`` test can check for the existence of a dynamic -attribute: - -.. code-block:: twig - - {{ attribute(object, method) is defined ? 'Method exists' : 'Method does not exist' }} - -.. note:: - - The resolution algorithm is the same as the one used for the ``.`` - notation, except that the item can be any valid expression. diff --git a/vendor/twig/twig/doc/functions/block.rst b/vendor/twig/twig/doc/functions/block.rst deleted file mode 100644 index 49d08a1..0000000 --- a/vendor/twig/twig/doc/functions/block.rst +++ /dev/null @@ -1,45 +0,0 @@ -``block`` -========= - -.. versionadded:: 1.28 - - Using ``block`` with the ``defined`` test was added in Twig 1.28. - -.. versionadded:: 1.28 - - Support for the template argument was added in Twig 1.28. - -When a template uses inheritance and if you want to print a block multiple -times, use the ``block`` function: - -.. code-block:: html+twig - - {% block title %}{% endblock %} - -

{{ block('title') }}

- - {% block body %}{% endblock %} - -The ``block`` function can also be used to display one block from another -template: - -.. code-block:: twig - - {{ block("title", "common_blocks.twig") }} - -Use the ``defined`` test to check if a block exists in the context of the -current template: - -.. code-block:: twig - - {% if block("footer") is defined %} - ... - {% endif %} - - {% if block("footer", "common_blocks.twig") is defined %} - ... - {% endif %} - -.. seealso:: - - :doc:`extends<../tags/extends>`, :doc:`parent<../functions/parent>` diff --git a/vendor/twig/twig/doc/functions/constant.rst b/vendor/twig/twig/doc/functions/constant.rst deleted file mode 100644 index dc15350..0000000 --- a/vendor/twig/twig/doc/functions/constant.rst +++ /dev/null @@ -1,31 +0,0 @@ -``constant`` -============ - -.. versionadded:: 1.12.1 - - constant now accepts object instances as the second argument. - -.. versionadded:: 1.28 - - Using ``constant`` with the ``defined`` test was added in Twig 1.28. - -``constant`` returns the constant value for a given string: - -.. code-block:: twig - - {{ some_date|date(constant('DATE_W3C')) }} - {{ constant('Namespace\\Classname::CONSTANT_NAME') }} - -As of 1.12.1 you can read constants from object instances as well: - -.. code-block:: twig - - {{ constant('RSS', date) }} - -Use the ``defined`` test to check if a constant is defined: - -.. code-block:: twig - - {% if constant('SOME_CONST') is defined %} - ... - {% endif %} diff --git a/vendor/twig/twig/doc/functions/cycle.rst b/vendor/twig/twig/doc/functions/cycle.rst deleted file mode 100644 index 84cff6a..0000000 --- a/vendor/twig/twig/doc/functions/cycle.rst +++ /dev/null @@ -1,28 +0,0 @@ -``cycle`` -========= - -The ``cycle`` function cycles on an array of values: - -.. code-block:: twig - - {% set start_year = date() | date('Y') %} - {% set end_year = start_year + 5 %} - - {% for year in start_year..end_year %} - {{ cycle(['odd', 'even'], loop.index0) }} - {% endfor %} - -The array can contain any number of values: - -.. code-block:: twig - - {% set fruits = ['apple', 'orange', 'citrus'] %} - - {% for i in 0..10 %} - {{ cycle(fruits, i) }} - {% endfor %} - -Arguments ---------- - -* ``position``: The cycle position diff --git a/vendor/twig/twig/doc/functions/date.rst b/vendor/twig/twig/doc/functions/date.rst deleted file mode 100644 index 25eb43e..0000000 --- a/vendor/twig/twig/doc/functions/date.rst +++ /dev/null @@ -1,55 +0,0 @@ -``date`` -======== - -.. versionadded:: 1.6 - - The date function has been added in Twig 1.6. - -.. versionadded:: 1.6.1 - - The default timezone support has been added in Twig 1.6.1. - -Converts an argument to a date to allow date comparison: - -.. code-block:: html+twig - - {% if date(user.created_at) < date('-2days') %} - {# do something #} - {% endif %} - -The argument must be in one of PHP’s supported `date and time formats`_. - -You can pass a timezone as the second argument: - -.. code-block:: html+twig - - {% if date(user.created_at) < date('-2days', 'Europe/Paris') %} - {# do something #} - {% endif %} - -If no argument is passed, the function returns the current date: - -.. code-block:: html+twig - - {% if date(user.created_at) < date() %} - {# always! #} - {% endif %} - -.. note:: - - You can set the default timezone globally by calling ``setTimezone()`` on - the ``core`` extension instance:: - - $twig = new \Twig\Environment($loader); - $twig->getExtension('\Twig\Extension\CoreExtension')->setTimezone('Europe/Paris'); - - // before Twig 1.26 - $twig->getExtension('core')->setTimezone('Europe/Paris'); - -Arguments ---------- - -* ``date``: The date -* ``timezone``: The timezone - -.. _`date and time formats`: https://www.php.net/manual/en/datetime.formats.php diff --git a/vendor/twig/twig/doc/functions/dump.rst b/vendor/twig/twig/doc/functions/dump.rst deleted file mode 100644 index 24b9825..0000000 --- a/vendor/twig/twig/doc/functions/dump.rst +++ /dev/null @@ -1,70 +0,0 @@ -``dump`` -======== - -.. versionadded:: 1.5 - - The ``dump`` function was added in Twig 1.5. - -The ``dump`` function dumps information about a template variable. This is -mostly useful to debug a template that does not behave as expected by -introspecting its variables: - -.. code-block:: twig - - {{ dump(user) }} - -.. note:: - - The ``dump`` function is not available by default. You must add the - ``\Twig\Extension\DebugExtension`` extension explicitly when creating your Twig - environment:: - - $twig = new \Twig\Environment($loader, [ - 'debug' => true, - // ... - ]); - $twig->addExtension(new \Twig\Extension\DebugExtension()); - - Even when enabled, the ``dump`` function won't display anything if the - ``debug`` option on the environment is not enabled (to avoid leaking debug - information on a production server). - -In an HTML context, wrap the output with a ``pre`` tag to make it easier to -read: - -.. code-block:: html+twig - -
-        {{ dump(user) }}
-    
- -.. tip:: - - Using a ``pre`` tag is not needed when `XDebug`_ is enabled and - ``html_errors`` is ``on``; as a bonus, the output is also nicer with - XDebug enabled. - -You can debug several variables by passing them as additional arguments: - -.. code-block:: twig - - {{ dump(user, categories) }} - -If you don't pass any value, all variables from the current context are -dumped: - -.. code-block:: twig - - {{ dump() }} - -.. note:: - - Internally, Twig uses the PHP `var_dump`_ function. - -Arguments ---------- - -* ``context``: The context to dump - -.. _`XDebug`: https://xdebug.org/docs/display -.. _`var_dump`: https://www.php.net/var_dump diff --git a/vendor/twig/twig/doc/functions/include.rst b/vendor/twig/twig/doc/functions/include.rst deleted file mode 100644 index ee17a13..0000000 --- a/vendor/twig/twig/doc/functions/include.rst +++ /dev/null @@ -1,85 +0,0 @@ -``include`` -=========== - -.. versionadded:: 1.12 - - The ``include`` function was added in Twig 1.12. - -The ``include`` function returns the rendered content of a template: - -.. code-block:: twig - - {{ include('template.html') }} - {{ include(some_var) }} - -Included templates have access to the variables of the active context. - -If you are using the filesystem loader, the templates are looked for in the -paths defined by it. - -The context is passed by default to the template but you can also pass -additional variables: - -.. code-block:: twig - - {# template.html will have access to the variables from the current context and the additional ones provided #} - {{ include('template.html', {foo: 'bar'}) }} - -You can disable access to the context by setting ``with_context`` to -``false``: - -.. code-block:: twig - - {# only the foo variable will be accessible #} - {{ include('template.html', {foo: 'bar'}, with_context = false) }} - -.. code-block:: twig - - {# no variables will be accessible #} - {{ include('template.html', with_context = false) }} - -And if the expression evaluates to a ``\Twig\Template`` or a -``\Twig\TemplateWrapper`` instance, Twig will use it directly:: - - // {{ include(template) }} - - // deprecated as of Twig 1.28 - $template = $twig->loadTemplate('some_template.twig'); - - // as of Twig 1.28 - $template = $twig->load('some_template.twig'); - - $twig->display('template.twig', ['template' => $template]); - -When you set the ``ignore_missing`` flag, Twig will return an empty string if -the template does not exist: - -.. code-block:: twig - - {{ include('sidebar.html', ignore_missing = true) }} - -You can also provide a list of templates that are checked for existence before -inclusion. The first template that exists will be rendered: - -.. code-block:: twig - - {{ include(['page_detailed.html', 'page.html']) }} - -If ``ignore_missing`` is set, it will fall back to rendering nothing if none -of the templates exist, otherwise it will throw an exception. - -When including a template created by an end user, you should consider -sandboxing it: - -.. code-block:: twig - - {{ include('page.html', sandboxed = true) }} - -Arguments ---------- - -* ``template``: The template to render -* ``variables``: The variables to pass to the template -* ``with_context``: Whether to pass the current context variables or not -* ``ignore_missing``: Whether to ignore missing templates or not -* ``sandboxed``: Whether to sandbox the template or not diff --git a/vendor/twig/twig/doc/functions/index.rst b/vendor/twig/twig/doc/functions/index.rst deleted file mode 100644 index 07214a7..0000000 --- a/vendor/twig/twig/doc/functions/index.rst +++ /dev/null @@ -1,20 +0,0 @@ -Functions -========= - -.. toctree:: - :maxdepth: 1 - - attribute - block - constant - cycle - date - dump - include - max - min - parent - random - range - source - template_from_string diff --git a/vendor/twig/twig/doc/functions/max.rst b/vendor/twig/twig/doc/functions/max.rst deleted file mode 100644 index 36098ec..0000000 --- a/vendor/twig/twig/doc/functions/max.rst +++ /dev/null @@ -1,21 +0,0 @@ -``max`` -======= - -.. versionadded:: 1.15 - - The ``max`` function was added in Twig 1.15. - -``max`` returns the biggest value of a sequence or a set of values: - -.. code-block:: twig - - {{ max(1, 3, 2) }} - {{ max([1, 3, 2]) }} - -When called with a mapping, max ignores keys and only compares values: - -.. code-block:: twig - - {{ max({2: "e", 1: "a", 3: "b", 5: "d", 4: "c"}) }} - {# returns "e" #} - diff --git a/vendor/twig/twig/doc/functions/min.rst b/vendor/twig/twig/doc/functions/min.rst deleted file mode 100644 index ff7503d..0000000 --- a/vendor/twig/twig/doc/functions/min.rst +++ /dev/null @@ -1,21 +0,0 @@ -``min`` -======= - -.. versionadded:: 1.15 - - The ``min`` function was added in Twig 1.15. - -``min`` returns the lowest value of a sequence or a set of values: - -.. code-block:: twig - - {{ min(1, 3, 2) }} - {{ min([1, 3, 2]) }} - -When called with a mapping, min ignores keys and only compares values: - -.. code-block:: twig - - {{ min({2: "e", 3: "a", 1: "b", 5: "d", 4: "c"}) }} - {# returns "a" #} - diff --git a/vendor/twig/twig/doc/functions/parent.rst b/vendor/twig/twig/doc/functions/parent.rst deleted file mode 100644 index 158bac7..0000000 --- a/vendor/twig/twig/doc/functions/parent.rst +++ /dev/null @@ -1,22 +0,0 @@ -``parent`` -========== - -When a template uses inheritance, it's possible to render the contents of the -parent block when overriding a block by using the ``parent`` function: - -.. code-block:: html+twig - - {% extends "base.html" %} - - {% block sidebar %} -

Table Of Contents

- ... - {{ parent() }} - {% endblock %} - -The ``parent()`` call will return the content of the ``sidebar`` block as -defined in the ``base.html`` template. - -.. seealso:: - - :doc:`extends<../tags/extends>`, :doc:`block<../functions/block>`, :doc:`block<../tags/block>` diff --git a/vendor/twig/twig/doc/functions/random.rst b/vendor/twig/twig/doc/functions/random.rst deleted file mode 100644 index e0462ad..0000000 --- a/vendor/twig/twig/doc/functions/random.rst +++ /dev/null @@ -1,37 +0,0 @@ -``random`` -========== - -.. versionadded:: 1.5 - - The ``random`` function was added in Twig 1.5. - -.. versionadded:: 1.6 - - String and integer handling was added in Twig 1.6. - -.. versionadded:: 1.38 - - The ``max`` argument was added in Twig 1.38. - -The ``random`` function returns a random value depending on the supplied -parameter type: - -* a random item from a sequence; -* a random character from a string; -* a random integer between 0 and the integer parameter (inclusive). -* a random integer between the integer parameter (when negative) and 0 (inclusive). -* a random integer between the first integer and the second integer parameter (inclusive). - -.. code-block:: twig - - {{ random(['apple', 'orange', 'citrus']) }} {# example output: orange #} - {{ random('ABC') }} {# example output: C #} - {{ random() }} {# example output: 15386094 (works as the native PHP mt_rand function) #} - {{ random(5) }} {# example output: 3 #} - {{ random(50, 100) }} {# example output: 63 #} - -Arguments ---------- - -* ``values``: The values -* ``max``: The max value when values is an integer diff --git a/vendor/twig/twig/doc/functions/range.rst b/vendor/twig/twig/doc/functions/range.rst deleted file mode 100644 index e537b11..0000000 --- a/vendor/twig/twig/doc/functions/range.rst +++ /dev/null @@ -1,58 +0,0 @@ -``range`` -========= - -Returns a list containing an arithmetic progression of integers: - -.. code-block:: twig - - {% for i in range(0, 3) %} - {{ i }}, - {% endfor %} - - {# outputs 0, 1, 2, 3, #} - -When step is given (as the third parameter), it specifies the increment (or -decrement for negative values): - -.. code-block:: twig - - {% for i in range(0, 6, 2) %} - {{ i }}, - {% endfor %} - - {# outputs 0, 2, 4, 6, #} - -.. note:: - - Note that if the start is greater than the end, ``range`` assumes a step of - ``-1``: - - .. code-block:: twig - - {% for i in range(3, 0) %} - {{ i }}, - {% endfor %} - - {# outputs 3, 2, 1, 0, #} - -The Twig built-in ``..`` operator is just syntactic sugar for the ``range`` -function (with a step of ``1``, or ``-1`` if the start is greater than the end): - -.. code-block:: twig - - {% for i in 0..3 %} - {{ i }}, - {% endfor %} - -.. tip:: - - The ``range`` function works as the native PHP `range`_ function. - -Arguments ---------- - -* ``low``: The first value of the sequence. -* ``high``: The highest possible value of the sequence. -* ``step``: The increment between elements of the sequence. - -.. _`range`: https://www.php.net/range diff --git a/vendor/twig/twig/doc/functions/source.rst b/vendor/twig/twig/doc/functions/source.rst deleted file mode 100644 index 72d9994..0000000 --- a/vendor/twig/twig/doc/functions/source.rst +++ /dev/null @@ -1,34 +0,0 @@ -``source`` -========== - -.. versionadded:: 1.15 - - The ``source`` function was added in Twig 1.15. - -.. versionadded:: 1.18.3 - - The ``ignore_missing`` flag was added in Twig 1.18.3. - -The ``source`` function returns the content of a template without rendering it: - -.. code-block:: twig - - {{ source('template.html') }} - {{ source(some_var) }} - -When you set the ``ignore_missing`` flag, Twig will return an empty string if -the template does not exist: - -.. code-block:: twig - - {{ source('template.html', ignore_missing = true) }} - -The function uses the same template loaders as the ones used to include -templates. So, if you are using the filesystem loader, the templates are looked -for in the paths defined by it. - -Arguments ---------- - -* ``name``: The name of the template to read -* ``ignore_missing``: Whether to ignore missing templates or not diff --git a/vendor/twig/twig/doc/functions/template_from_string.rst b/vendor/twig/twig/doc/functions/template_from_string.rst deleted file mode 100644 index ef7a984..0000000 --- a/vendor/twig/twig/doc/functions/template_from_string.rst +++ /dev/null @@ -1,45 +0,0 @@ -``template_from_string`` -======================== - -.. versionadded:: 1.11 - - The ``template_from_string`` function was added in Twig 1.11. - -.. versionadded:: 1.39 - - The name argument was added in Twig 1.39. - -The ``template_from_string`` function loads a template from a string: - -.. code-block:: twig - - {{ include(template_from_string("Hello {{ name }}")) }} - {{ include(template_from_string(page.template)) }} - -To ease debugging, you can also give the template a name that will be part of -any related error message: - -.. code-block:: twig - - {{ include(template_from_string(page.template, "template for page " ~ page.name)) }} - -.. note:: - - The ``template_from_string`` function is not available by default. You - must add the ``\Twig\Extension\StringLoaderExtension`` extension explicitly when - creating your Twig environment:: - - $twig = new \Twig\Environment(...); - $twig->addExtension(new \Twig\Extension\StringLoaderExtension()); - -.. note:: - - Even if you will probably always use the ``template_from_string`` function - with the ``include`` function, you can use it with any tag or function that - takes a template as an argument (like the ``embed`` or ``extends`` tags). - -Arguments ---------- - -* ``template``: The template -* ``name``: A name for the template diff --git a/vendor/twig/twig/doc/index.rst b/vendor/twig/twig/doc/index.rst deleted file mode 100644 index 358bd73..0000000 --- a/vendor/twig/twig/doc/index.rst +++ /dev/null @@ -1,19 +0,0 @@ -Twig -==== - -.. toctree:: - :maxdepth: 2 - - intro - installation - templates - api - advanced - internals - deprecated - recipes - coding_standards - tags/index - filters/index - functions/index - tests/index diff --git a/vendor/twig/twig/doc/installation.rst b/vendor/twig/twig/doc/installation.rst deleted file mode 100644 index fe3bd11..0000000 --- a/vendor/twig/twig/doc/installation.rst +++ /dev/null @@ -1,72 +0,0 @@ -Installation -============ - -You have multiple ways to install Twig. - -Installing the Twig PHP package -------------------------------- - -Install `Composer`_ and run the following command: - -.. code-block:: bash - - composer require "twig/twig:^1.0" - -Installing the C extension --------------------------- - -.. versionadded:: 1.4 - - The C extension was added in Twig 1.4. - -Twig comes with an **optional** C extension that improves the performance of the -Twig runtime engine. - -Note that this extension does not replace the PHP code but only provides an -optimized version of the ``\Twig\Template::getAttribute()`` method; you must -still install the regular PHP code - -The C extension is only compatible and useful for **PHP5**. - -Install it like any other PHP extensions: - -.. code-block:: bash - - cd ext/twig - phpize - ./configure - make - make install - -For Windows: - -1. Setup the build environment following the `PHP documentation`_ -2. Put Twig's C extension source code into ``C:\php-sdk\phpdev\vcXX\x86\php-source-directory\ext\twig`` -3. Use the ``configure --disable-all --enable-cli --enable-twig=shared`` command instead of step 14 -4. ``nmake`` -5. Copy the ``C:\php-sdk\phpdev\vcXX\x86\php-source-directory\Release_TS\php_twig.dll`` file to your PHP setup. - -.. tip:: - - For Windows ZendServer, ZTS is not enabled as mentioned in `Zend Server FAQ`_. - - You have to use ``configure --disable-all --disable-zts --enable-cli - --enable-twig=shared`` to be able to build the twig C extension for - ZendServer. - - The built DLL will be available in - ``C:\\php-sdk\\phpdev\\vcXX\\x86\\php-source-directory\\Release`` - -Finally, enable the extension in your ``php.ini`` configuration file: - -.. code-block:: ini - - extension=twig.so # For Unix systems - extension=php_twig.dll # For Windows systems - -And from now on, Twig will automatically compile your templates to take -advantage of the C extension. - -.. _`Composer`: https://getcomposer.org/download/ -.. _`PHP documentation`: https://wiki.php.net/internals/windows/stepbystepbuild -.. _`Zend Server FAQ`: https://www.zend.com/en/products/server/faq#faqD6 diff --git a/vendor/twig/twig/doc/internals.rst b/vendor/twig/twig/doc/internals.rst deleted file mode 100644 index de4fb9e..0000000 --- a/vendor/twig/twig/doc/internals.rst +++ /dev/null @@ -1,145 +0,0 @@ -Twig Internals -============== - -Twig is very extensible and you can hack it. Keep in mind that you -should probably try to create an extension before hacking the core, as most -features and enhancements can be handled with extensions. This chapter is also -useful for people who want to understand how Twig works under the hood. - -How does Twig work? -------------------- - -The rendering of a Twig template can be summarized into four key steps: - -* **Load** the template: If the template is already compiled, load it and go - to the *evaluation* step, otherwise: - - * First, the **lexer** tokenizes the template source code into small pieces - for easier processing; - - * Then, the **parser** converts the token stream into a meaningful tree - of nodes (the Abstract Syntax Tree); - - * Finally, the *compiler* transforms the AST into PHP code. - -* **Evaluate** the template: It means calling the ``display()`` - method of the compiled template and passing it the context. - -The Lexer ---------- - -The lexer tokenizes a template source code into a token stream (each token is -an instance of ``\Twig\Token``, and the stream is an instance of -``\Twig\TokenStream``). The default lexer recognizes 13 different token types: - -* ``\Twig\Token::BLOCK_START_TYPE``, ``\Twig\Token::BLOCK_END_TYPE``: Delimiters for blocks (``{% %}``) -* ``\Twig\Token::VAR_START_TYPE``, ``\Twig\Token::VAR_END_TYPE``: Delimiters for variables (``{{ }}``) -* ``\Twig\Token::TEXT_TYPE``: A text outside an expression; -* ``\Twig\Token::NAME_TYPE``: A name in an expression; -* ``\Twig\Token::NUMBER_TYPE``: A number in an expression; -* ``\Twig\Token::STRING_TYPE``: A string in an expression; -* ``\Twig\Token::OPERATOR_TYPE``: An operator; -* ``\Twig\Token::PUNCTUATION_TYPE``: A punctuation sign; -* ``\Twig\Token::INTERPOLATION_START_TYPE``, ``\Twig\Token::INTERPOLATION_END_TYPE`` (as of Twig 1.5): Delimiters for string interpolation; -* ``\Twig\Token::EOF_TYPE``: Ends of template. - -You can manually convert a source code into a token stream by calling the -``tokenize()`` method of an environment:: - - $stream = $twig->tokenize(new \Twig\Source($source, $identifier)); - -.. versionadded:: 1.27 - - ``\Twig\Source`` was introduced in version 1.27, pass the source and the - identifier directly on previous versions. - -As the stream has a ``__toString()`` method, you can have a textual -representation of it by echoing the object:: - - echo $stream."\n"; - -Here is the output for the ``Hello {{ name }}`` template: - -.. code-block:: text - - TEXT_TYPE(Hello ) - VAR_START_TYPE() - NAME_TYPE(name) - VAR_END_TYPE() - EOF_TYPE() - -.. note:: - - The default lexer (``\Twig\Lexer``) can be changed by calling - the ``setLexer()`` method:: - - $twig->setLexer($lexer); - -The Parser ----------- - -The parser converts the token stream into an AST (Abstract Syntax Tree), or a -node tree (an instance of ``\Twig\Node\ModuleNode``). The core extension defines -the basic nodes like: ``for``, ``if``, ... and the expression nodes. - -You can manually convert a token stream into a node tree by calling the -``parse()`` method of an environment:: - - $nodes = $twig->parse($stream); - -Echoing the node object gives you a nice representation of the tree:: - - echo $nodes."\n"; - -Here is the output for the ``Hello {{ name }}`` template: - -.. code-block:: text - - \Twig\Node\ModuleNode( - \Twig\Node\TextNode(Hello ) - \Twig\Node\PrintNode( - \Twig\Node\Expression\NameExpression(name) - ) - ) - -.. note:: - - The default parser (``\Twig\TokenParser\AbstractTokenParser``) can be changed by calling the - ``setParser()`` method:: - - $twig->setParser($parser); - -The Compiler ------------- - -The last step is done by the compiler. It takes a node tree as an input and -generates PHP code usable for runtime execution of the template. - -You can manually compile a node tree to PHP code with the ``compile()`` method -of an environment:: - - $php = $twig->compile($nodes); - -The generated template for a ``Hello {{ name }}`` template reads as follows -(the actual output can differ depending on the version of Twig you are -using):: - - /* Hello {{ name }} */ - class __TwigTemplate_1121b6f109fe93ebe8c6e22e3712bceb extends \Twig\Template - { - protected function doDisplay(array $context, array $blocks = []) - { - // line 1 - echo "Hello "; - echo twig_escape_filter($this->env, (isset($context["name"]) ? $context["name"] : null), "html", null, true); - } - - // some more code - } - -.. note:: - - The default compiler (``\Twig\Compiler``) can be changed by calling the - ``setCompiler()`` method:: - - $twig->setCompiler($compiler); diff --git a/vendor/twig/twig/doc/intro.rst b/vendor/twig/twig/doc/intro.rst deleted file mode 100644 index d28e0fc..0000000 --- a/vendor/twig/twig/doc/intro.rst +++ /dev/null @@ -1,80 +0,0 @@ -Introduction -============ - -Welcome to the documentation for Twig, the flexible, fast, and secure template -engine for PHP. - -Twig is both designer and developer friendly by sticking to PHP's principles and -adding functionality useful for templating environments. - -The key-features are... - -* *Fast*: Twig compiles templates down to plain optimized PHP code. The - overhead compared to regular PHP code was reduced to the very minimum. - -* *Secure*: Twig has a sandbox mode to evaluate untrusted template code. This - allows Twig to be used as a template language for applications where users - may modify the template design. - -* *Flexible*: Twig is powered by a flexible lexer and parser. This allows the - developer to define their own custom tags and filters, and to create their own DSL. - -Twig is used by many Open-Source projects like Symfony, Drupal8, eZPublish, -phpBB, Matomo, OroCRM; and many frameworks have support for it as well like -Slim, Yii, Laravel, and Codeigniter — just to name a few. - -.. admonition:: Screencast - - Like to learn from video tutorials? Check out the `SymfonyCasts Twig Tutorial`_! - -Prerequisites -------------- - -Twig 1.x needs at least **PHP 7.2.5** to run. - -Installation ------------- - -The recommended way to install Twig is via Composer: - -.. code-block:: bash - - composer require "twig/twig:^1.0" - -.. note:: - - To learn more about the other installation methods, read the - :doc:`installation` chapter; it also explains how to install - the Twig C extension. - -Basic API Usage ---------------- - -This section gives you a brief introduction to the PHP API for Twig:: - - require_once '/path/to/vendor/autoload.php'; - - $loader = new \Twig\Loader\ArrayLoader([ - 'index' => 'Hello {{ name }}!', - ]); - $twig = new \Twig\Environment($loader); - - echo $twig->render('index', ['name' => 'Fabien']); - -Twig uses a loader (``\Twig\Loader\ArrayLoader``) to locate templates, and an -environment (``\Twig\Environment``) to store its configuration. - -The ``render()`` method loads the template passed as a first argument and -renders it with the variables passed as a second argument. - -As templates are generally stored on the filesystem, Twig also comes with a -filesystem loader:: - - $loader = new \Twig\Loader\FilesystemLoader('/path/to/templates'); - $twig = new \Twig\Environment($loader, [ - 'cache' => '/path/to/compilation_cache', - ]); - - echo $twig->render('index.html', ['name' => 'Fabien']); - -.. _`SymfonyCasts Twig Tutorial`: https://symfonycasts.com/screencast/twig diff --git a/vendor/twig/twig/doc/recipes.rst b/vendor/twig/twig/doc/recipes.rst deleted file mode 100644 index 453bcaa..0000000 --- a/vendor/twig/twig/doc/recipes.rst +++ /dev/null @@ -1,568 +0,0 @@ -Recipes -======= - -.. _deprecation-notices: - -Displaying Deprecation Notices ------------------------------- - -.. versionadded:: 1.21 - - This works as of Twig 1.21. - -Deprecated features generate deprecation notices (via a call to the -``trigger_error()`` PHP function). By default, they are silenced and never -displayed nor logged. - -To remove all deprecated feature usages from your templates, write and run a -script along the lines of the following:: - - require_once __DIR__.'/vendor/autoload.php'; - - $twig = create_your_twig_env(); - - $deprecations = new \Twig\Util\DeprecationCollector($twig); - - print_r($deprecations->collectDir(__DIR__.'/templates')); - -The ``collectDir()`` method compiles all templates found in a directory, -catches deprecation notices, and return them. - -.. tip:: - - If your templates are not stored on the filesystem, use the ``collect()`` - method instead. ``collect()`` takes a ``Traversable`` which must return - template names as keys and template contents as values (as done by - ``\Twig\Util\TemplateDirIterator``). - -However, this code won't find all deprecations (like using deprecated some Twig -classes). To catch all notices, register a custom error handler like the one -below:: - - $deprecations = []; - set_error_handler(function ($type, $msg) use (&$deprecations) { - if (E_USER_DEPRECATED === $type) { - $deprecations[] = $msg; - } - }); - - // run your application - - print_r($deprecations); - -Note that most deprecation notices are triggered during **compilation**, so -they won't be generated when templates are already cached. - -.. tip:: - - If you want to manage the deprecation notices from your PHPUnit tests, have - a look at the `symfony/phpunit-bridge - `_ package, which eases the - process. - -Making a Layout conditional ---------------------------- - -Working with Ajax means that the same content is sometimes displayed as is, -and sometimes decorated with a layout. As Twig layout template names can be -any valid expression, you can pass a variable that evaluates to ``true`` when -the request is made via Ajax and choose the layout accordingly: - -.. code-block:: twig - - {% extends request.ajax ? "base_ajax.html" : "base.html" %} - - {% block content %} - This is the content to be displayed. - {% endblock %} - -Making an Include dynamic -------------------------- - -When including a template, its name does not need to be a string. For -instance, the name can depend on the value of a variable: - -.. code-block:: twig - - {% include var ~ '_foo.html' %} - -If ``var`` evaluates to ``index``, the ``index_foo.html`` template will be -rendered. - -As a matter of fact, the template name can be any valid expression, such as -the following: - -.. code-block:: twig - - {% include var|default('index') ~ '_foo.html' %} - -Overriding a Template that also extends itself ----------------------------------------------- - -A template can be customized in two different ways: - -* *Inheritance*: A template *extends* a parent template and overrides some - blocks; - -* *Replacement*: If you use the filesystem loader, Twig loads the first - template it finds in a list of configured directories; a template found in a - directory *replaces* another one from a directory further in the list. - -But how do you combine both: *replace* a template that also extends itself -(aka a template in a directory further in the list)? - -Let's say that your templates are loaded from both ``.../templates/mysite`` -and ``.../templates/default`` in this order. The ``page.twig`` template, -stored in ``.../templates/default`` reads as follows: - -.. code-block:: twig - - {# page.twig #} - {% extends "layout.twig" %} - - {% block content %} - {% endblock %} - -You can replace this template by putting a file with the same name in -``.../templates/mysite``. And if you want to extend the original template, you -might be tempted to write the following: - -.. code-block:: twig - - {# page.twig in .../templates/mysite #} - {% extends "page.twig" %} {# from .../templates/default #} - -However, this will not work as Twig will always load the template from -``.../templates/mysite``. - -It turns out it is possible to get this to work, by adding a directory right -at the end of your template directories, which is the parent of all of the -other directories: ``.../templates`` in our case. This has the effect of -making every template file within our system uniquely addressable. Most of the -time you will use the "normal" paths, but in the special case of wanting to -extend a template with an overriding version of itself we can reference its -parent's full, unambiguous template path in the extends tag: - -.. code-block:: twig - - {# page.twig in .../templates/mysite #} - {% extends "default/page.twig" %} {# from .../templates #} - -.. note:: - - This recipe was inspired by the following Django wiki page: - https://code.djangoproject.com/wiki/ExtendingTemplates - -Customizing the Syntax ----------------------- - -Twig allows some syntax customization for the block delimiters. It's **not** -recommended to use this feature as templates will be tied with your custom -syntax. But for specific projects, it can make sense to change the defaults. - -To change the block delimiters, you need to create your own lexer object:: - - $twig = new \Twig\Environment(); - - $lexer = new \Twig\Lexer($twig, [ - 'tag_comment' => ['{#', '#}'], - 'tag_block' => ['{%', '%}'], - 'tag_variable' => ['{{', '}}'], - 'interpolation' => ['#{', '}'], - ]); - $twig->setLexer($lexer); - -Here are some configuration example that simulates some other template engines -syntax:: - - // Ruby erb syntax - $lexer = new \Twig\Lexer($twig, [ - 'tag_comment' => ['<%#', '%>'], - 'tag_block' => ['<%', '%>'], - 'tag_variable' => ['<%=', '%>'], - ]); - - // SGML Comment Syntax - $lexer = new \Twig\Lexer($twig, [ - 'tag_comment' => [''], - 'tag_block' => [''], - 'tag_variable' => ['${', '}'], - ]); - - // Smarty like - $lexer = new \Twig\Lexer($twig, [ - 'tag_comment' => ['{*', '*}'], - 'tag_block' => ['{', '}'], - 'tag_variable' => ['{$', '}'], - ]); - -Using dynamic Object Properties -------------------------------- - -When Twig encounters a variable like ``article.title``, it tries to find a -``title`` public property in the ``article`` object. - -It also works if the property does not exist but is rather defined dynamically -thanks to the magic ``__get()`` method; you need to also implement the -``__isset()`` magic method like shown in the following snippet of code:: - - class Article - { - public function __get($name) - { - if ('title' == $name) { - return 'The title'; - } - - // throw some kind of error - } - - public function __isset($name) - { - if ('title' == $name) { - return true; - } - - return false; - } - } - -Accessing the parent Context in Nested Loops --------------------------------------------- - -Sometimes, when using nested loops, you need to access the parent context. The -parent context is always accessible via the ``loop.parent`` variable. For -instance, if you have the following template data:: - - $data = [ - 'topics' => [ - 'topic1' => ['Message 1 of topic 1', 'Message 2 of topic 1'], - 'topic2' => ['Message 1 of topic 2', 'Message 2 of topic 2'], - ], - ]; - -And the following template to display all messages in all topics: - -.. code-block:: twig - - {% for topic, messages in topics %} - * {{ loop.index }}: {{ topic }} - {% for message in messages %} - - {{ loop.parent.loop.index }}.{{ loop.index }}: {{ message }} - {% endfor %} - {% endfor %} - -The output will be similar to: - -.. code-block:: text - - * 1: topic1 - - 1.1: The message 1 of topic 1 - - 1.2: The message 2 of topic 1 - * 2: topic2 - - 2.1: The message 1 of topic 2 - - 2.2: The message 2 of topic 2 - -In the inner loop, the ``loop.parent`` variable is used to access the outer -context. So, the index of the current ``topic`` defined in the outer for loop -is accessible via the ``loop.parent.loop.index`` variable. - -Defining undefined Functions and Filters on the Fly ---------------------------------------------------- - -When a function (or a filter) is not defined, Twig defaults to throw a -``\Twig\Error\SyntaxError`` exception. However, it can also call a `callback`_ (any -valid PHP callable) which should return a function (or a filter). - -For filters, register callbacks with ``registerUndefinedFilterCallback()``. -For functions, use ``registerUndefinedFunctionCallback()``:: - - // auto-register all native PHP functions as Twig functions - // don't try this at home as it's not secure at all! - $twig->registerUndefinedFunctionCallback(function ($name) { - if (function_exists($name)) { - return new \Twig\TwigFunction($name, $name); - } - - return false; - }); - -If the callable is not able to return a valid function (or filter), it must -return ``false``. - -If you register more than one callback, Twig will call them in turn until one -does not return ``false``. - -.. tip:: - - As the resolution of functions and filters is done during compilation, - there is no overhead when registering these callbacks. - -Validating the Template Syntax ------------------------------- - -When template code is provided by a third-party (through a web interface for -instance), it might be interesting to validate the template syntax before -saving it. If the template code is stored in a ``$template`` variable, here is -how you can do it:: - - try { - $twig->parse($twig->tokenize(new \Twig\Source($template))); - - // the $template is valid - } catch (\Twig\Error\SyntaxError $e) { - // $template contains one or more syntax errors - } - -If you iterate over a set of files, you can pass the filename to the -``tokenize()`` method to get the filename in the exception message:: - - foreach ($files as $file) { - try { - $twig->parse($twig->tokenize(new \Twig\Source($template, $file->getFilename(), $file))); - - // the $template is valid - } catch (\Twig\Error\SyntaxError $e) { - // $template contains one or more syntax errors - } - } - -.. versionadded:: 1.27 - - ``\Twig\Source`` was introduced in version 1.27, pass the source and the - identifier directly on previous versions. - -.. note:: - - This method won't catch any sandbox policy violations because the policy - is enforced during template rendering (as Twig needs the context for some - checks like allowed methods on objects). - -Refreshing modified Templates when OPcache or APC is enabled ------------------------------------------------------------- - -When using OPcache with ``opcache.validate_timestamps`` set to ``0`` or APC -with ``apc.stat`` set to ``0`` and Twig cache enabled, clearing the template -cache won't update the cache. - -To get around this, force Twig to invalidate the bytecode cache:: - - $twig = new \Twig\Environment($loader, [ - 'cache' => new \Twig\Cache\FilesystemCache('/some/cache/path', \Twig\Cache\FilesystemCache::FORCE_BYTECODE_INVALIDATION), - // ... - ]); - -.. note:: - - Before Twig 1.22, you should extend ``\Twig\Environment`` instead:: - - class OpCacheAwareTwigEnvironment extends \Twig\Environment - { - protected function writeCacheFile($file, $content) - { - parent::writeCacheFile($file, $content); - - // Compile cached file into bytecode cache - if (function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), FILTER_VALIDATE_BOOLEAN)) { - opcache_invalidate($file, true); - } elseif (function_exists('apc_compile_file')) { - apc_compile_file($file); - } - } - } - -Reusing a stateful Node Visitor -------------------------------- - -When attaching a visitor to a ``\Twig\Environment`` instance, Twig uses it to -visit *all* templates it compiles. If you need to keep some state information -around, you probably want to reset it when visiting a new template. - -This can be achieved with the following code:: - - protected $someTemplateState = []; - - public function enterNode(Twig_NodeInterface $node, \Twig\Environment $env) - { - if ($node instanceof \Twig\Node\ModuleNode) { - // reset the state as we are entering a new template - $this->someTemplateState = []; - } - - // ... - - return $node; - } - -Using a Database to store Templates ------------------------------------ - -If you are developing a CMS, templates are usually stored in a database. This -recipe gives you a simple PDO template loader you can use as a starting point -for your own. - -First, let's create a temporary in-memory SQLite3 database to work with:: - - $dbh = new PDO('sqlite::memory:'); - $dbh->exec('CREATE TABLE templates (name STRING, source STRING, last_modified INTEGER)'); - $base = '{% block content %}{% endblock %}'; - $index = ' - {% extends "base.twig" %} - {% block content %}Hello {{ name }}{% endblock %} - '; - $now = time(); - $dbh->prepare('INSERT INTO templates (name, source, last_modified) VALUES (?, ?, ?)')->execute(['base.twig', $base, $now]); - $dbh->prepare('INSERT INTO templates (name, source, last_modified) VALUES (?, ?, ?)')->execute(['index.twig', $index, $now]); - -We have created a simple ``templates`` table that hosts two templates: -``base.twig`` and ``index.twig``. - -Now, let's define a loader able to use this database:: - - class DatabaseTwigLoader implements \Twig\Loader\LoaderInterface, \Twig\Loader\ExistsLoaderInterface, \Twig\Loader\SourceContextLoaderInterface - { - protected $dbh; - - public function __construct(PDO $dbh) - { - $this->dbh = $dbh; - } - - public function getSource($name) - { - if (false === $source = $this->getValue('source', $name)) { - throw new \Twig\Error\LoaderError(sprintf('Template "%s" does not exist.', $name)); - } - - return $source; - } - - // \Twig\Loader\SourceContextLoaderInterface as of Twig 1.27 - public function getSourceContext($name) - { - if (false === $source = $this->getValue('source', $name)) { - throw new \Twig\Error\LoaderError(sprintf('Template "%s" does not exist.', $name)); - } - - return new \Twig\Source($source, $name); - } - - // \Twig\Loader\ExistsLoaderInterface as of Twig 1.11 - public function exists($name) - { - return $name === $this->getValue('name', $name); - } - - public function getCacheKey($name) - { - return $name; - } - - public function isFresh($name, $time) - { - if (false === $lastModified = $this->getValue('last_modified', $name)) { - return false; - } - - return $lastModified <= $time; - } - - protected function getValue($column, $name) - { - $sth = $this->dbh->prepare('SELECT '.$column.' FROM templates WHERE name = :name'); - $sth->execute([':name' => (string) $name]); - - return $sth->fetchColumn(); - } - } - -Finally, here is an example on how you can use it:: - - $loader = new DatabaseTwigLoader($dbh); - $twig = new \Twig\Environment($loader); - - echo $twig->render('index.twig', ['name' => 'Fabien']); - -Using different Template Sources --------------------------------- - -This recipe is the continuation of the previous one. Even if you store the -contributed templates in a database, you might want to keep the original/base -templates on the filesystem. When templates can be loaded from different -sources, you need to use the ``\Twig\Loader\ChainLoader`` loader. - -As you can see in the previous recipe, we reference the template in the exact -same way as we would have done it with a regular filesystem loader. This is -the key to be able to mix and match templates coming from the database, the -filesystem, or any other loader for that matter: the template name should be a -logical name, and not the path from the filesystem:: - - $loader1 = new DatabaseTwigLoader($dbh); - $loader2 = new \Twig\Loader\ArrayLoader([ - 'base.twig' => '{% block content %}{% endblock %}', - ]); - $loader = new \Twig\Loader\ChainLoader([$loader1, $loader2]); - - $twig = new \Twig\Environment($loader); - - echo $twig->render('index.twig', ['name' => 'Fabien']); - -Now that the ``base.twig`` templates is defined in an array loader, you can -remove it from the database, and everything else will still work as before. - -Loading a Template from a String --------------------------------- - -From a template, you can load a template stored in a string via the -``template_from_string`` function (available as of Twig 1.11 via the -``\Twig\Extension\StringLoaderExtension`` extension): - -.. code-block:: twig - - {{ include(template_from_string("Hello {{ name }}")) }} - -From PHP, it's also possible to load a template stored in a string via -``\Twig\Environment::createTemplate()`` (available as of Twig 1.18):: - - $template = $twig->createTemplate('hello {{ name }}'); - echo $template->render(['name' => 'Fabien']); - -.. note:: - - Never use the ``Twig_Loader_String`` loader, which has severe limitations. - -Using Twig and AngularJS in the same Templates ----------------------------------------------- - -Mixing different template syntaxes in the same file is not a recommended -practice as both AngularJS and Twig use the same delimiters in their syntax: -``{{`` and ``}}``. - -Still, if you want to use AngularJS and Twig in the same template, there are -two ways to make it work depending on the amount of AngularJS you need to -include in your templates: - -* Escaping the AngularJS delimiters by wrapping AngularJS sections with the - ``{% verbatim %}`` tag or by escaping each delimiter via ``{{ '{{' }}`` and - ``{{ '}}' }}``; - -* Changing the delimiters of one of the template engines (depending on which - engine you introduced last): - - * For AngularJS, change the interpolation tags using the - ``interpolateProvider`` service, for instance at the module initialization - time: - - .. code-block:: javascript - - angular.module('myApp', []).config(function($interpolateProvider) { - $interpolateProvider.startSymbol('{[').endSymbol(']}'); - }); - - * For Twig, change the delimiters via the ``tag_variable`` Lexer option:: - - $env->setLexer(new \Twig\Lexer($env, [ - 'tag_variable' => ['{[', ']}'], - ])); - -.. _callback: https://www.php.net/manual/en/function.is-callable.php diff --git a/vendor/twig/twig/doc/tags/apply.rst b/vendor/twig/twig/doc/tags/apply.rst deleted file mode 100644 index 20782ec..0000000 --- a/vendor/twig/twig/doc/tags/apply.rst +++ /dev/null @@ -1,24 +0,0 @@ -``apply`` -========= - -.. versionadded:: 1.40 - - The ``apply`` tag was added in Twig 1.40. - -The ``apply`` tag allows you to apply Twig filters on a block of template data: - -.. code-block:: twig - - {% apply upper %} - This text becomes uppercase - {% endapply %} - -You can also chain filters and pass arguments to them: - -.. code-block:: html+twig - - {% apply lower|escape('html') %} - SOME TEXT - {% endapply %} - - {# outputs "<strong>some text</strong>" #} diff --git a/vendor/twig/twig/doc/tags/autoescape.rst b/vendor/twig/twig/doc/tags/autoescape.rst deleted file mode 100644 index b2e924d..0000000 --- a/vendor/twig/twig/doc/tags/autoescape.rst +++ /dev/null @@ -1,81 +0,0 @@ -``autoescape`` -============== - -Whether automatic escaping is enabled or not, you can mark a section of a -template to be escaped or not by using the ``autoescape`` tag: - -.. code-block:: twig - - {% autoescape %} - Everything will be automatically escaped in this block - using the HTML strategy - {% endautoescape %} - - {% autoescape 'html' %} - Everything will be automatically escaped in this block - using the HTML strategy - {% endautoescape %} - - {% autoescape 'js' %} - Everything will be automatically escaped in this block - using the js escaping strategy - {% endautoescape %} - - {% autoescape false %} - Everything will be outputted as is in this block - {% endautoescape %} - -.. note:: - - Before Twig 1.8, the syntax was different: - - .. code-block:: twig - - {% autoescape true %} - Everything will be automatically escaped in this block - using the HTML strategy - {% endautoescape %} - - {% autoescape false %} - Everything will be outputted as is in this block - {% endautoescape %} - - {% autoescape true js %} - Everything will be automatically escaped in this block - using the js escaping strategy - {% endautoescape %} - -When automatic escaping is enabled everything is escaped by default except for -values explicitly marked as safe. Those can be marked in the template by using -the :doc:`raw<../filters/raw>` filter: - -.. code-block:: twig - - {% autoescape %} - {{ safe_value|raw }} - {% endautoescape %} - -Functions returning template data (like :doc:`macros` and -:doc:`parent<../functions/parent>`) always return safe markup. - -.. note:: - - Twig is smart enough to not escape an already escaped value by the - :doc:`escape<../filters/escape>` filter. - -.. note:: - - Twig does not escape static expressions: - - .. code-block:: html+twig - - {% set hello = "Hello" %} - {{ hello }} - {{ "world" }} - - Will be rendered "Hello **world**". - -.. note:: - - The chapter :doc:`Twig for Developers<../api>` gives more information - about when and how automatic escaping is applied. diff --git a/vendor/twig/twig/doc/tags/block.rst b/vendor/twig/twig/doc/tags/block.rst deleted file mode 100644 index 272bc7f..0000000 --- a/vendor/twig/twig/doc/tags/block.rst +++ /dev/null @@ -1,12 +0,0 @@ -``block`` -========= - -Blocks are used for inheritance and act as placeholders and replacements at -the same time. They are documented in detail in the documentation for the -:doc:`extends<../tags/extends>` tag. - -Block names must consist of alphanumeric characters, and underscores. The first char can't be a digit and dashes are not permitted. - -.. seealso:: - - :doc:`block<../functions/block>`, :doc:`parent<../functions/parent>`, :doc:`use<../tags/use>`, :doc:`extends<../tags/extends>` diff --git a/vendor/twig/twig/doc/tags/deprecated.rst b/vendor/twig/twig/doc/tags/deprecated.rst deleted file mode 100644 index 0d0f82a..0000000 --- a/vendor/twig/twig/doc/tags/deprecated.rst +++ /dev/null @@ -1,31 +0,0 @@ -``deprecated`` -============== - -.. versionadded:: 1.36 - - The ``deprecated`` tag was added in Twig 1.36. - -Twig generates a deprecation notice (via a call to the ``trigger_error()`` -PHP function) where the ``deprecated`` tag is used in a template: - -.. code-block:: twig - - {# base.twig #} - {% deprecated 'The "base.twig" template is deprecated, use "layout.twig" instead.' %} - {% extends 'layout.twig' %} - -Also you can deprecate a block in the following way: - -.. code-block:: twig - - {% block hey %} - {% deprecated 'The "hey" block is deprecated, use "greet" instead.' %} - {{ block('greet') }} - {% endblock %} - - {% block greet %} - Hey you! - {% endblock %} - -Note that by default, the deprecation notices are silenced and never displayed nor logged. -See :ref:`deprecation-notices` to learn how to handle them. diff --git a/vendor/twig/twig/doc/tags/do.rst b/vendor/twig/twig/doc/tags/do.rst deleted file mode 100644 index af3db64..0000000 --- a/vendor/twig/twig/doc/tags/do.rst +++ /dev/null @@ -1,13 +0,0 @@ -``do`` -====== - -.. versionadded:: 1.5 - - The ``do`` tag was added in Twig 1.5. - -The ``do`` tag works exactly like the regular variable expression (``{{ ... -}}``) just that it doesn't print anything: - -.. code-block:: twig - - {% do 1 + 2 %} diff --git a/vendor/twig/twig/doc/tags/embed.rst b/vendor/twig/twig/doc/tags/embed.rst deleted file mode 100644 index fe005ac..0000000 --- a/vendor/twig/twig/doc/tags/embed.rst +++ /dev/null @@ -1,181 +0,0 @@ -``embed`` -========= - -.. versionadded:: 1.8 - - The ``embed`` tag was added in Twig 1.8. - -The ``embed`` tag combines the behavior of :doc:`include` and -:doc:`extends`. -It allows you to include another template's contents, just like ``include`` -does. But it also allows you to override any block defined inside the -included template, like when extending a template. - -Think of an embedded template as a "micro layout skeleton". - -.. code-block:: twig - - {% embed "teasers_skeleton.twig" %} - {# These blocks are defined in "teasers_skeleton.twig" #} - {# and we override them right here: #} - {% block left_teaser %} - Some content for the left teaser box - {% endblock %} - {% block right_teaser %} - Some content for the right teaser box - {% endblock %} - {% endembed %} - -The ``embed`` tag takes the idea of template inheritance to the level of -content fragments. While template inheritance allows for "document skeletons", -which are filled with life by child templates, the ``embed`` tag allows you to -create "skeletons" for smaller units of content and re-use and fill them -anywhere you like. - -Since the use case may not be obvious, let's look at a simplified example. -Imagine a base template shared by multiple HTML pages, defining a single block -named "content": - -.. code-block:: text - - ┌─── page layout ─────────────────────┐ - │ │ - │ ┌── block "content" ──┐ │ - │ │ │ │ - │ │ │ │ - │ │ (child template to │ │ - │ │ put content here) │ │ - │ │ │ │ - │ │ │ │ - │ └─────────────────────┘ │ - │ │ - └─────────────────────────────────────┘ - -Some pages ("foo" and "bar") share the same content structure - -two vertically stacked boxes: - -.. code-block:: text - - ┌─── page layout ─────────────────────┐ - │ │ - │ ┌── block "content" ──┐ │ - │ │ ┌─ block "top" ───┐ │ │ - │ │ │ │ │ │ - │ │ └─────────────────┘ │ │ - │ │ ┌─ block "bottom" ┐ │ │ - │ │ │ │ │ │ - │ │ └─────────────────┘ │ │ - │ └─────────────────────┘ │ - │ │ - └─────────────────────────────────────┘ - -While other pages ("boom" and "baz") share a different content structure - -two boxes side by side: - -.. code-block:: text - - ┌─── page layout ─────────────────────┐ - │ │ - │ ┌── block "content" ──┐ │ - │ │ │ │ - │ │ ┌ block ┐ ┌ block ┐ │ │ - │ │ │"left" │ │"right"│ │ │ - │ │ │ │ │ │ │ │ - │ │ │ │ │ │ │ │ - │ │ └───────┘ └───────┘ │ │ - │ └─────────────────────┘ │ - │ │ - └─────────────────────────────────────┘ - -Without the ``embed`` tag, you have two ways to design your templates: - -* Create two "intermediate" base templates that extend the master layout - template: one with vertically stacked boxes to be used by the "foo" and - "bar" pages and another one with side-by-side boxes for the "boom" and - "baz" pages. - -* Embed the markup for the top/bottom and left/right boxes into each page - template directly. - -These two solutions do not scale well because they each have a major drawback: - -* The first solution may indeed work for this simplified example. But imagine - we add a sidebar, which may again contain different, recurring structures - of content. Now we would need to create intermediate base templates for - all occurring combinations of content structure and sidebar structure... - and so on. - -* The second solution involves duplication of common code with all its negative - consequences: any change involves finding and editing all affected copies - of the structure, correctness has to be verified for each copy, copies may - go out of sync by careless modifications etc. - -In such a situation, the ``embed`` tag comes in handy. The common layout -code can live in a single base template, and the two different content structures, -let's call them "micro layouts" go into separate templates which are embedded -as necessary: - -Page template ``foo.twig``: - -.. code-block:: twig - - {% extends "layout_skeleton.twig" %} - - {% block content %} - {% embed "vertical_boxes_skeleton.twig" %} - {% block top %} - Some content for the top box - {% endblock %} - - {% block bottom %} - Some content for the bottom box - {% endblock %} - {% endembed %} - {% endblock %} - -And here is the code for ``vertical_boxes_skeleton.twig``: - -.. code-block:: html+twig - -
- {% block top %} - Top box default content - {% endblock %} -
- -
- {% block bottom %} - Bottom box default content - {% endblock %} -
- -The goal of the ``vertical_boxes_skeleton.twig`` template being to factor -out the HTML markup for the boxes. - -The ``embed`` tag takes the exact same arguments as the ``include`` tag: - -.. code-block:: twig - - {% embed "base" with {'foo': 'bar'} %} - ... - {% endembed %} - - {% embed "base" with {'foo': 'bar'} only %} - ... - {% endembed %} - - {% embed "base" ignore missing %} - ... - {% endembed %} - -.. warning:: - - As embedded templates do not have "names", auto-escaping strategies based - on the template name won't work as expected if you change the context (for - instance, if you embed a CSS/JavaScript template into an HTML one). In that - case, explicitly set the default auto-escaping strategy with the - ``autoescape`` tag. - -.. seealso:: - - :doc:`include<../tags/include>` diff --git a/vendor/twig/twig/doc/tags/extends.rst b/vendor/twig/twig/doc/tags/extends.rst deleted file mode 100644 index 461782a..0000000 --- a/vendor/twig/twig/doc/tags/extends.rst +++ /dev/null @@ -1,271 +0,0 @@ -``extends`` -=========== - -The ``extends`` tag can be used to extend a template from another one. - -.. note:: - - Like PHP, Twig does not support multiple inheritance. So you can only have - one extends tag called per rendering. However, Twig supports horizontal - :doc:`reuse`. - -Let's define a base template, ``base.html``, which defines a simple HTML -skeleton document: - -.. code-block:: html+twig - - - - - {% block head %} - - {% block title %}{% endblock %} - My Webpage - {% endblock %} - - -
{% block content %}{% endblock %}
- - - - -In this example, the :doc:`block` tags define four blocks that child -templates can fill in. - -All the ``block`` tag does is to tell the template engine that a child -template may override those portions of the template. - -Child Template --------------- - -A child template might look like this: - -.. code-block:: html+twig - - {% extends "base.html" %} - - {% block title %}Index{% endblock %} - {% block head %} - {{ parent() }} - - {% endblock %} - {% block content %} -

Index

-

- Welcome on my awesome homepage. -

- {% endblock %} - -The ``extends`` tag is the key here. It tells the template engine that this -template "extends" another template. When the template system evaluates this -template, first it locates the parent. The extends tag should be the first tag -in the template. - -Note that since the child template doesn't define the ``footer`` block, the -value from the parent template is used instead. - -You can't define multiple ``block`` tags with the same name in the same -template. This limitation exists because a block tag works in "both" -directions. That is, a block tag doesn't just provide a hole to fill - it also -defines the content that fills the hole in the *parent*. If there were two -similarly-named ``block`` tags in a template, that template's parent wouldn't -know which one of the blocks' content to use. - -If you want to print a block multiple times you can however use the -``block`` function: - -.. code-block:: html+twig - - {% block title %}{% endblock %} -

{{ block('title') }}

- {% block body %}{% endblock %} - -Parent Blocks -------------- - -It's possible to render the contents of the parent block by using the -:doc:`parent<../functions/parent>` function. This gives back the results of -the parent block: - -.. code-block:: html+twig - - {% block sidebar %} -

Table Of Contents

- ... - {{ parent() }} - {% endblock %} - -Named Block End-Tags --------------------- - -Twig allows you to put the name of the block after the end tag for better -readability (the name after the ``endblock`` word must match the block name): - -.. code-block:: twig - - {% block sidebar %} - {% block inner_sidebar %} - ... - {% endblock inner_sidebar %} - {% endblock sidebar %} - -Block Nesting and Scope ------------------------ - -Blocks can be nested for more complex layouts. Per default, blocks have access -to variables from outer scopes: - -.. code-block:: html+twig - - {% for item in seq %} -
  • {% block loop_item %}{{ item }}{% endblock %}
  • - {% endfor %} - -Block Shortcuts ---------------- - -For blocks with little content, it's possible to use a shortcut syntax. The -following constructs do the same thing: - -.. code-block:: twig - - {% block title %} - {{ page_title|title }} - {% endblock %} - -.. code-block:: twig - - {% block title page_title|title %} - -Dynamic Inheritance -------------------- - -Twig supports dynamic inheritance by using a variable as the base template: - -.. code-block:: twig - - {% extends some_var %} - -If the variable evaluates to a ``\Twig\Template`` or a ``\Twig\TemplateWrapper`` -instance, Twig will use it as the parent template:: - - // {% extends layout %} - - // deprecated as of Twig 1.28 - $layout = $twig->loadTemplate('some_layout_template.twig'); - - // as of Twig 1.28 - $layout = $twig->load('some_layout_template.twig'); - - $twig->display('template.twig', ['layout' => $layout]); - -.. versionadded:: 1.2 - - The possibility to pass an array of templates has been added in Twig 1.2. - -You can also provide a list of templates that are checked for existence. The -first template that exists will be used as a parent: - -.. code-block:: twig - - {% extends ['layout.html', 'base_layout.html'] %} - -Conditional Inheritance ------------------------ - -As the template name for the parent can be any valid Twig expression, it's -possible to make the inheritance mechanism conditional: - -.. code-block:: twig - - {% extends standalone ? "minimum.html" : "base.html" %} - -In this example, the template will extend the "minimum.html" layout template -if the ``standalone`` variable evaluates to ``true``, and "base.html" -otherwise. - -How do blocks work? -------------------- - -A block provides a way to change how a certain part of a template is rendered -but it does not interfere in any way with the logic around it. - -Let's take the following example to illustrate how a block works and more -importantly, how it does not work: - -.. code-block:: html+twig - - {# base.twig #} - {% for post in posts %} - {% block post %} -

    {{ post.title }}

    -

    {{ post.body }}

    - {% endblock %} - {% endfor %} - -If you render this template, the result would be exactly the same with or -without the ``block`` tag. The ``block`` inside the ``for`` loop is just a way -to make it overridable by a child template: - -.. code-block:: html+twig - - {# child.twig #} - {% extends "base.twig" %} - - {% block post %} -
    -
    {{ post.title }}
    -
    {{ post.text }}
    -
    - {% endblock %} - -Now, when rendering the child template, the loop is going to use the block -defined in the child template instead of the one defined in the base one; the -executed template is then equivalent to the following one: - -.. code-block:: html+twig - - {% for post in posts %} -
    -
    {{ post.title }}
    -
    {{ post.text }}
    -
    - {% endfor %} - -Let's take another example: a block included within an ``if`` statement: - -.. code-block:: html+twig - - {% if posts is empty %} - {% block head %} - {{ parent() }} - - - {% endblock head %} - {% endif %} - -Contrary to what you might think, this template does not define a block -conditionally; it just makes overridable by a child template the output of -what will be rendered when the condition is ``true``. - -If you want the output to be displayed conditionally, use the following -instead: - -.. code-block:: html+twig - - {% block head %} - {{ parent() }} - - {% if posts is empty %} - - {% endif %} - {% endblock head %} - -.. seealso:: - - :doc:`block<../functions/block>`, :doc:`block<../tags/block>`, :doc:`parent<../functions/parent>`, :doc:`use<../tags/use>` diff --git a/vendor/twig/twig/doc/tags/filter.rst b/vendor/twig/twig/doc/tags/filter.rst deleted file mode 100644 index 683a1d2..0000000 --- a/vendor/twig/twig/doc/tags/filter.rst +++ /dev/null @@ -1,26 +0,0 @@ -``filter`` -========== - -.. note:: - - As of Twig 1.40, you should use the ``apply`` tag instead which does the - same thing except that the wrapped template data is not scoped. - -Filter sections allow you to apply regular Twig filters on a block of template -data. Just wrap the code in the special ``filter`` section: - -.. code-block:: twig - - {% filter upper %} - This text becomes uppercase - {% endfilter %} - -You can also chain filters and pass arguments to them: - -.. code-block:: html+twig - - {% filter lower|escape('html') %} - SOME TEXT - {% endfilter %} - - {# outputs "<strong>some text</strong>" #} diff --git a/vendor/twig/twig/doc/tags/flush.rst b/vendor/twig/twig/doc/tags/flush.rst deleted file mode 100644 index 140728f..0000000 --- a/vendor/twig/twig/doc/tags/flush.rst +++ /dev/null @@ -1,18 +0,0 @@ -``flush`` -========= - -.. versionadded:: 1.5 - - The flush tag was added in Twig 1.5. - -The ``flush`` tag tells Twig to flush the output buffer: - -.. code-block:: twig - - {% flush %} - -.. note:: - - Internally, Twig uses the PHP `flush`_ function. - -.. _`flush`: https://www.php.net/flush diff --git a/vendor/twig/twig/doc/tags/for.rst b/vendor/twig/twig/doc/tags/for.rst deleted file mode 100644 index 6eebfa3..0000000 --- a/vendor/twig/twig/doc/tags/for.rst +++ /dev/null @@ -1,180 +0,0 @@ -``for`` -======= - -Loop over each item in a sequence. For example, to display a list of users -provided in a variable called ``users``: - -.. code-block:: html+twig - -

    Members

    -
      - {% for user in users %} -
    • {{ user.username|e }}
    • - {% endfor %} -
    - -.. note:: - - A sequence can be either an array or an object implementing the - ``Traversable`` interface. - -If you do need to iterate over a sequence of numbers, you can use the ``..`` -operator: - -.. code-block:: twig - - {% for i in 0..10 %} - * {{ i }} - {% endfor %} - -The above snippet of code would print all numbers from 0 to 10. - -It can be also useful with letters: - -.. code-block:: twig - - {% for letter in 'a'..'z' %} - * {{ letter }} - {% endfor %} - -The ``..`` operator can take any expression at both sides: - -.. code-block:: twig - - {% for letter in 'a'|upper..'z'|upper %} - * {{ letter }} - {% endfor %} - -.. tip: - - If you need a step different from 1, you can use the ``range`` function - instead. - -The `loop` variable -------------------- - -Inside of a ``for`` loop block you can access some special variables: - -===================== ============================================================= -Variable Description -===================== ============================================================= -``loop.index`` The current iteration of the loop. (1 indexed) -``loop.index0`` The current iteration of the loop. (0 indexed) -``loop.revindex`` The number of iterations from the end of the loop (1 indexed) -``loop.revindex0`` The number of iterations from the end of the loop (0 indexed) -``loop.first`` True if first iteration -``loop.last`` True if last iteration -``loop.length`` The number of items in the sequence -``loop.parent`` The parent context -===================== ============================================================= - -.. code-block:: twig - - {% for user in users %} - {{ loop.index }} - {{ user.username }} - {% endfor %} - -.. note:: - - The ``loop.length``, ``loop.revindex``, ``loop.revindex0``, and - ``loop.last`` variables are only available for PHP arrays, or objects that - implement the ``Countable`` interface. They are also not available when - looping with a condition. - -.. versionadded:: 1.2 - - The ``if`` modifier support has been added in Twig 1.2. - -Adding a condition ------------------- - -.. tip:: - - As of Twig 1.41, use the :doc:`filter <../filters/filter>` filter instead, - or an ``if`` condition inside the ``for`` body (if your condition depends on - a variable updated inside the loop and you are not using the ``loop`` - variable). - -Unlike in PHP, it's not possible to ``break`` or ``continue`` in a loop. You -can however filter the sequence during iteration which allows you to skip -items. The following example skips all the users which are not active: - -.. code-block:: html+twig - -
      - {% for user in users if user.active %} -
    • {{ user.username|e }}
    • - {% endfor %} -
    - -The advantage is that the special loop variable will count correctly thus not -counting the users not iterated over. Keep in mind that properties like -``loop.last`` will not be defined when using loop conditions. - -.. note:: - - Using the ``loop`` variable within the condition is not recommended as it - will probably not be doing what you expect it to. For instance, adding a - condition like ``loop.index > 4`` won't work as the index is only - incremented when the condition is true (so the condition will never - match). - -The `else` Clause ------------------ - -If no iteration took place because the sequence was empty, you can render a -replacement block by using ``else``: - -.. code-block:: html+twig - -
      - {% for user in users %} -
    • {{ user.username|e }}
    • - {% else %} -
    • no user found
    • - {% endfor %} -
    - -Iterating over Keys -------------------- - -By default, a loop iterates over the values of the sequence. You can iterate -on keys by using the ``keys`` filter: - -.. code-block:: html+twig - -

    Members

    -
      - {% for key in users|keys %} -
    • {{ key }}
    • - {% endfor %} -
    - -Iterating over Keys and Values ------------------------------- - -You can also access both keys and values: - -.. code-block:: html+twig - -

    Members

    -
      - {% for key, user in users %} -
    • {{ key }}: {{ user.username|e }}
    • - {% endfor %} -
    - -Iterating over a Subset ------------------------ - -You might want to iterate over a subset of values. This can be achieved using -the :doc:`slice <../filters/slice>` filter: - -.. code-block:: html+twig - -

    Top Ten Members

    -
      - {% for user in users|slice(0, 10) %} -
    • {{ user.username|e }}
    • - {% endfor %} -
    diff --git a/vendor/twig/twig/doc/tags/from.rst b/vendor/twig/twig/doc/tags/from.rst deleted file mode 100644 index 96c439a..0000000 --- a/vendor/twig/twig/doc/tags/from.rst +++ /dev/null @@ -1,6 +0,0 @@ -``from`` -======== - -The ``from`` tag imports :doc:`macro<../tags/macro>` names into the current -namespace. The tag is documented in detail in the documentation for the -:doc:`macro<../tags/macro>` tag. diff --git a/vendor/twig/twig/doc/tags/if.rst b/vendor/twig/twig/doc/tags/if.rst deleted file mode 100644 index 2d74752..0000000 --- a/vendor/twig/twig/doc/tags/if.rst +++ /dev/null @@ -1,79 +0,0 @@ -``if`` -====== - -The ``if`` statement in Twig is comparable with the if statements of PHP. - -In the simplest form you can use it to test if an expression evaluates to -``true``: - -.. code-block:: html+twig - - {% if online == false %} -

    Our website is in maintenance mode. Please, come back later.

    - {% endif %} - -You can also test if an array is not empty: - -.. code-block:: html+twig - - {% if users %} -
      - {% for user in users %} -
    • {{ user.username|e }}
    • - {% endfor %} -
    - {% endif %} - -.. note:: - - If you want to test if the variable is defined, use ``if users is - defined`` instead. - -You can also use ``not`` to check for values that evaluate to ``false``: - -.. code-block:: html+twig - - {% if not user.subscribed %} -

    You are not subscribed to our mailing list.

    - {% endif %} - -For multiple conditions, ``and`` and ``or`` can be used: - -.. code-block:: html+twig - - {% if temperature > 18 and temperature < 27 %} -

    It's a nice day for a walk in the park.

    - {% endif %} - -For multiple branches ``elseif`` and ``else`` can be used like in PHP. You can -use more complex ``expressions`` there too: - -.. code-block:: twig - - {% if product.stock > 10 %} - Available - {% elseif product.stock > 0 %} - Only {{ product.stock }} left! - {% else %} - Sold-out! - {% endif %} - -.. note:: - - The rules to determine if an expression is ``true`` or ``false`` are the - same as in PHP; here are the edge cases rules: - - ====================== ==================== - Value Boolean evaluation - ====================== ==================== - empty string false - numeric zero false - NAN (Not A Number) true - INF (Infinity) true - whitespace-only string true - string "0" or '0' false - empty array false - null false - non-empty array true - object true - ====================== ==================== diff --git a/vendor/twig/twig/doc/tags/import.rst b/vendor/twig/twig/doc/tags/import.rst deleted file mode 100644 index f217479..0000000 --- a/vendor/twig/twig/doc/tags/import.rst +++ /dev/null @@ -1,6 +0,0 @@ -``import`` -========== - -The ``import`` tag imports :doc:`macro<../tags/macro>` names in a local -variable. The tag is documented in detail in the documentation for the -:doc:`macro<../tags/macro>` tag. diff --git a/vendor/twig/twig/doc/tags/include.rst b/vendor/twig/twig/doc/tags/include.rst deleted file mode 100644 index 36f1f50..0000000 --- a/vendor/twig/twig/doc/tags/include.rst +++ /dev/null @@ -1,116 +0,0 @@ -``include`` -=========== - -The ``include`` statement includes a template and outputs the rendered content -of that file: - -.. code-block:: twig - - {% include 'header.html' %} - Body - {% include 'footer.html' %} - -.. note:: - - As of Twig 1.12, it is recommended to use the - :doc:`include<../functions/include>` function instead as it provides the - same features with a bit more flexibility: - - * The ``include`` function is semantically more "correct" (including a - template outputs its rendered contents in the current scope; a tag should - not display anything); - - * It's easier to store the rendered template in a variable when using - the ``include`` function: - - .. code-block:: twig - - {% set content %}{% include 'template.html' %}{% endset %} - - {# vs #} - - {% set content = include('template.html') %} - - * The ``include`` function does not impose any specific order for - arguments thanks to :ref:`named arguments `. - -Included templates have access to the variables of the active context. - -If you are using the filesystem loader, the templates are looked for in the -paths defined by it. - -You can add additional variables by passing them after the ``with`` keyword: - -.. code-block:: twig - - {# template.html will have access to the variables from the current context and the additional ones provided #} - {% include 'template.html' with {'foo': 'bar'} %} - - {% set vars = {'foo': 'bar'} %} - {% include 'template.html' with vars %} - -You can disable access to the context by appending the ``only`` keyword: - -.. code-block:: twig - - {# only the foo variable will be accessible #} - {% include 'template.html' with {'foo': 'bar'} only %} - -.. code-block:: twig - - {# no variables will be accessible #} - {% include 'template.html' only %} - -.. tip:: - - When including a template created by an end user, you should consider - sandboxing it. More information in the :doc:`Twig for Developers<../api>` - chapter and in the :doc:`sandbox<../tags/sandbox>` tag documentation. - -The template name can be any valid Twig expression: - -.. code-block:: twig - - {% include some_var %} - {% include ajax ? 'ajax.html' : 'not_ajax.html' %} - -And if the expression evaluates to a ``\Twig\Template`` or a -``\Twig\TemplateWrapper`` instance, Twig will use it directly:: - - // {% include template %} - - // deprecated as of Twig 1.28 - $template = $twig->loadTemplate('some_template.twig'); - - // as of Twig 1.28 - $template = $twig->load('some_template.twig'); - - $twig->display('template.twig', ['template' => $template]); - -.. versionadded:: 1.2 - - The ``ignore missing`` feature has been added in Twig 1.2. - -You can mark an include with ``ignore missing`` in which case Twig will ignore -the statement if the template to be included does not exist. It has to be -placed just after the template name. Here some valid examples: - -.. code-block:: twig - - {% include 'sidebar.html' ignore missing %} - {% include 'sidebar.html' ignore missing with {'foo': 'bar'} %} - {% include 'sidebar.html' ignore missing only %} - -.. versionadded:: 1.2 - - The possibility to pass an array of templates has been added in Twig 1.2. - -You can also provide a list of templates that are checked for existence before -inclusion. The first template that exists will be included: - -.. code-block:: twig - - {% include ['page_detailed.html', 'page.html'] %} - -If ``ignore missing`` is given, it will fall back to rendering nothing if none -of the templates exist, otherwise it will throw an exception. diff --git a/vendor/twig/twig/doc/tags/index.rst b/vendor/twig/twig/doc/tags/index.rst deleted file mode 100644 index 530f95f..0000000 --- a/vendor/twig/twig/doc/tags/index.rst +++ /dev/null @@ -1,27 +0,0 @@ -Tags -==== - -.. toctree:: - :maxdepth: 1 - - apply - autoescape - block - deprecated - do - embed - extends - filter - flush - for - from - if - import - include - macro - sandbox - set - spaceless - use - verbatim - with diff --git a/vendor/twig/twig/doc/tags/macro.rst b/vendor/twig/twig/doc/tags/macro.rst deleted file mode 100644 index 7af1bd6..0000000 --- a/vendor/twig/twig/doc/tags/macro.rst +++ /dev/null @@ -1,139 +0,0 @@ -``macro`` -========= - -.. versionadded:: 1.12 - - The possibility to define default values for arguments in the macro - signature was added in Twig 1.12. - -Macros are comparable with functions in regular programming languages. They -are useful to reuse template fragments to not repeat yourself. - -Macros are defined in regular templates. - -Imagine having a generic helper template that define how to render HTML forms -via macros (called ``forms.html``): - -.. code-block:: html+twig - - {% macro input(name, value, type = "text", size = 20) %} - - {% endmacro %} - - {% macro textarea(name, value, rows = 10, cols = 40) %} - - {% endmacro %} - -Each macro argument can have a default value (here ``text`` is the default value -for ``type`` if not provided in the call). - -.. note:: - - Before Twig 1.12, defining default argument values was done via the - ``default`` filter in the macro body: - - .. code-block:: html+twig - - {% macro input(name, value, type, size) %} - - {% endmacro %} - -Macros differ from native PHP functions in a few ways: - -* Arguments of a macro are always optional. - -* If extra positional arguments are passed to a macro, they end up in the - special ``varargs`` variable as a list of values. - -But as with PHP functions, macros don't have access to the current template -variables. - -.. tip:: - - You can pass the whole context as an argument by using the special - ``_context`` variable. - -Import ------- - -There are two ways to import macros. You can import the complete template -containing the macros into a local variable (via the ``import`` tag) or only -import specific macros from the template (via the ``from`` tag). - -To import all macros from a template into a local variable, use the ``import`` -tag: - -.. code-block:: twig - - {% import "forms.html" as forms %} - -The above ``import`` call imports the ``forms.html`` file (which can contain -only macros, or a template and some macros), and import the macros as items of -the ``forms`` local variable. - -The macros can then be called at will in the *current* template: - -.. code-block:: html+twig - -

    {{ forms.input('username') }}

    -

    {{ forms.input('password', null, 'password') }}

    - -When you want to use a macro in another macro from the same file, you need to -import it locally: - -.. code-block:: html+twig - - {% macro input(name, value, type, size) %} - - {% endmacro %} - - {% macro wrapped_input(name, value, type, size) %} - {% import _self as forms %} - -
    - {{ forms.input(name, value, type, size) }} -
    - {% endmacro %} - -Alternatively you can import names from the template into the current namespace -via the ``from`` tag: - -.. code-block:: html+twig - - {% from 'forms.html' import input as input_field, textarea %} - -

    {{ input_field('password', '', 'password') }}

    -

    {{ textarea('comment') }}

    - -.. note:: - - Importing macros using ``import`` or ``from`` is **local** to the current - file. The imported macros are not available in included templates or child - templates; you need to explicitly re-import macros in each file. - -.. tip:: - - To import macros from the current file, use the special ``_self`` variable: - - .. code-block:: html+twig - - {% import _self as forms %} - -

    {{ forms.input('username') }}

    - - When you define a macro in the template where you are going to use it, you - might be tempted to call the macro directly via ``_self.input()`` instead of - importing it; even if it seems to work, this is just a side-effect of the - current implementation and it won't work anymore in Twig 2.x. - -Named Macro End-Tags --------------------- - -Twig allows you to put the name of the macro after the end tag for better -readability (the name after the ``endmacro`` word must match the macro name): - -.. code-block:: twig - - {% macro input() %} - ... - {% endmacro input %} diff --git a/vendor/twig/twig/doc/tags/sandbox.rst b/vendor/twig/twig/doc/tags/sandbox.rst deleted file mode 100644 index b331fdb..0000000 --- a/vendor/twig/twig/doc/tags/sandbox.rst +++ /dev/null @@ -1,30 +0,0 @@ -``sandbox`` -=========== - -The ``sandbox`` tag can be used to enable the sandboxing mode for an included -template, when sandboxing is not enabled globally for the Twig environment: - -.. code-block:: twig - - {% sandbox %} - {% include 'user.html' %} - {% endsandbox %} - -.. warning:: - - The ``sandbox`` tag is only available when the sandbox extension is - enabled (see the :doc:`Twig for Developers<../api>` chapter). - -.. note:: - - The ``sandbox`` tag can only be used to sandbox an include tag and it - cannot be used to sandbox a section of a template. The following example - won't work: - - .. code-block:: twig - - {% sandbox %} - {% for i in 1..2 %} - {{ i }} - {% endfor %} - {% endsandbox %} diff --git a/vendor/twig/twig/doc/tags/set.rst b/vendor/twig/twig/doc/tags/set.rst deleted file mode 100644 index 7a3a784..0000000 --- a/vendor/twig/twig/doc/tags/set.rst +++ /dev/null @@ -1,78 +0,0 @@ -``set`` -======= - -Inside code blocks you can also assign values to variables. Assignments use -the ``set`` tag and can have multiple targets. - -Here is how you can assign the ``bar`` value to the ``foo`` variable: - -.. code-block:: twig - - {% set foo = 'bar' %} - -After the ``set`` call, the ``foo`` variable is available in the template like -any other ones: - -.. code-block:: twig - - {# displays bar #} - {{ foo }} - -The assigned value can be any valid :ref:`Twig expression -`: - -.. code-block:: twig - - {% set foo = [1, 2] %} - {% set foo = {'foo': 'bar'} %} - {% set foo = 'foo' ~ 'bar' %} - -Several variables can be assigned in one block: - -.. code-block:: twig - - {% set foo, bar = 'foo', 'bar' %} - - {# is equivalent to #} - - {% set foo = 'foo' %} - {% set bar = 'bar' %} - -The ``set`` tag can also be used to 'capture' chunks of text: - -.. code-block:: html+twig - - {% set foo %} - - {% endset %} - -.. caution:: - - If you enable automatic output escaping, Twig will only consider the - content to be safe when capturing chunks of text. - -.. note:: - - Note that loops are scoped in Twig; therefore a variable declared inside a - ``for`` loop is not accessible outside the loop itself: - - .. code-block:: twig - - {% for item in list %} - {% set foo = item %} - {% endfor %} - - {# foo is NOT available #} - - If you want to access the variable, just declare it before the loop: - - .. code-block:: twig - - {% set foo = "" %} - {% for item in list %} - {% set foo = item %} - {% endfor %} - - {# foo is available #} diff --git a/vendor/twig/twig/doc/tags/spaceless.rst b/vendor/twig/twig/doc/tags/spaceless.rst deleted file mode 100644 index 2463c99..0000000 --- a/vendor/twig/twig/doc/tags/spaceless.rst +++ /dev/null @@ -1,41 +0,0 @@ -``spaceless`` -============= - -.. tip:: - - As of Twig 1.38, use the :doc:`spaceless <../filters/spaceless>` filter instead. - -Use the ``spaceless`` tag to remove whitespace *between HTML tags*, not -whitespace within HTML tags or whitespace in plain text: - -.. code-block:: html+twig - - {% spaceless %} -
    - foo -
    - {% endspaceless %} - - {# output will be
    foo
    #} - -This tag is not meant to "optimize" the size of the generated HTML content but -merely to avoid extra whitespace between HTML tags to avoid browser rendering -quirks under some circumstances. - -.. tip:: - - If you want to optimize the size of the generated HTML content, gzip - compress the output instead. - -.. tip:: - - If you want to create a tag that actually removes all extra whitespace in - an HTML string, be warned that this is not as easy as it seems to be - (think of ``textarea`` or ``pre`` tags for instance). Using a third-party - library like Tidy is probably a better idea. - -.. tip:: - - For more information on whitespace control, read the - :ref:`dedicated section ` of the documentation and learn how - you can also use the whitespace control modifier on your tags. diff --git a/vendor/twig/twig/doc/tags/use.rst b/vendor/twig/twig/doc/tags/use.rst deleted file mode 100644 index 5fa2825..0000000 --- a/vendor/twig/twig/doc/tags/use.rst +++ /dev/null @@ -1,126 +0,0 @@ -``use`` -======= - -.. versionadded:: 1.1 - - Horizontal reuse was added in Twig 1.1. - -.. note:: - - Horizontal reuse is an advanced Twig feature that is hardly ever needed in - regular templates. It is mainly used by projects that need to make - template blocks reusable without using inheritance. - -Template inheritance is one of the most powerful features of Twig but it is -limited to single inheritance; a template can only extend one other template. -This limitation makes template inheritance simple to understand and easy to -debug: - -.. code-block:: twig - - {% extends "base.html" %} - - {% block title %}{% endblock %} - {% block content %}{% endblock %} - -Horizontal reuse is a way to achieve the same goal as multiple inheritance, -but without the associated complexity: - -.. code-block:: twig - - {% extends "base.html" %} - - {% use "blocks.html" %} - - {% block title %}{% endblock %} - {% block content %}{% endblock %} - -The ``use`` statement tells Twig to import the blocks defined in -``blocks.html`` into the current template (it's like macros, but for blocks): - -.. code-block:: twig - - {# blocks.html #} - - {% block sidebar %}{% endblock %} - -In this example, the ``use`` statement imports the ``sidebar`` block into the -main template. The code is mostly equivalent to the following one (the -imported blocks are not outputted automatically): - -.. code-block:: twig - - {% extends "base.html" %} - - {% block sidebar %}{% endblock %} - {% block title %}{% endblock %} - {% block content %}{% endblock %} - -.. note:: - - The ``use`` tag only imports a template if it does not extend another - template, if it does not define macros, and if the body is empty. But it - can *use* other templates. - -.. note:: - - Because ``use`` statements are resolved independently of the context - passed to the template, the template reference cannot be an expression. - -The main template can also override any imported block. If the template -already defines the ``sidebar`` block, then the one defined in ``blocks.html`` -is ignored. To avoid name conflicts, you can rename imported blocks: - -.. code-block:: twig - - {% extends "base.html" %} - - {% use "blocks.html" with sidebar as base_sidebar, title as base_title %} - - {% block sidebar %}{% endblock %} - {% block title %}{% endblock %} - {% block content %}{% endblock %} - -.. versionadded:: 1.3 - - The ``parent()`` support was added in Twig 1.3. - -The ``parent()`` function automatically determines the correct inheritance -tree, so it can be used when overriding a block defined in an imported -template: - -.. code-block:: twig - - {% extends "base.html" %} - - {% use "blocks.html" %} - - {% block sidebar %} - {{ parent() }} - {% endblock %} - - {% block title %}{% endblock %} - {% block content %}{% endblock %} - -In this example, ``parent()`` will correctly call the ``sidebar`` block from -the ``blocks.html`` template. - -.. tip:: - - In Twig 1.2, renaming allows you to simulate inheritance by calling the - "parent" block: - - .. code-block:: twig - - {% extends "base.html" %} - - {% use "blocks.html" with sidebar as parent_sidebar %} - - {% block sidebar %} - {{ block('parent_sidebar') }} - {% endblock %} - -.. note:: - - You can use as many ``use`` statements as you want in any given template. - If two imported templates define the same block, the latest one wins. diff --git a/vendor/twig/twig/doc/tags/verbatim.rst b/vendor/twig/twig/doc/tags/verbatim.rst deleted file mode 100644 index 9c0c62c..0000000 --- a/vendor/twig/twig/doc/tags/verbatim.rst +++ /dev/null @@ -1,25 +0,0 @@ -``verbatim`` -============ - -.. versionadded:: 1.12 - - The ``verbatim`` tag was added in Twig 1.12 (it was named ``raw`` before). - -The ``verbatim`` tag marks sections as being raw text that should not be -parsed. For example to put Twig syntax as example into a template you can use -this snippet: - -.. code-block:: html+twig - - {% verbatim %} -
      - {% for item in seq %} -
    • {{ item }}
    • - {% endfor %} -
    - {% endverbatim %} - -.. note:: - - The ``verbatim`` tag works in the exact same way as the old ``raw`` tag, - but was renamed to avoid confusion with the ``raw`` filter. \ No newline at end of file diff --git a/vendor/twig/twig/doc/tags/with.rst b/vendor/twig/twig/doc/tags/with.rst deleted file mode 100644 index 8022947..0000000 --- a/vendor/twig/twig/doc/tags/with.rst +++ /dev/null @@ -1,45 +0,0 @@ -``with`` -======== - -.. versionadded:: 1.28 - - The ``with`` tag was added in Twig 1.28. - -Use the ``with`` tag to create a new inner scope. Variables set within this -scope are not visible outside of the scope: - -.. code-block:: twig - - {% with %} - {% set foo = 42 %} - {{ foo }} foo is 42 here - {% endwith %} - foo is not visible here any longer - -Instead of defining variables at the beginning of the scope, you can pass a -hash of variables you want to define in the ``with`` tag; the previous example -is equivalent to the following one: - -.. code-block:: twig - - {% with { foo: 42 } %} - {{ foo }} foo is 42 here - {% endwith %} - foo is not visible here any longer - - {# it works with any expression that resolves to a hash #} - {% set vars = { foo: 42 } %} - {% with vars %} - ... - {% endwith %} - -By default, the inner scope has access to the outer scope context; you can -disable this behavior by appending the ``only`` keyword: - -.. code-block:: twig - - {% set bar = 'bar' %} - {% with { foo: 42 } only %} - {# only foo is defined #} - {# bar is not defined #} - {% endwith %} diff --git a/vendor/twig/twig/doc/templates.rst b/vendor/twig/twig/doc/templates.rst deleted file mode 100644 index 943a004..0000000 --- a/vendor/twig/twig/doc/templates.rst +++ /dev/null @@ -1,896 +0,0 @@ -Twig for Template Designers -=========================== - -This document describes the syntax and semantics of the template engine and -will be most useful as reference to those creating Twig templates. - -Synopsis --------- - -A template is a regular text file. It can generate any text-based format (HTML, -XML, CSV, LaTeX, etc.). It doesn't have a specific extension, ``.html`` or -``.xml`` are just fine. - -A template contains **variables** or **expressions**, which get replaced with -values when the template is evaluated, and **tags**, which control the -template's logic. - -Below is a minimal template that illustrates a few basics. We will cover further -details later on: - -.. code-block:: html+twig - - - - - My Webpage - - - - -

    My Webpage

    - {{ a_variable }} - - - -There are two kinds of delimiters: ``{% ... %}`` and ``{{ ... }}``. The first -one is used to execute statements such as for-loops, the latter outputs the -result of an expression. - -IDEs Integration ----------------- - -Many IDEs support syntax highlighting and auto-completion for Twig: - -* *Textmate* via the `Twig bundle`_ -* *Vim* via the `Jinja syntax plugin`_ or the `vim-twig plugin`_ -* *Netbeans* via the `Twig syntax plugin`_ (until 7.1, native as of 7.2) -* *PhpStorm* (native as of 2.1) -* *Eclipse* via the `Twig plugin`_ -* *Sublime Text* via the `Twig bundle`_ -* *GtkSourceView* via the `Twig language definition`_ (used by gedit and other projects) -* *Coda* and *SubEthaEdit* via the `Twig syntax mode`_ -* *Coda 2* via the `other Twig syntax mode`_ -* *Komodo* and *Komodo Edit* via the Twig highlight/syntax check mode -* *Notepad++* via the `Notepad++ Twig Highlighter`_ -* *Emacs* via `web-mode.el`_ -* *Atom* via the `PHP-twig for atom`_ -* *Visual Studio Code* via the `Twig pack`_ - -Also, `TwigFiddle`_ is an online service that allows you to execute Twig templates -from a browser; it supports all versions of Twig. - -Variables ---------- - -The application passes variables to the templates for manipulation in the -template. Variables may have attributes or elements you can access, too. The -visual representation of a variable depends heavily on the application providing -it. - -Use a dot (``.``) to access attributes of a variable (methods or properties of a -PHP object, or items of a PHP array): - -.. code-block:: twig - - {{ foo.bar }} - -.. note:: - - It's important to know that the curly braces are *not* part of the - variable but the print statement. When accessing variables inside tags, - don't put the braces around them. - -.. sidebar:: Implementation - - For convenience's sake ``foo.bar`` does the following things on the PHP - layer: - - * check if ``foo`` is an array and ``bar`` a valid element; - * if not, and if ``foo`` is an object, check that ``bar`` is a valid property; - * if not, and if ``foo`` is an object, check that ``bar`` is a valid method - (even if ``bar`` is the constructor - use ``__construct()`` instead); - * if not, and if ``foo`` is an object, check that ``getBar`` is a valid method; - * if not, and if ``foo`` is an object, check that ``isBar`` is a valid method; - * if not, return a ``null`` value. - - Twig also supports a specific syntax for accessing items on PHP arrays, - ``foo['bar']``: - - * check if ``foo`` is an array and ``bar`` a valid element; - * if not, return a ``null`` value. - -If a variable or attribute does not exist, you will receive a ``null`` value -when the ``strict_variables`` option is set to ``false``; alternatively, if ``strict_variables`` -is set, Twig will throw an error (see :ref:`environment options`). - -.. note:: - - If you want to access a dynamic attribute of a variable, use the - :doc:`attribute` function instead. - - The ``attribute`` function is also useful when the attribute contains - special characters (like ``-`` that would be interpreted as the minus - operator): - - .. code-block:: twig - - {# equivalent to the non-working foo.data-foo #} - {{ attribute(foo, 'data-foo') }} - -Global Variables -~~~~~~~~~~~~~~~~ - -The following variables are always available in templates: - -* ``_self``: references the current template; -* ``_context``: references the current context; -* ``_charset``: references the current charset. - -Setting Variables -~~~~~~~~~~~~~~~~~ - -You can assign values to variables inside code blocks. Assignments use the -:doc:`set` tag: - -.. code-block:: twig - - {% set foo = 'foo' %} - {% set foo = [1, 2] %} - {% set foo = {'foo': 'bar'} %} - -Filters -------- - -Variables can be modified by **filters**. Filters are separated from the -variable by a pipe symbol (``|``). Multiple filters can be chained. The output -of one filter is applied to the next. - -The following example removes all HTML tags from the ``name`` and title-cases -it: - -.. code-block:: twig - - {{ name|striptags|title }} - -Filters that accept arguments have parentheses around the arguments. This -example joins the elements of a list by commas: - -.. code-block:: twig - - {{ list|join(', ') }} - -To apply a filter on a section of code, wrap it with the -:doc:`apply` tag: - -.. code-block:: twig - - {% apply upper %} - This text becomes uppercase - {% endapply %} - -Go to the :doc:`filters` page to learn more about built-in -filters. - -.. note:: - - The ``apply`` tag was introduced in Twig 1.40; use the ``filter`` tag with - previous versions. - -Functions ---------- - -Functions can be called to generate content. Functions are called by their -name followed by parentheses (``()``) and may have arguments. - -For instance, the ``range`` function returns a list containing an arithmetic -progression of integers: - -.. code-block:: twig - - {% for i in range(0, 3) %} - {{ i }}, - {% endfor %} - -Go to the :doc:`functions` page to learn more about the -built-in functions. - -.. _named-arguments: - -Named Arguments ---------------- - -.. versionadded:: 1.12 - - Support for named arguments was added in Twig 1.12. - -.. code-block:: twig - - {% for i in range(low=1, high=10, step=2) %} - {{ i }}, - {% endfor %} - -Using named arguments makes your templates more explicit about the meaning of -the values you pass as arguments: - -.. code-block:: twig - - {{ data|convert_encoding('UTF-8', 'iso-2022-jp') }} - - {# versus #} - - {{ data|convert_encoding(from='iso-2022-jp', to='UTF-8') }} - -Named arguments also allow you to skip some arguments for which you don't want -to change the default value: - -.. code-block:: twig - - {# the first argument is the date format, which defaults to the global date format if null is passed #} - {{ "now"|date(null, "Europe/Paris") }} - - {# or skip the format value by using a named argument for the time zone #} - {{ "now"|date(timezone="Europe/Paris") }} - -You can also use both positional and named arguments in one call, in which -case positional arguments must always come before named arguments: - -.. code-block:: twig - - {{ "now"|date('d/m/Y H:i', timezone="Europe/Paris") }} - -.. tip:: - - Each function and filter documentation page has a section where the names - of all arguments are listed when supported. - -Control Structure ------------------ - -A control structure refers to all those things that control the flow of a -program - conditionals (i.e. ``if``/``elseif``/``else``), ``for``-loops, as -well as things like blocks. Control structures appear inside ``{% ... %}`` -blocks. - -For example, to display a list of users provided in a variable called -``users``, use the :doc:`for` tag: - -.. code-block:: html+twig - -

    Members

    -
      - {% for user in users %} -
    • {{ user.username|e }}
    • - {% endfor %} -
    - -The :doc:`if` tag can be used to test an expression: - -.. code-block:: html+twig - - {% if users|length > 0 %} -
      - {% for user in users %} -
    • {{ user.username|e }}
    • - {% endfor %} -
    - {% endif %} - -Go to the :doc:`tags` page to learn more about the built-in tags. - -Comments --------- - -To comment-out part of a line in a template, use the comment syntax ``{# ... -#}``. This is useful for debugging or to add information for other template -designers or yourself: - -.. code-block:: twig - - {# note: disabled template because we no longer use this - {% for user in users %} - ... - {% endfor %} - #} - -Including other Templates -------------------------- - -The :doc:`include` function is useful to include a template -and return the rendered content of that template into the current one: - -.. code-block:: twig - - {{ include('sidebar.html') }} - -By default, included templates have access to the same context as the template -which includes them. This means that any variable defined in the main template -will be available in the included template too: - -.. code-block:: twig - - {% for box in boxes %} - {{ include('render_box.html') }} - {% endfor %} - -The included template ``render_box.html`` is able to access the ``box`` variable. - -The name of the template depends on the template loader. For instance, the -``\Twig\Loader\FilesystemLoader`` allows you to access other templates by giving the -filename. You can access templates in subdirectories with a slash: - -.. code-block:: twig - - {{ include('sections/articles/sidebar.html') }} - -This behavior depends on the application embedding Twig. - -Template Inheritance --------------------- - -The most powerful part of Twig is template inheritance. Template inheritance -allows you to build a base "skeleton" template that contains all the common -elements of your site and defines **blocks** that child templates can -override. - -It's easier to understand the concept by starting with an example. - -Let's define a base template, ``base.html``, which defines an HTML skeleton -document that might be used for a two-column page: - -.. code-block:: html+twig - - - - - {% block head %} - - {% block title %}{% endblock %} - My Webpage - {% endblock %} - - -
    {% block content %}{% endblock %}
    - - - - -In this example, the :doc:`block` tags define four blocks that -child templates can fill in. All the ``block`` tag does is to tell the -template engine that a child template may override those portions of the -template. - -A child template might look like this: - -.. code-block:: html+twig - - {% extends "base.html" %} - - {% block title %}Index{% endblock %} - {% block head %} - {{ parent() }} - - {% endblock %} - {% block content %} -

    Index

    -

    - Welcome to my awesome homepage. -

    - {% endblock %} - -The :doc:`extends` tag is the key here. It tells the template -engine that this template "extends" another template. When the template system -evaluates this template, first it locates the parent. The extends tag should -be the first tag in the template. - -Note that since the child template doesn't define the ``footer`` block, the -value from the parent template is used instead. - -It's possible to render the contents of the parent block by using the -:doc:`parent` function. This gives back the results of the -parent block: - -.. code-block:: html+twig - - {% block sidebar %} -

    Table Of Contents

    - ... - {{ parent() }} - {% endblock %} - -.. tip:: - - The documentation page for the :doc:`extends` tag describes - more advanced features like block nesting, scope, dynamic inheritance, and - conditional inheritance. - -.. note:: - - Twig also supports multiple inheritance via "horizontal reuse" with the help - of the :doc:`use` tag. - -HTML Escaping -------------- - -When generating HTML from templates, there's always a risk that a variable -will include characters that affect the resulting HTML. There are two -approaches: manually escaping each variable or automatically escaping -everything by default. - -Twig supports both, automatic escaping is enabled by default. - -The automatic escaping strategy can be configured via the -:ref:`autoescape` option and defaults to ``html``. - -Working with Manual Escaping -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -If manual escaping is enabled, it is **your** responsibility to escape variables -if needed. What to escape? Any variable that comes from an untrusted source. - -Escaping works by using the :doc:`escape` or ``e`` filter: - -.. code-block:: twig - - {{ user.username|e }} - -By default, the ``escape`` filter uses the ``html`` strategy, but depending on -the escaping context, you might want to explicitly use an other strategy: - -.. code-block:: twig - - {{ user.username|e('js') }} - {{ user.username|e('css') }} - {{ user.username|e('url') }} - {{ user.username|e('html_attr') }} - -Working with Automatic Escaping -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Whether automatic escaping is enabled or not, you can mark a section of a -template to be escaped or not by using the :doc:`autoescape` -tag: - -.. code-block:: twig - - {% autoescape %} - Everything will be automatically escaped in this block (using the HTML strategy) - {% endautoescape %} - -By default, auto-escaping uses the ``html`` escaping strategy. If you output -variables in other contexts, you need to explicitly escape them with the -appropriate escaping strategy: - -.. code-block:: twig - - {% autoescape 'js' %} - Everything will be automatically escaped in this block (using the JS strategy) - {% endautoescape %} - -Escaping --------- - -It is sometimes desirable or even necessary to have Twig ignore parts it would -otherwise handle as variables or blocks. For example if the default syntax is -used and you want to use ``{{`` as raw string in the template and not start a -variable you have to use a trick. - -The easiest way is to output the variable delimiter (``{{``) by using a variable -expression: - -.. code-block:: twig - - {{ '{{' }} - -For bigger sections it makes sense to mark a block -:doc:`verbatim`. - -Macros ------- - -.. versionadded:: 1.12 - - Support for default argument values was added in Twig 1.12. - -Macros are comparable with functions in regular programming languages. They are -useful to reuse HTML fragments to not repeat yourself. They are described in the -:doc:`macro` tag documentation. - -.. _twig-expressions: - -Expressions ------------ - -Twig allows expressions everywhere. - -.. note:: - - The operator precedence is as follows, with the lowest-precedence operators - listed first: ``?:`` (ternary operator), ``b-and``, ``b-xor``, ``b-or``, - ``or``, ``and``, ``==``, ``!=``, ``<``, ``>``, ``>=``, ``<=``, ``in``, - ``matches``, ``starts with``, ``ends with``, ``..``, ``+``, ``-``, ``~``, - ``*``, ``/``, ``//``, ``%``, ``is`` (tests), ``**``, ``??``, ``|`` - (filters), ``[]``, and ``.``: - - .. code-block:: twig - - {% set greeting = 'Hello ' %} - {% set name = 'Fabien' %} - - {{ greeting ~ name|lower }} {# Hello fabien #} - - {# use parenthesis to change precedence #} - {{ (greeting ~ name)|lower }} {# hello fabien #} - -Literals -~~~~~~~~ - -.. versionadded:: 1.5 - - Support for hash keys as names and expressions was added in Twig 1.5. - -The simplest form of expressions are literals. Literals are representations -for PHP types such as strings, numbers, and arrays. The following literals -exist: - -* ``"Hello World"``: Everything between two double or single quotes is a - string. They are useful whenever you need a string in the template (for - example as arguments to function calls, filters or just to extend or include - a template). A string can contain a delimiter if it is preceded by a - backslash (``\``) -- like in ``'It\'s good'``. If the string contains a - backslash (e.g. ``'c:\Program Files'``) escape it by doubling it - (e.g. ``'c:\\Program Files'``). - -* ``42`` / ``42.23``: Integers and floating point numbers are created by - writing the number down. If a dot is present the number is a float, - otherwise an integer. - -* ``["foo", "bar"]``: Arrays are defined by a sequence of expressions - separated by a comma (``,``) and wrapped with squared brackets (``[]``). - -* ``{"foo": "bar"}``: Hashes are defined by a list of keys and values - separated by a comma (``,``) and wrapped with curly braces (``{}``): - - .. code-block:: twig - - {# keys as string #} - { 'foo': 'foo', 'bar': 'bar' } - - {# keys as names (equivalent to the previous hash) -- as of Twig 1.5 #} - { foo: 'foo', bar: 'bar' } - - {# keys as integer #} - { 2: 'foo', 4: 'bar' } - - {# keys can be omitted if it is the same as the variable name #} - { foo } - {# is equivalent to the following #} - { 'foo': foo } - - {# keys as expressions (the expression must be enclosed into parentheses) -- as of Twig 1.5 #} - {% set foo = 'foo' %} - { (foo): 'foo', (1 + 1): 'bar', (foo ~ 'b'): 'baz' } - -* ``true`` / ``false``: ``true`` represents the true value, ``false`` - represents the false value. - -* ``null``: ``null`` represents no specific value. This is the value returned - when a variable does not exist. ``none`` is an alias for ``null``. - -Arrays and hashes can be nested: - -.. code-block:: twig - - {% set foo = [1, {"foo": "bar"}] %} - -.. tip:: - - Using double-quoted or single-quoted strings has no impact on performance - but :ref:`string interpolation ` is only - supported in double-quoted strings. - -Math -~~~~ - -Twig allows you to do math in templates; the following operators are supported: - -* ``+``: Adds two numbers together (the operands are casted to numbers). ``{{ - 1 + 1 }}`` is ``2``. - -* ``-``: Subtracts the second number from the first one. ``{{ 3 - 2 }}`` is - ``1``. - -* ``/``: Divides two numbers. The returned value will be a floating point - number. ``{{ 1 / 2 }}`` is ``{{ 0.5 }}``. - -* ``%``: Calculates the remainder of an integer division. ``{{ 11 % 7 }}`` is - ``4``. - -* ``//``: Divides two numbers and returns the floored integer result. ``{{ 20 - // 7 }}`` is ``2``, ``{{ -20 // 7 }}`` is ``-3`` (this is just syntactic - sugar for the :doc:`round` filter). - -* ``*``: Multiplies the left operand with the right one. ``{{ 2 * 2 }}`` would - return ``4``. - -* ``**``: Raises the left operand to the power of the right operand. ``{{ 2 ** - 3 }}`` would return ``8``. - -.. _template_logic: - -Logic -~~~~~ - -You can combine multiple expressions with the following operators: - -* ``and``: Returns true if the left and the right operands are both true. - -* ``or``: Returns true if the left or the right operand is true. - -* ``not``: Negates a statement. - -* ``(expr)``: Groups an expression. - -.. note:: - - Twig also supports bitwise operators (``b-and``, ``b-xor``, and ``b-or``). - -.. note:: - - Operators are case sensitive. - -Comparisons -~~~~~~~~~~~ - -The following comparison operators are supported in any expression: ``==``, -``!=``, ``<``, ``>``, ``>=``, and ``<=``. - -You can also check if a string ``starts with`` or ``ends with`` another -string: - -.. code-block:: twig - - {% if 'Fabien' starts with 'F' %} - {% endif %} - - {% if 'Fabien' ends with 'n' %} - {% endif %} - -.. note:: - - For complex string comparisons, the ``matches`` operator allows you to use - `regular expressions`_: - - .. code-block:: twig - - {% if phone matches '/^[\\d\\.]+$/' %} - {% endif %} - -Containment Operator -~~~~~~~~~~~~~~~~~~~~ - -The ``in`` operator performs containment test. It returns ``true`` if the left -operand is contained in the right: - -.. code-block:: twig - - {# returns true #} - - {{ 1 in [1, 2, 3] }} - - {{ 'cd' in 'abcde' }} - -.. tip:: - - You can use this filter to perform a containment test on strings, arrays, - or objects implementing the ``Traversable`` interface. - -To perform a negative test, use the ``not in`` operator: - -.. code-block:: twig - - {% if 1 not in [1, 2, 3] %} - - {# is equivalent to #} - {% if not (1 in [1, 2, 3]) %} - -Test Operator -~~~~~~~~~~~~~ - -The ``is`` operator performs tests. Tests can be used to test a variable against -a common expression. The right operand is name of the test: - -.. code-block:: twig - - {# find out if a variable is odd #} - - {{ name is odd }} - -Tests can accept arguments too: - -.. code-block:: twig - - {% if post.status is constant('Post::PUBLISHED') %} - -Tests can be negated by using the ``is not`` operator: - -.. code-block:: twig - - {% if post.status is not constant('Post::PUBLISHED') %} - - {# is equivalent to #} - {% if not (post.status is constant('Post::PUBLISHED')) %} - -Go to the :doc:`tests` page to learn more about the built-in -tests. - -Other Operators -~~~~~~~~~~~~~~~ - -.. versionadded:: 1.12.0 - - Support for the extended ternary operator was added in Twig 1.12.0. - -The following operators don't fit into any of the other categories: - -* ``|``: Applies a filter. - -* ``..``: Creates a sequence based on the operand before and after the operator - (this is syntactic sugar for the :doc:`range` function): - - .. code-block:: twig - - {{ 1..5 }} - - {# equivalent to #} - {{ range(1, 5) }} - - Note that you must use parentheses when combining it with the filter operator - due to the :ref:`operator precedence rules `: - - .. code-block:: twig - - (1..5)|join(', ') - -* ``~``: Converts all operands into strings and concatenates them. ``{{ "Hello - " ~ name ~ "!" }}`` would return (assuming ``name`` is ``'John'``) ``Hello - John!``. - -* ``.``, ``[]``: Gets an attribute of a variable. - -* ``?:``: The ternary operator: - - .. code-block:: twig - - {{ foo ? 'yes' : 'no' }} - - {# as of Twig 1.12.0 #} - {{ foo ?: 'no' }} is the same as {{ foo ? foo : 'no' }} - {{ foo ? 'yes' }} is the same as {{ foo ? 'yes' : '' }} - -* ``??``: The null-coalescing operator: - - .. code-block:: twig - - {# returns the value of foo if it is defined and not null, 'no' otherwise #} - {{ foo ?? 'no' }} - -.. _templates-string-interpolation: - -String Interpolation -~~~~~~~~~~~~~~~~~~~~ - -.. versionadded:: 1.5 - - String interpolation was added in Twig 1.5. - -String interpolation (``#{expression}``) allows any valid expression to appear -within a *double-quoted string*. The result of evaluating that expression is -inserted into the string: - -.. code-block:: twig - - {{ "foo #{bar} baz" }} - {{ "foo #{1 + 2} baz" }} - -.. _templates-whitespace-control: - -Whitespace Control ------------------- - -.. versionadded:: 1.1 - - Tag level whitespace control was added in Twig 1.1. - -.. versionadded:: 1.39 - - Tag level Line whitespace control was added in Twig 1.39. - -The first newline after a template tag is removed automatically (like in PHP). -Whitespace is not further modified by the template engine, so each whitespace -(spaces, tabs, newlines etc.) is returned unchanged. - -You can also control whitespace on a per tag level. By using the whitespace -control modifiers on your tags, you can trim leading and or trailing whitespace. - -Twig supports two modifiers: - -* *Whitespace trimming* via the ``-`` modifier: Removes all whitespace - (including newlines); - -* *Line whitespace trimming* via the ``~`` modifier: Removes all whitespace - (excluding newlines). Using this modifier on the right disables the default - removal of the first newline inherited from PHP. - -The modifiers can be used on either side of the tags like in ``{%-`` or ``-%}`` -and they consume all whitespace for that side of the tag. It is possible to use -the modifiers on one side of a tag or on both sides: - -.. code-block:: html+twig - - {% set value = 'no spaces' %} - {#- No leading/trailing whitespace -#} - {%- if true -%} - {{- value -}} - {%- endif -%} - {# output 'no spaces' #} - -
  • - {{ value }}
  • - {# outputs '
  • \n no spaces
  • ' #} - -
  • - {{- value }}
  • - {# outputs '
  • no spaces
  • ' #} - -
  • - {{~ value }}
  • - {# outputs '
  • \nno spaces
  • ' #} - -.. tip:: - - In addition to the whitespace modifiers, Twig also has a ``spaceless`` filter - that removes whitespace **between HTML tags**: - - .. code-block:: html+twig - - {% apply spaceless %} -
    - foo bar -
    - {% endapply %} - - {# output will be
    foo bar
    #} - - Note that the ``apply`` tag was introduced in Twig 1.40; use the ``filter`` - tag with previous versions. - -Extensions ----------- - -Twig can be extended. If you want to create your own extensions, read the -:ref:`Creating an Extension ` chapter. - -.. _`Twig bundle`: https://github.com/Anomareh/PHP-Twig.tmbundle -.. _`Jinja syntax plugin`: http://jinja.pocoo.org/docs/integration/#vim -.. _`vim-twig plugin`: https://github.com/lumiliet/vim-twig -.. _`Twig syntax plugin`: http://plugins.netbeans.org/plugin/37069/php-twig -.. _`Twig plugin`: https://github.com/pulse00/Twig-Eclipse-Plugin -.. _`Twig language definition`: https://github.com/gabrielcorpse/gedit-twig-template-language -.. _`Twig syntax mode`: https://github.com/bobthecow/Twig-HTML.mode -.. _`other Twig syntax mode`: https://github.com/muxx/Twig-HTML.mode -.. _`Notepad++ Twig Highlighter`: https://github.com/Banane9/notepadplusplus-twig -.. _`web-mode.el`: http://web-mode.org/ -.. _`regular expressions`: https://www.php.net/manual/en/pcre.pattern.php -.. _`PHP-twig for atom`: https://github.com/reesef/php-twig -.. _`TwigFiddle`: https://twigfiddle.com/ -.. _`Twig pack`: https://marketplace.visualstudio.com/items?itemName=bajdzis.vscode-twig-pack diff --git a/vendor/twig/twig/doc/tests/constant.rst b/vendor/twig/twig/doc/tests/constant.rst deleted file mode 100644 index 20cf77a..0000000 --- a/vendor/twig/twig/doc/tests/constant.rst +++ /dev/null @@ -1,23 +0,0 @@ -``constant`` -============ - -.. versionadded:: 1.13.1 - - constant now accepts object instances as the second argument. - -``constant`` checks if a variable has the exact same value as a constant. You -can use either global constants or class constants: - -.. code-block:: twig - - {% if post.status is constant('Post::PUBLISHED') %} - the status attribute is exactly the same as Post::PUBLISHED - {% endif %} - -You can test constants from object instances as well: - -.. code-block:: twig - - {% if post.status is constant('PUBLISHED', post) %} - the status attribute is exactly the same as Post::PUBLISHED - {% endif %} diff --git a/vendor/twig/twig/doc/tests/defined.rst b/vendor/twig/twig/doc/tests/defined.rst deleted file mode 100644 index 234a289..0000000 --- a/vendor/twig/twig/doc/tests/defined.rst +++ /dev/null @@ -1,30 +0,0 @@ -``defined`` -=========== - -``defined`` checks if a variable is defined in the current context. This is very -useful if you use the ``strict_variables`` option: - -.. code-block:: twig - - {# defined works with variable names #} - {% if foo is defined %} - ... - {% endif %} - - {# and attributes on variables names #} - {% if foo.bar is defined %} - ... - {% endif %} - - {% if foo['bar'] is defined %} - ... - {% endif %} - -When using the ``defined`` test on an expression that uses variables in some -method calls, be sure that they are all defined first: - -.. code-block:: twig - - {% if var is defined and foo.method(var) is defined %} - ... - {% endif %} diff --git a/vendor/twig/twig/doc/tests/divisibleby.rst b/vendor/twig/twig/doc/tests/divisibleby.rst deleted file mode 100644 index 01c4d19..0000000 --- a/vendor/twig/twig/doc/tests/divisibleby.rst +++ /dev/null @@ -1,15 +0,0 @@ -``divisible by`` -================ - -.. versionadded:: 1.14.2 - - The ``divisible by`` test was added in Twig 1.14.2 as an alias for - ``divisibleby``. - -``divisible by`` checks if a variable is divisible by a number: - -.. code-block:: twig - - {% if loop.index is divisible by(3) %} - ... - {% endif %} diff --git a/vendor/twig/twig/doc/tests/empty.rst b/vendor/twig/twig/doc/tests/empty.rst deleted file mode 100644 index b630c0c..0000000 --- a/vendor/twig/twig/doc/tests/empty.rst +++ /dev/null @@ -1,22 +0,0 @@ -``empty`` -========= - -.. versionadded:: 1.33 - - Support for the ``__toString()`` magic method has been added in Twig 1.33. - -``empty`` checks if a variable is an empty string, an empty array, an empty -hash, exactly ``false``, or exactly ``null``. - -For objects that implement the ``Countable`` interface, ``empty`` will check the -return value of the ``count()`` method. - -For objects that implement the ``__toString()`` magic method (and not ``Countable``), -it will check if an empty string is returned. - -.. code-block:: twig - - {% if foo is empty %} - ... - {% endif %} - diff --git a/vendor/twig/twig/doc/tests/even.rst b/vendor/twig/twig/doc/tests/even.rst deleted file mode 100644 index 2de0de2..0000000 --- a/vendor/twig/twig/doc/tests/even.rst +++ /dev/null @@ -1,12 +0,0 @@ -``even`` -======== - -``even`` returns ``true`` if the given number is even: - -.. code-block:: twig - - {{ var is even }} - -.. seealso:: - - :doc:`odd<../tests/odd>` diff --git a/vendor/twig/twig/doc/tests/index.rst b/vendor/twig/twig/doc/tests/index.rst deleted file mode 100644 index c63208e..0000000 --- a/vendor/twig/twig/doc/tests/index.rst +++ /dev/null @@ -1,15 +0,0 @@ -Tests -===== - -.. toctree:: - :maxdepth: 1 - - constant - defined - divisibleby - empty - even - iterable - null - odd - sameas diff --git a/vendor/twig/twig/doc/tests/iterable.rst b/vendor/twig/twig/doc/tests/iterable.rst deleted file mode 100644 index 957ee2c..0000000 --- a/vendor/twig/twig/doc/tests/iterable.rst +++ /dev/null @@ -1,20 +0,0 @@ -``iterable`` -============ - -.. versionadded:: 1.7 - - The iterable test was added in Twig 1.7. - -``iterable`` checks if a variable is an array or a traversable object: - -.. code-block:: twig - - {# evaluates to true if the foo variable is iterable #} - {% if users is iterable %} - {% for user in users %} - Hello {{ user }}! - {% endfor %} - {% else %} - {# users is probably a string #} - Hello {{ users }}! - {% endif %} diff --git a/vendor/twig/twig/doc/tests/null.rst b/vendor/twig/twig/doc/tests/null.rst deleted file mode 100644 index 9ed93f6..0000000 --- a/vendor/twig/twig/doc/tests/null.rst +++ /dev/null @@ -1,12 +0,0 @@ -``null`` -======== - -``null`` returns ``true`` if the variable is ``null``: - -.. code-block:: twig - - {{ var is null }} - -.. note:: - - ``none`` is an alias for ``null``. diff --git a/vendor/twig/twig/doc/tests/odd.rst b/vendor/twig/twig/doc/tests/odd.rst deleted file mode 100644 index 27fe7e4..0000000 --- a/vendor/twig/twig/doc/tests/odd.rst +++ /dev/null @@ -1,12 +0,0 @@ -``odd`` -======= - -``odd`` returns ``true`` if the given number is odd: - -.. code-block:: twig - - {{ var is odd }} - -.. seealso:: - - :doc:`even<../tests/even>` diff --git a/vendor/twig/twig/doc/tests/sameas.rst b/vendor/twig/twig/doc/tests/sameas.rst deleted file mode 100644 index c4a5e88..0000000 --- a/vendor/twig/twig/doc/tests/sameas.rst +++ /dev/null @@ -1,15 +0,0 @@ -``same as`` -=========== - -.. versionadded:: 1.14.2 - - The ``same as`` test was added in Twig 1.14.2 as an alias for ``sameas``. - -``same as`` checks if a variable is the same as another variable. -This is equivalent to ``===`` in PHP: - -.. code-block:: twig - - {% if foo.attribute is same as(false) %} - the foo attribute really is the 'false' PHP value - {% endif %} diff --git a/vendor/twig/twig/src/Environment.php b/vendor/twig/twig/src/Environment.php index c4eba5b..ae7a8d7 100644 --- a/vendor/twig/twig/src/Environment.php +++ b/vendor/twig/twig/src/Environment.php @@ -41,11 +41,11 @@ */ class Environment { - public const VERSION = '1.44.5'; - public const VERSION_ID = 14405; + public const VERSION = '1.44.6'; + public const VERSION_ID = 14406; public const MAJOR_VERSION = 1; public const MINOR_VERSION = 44; - public const RELEASE_VERSION = 5; + public const RELEASE_VERSION = 6; public const EXTRA_VERSION = ''; protected $charset;