mirror of
https://github.com/danog/dart-sass.git
synced 2024-12-02 09:37:49 +01:00
Fix a unit conversion bug.
This commit is contained in:
parent
8969fc75f2
commit
98f1c7dca3
@ -497,18 +497,20 @@ class SassNumber extends Value {
|
||||
List<String> denominators2) {
|
||||
// Short-circuit without allocating any new unit lists if possible.
|
||||
if (numerators1.isEmpty) {
|
||||
if (denominators1.isEmpty) {
|
||||
return new SassNumber.withUnits(value,
|
||||
numeratorUnits: numerators2, denominatorUnits: denominators2);
|
||||
} else if (denominators2.isEmpty) {
|
||||
if (denominators2.isEmpty) {
|
||||
return new SassNumber.withUnits(value,
|
||||
numeratorUnits: numerators2, denominatorUnits: denominators1);
|
||||
} else if (denominators1.isEmpty &&
|
||||
!_areAnyConvertible(numerators1, denominators2)) {
|
||||
return new SassNumber.withUnits(value,
|
||||
numeratorUnits: numerators2, denominatorUnits: denominators2);
|
||||
}
|
||||
} else if (numerators2.isEmpty) {
|
||||
if (denominators1.isEmpty) {
|
||||
if (denominators2.isEmpty) {
|
||||
return new SassNumber.withUnits(value,
|
||||
numeratorUnits: numerators1, denominatorUnits: denominators2);
|
||||
} else if (denominators2.isEmpty) {
|
||||
} else if (denominators1.isEmpty &&
|
||||
!_areAnyConvertible(numerators1, denominators2)) {
|
||||
return new SassNumber.withUnits(value,
|
||||
numeratorUnits: numerators1, denominatorUnits: denominators2);
|
||||
}
|
||||
@ -526,6 +528,7 @@ class SassNumber extends Value {
|
||||
var factor = _conversionFactor(numerator, denominator);
|
||||
if (factor == null) return false;
|
||||
value *= factor;
|
||||
return true;
|
||||
}, orElse: () {
|
||||
newNumerators.add(numerator);
|
||||
});
|
||||
@ -552,6 +555,16 @@ class SassNumber extends Value {
|
||||
denominatorUnits: mutableDenominators1..addAll(mutableDenominators2));
|
||||
}
|
||||
|
||||
/// Returns whether there exists a unit in [units1] that can be converted to a
|
||||
/// unit in [units2].
|
||||
bool _areAnyConvertible(List<String> units1, List<String> units2) {
|
||||
return units1.any((unit1) {
|
||||
if (!_isConvertable(unit1)) return false;
|
||||
var innerMap = _conversions[unit1];
|
||||
return units2.any(innerMap.containsKey);
|
||||
});
|
||||
}
|
||||
|
||||
/// Returns whether [unit] can be converted to or from any other units.
|
||||
bool _isConvertable(String unit) => _conversions.containsKey(unit);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user