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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
// Code based on https://github.com/defuz/sublimate/blob/master/src/core/syntax/theme.rs
// released under the MIT license by @defuz
use super::style::*;
use super::selector::*;
/// A theme parsed from a `.tmTheme` file.
///
/// This contains additional fields useful for a theme list as well as `settings` for styling your editor.
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct Theme {
pub name: Option<String>,
pub author: Option<String>,
/// External settings for the editor using this theme
pub settings: ThemeSettings,
/// The styling rules for the viewed text
pub scopes: Vec<ThemeItem>,
}
/// Properties for styling the UI of a text editor
///
/// This essentially consists of the styles that aren't directly applied to the text being viewed.
/// `ThemeSettings` are intended to be used to make the UI of the editor match the styling of the
/// text itself.
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct ThemeSettings {
/// The default color for text.
pub foreground: Option<Color>,
/// The default backgound color of the view.
pub background: Option<Color>,
/// Color of the caret.
pub caret: Option<Color>,
/// Color of the line the caret is in.
/// Only used when the `highlight_line` setting is set to `true`.
pub line_highlight: Option<Color>,
/// The color to use for the squiggly underline drawn under misspelled words.
pub misspelling: Option<Color>,
/// The color of the border drawn around the viewport area of the minimap.
/// Only used when the `draw_minimap_border` setting is enabled.
pub minimap_border: Option<Color>,
/// A color made available for use by the theme.
pub accent: Option<Color>,
/// CSS passed to popups.
pub popup_css: Option<String>,
/// CSS passed to phantoms.
pub phantom_css: Option<String>,
/// Color of bracketed sections of text when the caret is in a bracketed section.
/// Only applied when the `match_brackets` setting is set to `true`.
pub bracket_contents_foreground: Option<Color>,
/// Controls certain options when the caret is in a bracket section.
/// Only applied when the `match_brackets` setting is set to `true`.
pub bracket_contents_options: Option<UnderlineOption>,
/// Foreground color of the brackets when the caret is next to a bracket.
/// Only applied when the `match_brackets` setting is set to `true`.
pub brackets_foreground: Option<Color>,
/// Background color of the brackets when the caret is next to a bracket.
/// Only applied when the `match_brackets` setting is set to `true`.
pub brackets_background: Option<Color>,
/// Controls certain options when the caret is next to a bracket.
/// Only applied when the `match_brackets` setting is set to `true`.
pub brackets_options: Option<UnderlineOption>,
/// Color of tags when the caret is next to a tag.
/// Only used when the `match_tags` setting is set to `true`.
pub tags_foreground: Option<Color>,
/// Controls certain options when the caret is next to a tag.
/// Only applied when the `match_tags` setting is set to `true`.
pub tags_options: Option<UnderlineOption>,
/// The border color for "other" matches.
pub highlight: Option<Color>,
/// Background color of regions matching the current search.
pub find_highlight: Option<Color>,
/// Text color of regions matching the current search.
pub find_highlight_foreground: Option<Color>,
/// Background color of the gutter.
pub gutter: Option<Color>,
/// Foreground color of the gutter.
pub gutter_foreground: Option<Color>,
/// The background color of selected text.
pub selection: Option<Color>,
/// A color that will override the scope-based text color of the selection.
pub selection_foreground: Option<Color>,
/// Color of the selection regions border.
pub selection_border: Option<Color>,
/// The background color of a selection in a view that is not currently focused.
pub inactive_selection: Option<Color>,
/// A color that will override the scope-based text color of the selection
/// in a view that is not currently focused.
pub inactive_selection_foreground: Option<Color>,
/// Color of the guides displayed to indicate nesting levels.
pub guide: Option<Color>,
/// Color of the guide lined up with the caret.
/// Only applied if the `indent_guide_options` setting is set to `draw_active`.
pub active_guide: Option<Color>,
/// Color of the current guide’s parent guide level.
/// Only used if the `indent_guide_options` setting is set to `draw_active`.
pub stack_guide: Option<Color>,
/// The color of the shadow used when a text area can be horizontally scrolled.
pub shadow: Option<Color>,
}
/// A component of a theme meant to highlight a specific thing (e.g string literals)
/// in a certain way.
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
pub struct ThemeItem {
/// Target scope name.
pub scope: ScopeSelectors,
/// The style to use for this component
pub style: StyleModifier,
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum UnderlineOption {
None,
Underline,
StippledUnderline,
SquigglyUnderline,
}
impl Default for UnderlineOption {
fn default() -> UnderlineOption {
UnderlineOption::None
}
}