use crate::algorithm::{self, BeginToken, BreakToken, Breaks, Printer}; use std::borrow::Cow; impl Printer { pub fn ibox(&mut self, indent: isize) { self.scan_begin(BeginToken { offset: indent, breaks: Breaks::Inconsistent, }); } pub fn cbox(&mut self, indent: isize) { self.scan_begin(BeginToken { offset: indent, breaks: Breaks::Consistent, }); } pub fn end(&mut self) { self.scan_end(); } pub fn word>>(&mut self, wrd: S) { let s = wrd.into(); self.scan_string(s); } fn spaces(&mut self, n: usize) { self.scan_break(BreakToken { blank_space: n, ..BreakToken::default() }); } pub fn zerobreak(&mut self) { self.spaces(0); } pub fn space(&mut self) { self.spaces(1); } pub fn nbsp(&mut self) { self.word(" "); } pub fn hardbreak(&mut self) { self.spaces(algorithm::SIZE_INFINITY as usize); } pub fn space_if_nonempty(&mut self) { self.scan_break(BreakToken { blank_space: 1, if_nonempty: true, ..BreakToken::default() }); } pub fn hardbreak_if_nonempty(&mut self) { self.scan_break(BreakToken { blank_space: algorithm::SIZE_INFINITY as usize, if_nonempty: true, ..BreakToken::default() }); } pub fn trailing_comma(&mut self, is_last: bool) { if is_last { self.scan_break(BreakToken { pre_break: Some(','), ..BreakToken::default() }); } else { self.word(","); self.space(); } } pub fn trailing_comma_or_space(&mut self, is_last: bool) { if is_last { self.scan_break(BreakToken { blank_space: 1, pre_break: Some(','), ..BreakToken::default() }); } else { self.word(","); self.space(); } } pub fn neverbreak(&mut self) { self.scan_break(BreakToken { never_break: true, ..BreakToken::default() }); } }