blob: 9a29df1a1d208c748e2b6af7931c1685875e5666 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
use unicode_normalization::UnicodeNormalization as _;
#[derive(Clone, Debug, Default)]
pub struct Cell {
contents: String,
attrs: crate::attrs::Attrs,
}
impl Cell {
pub fn new() -> Self {
Self::default()
}
pub(crate) fn set(&mut self, c: String, a: crate::attrs::Attrs) {
self.contents = c;
self.attrs = a;
}
pub(crate) fn append(&mut self, c: char) {
self.contents.push(c);
// some fonts have combined characters but can't render combining
// characters correctly, so try to prefer precombined characters when
// possible
if !unicode_normalization::is_nfc(&self.contents) {
self.contents = self.contents.nfc().collect();
}
}
pub(crate) fn reset(&mut self) {
*self = Self::default();
}
pub fn contents(&self) -> &str {
&self.contents
}
pub fn has_contents(&self) -> bool {
self.contents != ""
}
pub fn is_wide(&self) -> bool {
crate::unicode::str_width(&self.contents) > 1
}
pub(crate) fn attrs(&self) -> &crate::attrs::Attrs {
&self.attrs
}
pub fn fgcolor(&self) -> crate::attrs::Color {
self.attrs.fgcolor
}
pub fn bgcolor(&self) -> crate::attrs::Color {
self.attrs.bgcolor
}
pub fn bold(&self) -> bool {
self.attrs.bold()
}
pub fn italic(&self) -> bool {
self.attrs.italic()
}
pub fn inverse(&self) -> bool {
self.attrs.inverse()
}
pub fn underline(&self) -> bool {
self.attrs.underline()
}
}
|