diff options
Diffstat (limited to 'vendor/mikespub/php-epub-meta/src/Contents/Spine.php')
-rw-r--r-- | vendor/mikespub/php-epub-meta/src/Contents/Spine.php | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/vendor/mikespub/php-epub-meta/src/Contents/Spine.php b/vendor/mikespub/php-epub-meta/src/Contents/Spine.php new file mode 100644 index 000000000..e6dfc2a84 --- /dev/null +++ b/vendor/mikespub/php-epub-meta/src/Contents/Spine.php @@ -0,0 +1,198 @@ +<?php + +namespace SebLucas\EPubMeta\Contents; + +use SebLucas\EPubMeta\Data\Item; +use ArrayAccess; +use Countable; +use Iterator; +use BadMethodCallException; + +/** + * EPUB spine structure + * + * @author Simon Schrape <simon@epubli.com> + * @implements \Iterator<int, Item> + * @implements \ArrayAccess<int, Item> + */ +class Spine implements Iterator, Countable, ArrayAccess +{ + /** @var Item */ + protected $tocItem; + protected string $tocFormat; + /** @var array|Item[] The ordered list of all Items in this Spine. */ + protected $items = []; + + /** + * Spine Constructor. + * + * @param Item $tocItem The TOC Item of this Spine. + * @param string $tocFormat The TOC Format of this Spine (Toc or Nav). + */ + public function __construct(Item $tocItem, string $tocFormat) + { + $this->tocItem = $tocItem; + $this->tocFormat = $tocFormat; + } + + /** + * Get the TOC Item of this Spine. + * + * @return Item + */ + public function getTocItem() + { + return $this->tocItem; + } + + /** + * Get the TOC Format of this Spine. + * + * @return string + */ + public function getTocFormat() + { + return $this->tocFormat; + } + + /** + * Append an Item to this Spine. + * + * @param Item $item The Item to append to this Spine. + * @return void + */ + public function appendItem(Item $item) + { + $this->items[] = $item; + } + + /** + * Return the current Item while iterating this Spine. + * + * @link http://php.net/manual/en/iterator.current.php + * @return Item + */ + public function current(): Item + { + return current($this->items); + } + + /** + * Move forward to next Item while iterating this Spine. + * @link http://php.net/manual/en/iterator.next.php + * @return void Any returned value is ignored. + */ + public function next(): void + { + next($this->items); + } + + /** + * Return the index of the current Item while iterating this Spine. + * + * @link http://php.net/manual/en/iterator.key.php + * @return int|null on success, or null on failure. + */ + public function key(): ?int + { + return key($this->items); + } + + /** + * Checks if current Iterator position is valid. + * + * @link http://php.net/manual/en/iterator.valid.php + * @return boolean true on success or false on failure. + */ + public function valid(): bool + { + return (bool) current($this->items); + } + + /** + * Rewind the Iterator to the first element. + * + * @link http://php.net/manual/en/iterator.rewind.php + * @return void Any returned value is ignored. + */ + public function rewind(): void + { + reset($this->items); + } + + /** + * Get the first Item of this Spine. + * + * @return Item + */ + public function first() + { + return reset($this->items); + } + + /** + * Get the last Item of this Spine. + * + * @return Item + */ + public function last() + { + return end($this->items); + } + + /** + * Count items of this Spine. + * + * @link https://php.net/manual/en/countable.count.php + * @return int The number of Items contained in this Spine. + */ + public function count(): int + { + return count($this->items); + } + + /** + * Whether a offset exists + * @link https://php.net/manual/en/arrayaccess.offsetexists.php + * @param int $offset An offset to check for. + * @return boolean true on success or false on failure. + */ + public function offsetExists($offset): bool + { + return isset($this->items[$offset]); + } + + /** + * Offset to retrieve + * @link https://php.net/manual/en/arrayaccess.offsetget.php + * @param int $offset The offset to retrieve. + * @return Item + */ + public function offsetGet($offset): Item + { + return $this->items[$offset]; + } + + /** + * Offset to set + * @link https://php.net/manual/en/arrayaccess.offsetset.php + * @param mixed $offset The offset to assign the value to. + * @param mixed $value The value to set. + * @throws BadMethodCallException + */ + public function offsetSet($offset, $value): void + { + throw new BadMethodCallException("Only reading array access is supported!"); + } + + /** + * Offset to unset + * @link https://php.net/manual/en/arrayaccess.offsetunset.php + * @param mixed $offset The offset to unset. + * @throws BadMethodCallException + */ + public function offsetUnset($offset): void + { + throw new BadMethodCallException("Only reading array access is supported!"); + } +} |