1 use crate::algorithm::{self, BeginToken, BreakToken, Breaks, Printer}; 2 use std::borrow::Cow; 3 4 impl Printer { ibox(&mut self, indent: isize)5 pub fn ibox(&mut self, indent: isize) { 6 self.scan_begin(BeginToken { 7 offset: indent, 8 breaks: Breaks::Inconsistent, 9 }); 10 } 11 cbox(&mut self, indent: isize)12 pub fn cbox(&mut self, indent: isize) { 13 self.scan_begin(BeginToken { 14 offset: indent, 15 breaks: Breaks::Consistent, 16 }); 17 } 18 end(&mut self)19 pub fn end(&mut self) { 20 self.scan_end(); 21 } 22 word<S: Into<Cow<'static, str>>>(&mut self, wrd: S)23 pub fn word<S: Into<Cow<'static, str>>>(&mut self, wrd: S) { 24 let s = wrd.into(); 25 self.scan_string(s); 26 } 27 spaces(&mut self, n: usize)28 fn spaces(&mut self, n: usize) { 29 self.scan_break(BreakToken { 30 blank_space: n, 31 ..BreakToken::default() 32 }); 33 } 34 zerobreak(&mut self)35 pub fn zerobreak(&mut self) { 36 self.spaces(0); 37 } 38 space(&mut self)39 pub fn space(&mut self) { 40 self.spaces(1); 41 } 42 nbsp(&mut self)43 pub fn nbsp(&mut self) { 44 self.word(" "); 45 } 46 hardbreak(&mut self)47 pub fn hardbreak(&mut self) { 48 self.spaces(algorithm::SIZE_INFINITY as usize); 49 } 50 space_if_nonempty(&mut self)51 pub fn space_if_nonempty(&mut self) { 52 self.scan_break(BreakToken { 53 blank_space: 1, 54 if_nonempty: true, 55 ..BreakToken::default() 56 }); 57 } 58 hardbreak_if_nonempty(&mut self)59 pub fn hardbreak_if_nonempty(&mut self) { 60 self.scan_break(BreakToken { 61 blank_space: algorithm::SIZE_INFINITY as usize, 62 if_nonempty: true, 63 ..BreakToken::default() 64 }); 65 } 66 trailing_comma(&mut self, is_last: bool)67 pub fn trailing_comma(&mut self, is_last: bool) { 68 if is_last { 69 self.scan_break(BreakToken { 70 pre_break: Some(','), 71 ..BreakToken::default() 72 }); 73 } else { 74 self.word(","); 75 self.space(); 76 } 77 } 78 trailing_comma_or_space(&mut self, is_last: bool)79 pub fn trailing_comma_or_space(&mut self, is_last: bool) { 80 if is_last { 81 self.scan_break(BreakToken { 82 blank_space: 1, 83 pre_break: Some(','), 84 ..BreakToken::default() 85 }); 86 } else { 87 self.word(","); 88 self.space(); 89 } 90 } 91 neverbreak(&mut self)92 pub fn neverbreak(&mut self) { 93 self.scan_break(BreakToken { 94 never_break: true, 95 ..BreakToken::default() 96 }); 97 } 98 } 99