in lib/src/line_splitting/rule_set.dart [63:117]
bool tryBind(
List<Rule> rules, Rule rule, int value, void Function(Rule) onSplitRule) {
assert(!rule.isHardened);
_values[rule.index!] = value;
// Test this rule against the other rules being bound.
for (var other in rule.constrainedRules) {
int? otherValue;
// Hardened rules are implicitly bound.
if (other.isHardened) {
otherValue = other.fullySplitValue;
} else {
otherValue = _values[other.index!];
}
var constraint = rule.constrain(value, other);
if (otherValue == null) {
// The other rule is unbound, so see if we can constrain it eagerly to
// a value now.
if (constraint == Rule.mustSplit) {
// If we know the rule has to split and there's only one way it can,
// just bind that.
if (other.numValues == 2) {
if (!tryBind(rules, other, 1, onSplitRule)) return false;
} else {
onSplitRule(other);
}
} else if (constraint != null) {
// Bind the other rule to its value and recursively propagate its
// constraints.
if (!tryBind(rules, other, constraint, onSplitRule)) return false;
}
} else {
// It's already bound, so see if the new rule's constraint disallows
// that value.
if (constraint == Rule.mustSplit) {
if (otherValue == Rule.unsplit) return false;
} else if (constraint != null) {
if (otherValue != constraint) return false;
}
// See if the other rule's constraint allows us to use this value.
constraint = other.constrain(otherValue, rule);
if (constraint == Rule.mustSplit) {
if (value == Rule.unsplit) return false;
} else if (constraint != null) {
if (value != constraint) return false;
}
}
}
return true;
}