xref: /plugin/combo/vendor/carica/phpcss/src/PhpCss/Exception/InvalidCharacterException.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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