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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//! Set of structures required to implement a stylesheet for
//! [DisplayListFormatter](super::DisplayListFormatter).
//!
//! In order to provide additional styling information for the
//! formatter, a structs can implement `Stylesheet` and `Style`
//! traits.
//!
//! Example:
//!
//! ```
//! use annotate_snippets::formatter::style::{Stylesheet, StyleClass, Style};
//!
//! struct HTMLStyle {
//! prefix: String,
//! postfix: String,
//! };
//!
//! impl HTMLStyle {
//! fn new(prefix: &str, postfix: &str) -> Self {
//! HTMLStyle {
//! prefix: prefix.into(),
//! postfix: postfix.into()
//! }
//! }
//! };
//!
//! impl Style for HTMLStyle {
//! fn paint(&self, text: &str) -> String {
//! format!("{}{}{}", self.prefix, text, self.postfix)
//! }
//!
//! fn bold(&self) -> Box<Style> {
//! Box::new(HTMLStyle {
//! prefix: format!("{}<b>", self.prefix),
//! postfix: format!("</b>{}", self.postfix),
//! })
//! }
//! }
//!
//! struct HTMLStylesheet {};
//!
//!
//! impl Stylesheet for HTMLStylesheet {
//! fn get_style(&self, class: StyleClass) -> Box<Style> {
//! let s = match class {
//! StyleClass::Error => HTMLStyle::new("<span style='color:red'>", "</span>"),
//! StyleClass::Warning => HTMLStyle::new("<span style='color:orange'>", "</span>"),
//! StyleClass::Info => HTMLStyle::new("<span style='color:yellow'>", "</span>"),
//! StyleClass::Note => HTMLStyle::new("<span style='color:blue'>", "</span>"),
//! StyleClass::Help => HTMLStyle::new("<span style='color:green'>", "</span>"),
//! StyleClass::LineNo => HTMLStyle::new("<strong>", "</strong>"),
//! StyleClass::Emphasis => HTMLStyle::new("<i>", "</i>"),
//! StyleClass::None => HTMLStyle::new("", ""),
//! };
//! Box::new(s)
//! }
//! }
//! ```
/// StyleClass is a collection of named variants of style classes
/// that DisplayListFormatter uses.
/// This trait implements a return value for the `Stylesheet::get_style`.
/// Trait to annotate structs that can provide `Style` implementations for
/// every `StyleClass` variant.