update crush4 for php8

Update for php8 with small changes
This commit is contained in:
g7sim 2022-01-24 13:16:40 +01:00
parent 040589d296
commit b35bf2a665
10 changed files with 161 additions and 61 deletions

View file

@ -0,0 +1,107 @@
/*eslint sort-keys: 2*/
/*eslint object-property-newline: 2*/
/*eslint quote-props: [2, "consistent"]*/
module.exports = {
env: {
es6: true,
node: true,
},
extends: 'eslint:recommended',
parserOptions: {
ecmaVersion: 9,
},
rules: {
'array-bracket-spacing': [2, 'never'],
'array-element-newline': [2, 'consistent'],
'arrow-parens': [2, 'as-needed'],
'arrow-spacing': 2,
'brace-style': [2, 'stroustrup'],
'camelcase': [2, {
ignoreDestructuring: true,
properties: 'never',
}],
'comma-dangle': [2, {
arrays: 'always-multiline',
functions: 'never',
objects: 'always-multiline',
}],
'comma-spacing': [2, {
after: true,
before: false,
}],
'curly': 2,
'eol-last': [2, 'always'],
'eqeqeq': 2,
'key-spacing': [2, {
afterColon: true,
beforeColon: false,
}],
'keyword-spacing': 2,
'linebreak-style': [2, 'unix'],
'multiline-comment-style': [2, 'starred-block'],
'no-console': 2,
'no-dupe-keys': 2,
'no-else-return': 2,
'no-empty': [2, {
allowEmptyCatch: true,
}],
'no-lonely-if': 2,
'no-multi-spaces': 2,
'no-multiple-empty-lines': [2, {
max: 2,
maxBOF: 1,
maxEOF: 1,
}],
'no-new-object': 2,
'no-template-curly-in-string': 2,
'no-tabs': 2,
'no-throw-literal': 2,
'no-trailing-spaces': 2,
'no-unneeded-ternary': 2,
'no-unused-expressions': [2, {allowShortCircuit: true}],
'no-unused-vars': [2, {
args: 'all',
argsIgnorePattern: '^(req|res|next)$|^_',
varsIgnorePattern: '^_$',
}],
'no-useless-call': 2,
'no-useless-concat': 2,
'no-useless-return': 2,
'no-var': 2,
'object-curly-newline': [2, {consistent: true}],
'object-curly-spacing': [2, 'never'],
'object-shorthand': [2, 'properties'],
'operator-linebreak': [2, 'before', {
overrides: {
':': 'ignore',
'?': 'ignore',
},
}],
'prefer-arrow-callback': 2,
'prefer-const': [2, {destructuring: 'all'}],
'prefer-destructuring': [2, {
array: false,
object: true,
}],
'prefer-object-spread': 2,
'quote-props': [2, 'as-needed'],
'quotes': [2, 'single', {
allowTemplateLiterals: true,
avoidEscape: true,
}],
'semi': [2, 'always'],
'space-before-blocks': 2,
'space-before-function-paren': [2, {
anonymous: 'always',
asyncArrow: 'always',
named: 'never',
}],
'space-unary-ops': [2, {
nonwords: false,
overrides: {'!': true},
words: true,
}],
'yoda': 2,
},
};

View file

