Fix implication formatting
This commit is contained in:
parent
f82a20e5f1
commit
8bf9d4bd45
@ -153,15 +153,74 @@ impl<'formula> std::fmt::Debug for FormulaDisplay<'formula>
|
|||||||
},
|
},
|
||||||
crate::Formula::Implies(crate::Implies{direction, antecedent, implication}) =>
|
crate::Formula::Implies(crate::Implies{direction, antecedent, implication}) =>
|
||||||
{
|
{
|
||||||
|
let antecedent_requires_parentheses = match **antecedent
|
||||||
|
{
|
||||||
|
// Implication is right-associative and thus requires parentheses when nested on
|
||||||
|
// the antecedent side
|
||||||
|
crate::Formula::Implies(_) => true,
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
|
|
||||||
|
let implication_requires_parentheses = match **antecedent
|
||||||
|
{
|
||||||
|
// Implication is right-associative and thus doesn’t require parentheses when
|
||||||
|
// nested on the implication side with the same implication direction
|
||||||
|
crate::Formula::Implies(crate::Implies{direction: nested_direction, ..})
|
||||||
|
if nested_direction == *direction => false,
|
||||||
|
// If the nested implication is in the other direction, parentheses are needed
|
||||||
|
crate::Formula::Implies(_) => true,
|
||||||
|
_ => false,
|
||||||
|
};
|
||||||
|
|
||||||
|
let format_antecedent = |format: &mut std::fmt::Formatter| -> Result<_, _>
|
||||||
|
{
|
||||||
|
if antecedent_requires_parentheses
|
||||||
|
{
|
||||||
|
write!(format, "(")?;
|
||||||
|
}
|
||||||
|
|
||||||
|
write!(format, "{:?}", display_formula(antecedent, precedence))?;
|
||||||
|
|
||||||
|
if antecedent_requires_parentheses
|
||||||
|
{
|
||||||
|
write!(format, ")")?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
};
|
||||||
|
|
||||||
|
let format_implication = |format: &mut std::fmt::Formatter| -> Result<_, _>
|
||||||
|
{
|
||||||
|
if implication_requires_parentheses
|
||||||
|
{
|
||||||
|
write!(format, "(")?;
|
||||||
|
}
|
||||||
|
|
||||||
|
write!(format, "{:?}", display_formula(implication, precedence))?;
|
||||||
|
|
||||||
|
if implication_requires_parentheses
|
||||||
|
{
|
||||||
|
write!(format, ")")?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
};
|
||||||
|
|
||||||
match direction
|
match direction
|
||||||
{
|
{
|
||||||
crate::ImplicationDirection::LeftToRight =>
|
crate::ImplicationDirection::LeftToRight =>
|
||||||
write!(format, "{:?} -> {:?}", display_formula(antecedent, precedence),
|
{
|
||||||
display_formula(implication, precedence))?,
|
format_antecedent(format)?;
|
||||||
|
write!(format, " -> ")?;
|
||||||
|
format_implication(format)?;
|
||||||
|
},
|
||||||
crate::ImplicationDirection::RightToLeft =>
|
crate::ImplicationDirection::RightToLeft =>
|
||||||
write!(format, "{:?} <- {:?}", display_formula(implication, precedence),
|
{
|
||||||
display_formula(antecedent, precedence))?,
|
format_implication(format)?;
|
||||||
};
|
write!(format, " <- ")?;
|
||||||
|
format_antecedent(format)?;
|
||||||
|
},
|
||||||
|
}
|
||||||
},
|
},
|
||||||
crate::Formula::IfAndOnlyIf(arguments) =>
|
crate::Formula::IfAndOnlyIf(arguments) =>
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user