Skip to main content

a9_prettyplease/
convenience.rs

1use 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}