X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/vendor/wikimedia/css-sanitizer/src/Objects/SimpleBlock.php diff --git a/vendor/wikimedia/css-sanitizer/src/Objects/SimpleBlock.php b/vendor/wikimedia/css-sanitizer/src/Objects/SimpleBlock.php new file mode 100644 index 00000000..c5eda60a --- /dev/null +++ b/vendor/wikimedia/css-sanitizer/src/Objects/SimpleBlock.php @@ -0,0 +1,125 @@ +endTokenType = static::matchingDelimiter( $token->type() ); + if ( $this->endTokenType === null ) { + throw new \InvalidArgumentException( + 'A SimpleBlock is delimited by either {}, [], or ().' + ); + } + + list( $this->line, $this->pos ) = $token->getPosition(); + $this->startTokenType = $token->type(); + $this->value = new ComponentValueList(); + } + + public function __clone() { + $this->value = clone( $this->value ); + } + + /** + * Create simple block by token type + * @param string $delimiter Token::T_LEFT_PAREN, Token::T_LEFT_BRACE, or + * Token::T_LEFT_BRACKET + * @return SimpleBlock + */ + public static function newFromDelimiter( $delimiter ) { + return new static( new Token( $delimiter ) ); + } + + /** + * Return the ending delimiter for a starting delimiter + * @param string Token::T_* constant + * @return string|null Matching Token::T_* constant, if any + */ + public static function matchingDelimiter( $delim ) { + switch ( $delim ) { + case Token::T_LEFT_BRACE: + return Token::T_RIGHT_BRACE; + case Token::T_LEFT_BRACKET: + return Token::T_RIGHT_BRACKET; + case Token::T_LEFT_PAREN: + return Token::T_RIGHT_PAREN; + default: + return null; + } + } + + /** + * Get the start token type + * @return string + */ + public function getStartTokenType() { + return $this->startTokenType; + } + + /** + * Get the end token type + * @return string + */ + public function getEndTokenType() { + return $this->endTokenType; + } + + /** + * Return the block's value + * @return ComponentValueList + */ + public function getValue() { + return $this->value; + } + + public function toTokenArray() { + $ret = [ + new Token( $this->startTokenType, [ 'position' => [ $this->line, $this->pos ] ] ), + ]; + + // Manually looping and appending turns out to be noticably faster than array_merge. + $tokens = $this->value->toTokenArray(); + if ( $tokens && $this->startTokenType === Token::T_LEFT_BRACE ) { + if ( $tokens[0]->type() !== Token::T_WHITESPACE ) { + $ret[] = new Token( Token::T_WHITESPACE, [ 'significant' => false ] ); + } + foreach ( $tokens as $v ) { + $ret[] = $v; + } + if ( $tokens[count( $tokens ) - 1]->type() !== Token::T_WHITESPACE ) { + $ret[] = new Token( Token::T_WHITESPACE, [ 'significant' => false ] ); + } + } else { + foreach ( $tokens as $v ) { + $ret[] = $v; + } + } + + $ret[] = new Token( $this->endTokenType ); + + return $ret; + } + + public function __toString() { + return Util::stringify( $this ); + } +}