--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/symfony/src/Symfony/Component/Templating/Helper/SlotsHelper.php Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,147 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Templating\Helper;
+
+/**
+ * SlotsHelper manages template slots.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ *
+ * @api
+ */
+class SlotsHelper extends Helper
+{
+ protected $slots = array();
+ protected $openSlots = array();
+
+ /**
+ * Starts a new slot.
+ *
+ * This method starts an output buffer that will be
+ * closed when the stop() method is called.
+ *
+ * @param string $name The slot name
+ *
+ * @throws \InvalidArgumentException if a slot with the same name is already started
+ *
+ * @api
+ */
+ public function start($name)
+ {
+ if (in_array($name, $this->openSlots)) {
+ throw new \InvalidArgumentException(sprintf('A slot named "%s" is already started.', $name));
+ }
+
+ $this->openSlots[] = $name;
+ $this->slots[$name] = '';
+
+ ob_start();
+ ob_implicit_flush(0);
+ }
+
+ /**
+ * Stops a slot.
+ *
+ * @throws \LogicException if no slot has been started
+ *
+ * @api
+ */
+ public function stop()
+ {
+ if (!$this->openSlots) {
+ throw new \LogicException('No slot started.');
+ }
+
+ $name = array_pop($this->openSlots);
+
+ $this->slots[$name] = ob_get_clean();
+ }
+
+ /**
+ * Returns true if the slot exists.
+ *
+ * @param string $name The slot name
+ *
+ * @api
+ */
+ public function has($name)
+ {
+ return isset($this->slots[$name]);
+ }
+
+ /**
+ * Gets the slot value.
+ *
+ * @param string $name The slot name
+ * @param string $default The default slot content
+ *
+ * @return string The slot content
+ *
+ * @api
+ */
+ public function get($name, $default = false)
+ {
+ return isset($this->slots[$name]) ? $this->slots[$name] : $default;
+ }
+
+ /**
+ * Sets a slot value.
+ *
+ * @param string $name The slot name
+ * @param string $content The slot content
+ *
+ * @api
+ */
+ public function set($name, $content)
+ {
+ $this->slots[$name] = $content;
+ }
+
+ /**
+ * Outputs a slot.
+ *
+ * @param string $name The slot name
+ * @param string $default The default slot content
+ *
+ * @return Boolean true if the slot is defined or if a default content has been provided, false otherwise
+ *
+ * @api
+ */
+ public function output($name, $default = false)
+ {
+ if (!isset($this->slots[$name])) {
+ if (false !== $default) {
+ echo $default;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ echo $this->slots[$name];
+
+ return true;
+ }
+
+ /**
+ * Returns the canonical name of this helper.
+ *
+ * @return string The canonical name
+ *
+ * @api
+ */
+ public function getName()
+ {
+ return 'slots';
+ }
+}