NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist
Data Liberation component for WordPress.
Last release 28 days ago
10 Sep 2026
Ships unpredictably
gaps range from 8 days to 4 months
Some releases are documented
notes for 22 of 43 stable releases
Nothing withdrawn
no release was ever pulled
1 years old
52 releases · first in 2025
One column per month.
BigInteger::gcdMultiple() returns the GCD of multiple BigInteger numbers
✨ New features
BigInteger::gcdMultiple() returns the GCD of multiple BigInteger numbersLets CSS callers append source bytes while using the same scan, read, and edit methods as whole-string callers. Streaming now follows XML's input and
Lets CSS callers append source bytes while using the same scan, read,
and edit methods as whole-string callers. Streaming now follows XML's
input and resume model. The whole-string public API stays unchanged.
A read can end inside url(https://old.exa. The processor waits for the
rest of the token. Once it arrives, the caller uses the ordinary
next_url(), get_raw_url(), and set_raw_url() methods:
$processor = CSSURLProcessor::create_for_streaming();
$parts = array( 'a{src:url(https://old.exa', 'mple/photo.png)}' );
foreach ( $parts as $index => $bytes ) {
$processor->append_bytes( $bytes );
if ( $index === count( $parts ) - 1 ) {
$processor->input_finished();
}
while ( $processor->next_url() ) {
if ( 'https://old.example/photo.png' === $processor->get_raw_url() ) {
$processor->set_raw_url( 'https://new.example/photo.png' );
}
}
echo $processor->flush_processed_css();
}Output:
a{src:url("https://new.example/photo.png")}CSSProcessor uses the same input methods with next_token() and its
existing token getters and setters. A false scan result can mean more
bytes are needed; is_paused_at_incomplete_input() reports that state.
Call input_finished() only at the actual source end, then scan the
remaining tokens. is_finished() reports completion.
There is no separate rewrite_chunk() API and no mapping table in the
processor. The caller chooses replacements. Existing setters still quote
and escape complete values, so replacing old.png with new.png
changes url(old.png) to url("new.png").
Appending bytes does not require flushing first. get_updated_css()
keeps working on the retained input. flush_processed_css() returns
completed output with edits applied, clears the current token, and
releases those source bytes. The caller can flush after each edited URL
to avoid retaining many large replacements.
For example, after flushing a{src:, a cursor saved inside the
unfinished URL points back to url(. Save get_reentrancy_cursor()
with get_token_byte_offset_in_the_input_stream(). Resume reads source
bytes from that offset. The opaque cursor stores parser context, not
unfinished CSS or edits. A cursor saved on a current token reads that
token again, as XML does.
For file rewrites, write and flush output before saving the cursor and
both file offsets together. Use the processor's source offset, not the
input handle's position. On resume, truncate output to the saved output
offset and reread source from the saved source offset. The file
caller
shows the complete flow. Keep source bytes and edit rules unchanged
between runs; the processor does not check them.
An unfinished token still has no size cap and is parsed again after each
read. A large comment or URL can therefore use a lot of memory and
parsing time. The cursor no longer copies that token. More than 128
nested image-set() calls still throws.
Tests compare whole-string and streamed results at every byte split,
restore at each byte, retain edits across appends, replay current URL
strings with their surrounding context, reject appends after EOF, and
reject corrupt cursors. Large-token and output-expansion cases check
buffer release and caller-controlled flushing.
Separate PHP processes rewrite real files, stop before or after saving
progress, then resume. Another case stops after marking EOF but before
editing the last URL. Tests check exact output, unchanged source, saved
offsets, NUL preprocessing, and the nesting-limit error on both the
initial run and resume. The README example also runs in the docs-snippet
checks.
Reprint's WordPress/reprint#764 must use this input API and a package
release containing it before it can ship.
BigInteger::not() returns the bitwise NOT value
✨ New features
BigInteger::not() returns the bitwise NOT value🐛 Bug fixes
BigInteger::toBytes() could return an incorrect binary representation for some numbersand(), or(), xor() on BigInteger could return an incorrect result when the GMP extension is not availableURLInTextProcessor: Preserve trailing punctuation during replacement …
URLInTextProcessor: Preserve trailing punctuation during replacement …
👌 Improvements
BigNumber::of() now accepts .123 and 123. formats, both of which return a BigDecimal💥 Breaking changes
BigInteger::powerMod() has been removed - use modPow() insteadBigInteger::parse() has been removed - use fromBase() insteadPerformance optimization of toInt() methods.
Performance optimization of toInt() methods.
Use the native URL-in-text scanner when available and add bounded caches for parsed URL candidates and rewrite results.
Use the native URL-in-text scanner when available and add bounded caches for parsed URL candidates and rewrite results.
Breaking changes
The following deprecated methods have been removed. Use the new method name instead:
| Method removed | Replacement method |
|---|---|
BigDecimal::getIntegral() |
BigDecimal::getIntegralPart() |
BigDecimal::getFraction() |
BigDecimal::getFractionalPart() |
New features
BigInteger has been augmented with 5 new methods for bitwise operations:
| New method | Description |
|---|---|
and() |
performs a bitwise AND operation on two numbers |
or() |
performs a bitwise OR operation on two numbers |
xor() |
performs a bitwise XOR operation on two numbers |
shiftedLeft() |
returns the number shifted left by a number of bits |
shiftedRight() |
returns the number shifted right by a number of bits |
Thanks to @DASPRiD 👍
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
BigDecimal::getIntegral() has been renamed to getIntegralPart() and is now deprecated
New method: BigDecimal::hasNonZeroFractionalPart()
Renamed/deprecated methods:
BigDecimal::getIntegral() has been renamed to getIntegralPart() and is now deprecatedBigDecimal::getFraction() has been renamed to getFractionalPart() and is now deprecatedBigInteger::parse() and toBase() now use GMP's built-in base conversion features when available.
Performance update
BigInteger::parse() and toBase() now use GMP's built-in base conversion features when available.
This is a maintenance release, no code has been changed.
This is a maintenance release, no code has been changed.
--no-dev, the autoloader does not autoload tests anymoreThis will help make installations more compact.
BigNumber:sign() has been renamed to getSign()
Methods renamed:
BigNumber:sign() has been renamed to getSign()BigDecimal::unscaledValue() has been renamed to getUnscaledValue()BigDecimal::scale() has been renamed to getScale()BigDecimal::integral() has been renamed to getIntegral()BigDecimal::fraction() has been renamed to getFraction()BigRational::numerator() has been renamed to getNumerator()BigRational::denominator() has been renamed to getDenominator()Classes renamed:
ArithmeticException has been renamed to MathExceptionThe base class for all exceptions is now MathException. ArithmeticException has been deprecated, and will be removed in 0.7.0.
The base class for all exceptions is now MathException.
ArithmeticException has been deprecated, and will be removed in 0.7.0.
BigNumber:sign() is deprecated; use getSign() instead
A number of methods have been renamed:
BigNumber:sign() is deprecated; use getSign() insteadBigDecimal::unscaledValue() is deprecated; use getUnscaledValue() insteadBigDecimal::scale() is deprecated; use getScale() insteadBigDecimal::integral() is deprecated; use getIntegral() insteadBigDecimal::fraction() is deprecated; use getFraction() insteadBigRational::numerator() is deprecated; use getNumerator() insteadBigRational::denominator() is deprecated; use getDenominator() insteadThe old methods will be removed in version 0.7.0.
Deprecated method BigDecimal::withScale() has been removed; use toScale() instead
0.5BigDecimal::withScale() has been removed; use toScale() insteadBigNumber::toInteger() has been renamed to toInt()New method: `BigNumber::toScale()`
New method: BigNumber::toScale()
This allows to convert any BigNumber to a BigDecimal with a given scale, using rounding if necessary.
Common BigNumber interface for all classes, with the following methods:
New features
BigNumber interface for all classes, with the following methods:
sign() and derived methods (isZero(), isPositive(), ...)compareTo() and derived methods (isEqualTo(), isGreaterThan(), ...) that work across different BigNumber typestoBigInteger(), toBigDecimal(), toBigRational() conversion methodstoInteger() and toFloat() conversion methods to native typesof() behaviour: every class now accepts any type of number, provided that it can be safely converted to the current typeBigDecimal::exactlyDividedBy(); this method automatically computes the scale of the result, provided that the division yields a finite number of digitsBigRational::quotient() and remainder()DivisionByZeroException, RoundingNecessaryException, NumberFormatExceptionzero(), one() and ten() available in all classesBigInteger::dividedBy()This release also comes with many performance improvements.
Breaking changes
BigInteger:
getSign() is renamed to sign()toString() is renamed to toBase()BigInteger::dividedBy() now throws an exception by default if the remainder is not zero; use quotient() to get the previous behaviourBigDecimal:
getSign() is renamed to sign()getUnscaledValue() is renamed to unscaledValue()getScale() is renamed to scale()getIntegral() is renamed to integral()getFraction() is renamed to fraction()divideAndRemainder() is renamed to quotientAndRemainder()dividedBy() now takes a mandatory $scale parameter before the rounding modetoBigInteger() does not accept a $roundingMode parameter anymoretoBigRational() does not simplify the fraction anymore; explicitly add ->simplified() to get the previous behaviourBigRational:
getSign() is renamed to sign()getNumerator() is renamed to numerator()getDenominator() is renamed to denominator()of() is renamed to nd(), while parse() is renamed to of()ArithmeticException is moved to an Exception\ sub-namespaceof() factory methods now throw NumberFormatException instead of InvalidArgumentExceptionIntroducing a BigRational class, to perform calculations on fractions of any size.
Introducing a BigRational class, to perform calculations on fractions of any size.
Rounding modes have been removed from BigInteger, and are now a concept specific to BigDecimal.
Rounding modes have been removed from BigInteger, and are now a concept specific to BigDecimal.
BigInteger::dividedBy() now always returns the quotient of the division.
Minor performance improvements
Minor performance improvements
The $roundingMode and $scale parameters have been swapped in BigDecimal::dividedBy().
The $roundingMode and $scale parameters have been swapped in BigDecimal::dividedBy().
min() and max() do not accept an array anymore, but a variable number of parameters
min() and max() do not accept an array anymore, but a variable number of parametersNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
- Added BigInteger::power() - Added HHVM support
BigInteger::power()First beta release.
First beta release.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →