- Support for PHP 8.x
- PHPDoc annotations
- Allow usage of CSS variables inside color functions (by parsing them as regular functions)
- Use PSR-12 code style
- No deprecations
- Improved handling of whitespace in
calc()
- Fix parsing units whose prefix is also a valid unit, like
vmin
- Allow passing an object to
CSSList#replace
- Fix PHP 7.3 warnings
- Correctly parse keyframes with
%
- Don’t convert large numbers to scientific notation
- Allow a file to end after an
@import
- Preserve case of CSS variables as specced
- Allow identifiers to use escapes the same way as strings
- No longer use
eval
for the comparison ingetSelectorsBySpecificity
, in case it gets passed untrusted input (CVE-2020-13756). Also fixed in 8.3.1, 8.2.1, 8.1.1, 8.0.1, 7.0.4, 6.0.2, 5.2.1, 5.1.3, 5.0.9, 4.0.1, 3.0.1, 2.0.1, 1.0.1. - Prevent an infinite loop when parsing invalid grid line names
- Remove invalid unit
vm
- Retain rule order after expanding shorthands
- PHP ≥ 5.6 is now required
- HHVM compatibility target dropped
- Refactor parsing logic to mostly reside in the class files whose data structure is to be parsed (this should eventually allow us to unit-test specific parts of the parsing logic individually).
- Fix error in parsing
calc
expessions when the first operand is a negative number, thanks to @raxbg. - Support parsing CSS4 colors in hex notation with alpha values, thanks to @raxbg.
- Swallow more errors in lenient mode, thanks to @raxbg.
- Allow specifying arbitrary strings to output before and after declaration blocks, thanks to @westonruter.
- No backwards-incompatible changes
- No deprecations
- Support parsing
calc()
, thanks to @raxbg. - Support parsing grid-lines, again thanks to @raxbg.
- Support parsing legacy IE filters (
progid:
) in lenient mode, thanks to @FMCorz - Performance improvements parsing large files, again thanks to @FMCorz
- No backwards-incompatible changes
- No deprecations
- Comments are no longer silently ignored but stored with the object with which they appear (no render support, though). Thanks to @FMCorz.
- The IE hacks using
\0
and\9
can now be parsed (and rendered) in lenient mode. Thanks (again) to @FMCorz. - Media queries with or without spaces before the query are parsed. Still no real parsing support, though. Sorry…
- PHPUnit is now listed as a dev-dependency in composer.json.
- No backwards-incompatible changes
- No deprecations
- Store source CSS line numbers in tokens and parsing exceptions.
- No deprecations
- Unrecoverable parser errors throw an exception of type
Sabberworm\CSS\Parsing\SourceException
instead of\Exception
.
- Fixed parsing empty CSS when multibyte is off
- No backwards-incompatible changes
- No deprecations
- 150 time performance boost thanks to @ossinkine
- No backwards-incompatible changes
- No deprecations
- No more suppressed
E_NOTICE
- No backwards-incompatible changes
- No deprecations
- Compatibility with PHP 7. Well timed, eh?
- No deprecations
- The
Sabberworm\CSS\Value\String
class has been renamed toSabberworm\CSS\Value\CSSString
.
- Remove some declarations in interfaces incompatible with PHP 5.3 (< 5.3.9)
- No deprecations
- Format output using Sabberworm\CSS\OutputFormat
- No backwards-incompatible changes
- The parse() method replaces __toString with an optional argument (instance of the OutputFormat class)
-
Support removing a selector from a declaration block using
$oBlock->removeSelector($mSelector)
-
Introduce a specialized exception (Sabberworm\CSS\Parsing\OuputException) for exceptions during output rendering
-
No deprecations
- Outputting a declaration block that has no selectors throws an OuputException instead of outputting an invalid
{…}
into the CSS document.
- Remove the use of consumeUntil in comment parsing. This makes it possible to parse comments such as
/** Perfectly valid **/
- Add fr relative size unit
- Fix some issues with HHVM
- No backwards-incompatible changes
- No deprecations
- Updated CHANGELOG.md to reflect changes since 5.0.4
- No backwards-incompatible changes
- No deprecations
- Performance enhancements by Michael M Slusarz
- More rescue entry points for lenient parsing (unexpected tokens between declaration blocks and unclosed comments)
- No backwards-incompatible changes
- No deprecations
- Make default settings’ multibyte parsing option dependent on whether or not the mbstring extension is actually installed.
- No backwards-incompatible changes
- No deprecations
- Fix broken decimal point output optimization
- No backwards-incompatible changes
- No deprecations
- Fix broken unit test
- No backwards-incompatible changes
- No deprecations
- Initial support for lenient parsing (setting this parser option will catch some exceptions internally and recover the parser’s state as neatly as possible).
- No backwards-incompatible changes
- No deprecations
- Don’t output floats with locale-aware separator chars
- No backwards-incompatible changes
- No deprecations
- More size units recognized
- No backwards-incompatible changes
- No deprecations
- CHANGELOG.md file added to distribution
- No backwards-incompatible changes
- No deprecations
- Internal cleanup
- No backwards-incompatible changes
- No deprecations
- Correctly parse all known CSS 3 units (including Hz and kHz).
- Output RGB colors in short (#aaa or #ababab) notation
- Be case-insensitive when parsing identifiers.
- No deprecations
Sabberworm\CSS\Value\Color
’s__toString
method overridesCSSList
’s to maybe return something other thantype(value, …)
(see above).
- Support for more @-rules
- Generic interface
Sabberworm\CSS\Property\AtRule
, implemented by all @-rule classes - No deprecations
Sabberworm\CSS\RuleSet\AtRule
renamed toSabberworm\CSS\RuleSet\AtRuleSet
Sabberworm\CSS\CSSList\MediaQuery
renamed toSabberworm\CSS\RuleSet\CSSList\AtRuleBlockList
with differing semantics and API (which also works for other block-list-based @-rules like@supports
).
- Support for lenient parsing (on by default)
- No deprecations
- All properties (like whether or not to use
mb_
-functions, which default charset to use and – new – whether or not to be forgiving when parsing) are now encapsulated in an instance ofSabberworm\CSS\Settings
which can be passed as the second argument toSabberworm\CSS\Parser->__construct()
. - Specifying a charset as the second argument to
Sabberworm\CSS\Parser->__construct()
is no longer supported. UseSabberworm\CSS\Settings::create()->withDefaultCharset('some-charset')
instead. - Setting
Sabberworm\CSS\Parser->bUseMbFunctions
has no effect. UseSabberworm\CSS\Settings::create()->withMultibyteSupport(true/false)
instead. Sabberworm\CSS\Parser->parse()
may throw aSabberworm\CSS\Parsing\UnexpectedTokenException
when in strict parsing mode.
- Allow multiple rules of the same type per rule set
Sabberworm\CSS\RuleSet->getRules()
returns an index-based array instead of an associative array. UseSabberworm\CSS\RuleSet->getRulesAssoc()
(which eliminates duplicate rules and lets the later rule of the same name win).Sabberworm\CSS\RuleSet->removeRule()
works as it did before except when passed an instance ofSabberworm\CSS\Rule\Rule
, in which case it would only remove the exact rule given instead of all the rules of the same type. To get the old behaviour, useSabberworm\CSS\RuleSet->removeRule($oRule->getRule()
;
Initial release of a stable public API.
Last version not to use PSR-0 project organization semantics.