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