%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/vendor/wikimedia/remex-html/RemexHtml/Tokenizer/ |
Current File : //www/varak.net/wiki.varak.net/vendor/wikimedia/remex-html/RemexHtml/Tokenizer/LazyAttributes.php |
<?php namespace RemexHtml\Tokenizer; /** * An Attributes implementation which defers interpretation of regex match * results until the caller requires them. * * This should not be directly instantiated outside of Tokenizer. */ class LazyAttributes implements Attributes { private $tokenizer; private $data; private $attributes; private $attrObjects; public function __construct( $data, callable $interpreter ) { $this->interpreter = $interpreter; $this->data = $data; } private function init() { if ( $this->attributes === null ) { $func = $this->interpreter; $this->attributes = $func( $this->data ); $this->interpreter = null; } } public function offsetExists( $offset ) { if ( $this->attributes === null ) { $this->init(); } return isset( $this->attributes[$offset] ); } public function &offsetGet( $offset ) { if ( $this->attributes === null ) { $this->init(); } return $this->attributes[$offset]; } public function offsetSet( $offset, $value ) { if ( $this->attributes === null ) { $this->init(); } $this->attributes[$offset] = $value; } public function offsetUnset( $offset ) { if ( $this->attributes === null ) { $this->init(); } unset( $this->attributes[$offset] ); } public function getValues() { if ( $this->attributes === null ) { $this->init(); } return $this->attributes; } public function getObjects() { if ( $this->attrObjects === null ) { if ( $this->attributes === null ) { $this->init(); } $result = []; foreach ( $this->attributes as $name => $value ) { $result[$name] = new Attribute( $name, null, null, $name, $value ); } $this->attrObjects = $result; } return $this->attrObjects; } public function count() { return is_object( $this->data ) ? $this->data->count() : count( $this->data ); } public function getIterator() { if ( $this->attributes === null ) { $this->init(); } return new \ArrayIterator( $this->attributes ); } public function merge( Attributes $other ) { if ( $this->attributes === null ) { $this->init(); } foreach ( $other as $name => $value ) { if ( !isset( $this->attributes[$name] ) ) { $this->attributes[$name] = $value; } } } }