1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau/** 4*04fd306cSNickeau * Exception thrown if a scanner status finds does not find a 5*04fd306cSNickeau * valid character. 6*04fd306cSNickeau * 7*04fd306cSNickeau * @license http://www.opensource.org/licenses/mit-license.php The MIT License 8*04fd306cSNickeau * @copyright Copyright 2010-2014 PhpCss Team 9*04fd306cSNickeau */ 10*04fd306cSNickeau 11*04fd306cSNickeaunamespace PhpCss\Exception { 12*04fd306cSNickeau 13*04fd306cSNickeau use PhpCss; 14*04fd306cSNickeau use PhpCss\Scanner\Status; 15*04fd306cSNickeau use UnexpectedValueException; 16*04fd306cSNickeau 17*04fd306cSNickeau /** 18*04fd306cSNickeau * Exception thrown if a scanner status finds does not 19*04fd306cSNickeau * find a valid character. 20*04fd306cSNickeau */ 21*04fd306cSNickeau class InvalidCharacterException 22*04fd306cSNickeau extends UnexpectedValueException 23*04fd306cSNickeau implements PhpCssException { 24*04fd306cSNickeau 25*04fd306cSNickeau /** @var int $offset byte offset */ 26*04fd306cSNickeau private $_offset; 27*04fd306cSNickeau /** @var string $buffer string buffer */ 28*04fd306cSNickeau private $_buffer; 29*04fd306cSNickeau /** @var Status $status scanner status */ 30*04fd306cSNickeau private $_status; 31*04fd306cSNickeau 32*04fd306cSNickeau /** 33*04fd306cSNickeau * @param string $buffer 34*04fd306cSNickeau * @param int $offset 35*04fd306cSNickeau * @param Status $status 36*04fd306cSNickeau */ 37*04fd306cSNickeau public function __construct(string $buffer, int $offset, Status $status) { 38*04fd306cSNickeau $this->_buffer = $buffer; 39*04fd306cSNickeau $this->_offset = $offset; 40*04fd306cSNickeau $this->_status = $status; 41*04fd306cSNickeau parent::__construct( 42*04fd306cSNickeau sprintf( 43*04fd306cSNickeau 'Invalid char "%s" for status "%s" at offset #%d in "%s"', 44*04fd306cSNickeau $this->getChar(), 45*04fd306cSNickeau get_class($this->_status), 46*04fd306cSNickeau $this->_offset, 47*04fd306cSNickeau $this->_buffer 48*04fd306cSNickeau ) 49*04fd306cSNickeau ); 50*04fd306cSNickeau } 51*04fd306cSNickeau 52*04fd306cSNickeau /** 53*04fd306cSNickeau * Match the utf-8 character at the byte offset position. 54*04fd306cSNickeau * 55*04fd306cSNickeau * @return string 56*04fd306cSNickeau */ 57*04fd306cSNickeau public function getChar(): string { 58*04fd306cSNickeau if (preg_match('(.)suS', $this->_buffer, $match, 0, $this->_offset)) { 59*04fd306cSNickeau return $match[0]; 60*04fd306cSNickeau } 61*04fd306cSNickeau return ''; 62*04fd306cSNickeau } 63*04fd306cSNickeau 64*04fd306cSNickeau public function getOffset(): int { 65*04fd306cSNickeau return $this->_offset; 66*04fd306cSNickeau } 67*04fd306cSNickeau 68*04fd306cSNickeau public function getBuffer(): string { 69*04fd306cSNickeau return $this->_buffer; 70*04fd306cSNickeau } 71*04fd306cSNickeau 72*04fd306cSNickeau public function getStatus(): Status { 73*04fd306cSNickeau return $this->_status; 74*04fd306cSNickeau } 75*04fd306cSNickeau } 76*04fd306cSNickeau} 77