Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\CssSelector\Parser; Chris@0: Chris@0: /** Chris@0: * CSS selector token. Chris@0: * Chris@0: * This component is a port of the Python cssselect library, Chris@0: * which is copyright Ian Bicking, @see https://github.com/SimonSapin/cssselect. Chris@0: * Chris@0: * @author Jean-François Simon Chris@0: * Chris@0: * @internal Chris@0: */ Chris@0: class Token Chris@0: { Chris@0: const TYPE_FILE_END = 'eof'; Chris@0: const TYPE_DELIMITER = 'delimiter'; Chris@0: const TYPE_WHITESPACE = 'whitespace'; Chris@0: const TYPE_IDENTIFIER = 'identifier'; Chris@0: const TYPE_HASH = 'hash'; Chris@0: const TYPE_NUMBER = 'number'; Chris@0: const TYPE_STRING = 'string'; Chris@0: Chris@0: private $type; Chris@0: private $value; Chris@0: private $position; Chris@0: Chris@0: /** Chris@0: * @param int $type Chris@0: * @param string $value Chris@0: * @param int $position Chris@0: */ Chris@0: public function __construct($type, $value, $position) Chris@0: { Chris@0: $this->type = $type; Chris@0: $this->value = $value; Chris@0: $this->position = $position; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return int Chris@0: */ Chris@0: public function getType() Chris@0: { Chris@0: return $this->type; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return string Chris@0: */ Chris@0: public function getValue() Chris@0: { Chris@0: return $this->value; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return int Chris@0: */ Chris@0: public function getPosition() Chris@0: { Chris@0: return $this->position; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Chris@0: */ Chris@0: public function isFileEnd() Chris@0: { Chris@0: return self::TYPE_FILE_END === $this->type; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Chris@0: */ Chris@17: public function isDelimiter(array $values = []) Chris@0: { Chris@0: if (self::TYPE_DELIMITER !== $this->type) { Chris@0: return false; Chris@0: } Chris@0: Chris@0: if (empty($values)) { Chris@0: return true; Chris@0: } Chris@0: Chris@17: return \in_array($this->value, $values); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Chris@0: */ Chris@0: public function isWhitespace() Chris@0: { Chris@0: return self::TYPE_WHITESPACE === $this->type; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Chris@0: */ Chris@0: public function isIdentifier() Chris@0: { Chris@0: return self::TYPE_IDENTIFIER === $this->type; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Chris@0: */ Chris@0: public function isHash() Chris@0: { Chris@0: return self::TYPE_HASH === $this->type; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Chris@0: */ Chris@0: public function isNumber() Chris@0: { Chris@0: return self::TYPE_NUMBER === $this->type; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return bool Chris@0: */ Chris@0: public function isString() Chris@0: { Chris@0: return self::TYPE_STRING === $this->type; Chris@0: } Chris@0: Chris@0: /** Chris@0: * @return string Chris@0: */ Chris@0: public function __toString() Chris@0: { Chris@0: if ($this->value) { Chris@0: return sprintf('<%s "%s" at %s>', $this->type, $this->value, $this->position); Chris@0: } Chris@0: Chris@0: return sprintf('<%s at %s>', $this->type, $this->position); Chris@0: } Chris@0: }