@ -1,4 +1,4 @@
[![Build Status](https://travis-ci.org/peteboere/css-crush.svg)](https://travis-ci.org/peteboere/css-crush)
![CI](https://github.com/peteboere/css-crush/actions/workflows/php.yml/badge.svg)
<img src="http://the-echoplex.net/csscrush/images/css-crush-external.svg?v=2" alt="Logo"/>

View file

@ -73,40 +73,23 @@
align-items[] = -webkit-align-items
align-self[] = -webkit-align-self
flex[] = -webkit-flex
flex[] = -ms-flex
flex-basis[] = -webkit-flex-basis
flex-direction[] = -webkit-flex-direction
flex-direction[] = -ms-flex-direction
flex-flow[] = -webkit-flex-flow
flex-flow[] = -ms-flex-flow
flex-grow[] = -webkit-flex-grow
flex-shrink[] = -webkit-flex-shrink
flex-wrap[] = -webkit-flex-wrap
flex-wrap[] = -ms-flex-wrap
justify-content[] = -webkit-justify-content
order[] = -webkit-order
order[] = -ms-flex-order
; Hyphens.
hyphens[] = -webkit-hyphens
hyphens[] = -ms-hyphens
; Outline radius.
outline-radius[] = -moz-outline-radius
outline-top-left-radius[] = -moz-outline-radius-topleft
outline-top-right-radius[] = -moz-outline-radius-topright
outline-bottom-left-radius[] = -moz-outline-radius-bottomleft
outline-bottom-right-radius[] = -moz-outline-radius-bottomright
; Perspective.
perspective[] = -webkit-perspective
perspective-origin[] = -webkit-perspective-origin
; Shapes
shape-image-threshold[] = -webkit-shape-image-threshold
shape-outside[] = -webkit-shape-outside
shape-margin[] = -webkit-shape-margin
; Tab size.
tab-size[] = -moz-tab-size
tab-size[] = -o-tab-size
@ -143,38 +126,9 @@
[declarations]
; Flexbox (2012).
display:flex[] = display:-ms-flexbox
display:flex[] = display:-webkit-flex
display:inline-flex[] = display:-ms-inline-flexbox
display:inline-flex[] = display:-webkit-inline-flex
; Flexbox (early 2012).
align-content:flex-start[] = -ms-flex-line-pack:start
align-content:flex-end[] = -ms-flex-line-pack:end
align-content:center[] = -ms-flex-line-pack:center
align-content:space-between[] = -ms-flex-line-pack:justify
align-content:space-around[] = -ms-flex-line-pack:distribute
align-content:stretch[] = -ms-flex-line-pack:stretch
align-items:flex-start[] = -ms-flex-align:start
align-items:flex-end[] = -ms-flex-align:end
align-items:center[] = -ms-flex-align:center
align-items:baseline[] = -ms-flex-align:baseline
align-items:stretch[] = -ms-flex-align:stretch
align-self:auto[] = -ms-flex-item-align:auto
align-self:flex-start[] = -ms-flex-item-align:start
align-self:flex-end[] = -ms-flex-item-align:end
align-self:center[] = -ms-flex-item-align:center
align-self:baseline[] = -ms-flex-item-align:baseline
align-self:stretch[] = -ms-flex-item-align:stretch
justify-content:flex-start[] = -ms-flex-pack:start
justify-content:flex-end[] = -ms-flex-pack:end
justify-content:center[] = -ms-flex-pack:center
justify-content:space-between[] = -ms-flex-pack:justify
justify-content:space-around[] = -ms-flex-pack:distribute
; Cursor values (non-standard).
cursor:zoom-in[] = cursor:-webkit-zoom-in
cursor:zoom-out[] = cursor:-webkit-zoom-out

View file

@ -285,5 +285,9 @@ function log($message, $context = [], $type = 'debug') {
Crush::$config->logger->$type($message, $context);
}
// Compat with PHP < 7.2.
if (! defined('PREG_UNMATCHED_AS_NULL')) {
define('PREG_UNMATCHED_AS_NULL', null);
}
Crush::init();

View file

@ -368,7 +368,7 @@ class DeclarationList extends Iterator
public static function parse($str, $options = [])
{
$str = Util::stripCommentTokens($str);
$lines = preg_split('~\s*;\s*~', $str, null, PREG_SPLIT_NO_EMPTY);
$lines = preg_split('~\s*;\s*~', $str, -1, PREG_SPLIT_NO_EMPTY);
$options += [
'keyed' => false,

View file

@ -102,7 +102,9 @@ class Functions
}
}
$str = substr_replace($str, $returns, $offset, $closingParen - $offset);
if (! is_null($returns)) {
$str = substr_replace($str, $returns, $offset, $closingParen - $offset);
}
}
return $str;

View file

@ -31,7 +31,10 @@ class IO
{
$options = $this->process->options;
$inputBasename = basename($this->process->input->filename, '.css');
$inputBasename = $this->process->input->filename
? basename($this->process->input->filename, '.css')
: 'styles';
$outputBasename = $inputBasename;
if (! empty($options->output_file)) {

View file

@ -18,7 +18,7 @@ class Iterator implements \IteratorAggregate, \ArrayAccess, \Countable
/*
IteratorAggregate implementation.
*/
public function getIterator()
public function getIterator(): \Traversable
{
return new \ArrayIterator($this->store);
}
@ -26,22 +26,22 @@ class Iterator implements \IteratorAggregate, \ArrayAccess, \Countable
/*
ArrayAccess implementation.
*/
public function offsetExists($index)
public function offsetExists($index): bool
{
return array_key_exists($index, $this->store);
}
public function offsetGet($index)
public function offsetGet($index): mixed
{
return isset($this->store[$index]) ? $this->store[$index] : null;
}
public function offsetSet($index, $value)
public function offsetSet($index, $value): void
{
$this->store[$index] = $value;
}
public function offsetUnset($index)
public function offsetUnset($index): void
{
unset($this->store[$index]);
}
@ -54,7 +54,7 @@ class Iterator implements \IteratorAggregate, \ArrayAccess, \Countable
/*
Countable implementation.
*/
public function count()
public function count(): int
{
return count($this->store);
}

View file

@ -107,7 +107,7 @@ class Process
}
$this->input->dir = $input_dir ?: $this->docRoot;
$this->input->dirUrl = substr($input_dir, strlen($this->docRoot));
$this->input->dirUrl = substr($this->input->dir, strlen($this->docRoot));
$this->output->dir = $this->io->getOutputDir();
$this->output->filename = $this->io->getOutputFileName();
@ -268,7 +268,7 @@ class Process
foreach ($vendor_names as &$vendor_name) {
$vendor_name = trim($vendor_name, '-');
}
$vendor_patt = '~^\-(' . implode($vendor_names, '|') . ')\-~i';
$vendor_patt = '~^\-(' . implode('|', $vendor_names) . ')\-~i';
// Loop the aliases array, filter down to the target vendor.
@ -623,7 +623,7 @@ class Process
$traceOffset = $traceMatches[0][$count][1];
preg_match($rulePatt, $this->string->raw, $ruleMatch, null, $traceOffset);
preg_match($rulePatt, $this->string->raw, $ruleMatch, PREG_UNMATCHED_AS_NULL, $traceOffset);
$selector = trim($ruleMatch['selector']);
$block = trim($ruleMatch['block_content']);
@ -913,6 +913,9 @@ class Process
'memory_limit' => '128M',
] as $name => $value) {
$this->iniOriginal[$name] = ini_get($name);
if ($name === 'memory_limit' && $this->returnBytes(ini_get($name)) > $this->returnBytes($value)) {
continue;
}
ini_set($name, $value);
}
@ -924,6 +927,25 @@ class Process
$this->stat['compile_start_time'] = microtime(true);
}
private function returnBytes(string $value)
{
$value = trim($value);
$last = strtolower($value[strlen($value) - 1]);
$value = (float) $value;
switch ($last) {
// The 'G' modifier is available
case 'g':
$value *= 1024;
case 'm':
$value *= 1024;
case 'k':
$value *= 1024;
}
return $value;
}
public function postCompile()
{
$this->release();

View file

@ -170,8 +170,16 @@ class Url
}
$mime_type = $allowed_file_extensions[$file_ext];
$base64 = base64_encode(file_get_contents($file));
$this->value = "data:$mime_type;base64,$base64";
$file_contents = file_get_contents($file);
if ($file_ext === 'svg') {
$string = preg_replace('/\R/', '%0A', trim($file_contents));
$this->value = "data:$mime_type;utf8,$string";
}
else {
$base64 = base64_encode($file_contents);
$this->value = "data:$mime_type;base64,$base64";
}
$this->setType('data')->protocol = 'data';