diff --git a/src/eval/walk.rs b/src/eval/walk.rs index 7ffb4c050..3b9fc0940 100644 --- a/src/eval/walk.rs +++ b/src/eval/walk.rs @@ -5,6 +5,7 @@ use crate::diag::TypResult; use crate::geom::Gen; use crate::layout::{ParChild, ParNode, StackChild, StackNode}; use crate::syntax::*; +use crate::util::BoolExt; /// Walk a syntax node and fill the currently built template. pub trait Walk { @@ -27,8 +28,8 @@ impl Walk for SyntaxNode { Self::Space => ctx.template.space(), Self::Linebreak(_) => ctx.template.linebreak(), Self::Parbreak(_) => ctx.template.parbreak(), - Self::Strong(_) => ctx.template.modify(|s| s.font_mut().strong ^= true), - Self::Emph(_) => ctx.template.modify(|s| s.font_mut().emph ^= true), + Self::Strong(_) => ctx.template.modify(|s| s.font_mut().strong.flip()), + Self::Emph(_) => ctx.template.modify(|s| s.font_mut().emph.flip()), Self::Text(text) => ctx.template.text(text), Self::Raw(raw) => raw.walk(ctx)?, Self::Heading(heading) => heading.walk(ctx)?, diff --git a/src/util/mod.rs b/src/util/mod.rs index 3608ca767..1abdcbc92 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -11,6 +11,18 @@ use std::cmp::Ordering; use std::ops::Range; use std::path::{Component, Path, PathBuf}; +/// Additional methods for booleans. +pub trait BoolExt { + /// Toggle the value of the bool in place. + fn flip(&mut self); +} + +impl BoolExt for bool { + fn flip(&mut self) { + *self = !*self; + } +} + /// Additional methods for options. pub trait OptionExt { /// Replace `self` with `other` if `self` is `Some`.