paragraph/
lib.rs

1//! Line-breaking algorithm.
2
3/// An item.
4#[derive(Clone, Copy, Debug, PartialEq)]
5pub struct Item {
6    /// The type.
7    pub t: Type,
8    /// The width.
9    pub w: f32,
10    /// The stretchability.
11    pub y: f32,
12    /// The shrinkability.
13    pub z: f32,
14    /// The penalty.
15    pub p: f32,
16    /// The flag.
17    pub f: bool,
18}
19
20/// An item type.
21#[derive(Clone, Copy, Debug, Eq, PartialEq)]
22pub enum Type {
23    /// A box item.
24    Box,
25    /// A glue item.
26    Glue,
27    /// A penalty item.
28    Penalty,
29}
30
31impl Item {
32    /// Create an item.
33    #[inline]
34    pub fn new(t: Type, w: f32, y: f32, z: f32, p: f32, f: bool) -> Item {
35        Item { t: t, w: w, y: y, z: z, p: p, f: f }
36    }
37
38    /// Create a box item.
39    #[inline]
40    pub fn new_box(w: f32) -> Item {
41        Item::new(Type::Box, w, 0.0, 0.0, 0.0, false)
42    }
43
44    /// Create a glue item.
45    #[inline]
46    pub fn new_glue(w: f32, y: f32, z: f32) -> Item {
47        Item::new(Type::Glue, w, y, z, 0.0, false)
48    }
49
50    /// Create a penalty item.
51    #[inline]
52    pub fn new_penalty(w: f32, p: f32, f: bool) -> Item {
53        Item::new(Type::Penalty, w, 0.0, 0.0, p, f)
54    }
55
56    /// Check if it is a box item.
57    #[inline]
58    pub fn is_box(&self) -> bool {
59        self.t == Type::Box
60    }
61
62    /// Check if it is a glue item.
63    #[inline]
64    pub fn is_glue(&self) -> bool {
65        self.t == Type::Glue
66    }
67
68    /// Check if it is a penalty item.
69    #[inline]
70    pub fn is_penalty(&self) -> bool {
71        self.t == Type::Penalty
72    }
73}