Skip to content

Commit

Permalink
fix: Parse CSS with duplicate selectors (#201)
Browse files Browse the repository at this point in the history
  • Loading branch information
norkunas authored Jan 24, 2023
1 parent 35d6c36 commit a316e3f
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 8 deletions.
12 changes: 6 additions & 6 deletions .github/workflows/php.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
phpcs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3

- name: Setup PHP and PHPCS
uses: shivammathur/setup-php@v2
Expand All @@ -24,7 +24,7 @@ jobs:

- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache Composer packages
uses: actions/cache@v3
Expand All @@ -45,7 +45,7 @@ jobs:
matrix:
php-versions: ['7.3', '7.4', '8.0', '8.1', '8.2']
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3

- name: Setup PHP ${{ matrix.php-versions }}
uses: shivammathur/setup-php@v2
Expand All @@ -56,7 +56,7 @@ jobs:

- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache Composer packages
uses: actions/cache@v3
Expand All @@ -74,7 +74,7 @@ jobs:
coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3

- name: Setup PHP with tools
uses: shivammathur/setup-php@v2
Expand All @@ -84,7 +84,7 @@ jobs:

- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT

- name: Cache Composer packages
uses: actions/cache@v3
Expand Down
6 changes: 4 additions & 2 deletions src/Utilities/SVGStyleParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,13 +53,15 @@ public static function parseCss(string $css): array
preg_match_all('/(?ims)([a-z0-9\s\,\.\:#_\-@^*()\[\]\"\'=]+)\{([^\}]*)\}/', $css, $arr);

foreach ($arr[0] as $i => $x) {
$selectors = explode(',', Str::trim($arr[1][$i]));
$selectors = array_map(function (string $selector) {
return Str::trim($selector);
}, explode(',', Str::trim($arr[1][$i])));
if (in_array($selectors[0], ['@font-face', '@keyframes', '@media'])) {
continue;
}
$rules = self::parseStyles(Str::trim($arr[2][$i]));
foreach ($selectors as $selector) {
$result[Str::trim($selector)] = $rules;
$result[$selector] = array_merge($result[$selector] ?? [], $rules);
}
}

Expand Down
7 changes: 7 additions & 0 deletions tests/Utilities/SVGStyleParserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,11 @@ public function testParseCssWithSkippedElement()

$this->assertCount(0, $result);
}

public function testParseDuplicateSelectors()
{
$result = SVGStyleParser::parseCss('svg {background-color: beige;}; svg {stroke: none;} svg { fill: blue }');

$this->assertSame(['svg' => ['background-color' => 'beige', 'stroke' => 'none', 'fill' => 'blue']], $result);
}
}

0 comments on commit a316e3f

Please sign in to comment.