Added Laravel project
This commit is contained in:
6
Laravel/vendor/theseer/tokenizer/src/Exception.php
vendored
Normal file
6
Laravel/vendor/theseer/tokenizer/src/Exception.php
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php declare(strict_types = 1);
|
||||
namespace TheSeer\Tokenizer;
|
||||
|
||||
class Exception extends \Exception {
|
||||
|
||||
}
|
28
Laravel/vendor/theseer/tokenizer/src/NamespaceUri.php
vendored
Normal file
28
Laravel/vendor/theseer/tokenizer/src/NamespaceUri.php
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php declare(strict_types = 1);
|
||||
namespace TheSeer\Tokenizer;
|
||||
|
||||
class NamespaceUri {
|
||||
|
||||
/** @var string */
|
||||
private $value;
|
||||
|
||||
/**
|
||||
* @param string $value
|
||||
*/
|
||||
public function __construct(string $value) {
|
||||
$this->ensureValidUri($value);
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
public function asString(): string {
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
private function ensureValidUri($value) {
|
||||
if (strpos($value, ':') === false) {
|
||||
throw new NamespaceUriException(
|
||||
sprintf("Namespace URI '%s' must contain at least one colon", $value)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
6
Laravel/vendor/theseer/tokenizer/src/NamespaceUriException.php
vendored
Normal file
6
Laravel/vendor/theseer/tokenizer/src/NamespaceUriException.php
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php declare(strict_types = 1);
|
||||
namespace TheSeer\Tokenizer;
|
||||
|
||||
class NamespaceUriException extends Exception {
|
||||
|
||||
}
|
55
Laravel/vendor/theseer/tokenizer/src/Token.php
vendored
Normal file
55
Laravel/vendor/theseer/tokenizer/src/Token.php
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
<?php declare(strict_types = 1);
|
||||
namespace TheSeer\Tokenizer;
|
||||
|
||||
class Token {
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $line;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $value;
|
||||
|
||||
/**
|
||||
* Token constructor.
|
||||
*
|
||||
* @param int $line
|
||||
* @param string $name
|
||||
* @param string $value
|
||||
*/
|
||||
public function __construct(int $line, string $name, string $value) {
|
||||
$this->line = $line;
|
||||
$this->name = $name;
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getLine(): int {
|
||||
return $this->line;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): string {
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getValue(): string {
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
}
|
128
Laravel/vendor/theseer/tokenizer/src/TokenCollection.php
vendored
Normal file
128
Laravel/vendor/theseer/tokenizer/src/TokenCollection.php
vendored
Normal file
@@ -0,0 +1,128 @@
|
||||
<?php declare(strict_types = 1);
|
||||
namespace TheSeer\Tokenizer;
|
||||
|
||||
class TokenCollection implements \ArrayAccess, \Iterator, \Countable {
|
||||
|
||||
/**
|
||||
* @var Token[]
|
||||
*/
|
||||
private $tokens = [];
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $pos;
|
||||
|
||||
/**
|
||||
* @param Token $token
|
||||
*/
|
||||
public function addToken(Token $token) {
|
||||
$this->tokens[] = $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Token
|
||||
*/
|
||||
public function current(): Token {
|
||||
return current($this->tokens);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function key(): int {
|
||||
return key($this->tokens);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function next() {
|
||||
next($this->tokens);
|
||||
$this->pos++;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function valid(): bool {
|
||||
return $this->count() > $this->pos;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function rewind() {
|
||||
reset($this->tokens);
|
||||
$this->pos = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function count(): int {
|
||||
return count($this->tokens);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function offsetExists($offset): bool {
|
||||
return isset($this->tokens[$offset]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
*
|
||||
* @return Token
|
||||
* @throws TokenCollectionException
|
||||
*/
|
||||
public function offsetGet($offset): Token {
|
||||
if (!$this->offsetExists($offset)) {
|
||||
throw new TokenCollectionException(
|
||||
sprintf('No Token at offest %s', $offset)
|
||||
);
|
||||
}
|
||||
|
||||
return $this->tokens[$offset];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
* @param Token $value
|
||||
*
|
||||
* @throws TokenCollectionException
|
||||
*/
|
||||
public function offsetSet($offset, $value) {
|
||||
if (!is_int($offset)) {
|
||||
$type = gettype($offset);
|
||||
throw new TokenCollectionException(
|
||||
sprintf(
|
||||
'Offset must be of type integer, %s given',
|
||||
$type === 'object' ? get_class($value) : $type
|
||||
)
|
||||
);
|
||||
}
|
||||
if (!$value instanceof Token) {
|
||||
$type = gettype($value);
|
||||
throw new TokenCollectionException(
|
||||
sprintf(
|
||||
'Value must be of type %s, %s given',
|
||||
Token::class,
|
||||
$type === 'object' ? get_class($value) : $type
|
||||
)
|
||||
);
|
||||
}
|
||||
$this->tokens[$offset] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
*/
|
||||
public function offsetUnset($offset) {
|
||||
unset($this->tokens[$offset]);
|
||||
}
|
||||
|
||||
}
|
6
Laravel/vendor/theseer/tokenizer/src/TokenCollectionException.php
vendored
Normal file
6
Laravel/vendor/theseer/tokenizer/src/TokenCollectionException.php
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php declare(strict_types = 1);
|
||||
namespace TheSeer\Tokenizer;
|
||||
|
||||
class TokenCollectionException extends Exception {
|
||||
|
||||
}
|
82
Laravel/vendor/theseer/tokenizer/src/Tokenizer.php
vendored
Normal file
82
Laravel/vendor/theseer/tokenizer/src/Tokenizer.php
vendored
Normal file
@@ -0,0 +1,82 @@
|
||||
<?php declare(strict_types = 1);
|
||||
namespace TheSeer\Tokenizer;
|
||||
|
||||
class Tokenizer {
|
||||
|
||||
/**
|
||||
* Token Map for "non-tokens"
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $map = [
|
||||
'(' => 'T_OPEN_BRACKET',
|
||||
')' => 'T_CLOSE_BRACKET',
|
||||
'[' => 'T_OPEN_SQUARE',
|
||||
']' => 'T_CLOSE_SQUARE',
|
||||
'{' => 'T_OPEN_CURLY',
|
||||
'}' => 'T_CLOSE_CURLY',
|
||||
';' => 'T_SEMICOLON',
|
||||
'.' => 'T_DOT',
|
||||
',' => 'T_COMMA',
|
||||
'=' => 'T_EQUAL',
|
||||
'<' => 'T_LT',
|
||||
'>' => 'T_GT',
|
||||
'+' => 'T_PLUS',
|
||||
'-' => 'T_MINUS',
|
||||
'*' => 'T_MULT',
|
||||
'/' => 'T_DIV',
|
||||
'?' => 'T_QUESTION_MARK',
|
||||
'!' => 'T_EXCLAMATION_MARK',
|
||||
':' => 'T_COLON',
|
||||
'"' => 'T_DOUBLE_QUOTES',
|
||||
'@' => 'T_AT',
|
||||
'&' => 'T_AMPERSAND',
|
||||
'%' => 'T_PERCENT',
|
||||
'|' => 'T_PIPE',
|
||||
'$' => 'T_DOLLAR',
|
||||
'^' => 'T_CARET',
|
||||
'~' => 'T_TILDE',
|
||||
'`' => 'T_BACKTICK'
|
||||
];
|
||||
|
||||
public function parse(string $source): TokenCollection {
|
||||
$result = new TokenCollection();
|
||||
$tokens = token_get_all($source);
|
||||
|
||||
$lastToken = new Token(
|
||||
$tokens[0][2],
|
||||
'Placeholder',
|
||||
''
|
||||
);
|
||||
|
||||
foreach ($tokens as $pos => $tok) {
|
||||
if (is_string($tok)) {
|
||||
$token = new Token(
|
||||
$lastToken->getLine(),
|
||||
$this->map[$tok],
|
||||
$tok
|
||||
);
|
||||
$result->addToken($token);
|
||||
$lastToken = $token;
|
||||
continue;
|
||||
}
|
||||
|
||||
$line = $tok[2];
|
||||
$values = preg_split('/\R+/Uu', $tok[1]);
|
||||
|
||||
foreach ($values as $v) {
|
||||
$token = new Token(
|
||||
$line,
|
||||
token_name($tok[0]),
|
||||
$v
|
||||
);
|
||||
$result->addToken($token);
|
||||
$line++;
|
||||
$lastToken = $token;
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
}
|
94
Laravel/vendor/theseer/tokenizer/src/XMLSerializer.php
vendored
Normal file
94
Laravel/vendor/theseer/tokenizer/src/XMLSerializer.php
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php declare(strict_types = 1);
|
||||
namespace TheSeer\Tokenizer;
|
||||
|
||||
use DOMDocument;
|
||||
|
||||
class XMLSerializer {
|
||||
|
||||
/**
|
||||
* @var \XMLWriter
|
||||
*/
|
||||
private $writer;
|
||||
|
||||
/**
|
||||
* @var Token
|
||||
*/
|
||||
private $previousToken;
|
||||
|
||||
/**
|
||||
* @var NamespaceUri
|
||||
*/
|
||||
private $xmlns;
|
||||
|
||||
/**
|
||||
* XMLSerializer constructor.
|
||||
*
|
||||
* @param NamespaceUri $xmlns
|
||||
*/
|
||||
public function __construct(NamespaceUri $xmlns = null) {
|
||||
if ($xmlns === null) {
|
||||
$xmlns = new NamespaceUri('https://github.com/theseer/tokenizer');
|
||||
}
|
||||
$this->xmlns = $xmlns;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TokenCollection $tokens
|
||||
*
|
||||
* @return DOMDocument
|
||||
*/
|
||||
public function toDom(TokenCollection $tokens): DOMDocument {
|
||||
$dom = new DOMDocument();
|
||||
$dom->preserveWhiteSpace = false;
|
||||
$dom->loadXML($this->toXML($tokens));
|
||||
|
||||
return $dom;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TokenCollection $tokens
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function toXML(TokenCollection $tokens): string {
|
||||
$this->writer = new \XMLWriter();
|
||||
$this->writer->openMemory();
|
||||
$this->writer->setIndent(true);
|
||||
$this->writer->startDocument();
|
||||
$this->writer->startElement('source');
|
||||
$this->writer->writeAttribute('xmlns', $this->xmlns->asString());
|
||||
$this->writer->startElement('line');
|
||||
$this->writer->writeAttribute('no', '1');
|
||||
|
||||
$this->previousToken = $tokens[0];
|
||||
foreach ($tokens as $token) {
|
||||
$this->addToken($token);
|
||||
}
|
||||
|
||||
$this->writer->endElement();
|
||||
$this->writer->endElement();
|
||||
$this->writer->endDocument();
|
||||
|
||||
return $this->writer->outputMemory();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Token $token
|
||||
*/
|
||||
private function addToken(Token $token) {
|
||||
if ($this->previousToken->getLine() < $token->getLine()) {
|
||||
$this->writer->endElement();
|
||||
|
||||
$this->writer->startElement('line');
|
||||
$this->writer->writeAttribute('no', (string)$token->getLine());
|
||||
$this->previousToken = $token;
|
||||
}
|
||||
|
||||
if ($token->getValue() !== '') {
|
||||
$this->writer->startElement('token');
|
||||
$this->writer->writeAttribute('name', $token->getName());
|
||||
$this->writer->writeRaw(htmlspecialchars($token->getValue(), ENT_NOQUOTES | ENT_DISALLOWED | ENT_XML1));
|
||||
$this->writer->endElement();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user