aboutsummaryrefslogtreecommitdiff
path: root/src/convenience.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/convenience.rs')
-rw-r--r--src/convenience.rs98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/convenience.rs b/src/convenience.rs
new file mode 100644
index 0000000..bc4add6
--- /dev/null
+++ b/src/convenience.rs
@@ -0,0 +1,98 @@
+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<S: Into<Cow<'static, str>>>(&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()
+ });
+ }
+}