aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/mikespub/php-epub-meta/src/Data/Manifest.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/mikespub/php-epub-meta/src/Data/Manifest.php')
-rw-r--r--vendor/mikespub/php-epub-meta/src/Data/Manifest.php174
1 files changed, 174 insertions, 0 deletions
diff --git a/vendor/mikespub/php-epub-meta/src/Data/Manifest.php b/vendor/mikespub/php-epub-meta/src/Data/Manifest.php
new file mode 100644
index 000000000..428b2cc02
--- /dev/null
+++ b/vendor/mikespub/php-epub-meta/src/Data/Manifest.php
@@ -0,0 +1,174 @@
+<?php
+
+namespace SebLucas\EPubMeta\Data;
+
+use ArrayAccess;
+use Countable;
+use Exception;
+use BadMethodCallException;
+use Iterator;
+
+/**
+ * EPUB manifest structure
+ *
+ * @author Simon Schrape <simon@epubli.com>
+ * @implements \Iterator<string, Item>
+ * @implements \ArrayAccess<string, Item>
+ */
+class Manifest implements Iterator, Countable, ArrayAccess
+{
+ /** @var array|Item[] The map of all Items in this Manifest indexed by their IDs. */
+ protected $items = [];
+
+ /**
+ * Create and add an Item with the given properties.
+ *
+ * @param string $id The identifier of the new item.
+ * @param string $href The relative path of the referenced file in the EPUB.
+ * @param callable $callable A callable to get data from the referenced file in the EPUB.
+ * @param int $size The size of the referenced file in the EPUB.
+ * @param string|null $mediaType
+ * @return Item The newly created Item.
+ * @throws Exception If $id is already taken.
+ */
+ public function createItem($id, $href, $callable, $size, $mediaType = null)
+ {
+ if (isset($this->items[$id])) {
+ throw new Exception("Item with ID $id already exists!");
+ }
+ $item = new Item($id, $href, $callable, $size, $mediaType);
+ $this->items[$id] = $item;
+
+ return $item;
+ }
+
+ /**
+ * Return the current Item while iterating this Manifest.
+ *
+ * @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 Manifest.
+ * @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 ID of the current Item while iterating this Manifest.
+ *
+ * @link http://php.net/manual/en/iterator.key.php
+ * @return string|null on success, or null on failure.
+ */
+ public function key(): ?string
+ {
+ 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 Manifest.
+ *
+ * @return Item
+ */
+ public function first()
+ {
+ return reset($this->items);
+ }
+
+ /**
+ * Get the last Item of this Manifest.
+ *
+ * @return Item
+ */
+ public function last()
+ {
+ return end($this->items);
+ }
+
+ /**
+ * Count items of this Manifest.
+ *
+ * @link https://php.net/manual/en/countable.count.php
+ * @return int The number of Items contained in this Manifest.
+ */
+ public function count(): int
+ {
+ return count($this->items);
+ }
+
+ /**
+ * Whether a offset exists
+ * @link https://php.net/manual/en/arrayaccess.offsetexists.php
+ * @param string $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 string $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!");
+ }
+}