typstyle_core/pretty/
context.rs1#[derive(Default, Clone, Copy)]
2pub struct Context {
3 pub mode: Mode,
4 pub break_suppressed: bool,
5 pub align_mode: AlignMode,
6}
7
8impl Context {
9 pub fn with_mode(self, mode: Mode) -> Self {
10 if matches!((self.mode, mode), (Mode::Math, Mode::CodeCont)) {
12 self
13 } else {
14 Self { mode, ..self }
15 }
16 }
17
18 pub fn with_mode_if(self, mode: Mode, cond: bool) -> Self {
19 Self {
20 mode: if cond { mode } else { self.mode },
21 ..self
22 }
23 }
24
25 pub fn suppress_breaks(self) -> Self {
26 Self {
27 break_suppressed: true,
28 ..self
29 }
30 }
31
32 pub fn aligned(self, mode: AlignMode) -> Self {
33 Self {
34 align_mode: match (self.align_mode, mode) {
35 (_, AlignMode::Never) | (AlignMode::Never, _) => AlignMode::Never,
36 (AlignMode::Inner, _) => AlignMode::Inner,
37 (AlignMode::Outer, _) => mode,
38 (AlignMode::Auto, _) => mode,
39 },
40 ..self
41 }
42 }
43}
44
45#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
46pub enum Mode {
47 #[default]
48 Markup,
49 Code,
50 CodeCont,
53 Math,
54}
55
56impl Mode {
57 pub fn is_markup(self) -> bool {
58 self == Self::Markup
59 }
60
61 pub fn is_code(self) -> bool {
63 self == Self::Code || self == Self::CodeCont
64 }
65
66 pub fn is_code_continued(self) -> bool {
67 self == Self::CodeCont
68 }
69
70 pub fn is_math(self) -> bool {
71 self == Self::Math
72 }
73}
74
75#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
76pub enum AlignMode {
77 #[default]
78 Auto,
79 Outer,
80 Inner,
81 Never,
82}