pub struct ColorGenerator { /* private fields */ }Expand description
A type that can generate distinct 8-bit colors.
Implementations§
Source§impl ColorGenerator
impl ColorGenerator
Sourcepub fn from_state(state: [u16; 3], min_brightness: f32) -> Self
pub fn from_state(state: [u16; 3], min_brightness: f32) -> Self
Create a new ColorGenerator with the given pre-chosen state.
The minimum brightness can be used to control the colour brightness (0.0 - 1.0). The default is 0.5.
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new ColorGenerator with the default state.
Examples found in repository?
examples/multifile.rs (line 4)
3fn main() {
4 let mut colors = ColorGenerator::new();
5
6 // Generate some colours for each of our elements
7 let a = colors.next();
8 let b = colors.next();
9 let c = colors.next();
10
11 Report::build(ReportKind::Error, "b.tao", 10)
12 .with_code(3)
13 .with_message(format!("Cannot add types Nat and Str"))
14 .with_label(Label::new(("b.tao", 10..14))
15 .with_message(format!("This is of type {}", "Nat".fg(a)))
16 .with_color(a))
17 .with_label(Label::new(("b.tao", 17..20))
18 .with_message(format!("This is of type {}", "Str".fg(b)))
19 .with_color(b))
20 .with_label(Label::new(("b.tao", 15..16))
21 .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
22 .with_color(c)
23 .with_order(10))
24 .with_label(Label::new(("a.tao", 4..8))
25 .with_message(format!("Original definition of {} is here", "five".fg(a)))
26 .with_color(a))
27 .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
28 .finish()
29 .print(sources(vec![
30 ("a.tao", include_str!("a.tao")),
31 ("b.tao", include_str!("b.tao")),
32 ]))
33 .unwrap();
34}More examples
examples/multiline.rs (line 4)
3fn main() {
4 let mut colors = ColorGenerator::new();
5
6 // Generate & choose some colours for each of our elements
7 let a = colors.next();
8 let b = colors.next();
9 let out = Color::Fixed(81);
10 let out2= colors.next();
11
12 Report::build(ReportKind::Error, "sample.tao", 12)
13 .with_code(3)
14 .with_message(format!("Incompatible types"))
15 .with_label(Label::new(("sample.tao", 32..33))
16 .with_message(format!("This is of type {}", "Nat".fg(a)))
17 .with_color(a))
18 .with_label(Label::new(("sample.tao", 42..45))
19 .with_message(format!("This is of type {}", "Str".fg(b)))
20 .with_color(b))
21 .with_label(Label::new(("sample.tao", 11..48))
22 .with_message(format!(
23 "The values are outputs of this {} expression",
24 "match".fg(out),
25 ))
26 .with_color(out))
27 .with_label(Label::new(("sample.tao", 0..48))
28 .with_message(format!(
29 "The {} has a problem",
30 "definition".fg(out2),
31 ))
32 .with_color(out2))
33 .with_label(Label::new(("sample.tao", 50..76))
34 .with_message(format!(
35 "Usage of {} here",
36 "definition".fg(out2),
37 ))
38 .with_color(out2))
39 .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
40 .finish()
41 .print(("sample.tao", Source::from(include_str!("sample.tao"))))
42 .unwrap();
43}examples/stresstest.rs (line 4)
3fn main() {
4 let mut colors = ColorGenerator::new();
5
6 Report::build(ReportKind::Error, "stresstest.tao", 13)
7 .with_code(3)
8 .with_message(format!("Incompatible types"))
9 .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
10 .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
11 .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
12 .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
13 .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
14 .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
15 .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
16 .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
17 .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
18 .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
19 .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
20 .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
21 .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
22 .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
23 .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
24 .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
25 .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
26 .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
27 .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
28 .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
29 .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))
30
31 .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
32 .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
33 .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
34 .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
35 .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
36 .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
37 .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
38 .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
39 .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
40 .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
41 .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
42 .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
43 .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
44 .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
45 .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
46 .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
47 .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
48 .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
49 .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
50 .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
51 .with_config(Config::default()
52 .with_cross_gap(false)
53 .with_compact(true)
54 .with_underlines(true)
55 .with_tab_width(4))
56 .finish()
57 .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
58 .unwrap();
59}Sourcepub fn next(&mut self) -> Color
pub fn next(&mut self) -> Color
Generate the next colour in the sequence.
Examples found in repository?
examples/multifile.rs (line 7)
3fn main() {
4 let mut colors = ColorGenerator::new();
5
6 // Generate some colours for each of our elements
7 let a = colors.next();
8 let b = colors.next();
9 let c = colors.next();
10
11 Report::build(ReportKind::Error, "b.tao", 10)
12 .with_code(3)
13 .with_message(format!("Cannot add types Nat and Str"))
14 .with_label(Label::new(("b.tao", 10..14))
15 .with_message(format!("This is of type {}", "Nat".fg(a)))
16 .with_color(a))
17 .with_label(Label::new(("b.tao", 17..20))
18 .with_message(format!("This is of type {}", "Str".fg(b)))
19 .with_color(b))
20 .with_label(Label::new(("b.tao", 15..16))
21 .with_message(format!(" {} and {} undergo addition here", "Nat".fg(a), "Str".fg(b)))
22 .with_color(c)
23 .with_order(10))
24 .with_label(Label::new(("a.tao", 4..8))
25 .with_message(format!("Original definition of {} is here", "five".fg(a)))
26 .with_color(a))
27 .with_note(format!("{} is a number and can only be added to other numbers", "Nat".fg(a)))
28 .finish()
29 .print(sources(vec![
30 ("a.tao", include_str!("a.tao")),
31 ("b.tao", include_str!("b.tao")),
32 ]))
33 .unwrap();
34}More examples
examples/multiline.rs (line 7)
3fn main() {
4 let mut colors = ColorGenerator::new();
5
6 // Generate & choose some colours for each of our elements
7 let a = colors.next();
8 let b = colors.next();
9 let out = Color::Fixed(81);
10 let out2= colors.next();
11
12 Report::build(ReportKind::Error, "sample.tao", 12)
13 .with_code(3)
14 .with_message(format!("Incompatible types"))
15 .with_label(Label::new(("sample.tao", 32..33))
16 .with_message(format!("This is of type {}", "Nat".fg(a)))
17 .with_color(a))
18 .with_label(Label::new(("sample.tao", 42..45))
19 .with_message(format!("This is of type {}", "Str".fg(b)))
20 .with_color(b))
21 .with_label(Label::new(("sample.tao", 11..48))
22 .with_message(format!(
23 "The values are outputs of this {} expression",
24 "match".fg(out),
25 ))
26 .with_color(out))
27 .with_label(Label::new(("sample.tao", 0..48))
28 .with_message(format!(
29 "The {} has a problem",
30 "definition".fg(out2),
31 ))
32 .with_color(out2))
33 .with_label(Label::new(("sample.tao", 50..76))
34 .with_message(format!(
35 "Usage of {} here",
36 "definition".fg(out2),
37 ))
38 .with_color(out2))
39 .with_note(format!("Outputs of {} expressions must coerce to the same type", "match".fg(out)))
40 .finish()
41 .print(("sample.tao", Source::from(include_str!("sample.tao"))))
42 .unwrap();
43}examples/stresstest.rs (line 9)
3fn main() {
4 let mut colors = ColorGenerator::new();
5
6 Report::build(ReportKind::Error, "stresstest.tao", 13)
7 .with_code(3)
8 .with_message(format!("Incompatible types"))
9 .with_label(Label::new(("stresstest.tao", 0..1)).with_message("Color").with_color(colors.next()))
10 .with_label(Label::new(("stresstest.tao", 1..2)).with_message("Color").with_color(colors.next()))
11 .with_label(Label::new(("stresstest.tao", 2..3)).with_message("Color").with_color(colors.next()))
12 .with_label(Label::new(("stresstest.tao", 3..4)).with_message("Color").with_color(colors.next()))
13 .with_label(Label::new(("stresstest.tao", 4..5)).with_message("Color").with_color(colors.next()))
14 .with_label(Label::new(("stresstest.tao", 5..6)).with_message("Color").with_color(colors.next()))
15 .with_label(Label::new(("stresstest.tao", 6..7)).with_message("Color").with_color(colors.next()))
16 .with_label(Label::new(("stresstest.tao", 7..8)).with_message("Color").with_color(colors.next()))
17 .with_label(Label::new(("stresstest.tao", 8..9)).with_message("Color").with_color(colors.next()))
18 .with_label(Label::new(("stresstest.tao", 9..10)).with_message("Color").with_color(colors.next()))
19 .with_label(Label::new(("stresstest.tao", 10..11)).with_message("Color").with_color(colors.next()))
20 .with_label(Label::new(("stresstest.tao", 11..12)).with_message("Color").with_color(colors.next()))
21 .with_label(Label::new(("stresstest.tao", 12..13)).with_message("Color").with_color(colors.next()))
22 .with_label(Label::new(("stresstest.tao", 13..14)).with_message("Color").with_color(colors.next()))
23 .with_label(Label::new(("stresstest.tao", 14..15)).with_message("Color").with_color(colors.next()))
24 .with_label(Label::new(("stresstest.tao", 15..16)).with_message("Color").with_color(colors.next()))
25 .with_label(Label::new(("stresstest.tao", 16..17)).with_message("Color").with_color(colors.next()))
26 .with_label(Label::new(("stresstest.tao", 17..18)).with_message("Color").with_color(colors.next()))
27 .with_label(Label::new(("stresstest.tao", 18..19)).with_message("Color").with_color(colors.next()))
28 .with_label(Label::new(("stresstest.tao", 19..20)).with_message("Color").with_color(colors.next()))
29 .with_label(Label::new(("stresstest.tao", 20..21)).with_message("Color").with_color(colors.next()))
30
31 .with_label(Label::new(("stresstest.tao", 18..19)).with_message("This is of type Nat").with_color(colors.next()))
32 .with_label(Label::new(("stresstest.tao", 13..16)).with_message("This is of type Str").with_color(colors.next()))
33 .with_label(Label::new(("stresstest.tao", 40..41)).with_message("This is of type Nat").with_color(colors.next()))
34 .with_label(Label::new(("stresstest.tao", 43..47)).with_message("This is of type Bool").with_color(colors.next()))
35 .with_label(Label::new(("stresstest.tao", 49..51)).with_message("This is of type ()").with_color(colors.next()))
36 .with_label(Label::new(("stresstest.tao", 53..55)).with_message("This is of type [_]").with_color(colors.next()))
37 .with_label(Label::new(("stresstest.tao", 25..78)).with_message("This is of type Str").with_color(colors.next()))
38 .with_label(Label::new(("stresstest.tao", 81..124)).with_message("This is of type Nat").with_color(colors.next()))
39 .with_label(Label::new(("stresstest.tao", 100..126)).with_message("This is an inner multi-line").with_color(colors.next()))
40 .with_label(Label::new(("stresstest.tao", 106..120)).with_message("This is another inner multi-line").with_color(colors.next()))
41 .with_label(Label::new(("stresstest.tao", 108..122)).with_message("This is *really* nested multi-line").with_color(colors.next()))
42 .with_label(Label::new(("stresstest.tao", 110..111)).with_message("This is an inline within the nesting!").with_color(colors.next()))
43 .with_label(Label::new(("stresstest.tao", 111..112)).with_message("And another!").with_color(colors.next()))
44 .with_label(Label::new(("stresstest.tao", 103..123)).with_message("This is *really* nested multi-line").with_color(colors.next()))
45 .with_label(Label::new(("stresstest.tao", 105..125)).with_message("This is *really* nested multi-line").with_color(colors.next()))
46 .with_label(Label::new(("stresstest.tao", 112..116)).with_message("This is *really* nested multi-line").with_color(colors.next()))
47 .with_label(Label::new(("stresstest.tao", 26..100)).with_message("Hahaha!").with_color(Color::Fixed(75)))
48 .with_label(Label::new(("stresstest.tao", 85..110)).with_message("Oh god, no more 1").with_color(colors.next()))
49 .with_label(Label::new(("stresstest.tao", 84..114)).with_message("Oh god, no more 2").with_color(colors.next()))
50 .with_label(Label::new(("stresstest.tao", 89..113)).with_message("Oh god, no more 3").with_color(colors.next()))
51 .with_config(Config::default()
52 .with_cross_gap(false)
53 .with_compact(true)
54 .with_underlines(true)
55 .with_tab_width(4))
56 .finish()
57 .print(("stresstest.tao", Source::from(include_str!("stresstest.tao"))))
58 .unwrap();
59}Trait Implementations§
Auto Trait Implementations§
impl Freeze for ColorGenerator
impl RefUnwindSafe for ColorGenerator
impl Send for ColorGenerator
impl Sync for ColorGenerator
impl Unpin for ColorGenerator
impl UnwindSafe for ColorGenerator
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more