aboutsummaryrefslogtreecommitdiff
path: root/srcs/phpmyadmin/vendor/twig/extensions/lib
diff options
context:
space:
mode:
Diffstat (limited to 'srcs/phpmyadmin/vendor/twig/extensions/lib')
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Autoloader.php48
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Array.php56
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Date.php107
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/I18n.php41
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Intl.php146
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Text.php99
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar.php43
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Arguments.php26
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Array.php26
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Body.php43
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Boolean.php28
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Constant.php41
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Expression.php26
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Hash.php26
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Number.php28
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Optional.php73
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Switch.php28
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Tag.php60
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/GrammarInterface.php22
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Node/Trans.php166
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/SimpleTokenParser.php138
-rw-r--r--srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/TokenParser/Trans.php88
22 files changed, 1359 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Autoloader.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Autoloader.php
new file mode 100644
index 0000000..9ad5a46
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Autoloader.php
@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+@trigger_error('The "Twig_Extensions_Autoloader" class is deprecated since version 1.5. Use Composer instead.', E_USER_DEPRECATED);
+
+/**
+ * Autoloads Twig Extensions classes.
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * @deprecated since version 1.5, use Composer instead.
+ */
+class Twig_Extensions_Autoloader
+{
+ /**
+ * Registers Twig_Extensions_Autoloader as an SPL autoloader.
+ */
+ public static function register()
+ {
+ spl_autoload_register(array(new self(), 'autoload'));
+ }
+
+ /**
+ * Handles autoloading of classes.
+ *
+ * @param string $class a class name
+ *
+ * @return bool Returns true if the class has been loaded
+ */
+ public static function autoload($class)
+ {
+ if (0 !== strpos($class, 'Twig_Extensions')) {
+ return;
+ }
+
+ if (file_exists($file = __DIR__.'/../../'.str_replace('_', '/', $class).'.php')) {
+ require $file;
+ }
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Array.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Array.php
new file mode 100644
index 0000000..a5eaf6d
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Array.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Ricard Clau <ricard.clau@gmail.com>
+ */
+class Twig_Extensions_Extension_Array extends Twig_Extension
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function getFilters()
+ {
+ $filters = array(
+ new Twig_SimpleFilter('shuffle', 'twig_shuffle_filter'),
+ );
+
+ return $filters;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return 'array';
+ }
+}
+
+/**
+ * Shuffles an array.
+ *
+ * @param array|Traversable $array An array
+ *
+ * @return array
+ */
+function twig_shuffle_filter($array)
+{
+ if ($array instanceof Traversable) {
+ $array = iterator_to_array($array, false);
+ }
+
+ shuffle($array);
+
+ return $array;
+}
+
+class_alias('Twig_Extensions_Extension_Array', 'Twig\Extensions\ArrayExtension', false);
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Date.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Date.php
new file mode 100644
index 0000000..1cdd455
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Date.php
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * This file is part of Twig.
+ *
+ * (c) 2014 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+use Symfony\Component\Translation\TranslatorInterface;
+use Symfony\Component\Translation\IdentityTranslator;
+
+/**
+ * @author Robin van der Vleuten <robinvdvleuten@gmail.com>
+ */
+class Twig_Extensions_Extension_Date extends Twig_Extension
+{
+ public static $units = array(
+ 'y' => 'year',
+ 'm' => 'month',
+ 'd' => 'day',
+ 'h' => 'hour',
+ 'i' => 'minute',
+ 's' => 'second',
+ );
+
+ /**
+ * @var TranslatorInterface
+ */
+ private $translator;
+
+ public function __construct(TranslatorInterface $translator = null)
+ {
+ // Ignore the IdentityTranslator, otherwise the parameters won't be replaced properly
+ if ($translator instanceof IdentityTranslator) {
+ $translator = null;
+ }
+
+ $this->translator = $translator;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getFilters()
+ {
+ return array(
+ new Twig_SimpleFilter('time_diff', array($this, 'diff'), array('needs_environment' => true)),
+ );
+ }
+
+ /**
+ * Filter for converting dates to a time ago string like Facebook and Twitter has.
+ *
+ * @param Twig_Environment $env a Twig_Environment instance
+ * @param string|DateTime $date a string or DateTime object to convert
+ * @param string|DateTime $now A string or DateTime object to compare with. If none given, the current time will be used.
+ *
+ * @return string the converted time
+ */
+ public function diff(Twig_Environment $env, $date, $now = null)
+ {
+ // Convert both dates to DateTime instances.
+ $date = twig_date_converter($env, $date);
+ $now = twig_date_converter($env, $now);
+
+ // Get the difference between the two DateTime objects.
+ $diff = $date->diff($now);
+
+ // Check for each interval if it appears in the $diff object.
+ foreach (self::$units as $attribute => $unit) {
+ $count = $diff->$attribute;
+
+ if (0 !== $count) {
+ return $this->getPluralizedInterval($count, $diff->invert, $unit);
+ }
+ }
+
+ return '';
+ }
+
+ protected function getPluralizedInterval($count, $invert, $unit)
+ {
+ if ($this->translator) {
+ $id = sprintf('diff.%s.%s', $invert ? 'in' : 'ago', $unit);
+
+ return $this->translator->transChoice($id, $count, array('%count%' => $count), 'date');
+ }
+
+ if (1 !== $count) {
+ $unit .= 's';
+ }
+
+ return $invert ? "in $count $unit" : "$count $unit ago";
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return 'date';
+ }
+}
+
+class_alias('Twig_Extensions_Extension_Date', 'Twig\Extensions\DateExtension', false);
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/I18n.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/I18n.php
new file mode 100644
index 0000000..41cb9ce
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/I18n.php
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+class Twig_Extensions_Extension_I18n extends Twig_Extension
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function getTokenParsers()
+ {
+ return array(new Twig_Extensions_TokenParser_Trans());
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getFilters()
+ {
+ return array(
+ new Twig_SimpleFilter('trans', 'gettext'),
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return 'i18n';
+ }
+}
+
+class_alias('Twig_Extensions_Extension_I18n', 'Twig\Extensions\I18nExtension', false);
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Intl.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Intl.php
new file mode 100644
index 0000000..49b0f88
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Intl.php
@@ -0,0 +1,146 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+class Twig_Extensions_Extension_Intl extends Twig_Extension
+{
+ public function __construct()
+ {
+ if (!class_exists('IntlDateFormatter')) {
+ throw new RuntimeException('The native PHP intl extension (http://php.net/manual/en/book.intl.php) is needed to use intl-based filters.');
+ }
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getFilters()
+ {
+ return array(
+ new Twig_SimpleFilter('localizeddate', 'twig_localized_date_filter', array('needs_environment' => true)),
+ new Twig_SimpleFilter('localizednumber', 'twig_localized_number_filter'),
+ new Twig_SimpleFilter('localizedcurrency', 'twig_localized_currency_filter'),
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return 'intl';
+ }
+}
+
+function twig_localized_date_filter(Twig_Environment $env, $date, $dateFormat = 'medium', $timeFormat = 'medium', $locale = null, $timezone = null, $format = null, $calendar = 'gregorian')
+{
+ $date = twig_date_converter($env, $date, $timezone);
+
+ $formatValues = array(
+ 'none' => IntlDateFormatter::NONE,
+ 'short' => IntlDateFormatter::SHORT,
+ 'medium' => IntlDateFormatter::MEDIUM,
+ 'long' => IntlDateFormatter::LONG,
+ 'full' => IntlDateFormatter::FULL,
+ );
+
+ if (PHP_VERSION_ID < 50500 || !class_exists('IntlTimeZone')) {
+ $formatter = IntlDateFormatter::create(
+ $locale,
+ $formatValues[$dateFormat],
+ $formatValues[$timeFormat],
+ $date->getTimezone()->getName(),
+ 'gregorian' === $calendar ? IntlDateFormatter::GREGORIAN : IntlDateFormatter::TRADITIONAL,
+ $format
+ );
+
+ return $formatter->format($date->getTimestamp());
+ }
+
+ $formatter = IntlDateFormatter::create(
+ $locale,
+ $formatValues[$dateFormat],
+ $formatValues[$timeFormat],
+ IntlTimeZone::createTimeZone($date->getTimezone()->getName()),
+ 'gregorian' === $calendar ? IntlDateFormatter::GREGORIAN : IntlDateFormatter::TRADITIONAL,
+ $format
+ );
+
+ return $formatter->format($date->getTimestamp());
+}
+
+function twig_localized_number_filter($number, $style = 'decimal', $type = 'default', $locale = null)
+{
+ static $typeValues = array(
+ 'default' => NumberFormatter::TYPE_DEFAULT,
+ 'int32' => NumberFormatter::TYPE_INT32,
+ 'int64' => NumberFormatter::TYPE_INT64,
+ 'double' => NumberFormatter::TYPE_DOUBLE,
+ 'currency' => NumberFormatter::TYPE_CURRENCY,
+ );
+
+ $formatter = twig_get_number_formatter($locale, $style);
+
+ if (!isset($typeValues[$type])) {
+ throw new Twig_Error_Syntax(sprintf('The type "%s" does not exist. Known types are: "%s"', $type, implode('", "', array_keys($typeValues))));
+ }
+
+ return $formatter->format($number, $typeValues[$type]);
+}
+
+function twig_localized_currency_filter($number, $currency = null, $locale = null)
+{
+ $formatter = twig_get_number_formatter($locale, 'currency');
+
+ return $formatter->formatCurrency($number, $currency);
+}
+
+/**
+ * Gets a number formatter instance according to given locale and formatter.
+ *
+ * @param string $locale Locale in which the number would be formatted
+ * @param int $style Style of the formatting
+ *
+ * @return NumberFormatter A NumberFormatter instance
+ */
+function twig_get_number_formatter($locale, $style)
+{
+ static $formatter, $currentStyle;
+
+ $locale = null !== $locale ? $locale : Locale::getDefault();
+
+ if ($formatter && $formatter->getLocale() === $locale && $currentStyle === $style) {
+ // Return same instance of NumberFormatter if parameters are the same
+ // to those in previous call
+ return $formatter;
+ }
+
+ static $styleValues = array(
+ 'decimal' => NumberFormatter::DECIMAL,
+ 'currency' => NumberFormatter::CURRENCY,
+ 'percent' => NumberFormatter::PERCENT,
+ 'scientific' => NumberFormatter::SCIENTIFIC,
+ 'spellout' => NumberFormatter::SPELLOUT,
+ 'ordinal' => NumberFormatter::ORDINAL,
+ 'duration' => NumberFormatter::DURATION,
+ );
+
+ if (!isset($styleValues[$style])) {
+ throw new Twig_Error_Syntax(sprintf('The style "%s" does not exist. Known styles are: "%s"', $style, implode('", "', array_keys($styleValues))));
+ }
+
+ $currentStyle = $style;
+
+ $formatter = NumberFormatter::create($locale, $styleValues[$style]);
+
+ return $formatter;
+}
+
+class_alias('Twig_Extensions_Extension_Intl', 'Twig\Extensions\IntlExtension', false);
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Text.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Text.php
new file mode 100644
index 0000000..52d3591
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Extension/Text.php
@@ -0,0 +1,99 @@
+<?php
+
+/**
+ * This file is part of Twig.
+ *
+ * (c) 2009 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @author Henrik Bjornskov <hb@peytz.dk>
+ */
+class Twig_Extensions_Extension_Text extends Twig_Extension
+{
+ /**
+ * {@inheritdoc}
+ */
+ public function getFilters()
+ {
+ return array(
+ new Twig_SimpleFilter('truncate', 'twig_truncate_filter', array('needs_environment' => true)),
+ new Twig_SimpleFilter('wordwrap', 'twig_wordwrap_filter', array('needs_environment' => true)),
+ );
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function getName()
+ {
+ return 'Text';
+ }
+}
+
+if (function_exists('mb_get_info')) {
+ function twig_truncate_filter(Twig_Environment $env, $value, $length = 30, $preserve = false, $separator = '...')
+ {
+ if (mb_strlen($value, $env->getCharset()) > $length) {
+ if ($preserve) {
+ // If breakpoint is on the last word, return the value without separator.
+ if (false === ($breakpoint = mb_strpos($value, ' ', $length, $env->getCharset()))) {
+ return $value;
+ }
+
+ $length = $breakpoint;
+ }
+
+ return rtrim(mb_substr($value, 0, $length, $env->getCharset())).$separator;
+ }
+
+ return $value;
+ }
+
+ function twig_wordwrap_filter(Twig_Environment $env, $value, $length = 80, $separator = "\n", $preserve = false)
+ {
+ $sentences = array();
+
+ $previous = mb_regex_encoding();
+ mb_regex_encoding($env->getCharset());
+
+ $pieces = mb_split($separator, $value);
+ mb_regex_encoding($previous);
+
+ foreach ($pieces as $piece) {
+ while (!$preserve && mb_strlen($piece, $env->getCharset()) > $length) {
+ $sentences[] = mb_substr($piece, 0, $length, $env->getCharset());
+ $piece = mb_substr($piece, $length, 2048, $env->getCharset());
+ }
+
+ $sentences[] = $piece;
+ }
+
+ return implode($separator, $sentences);
+ }
+} else {
+ function twig_truncate_filter(Twig_Environment $env, $value, $length = 30, $preserve = false, $separator = '...')
+ {
+ if (strlen($value) > $length) {
+ if ($preserve) {
+ if (false !== ($breakpoint = strpos($value, ' ', $length))) {
+ $length = $breakpoint;
+ }
+ }
+
+ return rtrim(substr($value, 0, $length)).$separator;
+ }
+
+ return $value;
+ }
+
+ function twig_wordwrap_filter(Twig_Environment $env, $value, $length = 80, $separator = "\n", $preserve = false)
+ {
+ return wordwrap($value, $length, $separator, !$preserve);
+ }
+}
+
+class_alias('Twig_Extensions_Extension_Text', 'Twig\Extensions\TextExtension', false);
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar.php
new file mode 100644
index 0000000..b6cc0a7
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar.php
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+abstract class Twig_Extensions_Grammar implements Twig_Extensions_GrammarInterface
+{
+ protected $name;
+ protected $parser;
+
+ /**
+ * @param string $name
+ */
+ public function __construct($name)
+ {
+ $this->name = $name;
+ }
+
+ /**
+ * @param Twig_Parser $parser
+ */
+ public function setParser(Twig_Parser $parser)
+ {
+ $this->parser = $parser;
+ }
+
+ /**
+ * @return string
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Arguments.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Arguments.php
new file mode 100644
index 0000000..abb9e0e
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Arguments.php
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+class Twig_Extensions_Grammar_Arguments extends Twig_Extensions_Grammar
+{
+ public function __toString()
+ {
+ return sprintf('<%s:arguments>', $this->name);
+ }
+
+ public function parse(Twig_Token $token)
+ {
+ return $this->parser->getExpressionParser()->parseArguments();
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Array.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Array.php
new file mode 100644
index 0000000..94d7b8c
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Array.php
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+class Twig_Extensions_Grammar_Array extends Twig_Extensions_Grammar
+{
+ public function __toString()
+ {
+ return sprintf('<%s:array>', $this->name);
+ }
+
+ public function parse(Twig_Token $token)
+ {
+ return $this->parser->getExpressionParser()->parseArrayExpression();
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Body.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Body.php
new file mode 100644
index 0000000..b2ac43e
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Body.php
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+class Twig_Extensions_Grammar_Body extends Twig_Extensions_Grammar
+{
+ protected $end;
+
+ public function __construct($name, $end = null)
+ {
+ parent::__construct($name);
+
+ $this->end = null === $end ? 'end'.$name : $end;
+ }
+
+ public function __toString()
+ {
+ return sprintf('<%s:body>', $this->name);
+ }
+
+ public function parse(Twig_Token $token)
+ {
+ $stream = $this->parser->getStream();
+ $stream->expect(Twig_Token::BLOCK_END_TYPE);
+
+ return $this->parser->subparse(array($this, 'decideBlockEnd'), true);
+ }
+
+ public function decideBlockEnd(Twig_Token $token)
+ {
+ return $token->test($this->end);
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Boolean.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Boolean.php
new file mode 100644
index 0000000..578567e
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Boolean.php
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+class Twig_Extensions_Grammar_Boolean extends Twig_Extensions_Grammar
+{
+ public function __toString()
+ {
+ return sprintf('<%s:boolean>', $this->name);
+ }
+
+ public function parse(Twig_Token $token)
+ {
+ $this->parser->getStream()->expect(Twig_Token::NAME_TYPE, array('true', 'false'));
+
+ return new Twig_Node_Expression_Constant('true' === $token->getValue() ? true : false, $token->getLine());
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Constant.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Constant.php
new file mode 100644
index 0000000..8d82b82
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Constant.php
@@ -0,0 +1,41 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+class Twig_Extensions_Grammar_Constant extends Twig_Extensions_Grammar
+{
+ protected $type;
+
+ public function __construct($name, $type = null)
+ {
+ $this->name = $name;
+ $this->type = null === $type ? Twig_Token::NAME_TYPE : $type;
+ }
+
+ public function __toString()
+ {
+ return $this->name;
+ }
+
+ public function parse(Twig_Token $token)
+ {
+ $this->parser->getStream()->expect($this->type, $this->name);
+
+ return $this->name;
+ }
+
+ public function getType()
+ {
+ return $this->type;
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Expression.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Expression.php
new file mode 100644
index 0000000..b73156e
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Expression.php
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+class Twig_Extensions_Grammar_Expression extends Twig_Extensions_Grammar
+{
+ public function __toString()
+ {
+ return sprintf('<%s>', $this->name);
+ }
+
+ public function parse(Twig_Token $token)
+ {
+ return $this->parser->getExpressionParser()->parseExpression();
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Hash.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Hash.php
new file mode 100644
index 0000000..5ea3e69
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Hash.php
@@ -0,0 +1,26 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+class Twig_Extensions_Grammar_Hash extends Twig_Extensions_Grammar
+{
+ public function __toString()
+ {
+ return sprintf('<%s:hash>', $this->name);
+ }
+
+ public function parse(Twig_Token $token)
+ {
+ return $this->parser->getExpressionParser()->parseHashExpression();
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Number.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Number.php
new file mode 100644
index 0000000..68bbb62
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Number.php
@@ -0,0 +1,28 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+class Twig_Extensions_Grammar_Number extends Twig_Extensions_Grammar
+{
+ public function __toString()
+ {
+ return sprintf('<%s:number>', $this->name);
+ }
+
+ public function parse(Twig_Token $token)
+ {
+ $this->parser->getStream()->expect(Twig_Token::NUMBER_TYPE);
+
+ return new Twig_Node_Expression_Constant($token->getValue(), $token->getLine());
+ }
+}
diff --git a/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Optional.php b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Optional.php
new file mode 100644
index 0000000..0cde9bc
--- /dev/null
+++ b/srcs/phpmyadmin/vendor/twig/extensions/lib/Twig/Extensions/Grammar/Optional.php
@@ -0,0 +1,73 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * @deprecated since version 1.5
+ */
+class Twig_Extensions_Grammar_Optional extends Twig_Extensions_Grammar
+{
+ protected $grammar;
+
+ public function __construct()
+ {
+ $this->grammar = array();
+ foreach (func_get_args() as $grammar) {
+ $this->addGrammar($grammar);
+ }
+ }
+
+ public function __toString()
+ {
+ $repr = array();
+ foreach ($this->grammar as $grammar) {
+ $repr[] = (string) $grammar;
+ }
+
+ return sprintf('[%s]', implode(' ', $repr));
+ }
+
+ public function addGrammar(Twig_Extensions_GrammarInterface $grammar)
+ {
+ $this->grammar[] = $grammar;
+ }
+
+ public function parse(Twig_Token $token)
+ {
+ // test if we have the opti