forked from extern/nushell
table refactor for readability (#5555)
This commit is contained in:
parent
2b96c93b8d
commit
d1e7884d19
@ -1,14 +1,13 @@
|
|||||||
use lscolors::{LsColors, Style};
|
use lscolors::{LsColors, Style};
|
||||||
use nu_color_config::{get_color_config, style_primitive};
|
use nu_color_config::{get_color_config, style_primitive};
|
||||||
use nu_engine::column::get_columns;
|
use nu_engine::{column::get_columns, env_to_string, CallExt};
|
||||||
use nu_engine::{env_to_string, CallExt};
|
|
||||||
use nu_protocol::ast::{Call, PathMember};
|
|
||||||
use nu_protocol::engine::{Command, EngineState, Stack, StateWorkingSet};
|
|
||||||
use nu_protocol::{
|
use nu_protocol::{
|
||||||
|
ast::{Call, PathMember},
|
||||||
|
engine::{Command, EngineState, Stack, StateWorkingSet},
|
||||||
format_error, Category, Config, DataSource, Example, IntoPipelineData, ListStream,
|
format_error, Category, Config, DataSource, Example, IntoPipelineData, ListStream,
|
||||||
PipelineData, PipelineMetadata, RawStream, ShellError, Signature, Span, SyntaxShape, Value,
|
PipelineData, PipelineMetadata, RawStream, ShellError, Signature, Span, SyntaxShape, Value,
|
||||||
};
|
};
|
||||||
use nu_table::{StyledString, TextStyle, Theme};
|
use nu_table::{StyledString, TableTheme, TextStyle};
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
@ -536,17 +535,17 @@ impl Iterator for PagingTableCreator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn load_theme_from_config(config: &Config) -> Theme {
|
fn load_theme_from_config(config: &Config) -> TableTheme {
|
||||||
match config.table_mode.as_str() {
|
match config.table_mode.as_str() {
|
||||||
"basic" => nu_table::Theme::basic(),
|
"basic" => nu_table::TableTheme::basic(),
|
||||||
"compact" => nu_table::Theme::compact(),
|
"compact" => nu_table::TableTheme::compact(),
|
||||||
"compact_double" => nu_table::Theme::compact_double(),
|
"compact_double" => nu_table::TableTheme::compact_double(),
|
||||||
"light" => nu_table::Theme::light(),
|
"light" => nu_table::TableTheme::light(),
|
||||||
"with_love" => nu_table::Theme::with_love(),
|
"with_love" => nu_table::TableTheme::with_love(),
|
||||||
"rounded" => nu_table::Theme::rounded(),
|
"rounded" => nu_table::TableTheme::rounded(),
|
||||||
"reinforced" => nu_table::Theme::reinforced(),
|
"reinforced" => nu_table::TableTheme::reinforced(),
|
||||||
"heavy" => nu_table::Theme::heavy(),
|
"heavy" => nu_table::TableTheme::heavy(),
|
||||||
"none" => nu_table::Theme::none(),
|
"none" => nu_table::TableTheme::none(),
|
||||||
_ => nu_table::Theme::rounded(),
|
_ => nu_table::TableTheme::rounded(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
mod table;
|
mod table;
|
||||||
|
mod table_theme;
|
||||||
|
mod textstyle;
|
||||||
mod wrap;
|
mod wrap;
|
||||||
|
|
||||||
pub use table::{draw_table, StyledString, Table, TextStyle, Theme};
|
pub use table::{draw_table, Table};
|
||||||
|
pub use table_theme::TableTheme;
|
||||||
|
pub use textstyle::{StyledString, TextStyle};
|
||||||
pub use wrap::Alignment;
|
pub use wrap::Alignment;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use nu_protocol::Config;
|
use nu_protocol::Config;
|
||||||
use nu_table::{draw_table, StyledString, Table, TextStyle, Theme};
|
use nu_table::{draw_table, StyledString, Table, TableTheme, TextStyle};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
@ -23,7 +23,7 @@ fn main() {
|
|||||||
// The table rows
|
// The table rows
|
||||||
let rows = vec_of_str_to_vec_of_styledstr(&row_data, false);
|
let rows = vec_of_str_to_vec_of_styledstr(&row_data, false);
|
||||||
// The table itself
|
// The table itself
|
||||||
let table = Table::new(headers, vec![rows; 3], Theme::rounded());
|
let table = Table::new(headers, vec![rows; 3], TableTheme::rounded());
|
||||||
// FIXME: Config isn't available from here so just put these here to compile
|
// FIXME: Config isn't available from here so just put these here to compile
|
||||||
let color_hm: HashMap<String, nu_ansi_term::Style> = HashMap::new();
|
let color_hm: HashMap<String, nu_ansi_term::Style> = HashMap::new();
|
||||||
// get the default config
|
// get the default config
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
|
use crate::table_theme::TableTheme;
|
||||||
use crate::wrap::{column_width, split_sublines, wrap, Alignment, Subline, WrappedCell};
|
use crate::wrap::{column_width, split_sublines, wrap, Alignment, Subline, WrappedCell};
|
||||||
use nu_ansi_term::{Color, Style};
|
use crate::{StyledString, TextStyle};
|
||||||
|
use nu_ansi_term::Style;
|
||||||
use nu_protocol::{Config, FooterMode};
|
use nu_protocol::{Config, FooterMode};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
@ -14,595 +16,15 @@ enum SeparatorPosition {
|
|||||||
pub struct Table {
|
pub struct Table {
|
||||||
pub headers: Vec<StyledString>,
|
pub headers: Vec<StyledString>,
|
||||||
pub data: Vec<Vec<StyledString>>,
|
pub data: Vec<Vec<StyledString>>,
|
||||||
pub theme: Theme,
|
pub theme: TableTheme,
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
|
||||||
pub struct StyledString {
|
|
||||||
pub contents: String,
|
|
||||||
pub style: TextStyle,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl StyledString {
|
|
||||||
pub fn new(contents: String, style: TextStyle) -> StyledString {
|
|
||||||
StyledString { contents, style }
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_style(&mut self, style: TextStyle) {
|
|
||||||
self.style = style;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy)]
|
|
||||||
pub struct TextStyle {
|
|
||||||
pub alignment: Alignment,
|
|
||||||
pub color_style: Option<Style>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TextStyle {
|
|
||||||
pub fn new() -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: Alignment::Left,
|
|
||||||
color_style: Some(Style::default()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn bold(&self, bool_value: Option<bool>) -> TextStyle {
|
|
||||||
let bv = bool_value.unwrap_or(false);
|
|
||||||
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
is_bold: bv,
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_bold(&self) -> bool {
|
|
||||||
self.color_style.unwrap_or_default().is_bold
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn dimmed(&self) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
is_dimmed: true,
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_dimmed(&self) -> bool {
|
|
||||||
self.color_style.unwrap_or_default().is_dimmed
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn italic(&self) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
is_italic: true,
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_italic(&self) -> bool {
|
|
||||||
self.color_style.unwrap_or_default().is_italic
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn underline(&self) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
is_underline: true,
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_underline(&self) -> bool {
|
|
||||||
self.color_style.unwrap_or_default().is_underline
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn blink(&self) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
is_blink: true,
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_blink(&self) -> bool {
|
|
||||||
self.color_style.unwrap_or_default().is_blink
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn reverse(&self) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
is_reverse: true,
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_reverse(&self) -> bool {
|
|
||||||
self.color_style.unwrap_or_default().is_reverse
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn hidden(&self) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
is_hidden: true,
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_hidden(&self) -> bool {
|
|
||||||
self.color_style.unwrap_or_default().is_hidden
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn strikethrough(&self) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
is_strikethrough: true,
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn is_strikethrough(&self) -> bool {
|
|
||||||
self.color_style.unwrap_or_default().is_strikethrough
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn fg(&self, foreground: Color) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
foreground: Some(foreground),
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn on(&self, background: Color) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
background: Some(background),
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn bg(&self, background: Color) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
background: Some(background),
|
|
||||||
..self.color_style.unwrap_or_default()
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn alignment(&self, align: Alignment) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: align,
|
|
||||||
color_style: self.color_style,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn style(&self, style: Style) -> TextStyle {
|
|
||||||
TextStyle {
|
|
||||||
alignment: self.alignment,
|
|
||||||
color_style: Some(Style {
|
|
||||||
foreground: style.foreground,
|
|
||||||
background: style.background,
|
|
||||||
is_bold: style.is_bold,
|
|
||||||
is_dimmed: style.is_dimmed,
|
|
||||||
is_italic: style.is_italic,
|
|
||||||
is_underline: style.is_underline,
|
|
||||||
is_blink: style.is_blink,
|
|
||||||
is_reverse: style.is_reverse,
|
|
||||||
is_hidden: style.is_hidden,
|
|
||||||
is_strikethrough: style.is_strikethrough,
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn basic_center() -> TextStyle {
|
|
||||||
TextStyle::new()
|
|
||||||
.alignment(Alignment::Center)
|
|
||||||
.style(Style::default())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn basic_right() -> TextStyle {
|
|
||||||
TextStyle::new()
|
|
||||||
.alignment(Alignment::Right)
|
|
||||||
.style(Style::default())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn basic_left() -> TextStyle {
|
|
||||||
TextStyle::new()
|
|
||||||
.alignment(Alignment::Left)
|
|
||||||
.style(Style::default())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn default_header() -> TextStyle {
|
|
||||||
TextStyle::new()
|
|
||||||
.alignment(Alignment::Center)
|
|
||||||
.fg(Color::Green)
|
|
||||||
.bold(Some(true))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn default_field() -> TextStyle {
|
|
||||||
TextStyle::new().fg(Color::Green).bold(Some(true))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_attributes(bo: bool, al: Alignment, co: Color) -> TextStyle {
|
|
||||||
TextStyle::new().alignment(al).fg(co).bold(Some(bo))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_style(al: Alignment, style: Style) -> TextStyle {
|
|
||||||
TextStyle::new().alignment(al).style(Style {
|
|
||||||
foreground: style.foreground,
|
|
||||||
background: style.background,
|
|
||||||
is_bold: style.is_bold,
|
|
||||||
is_dimmed: style.is_dimmed,
|
|
||||||
is_italic: style.is_italic,
|
|
||||||
is_underline: style.is_underline,
|
|
||||||
is_blink: style.is_blink,
|
|
||||||
is_reverse: style.is_reverse,
|
|
||||||
is_hidden: style.is_hidden,
|
|
||||||
is_strikethrough: style.is_strikethrough,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for TextStyle {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self::new()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
|
||||||
pub struct Theme {
|
|
||||||
pub top_left: char,
|
|
||||||
pub middle_left: char,
|
|
||||||
pub bottom_left: char,
|
|
||||||
pub top_center: char,
|
|
||||||
pub center: char,
|
|
||||||
pub bottom_center: char,
|
|
||||||
pub top_right: char,
|
|
||||||
pub middle_right: char,
|
|
||||||
pub bottom_right: char,
|
|
||||||
pub top_horizontal: char,
|
|
||||||
pub middle_horizontal: char,
|
|
||||||
pub bottom_horizontal: char,
|
|
||||||
pub left_vertical: char,
|
|
||||||
pub center_vertical: char,
|
|
||||||
pub right_vertical: char,
|
|
||||||
|
|
||||||
pub separate_header: bool,
|
|
||||||
pub separate_rows: bool,
|
|
||||||
|
|
||||||
pub print_left_border: bool,
|
|
||||||
pub print_right_border: bool,
|
|
||||||
pub print_top_border: bool,
|
|
||||||
pub print_bottom_border: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Theme {
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn basic() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: '+',
|
|
||||||
middle_left: '+',
|
|
||||||
bottom_left: '+',
|
|
||||||
top_center: '+',
|
|
||||||
center: '+',
|
|
||||||
bottom_center: '+',
|
|
||||||
top_right: '+',
|
|
||||||
middle_right: '+',
|
|
||||||
bottom_right: '+',
|
|
||||||
top_horizontal: '-',
|
|
||||||
middle_horizontal: '-',
|
|
||||||
bottom_horizontal: '-',
|
|
||||||
left_vertical: '|',
|
|
||||||
center_vertical: '|',
|
|
||||||
right_vertical: '|',
|
|
||||||
|
|
||||||
separate_header: true,
|
|
||||||
separate_rows: true,
|
|
||||||
|
|
||||||
print_left_border: true,
|
|
||||||
print_right_border: true,
|
|
||||||
print_top_border: true,
|
|
||||||
print_bottom_border: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn thin() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: '┌',
|
|
||||||
middle_left: '├',
|
|
||||||
bottom_left: '└',
|
|
||||||
top_center: '┬',
|
|
||||||
center: '┼',
|
|
||||||
bottom_center: '┴',
|
|
||||||
top_right: '┐',
|
|
||||||
middle_right: '┤',
|
|
||||||
bottom_right: '┘',
|
|
||||||
|
|
||||||
top_horizontal: '─',
|
|
||||||
middle_horizontal: '─',
|
|
||||||
bottom_horizontal: '─',
|
|
||||||
|
|
||||||
left_vertical: '│',
|
|
||||||
center_vertical: '│',
|
|
||||||
right_vertical: '│',
|
|
||||||
|
|
||||||
separate_header: true,
|
|
||||||
separate_rows: true,
|
|
||||||
|
|
||||||
print_left_border: true,
|
|
||||||
print_right_border: true,
|
|
||||||
print_top_border: true,
|
|
||||||
print_bottom_border: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn light() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: ' ',
|
|
||||||
middle_left: '─',
|
|
||||||
bottom_left: ' ',
|
|
||||||
top_center: ' ',
|
|
||||||
center: '─',
|
|
||||||
bottom_center: ' ',
|
|
||||||
top_right: ' ',
|
|
||||||
middle_right: '─',
|
|
||||||
bottom_right: ' ',
|
|
||||||
|
|
||||||
top_horizontal: ' ',
|
|
||||||
middle_horizontal: '─',
|
|
||||||
bottom_horizontal: ' ',
|
|
||||||
|
|
||||||
left_vertical: ' ',
|
|
||||||
center_vertical: ' ',
|
|
||||||
right_vertical: ' ',
|
|
||||||
|
|
||||||
separate_header: true,
|
|
||||||
separate_rows: false,
|
|
||||||
|
|
||||||
print_left_border: true,
|
|
||||||
print_right_border: true,
|
|
||||||
print_top_border: false,
|
|
||||||
print_bottom_border: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn compact() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: '─',
|
|
||||||
middle_left: '─',
|
|
||||||
bottom_left: '─',
|
|
||||||
top_center: '┬',
|
|
||||||
center: '┼',
|
|
||||||
bottom_center: '┴',
|
|
||||||
top_right: '─',
|
|
||||||
middle_right: '─',
|
|
||||||
bottom_right: '─',
|
|
||||||
top_horizontal: '─',
|
|
||||||
middle_horizontal: '─',
|
|
||||||
bottom_horizontal: '─',
|
|
||||||
|
|
||||||
left_vertical: ' ',
|
|
||||||
center_vertical: '│',
|
|
||||||
right_vertical: ' ',
|
|
||||||
|
|
||||||
separate_header: true,
|
|
||||||
separate_rows: false,
|
|
||||||
|
|
||||||
print_left_border: false,
|
|
||||||
print_right_border: false,
|
|
||||||
print_top_border: true,
|
|
||||||
print_bottom_border: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn with_love() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: '❤',
|
|
||||||
middle_left: '❤',
|
|
||||||
bottom_left: '❤',
|
|
||||||
top_center: '❤',
|
|
||||||
center: '❤',
|
|
||||||
bottom_center: '❤',
|
|
||||||
top_right: '❤',
|
|
||||||
middle_right: '❤',
|
|
||||||
bottom_right: '❤',
|
|
||||||
top_horizontal: '❤',
|
|
||||||
middle_horizontal: '❤',
|
|
||||||
bottom_horizontal: '❤',
|
|
||||||
|
|
||||||
left_vertical: ' ',
|
|
||||||
center_vertical: '❤',
|
|
||||||
right_vertical: ' ',
|
|
||||||
|
|
||||||
separate_header: true,
|
|
||||||
separate_rows: false,
|
|
||||||
|
|
||||||
print_left_border: false,
|
|
||||||
print_right_border: false,
|
|
||||||
print_top_border: true,
|
|
||||||
print_bottom_border: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn compact_double() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: '═',
|
|
||||||
middle_left: '═',
|
|
||||||
bottom_left: '═',
|
|
||||||
top_center: '╦',
|
|
||||||
center: '╬',
|
|
||||||
bottom_center: '╩',
|
|
||||||
top_right: '═',
|
|
||||||
middle_right: '═',
|
|
||||||
bottom_right: '═',
|
|
||||||
top_horizontal: '═',
|
|
||||||
middle_horizontal: '═',
|
|
||||||
bottom_horizontal: '═',
|
|
||||||
|
|
||||||
left_vertical: ' ',
|
|
||||||
center_vertical: '║',
|
|
||||||
right_vertical: ' ',
|
|
||||||
|
|
||||||
separate_header: true,
|
|
||||||
separate_rows: false,
|
|
||||||
|
|
||||||
print_left_border: false,
|
|
||||||
print_right_border: false,
|
|
||||||
print_top_border: true,
|
|
||||||
print_bottom_border: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn rounded() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: '╭',
|
|
||||||
middle_left: '├',
|
|
||||||
bottom_left: '╰',
|
|
||||||
top_center: '┬',
|
|
||||||
center: '┼',
|
|
||||||
bottom_center: '┴',
|
|
||||||
top_right: '╮',
|
|
||||||
middle_right: '┤',
|
|
||||||
bottom_right: '╯',
|
|
||||||
top_horizontal: '─',
|
|
||||||
middle_horizontal: '─',
|
|
||||||
bottom_horizontal: '─',
|
|
||||||
|
|
||||||
left_vertical: '│',
|
|
||||||
center_vertical: '│',
|
|
||||||
right_vertical: '│',
|
|
||||||
|
|
||||||
separate_header: true,
|
|
||||||
separate_rows: false,
|
|
||||||
|
|
||||||
print_left_border: true,
|
|
||||||
print_right_border: true,
|
|
||||||
print_top_border: true,
|
|
||||||
print_bottom_border: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn reinforced() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: '┏',
|
|
||||||
middle_left: '├',
|
|
||||||
bottom_left: '┗',
|
|
||||||
top_center: '┬',
|
|
||||||
center: '┼',
|
|
||||||
bottom_center: '┴',
|
|
||||||
top_right: '┓',
|
|
||||||
middle_right: '┤',
|
|
||||||
bottom_right: '┛',
|
|
||||||
top_horizontal: '─',
|
|
||||||
middle_horizontal: '─',
|
|
||||||
bottom_horizontal: '─',
|
|
||||||
|
|
||||||
left_vertical: '│',
|
|
||||||
center_vertical: '│',
|
|
||||||
right_vertical: '│',
|
|
||||||
|
|
||||||
separate_header: true,
|
|
||||||
separate_rows: false,
|
|
||||||
|
|
||||||
print_left_border: true,
|
|
||||||
print_right_border: true,
|
|
||||||
print_top_border: true,
|
|
||||||
print_bottom_border: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn heavy() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: '┏',
|
|
||||||
middle_left: '┣',
|
|
||||||
bottom_left: '┗',
|
|
||||||
top_center: '┳',
|
|
||||||
center: '╋',
|
|
||||||
bottom_center: '┻',
|
|
||||||
top_right: '┓',
|
|
||||||
middle_right: '┫',
|
|
||||||
bottom_right: '┛',
|
|
||||||
top_horizontal: '━',
|
|
||||||
middle_horizontal: '━',
|
|
||||||
bottom_horizontal: '━',
|
|
||||||
|
|
||||||
left_vertical: '┃',
|
|
||||||
center_vertical: '┃',
|
|
||||||
right_vertical: '┃',
|
|
||||||
|
|
||||||
separate_header: true,
|
|
||||||
separate_rows: false,
|
|
||||||
|
|
||||||
print_left_border: true,
|
|
||||||
print_right_border: true,
|
|
||||||
print_top_border: true,
|
|
||||||
print_bottom_border: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#[allow(unused)]
|
|
||||||
pub fn none() -> Theme {
|
|
||||||
Theme {
|
|
||||||
top_left: ' ',
|
|
||||||
middle_left: ' ',
|
|
||||||
bottom_left: ' ',
|
|
||||||
top_center: ' ',
|
|
||||||
center: ' ',
|
|
||||||
bottom_center: ' ',
|
|
||||||
top_right: ' ',
|
|
||||||
middle_right: ' ',
|
|
||||||
bottom_right: ' ',
|
|
||||||
|
|
||||||
top_horizontal: ' ',
|
|
||||||
middle_horizontal: ' ',
|
|
||||||
bottom_horizontal: ' ',
|
|
||||||
|
|
||||||
left_vertical: ' ',
|
|
||||||
center_vertical: ' ',
|
|
||||||
right_vertical: ' ',
|
|
||||||
|
|
||||||
separate_header: false,
|
|
||||||
separate_rows: false,
|
|
||||||
|
|
||||||
print_left_border: false,
|
|
||||||
print_right_border: false,
|
|
||||||
print_top_border: false,
|
|
||||||
print_bottom_border: false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Table {
|
impl Table {
|
||||||
pub fn new(headers: Vec<StyledString>, data: Vec<Vec<StyledString>>, theme: Theme) -> Table {
|
pub fn new(
|
||||||
|
headers: Vec<StyledString>,
|
||||||
|
data: Vec<Vec<StyledString>>,
|
||||||
|
theme: TableTheme,
|
||||||
|
) -> Table {
|
||||||
Table {
|
Table {
|
||||||
headers,
|
headers,
|
||||||
data,
|
data,
|
||||||
@ -615,7 +37,7 @@ impl Table {
|
|||||||
pub struct ProcessedTable {
|
pub struct ProcessedTable {
|
||||||
pub headers: Vec<ProcessedCell>,
|
pub headers: Vec<ProcessedCell>,
|
||||||
pub data: Vec<Vec<ProcessedCell>>,
|
pub data: Vec<Vec<ProcessedCell>>,
|
||||||
pub theme: Theme,
|
pub theme: TableTheme,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -629,7 +51,7 @@ pub struct WrappedTable {
|
|||||||
pub column_widths: Vec<usize>,
|
pub column_widths: Vec<usize>,
|
||||||
pub headers: Vec<WrappedCell>,
|
pub headers: Vec<WrappedCell>,
|
||||||
pub data: Vec<Vec<WrappedCell>>,
|
pub data: Vec<Vec<WrappedCell>>,
|
||||||
pub theme: Theme,
|
pub theme: TableTheme,
|
||||||
pub footer: Vec<WrappedCell>,
|
pub footer: Vec<WrappedCell>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
329
crates/nu-table/src/table_theme.rs
Normal file
329
crates/nu-table/src/table_theme.rs
Normal file
@ -0,0 +1,329 @@
|
|||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct TableTheme {
|
||||||
|
pub top_left: char,
|
||||||
|
pub middle_left: char,
|
||||||
|
pub bottom_left: char,
|
||||||
|
pub top_center: char,
|
||||||
|
pub center: char,
|
||||||
|
pub bottom_center: char,
|
||||||
|
pub top_right: char,
|
||||||
|
pub middle_right: char,
|
||||||
|
pub bottom_right: char,
|
||||||
|
pub top_horizontal: char,
|
||||||
|
pub middle_horizontal: char,
|
||||||
|
pub bottom_horizontal: char,
|
||||||
|
pub left_vertical: char,
|
||||||
|
pub center_vertical: char,
|
||||||
|
pub right_vertical: char,
|
||||||
|
|
||||||
|
pub separate_header: bool,
|
||||||
|
pub separate_rows: bool,
|
||||||
|
|
||||||
|
pub print_left_border: bool,
|
||||||
|
pub print_right_border: bool,
|
||||||
|
pub print_top_border: bool,
|
||||||
|
pub print_bottom_border: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TableTheme {
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn basic() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: '+',
|
||||||
|
middle_left: '+',
|
||||||
|
bottom_left: '+',
|
||||||
|
top_center: '+',
|
||||||
|
center: '+',
|
||||||
|
bottom_center: '+',
|
||||||
|
top_right: '+',
|
||||||
|
middle_right: '+',
|
||||||
|
bottom_right: '+',
|
||||||
|
top_horizontal: '-',
|
||||||
|
middle_horizontal: '-',
|
||||||
|
bottom_horizontal: '-',
|
||||||
|
left_vertical: '|',
|
||||||
|
center_vertical: '|',
|
||||||
|
right_vertical: '|',
|
||||||
|
|
||||||
|
separate_header: true,
|
||||||
|
separate_rows: true,
|
||||||
|
|
||||||
|
print_left_border: true,
|
||||||
|
print_right_border: true,
|
||||||
|
print_top_border: true,
|
||||||
|
print_bottom_border: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn thin() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: '┌',
|
||||||
|
middle_left: '├',
|
||||||
|
bottom_left: '└',
|
||||||
|
top_center: '┬',
|
||||||
|
center: '┼',
|
||||||
|
bottom_center: '┴',
|
||||||
|
top_right: '┐',
|
||||||
|
middle_right: '┤',
|
||||||
|
bottom_right: '┘',
|
||||||
|
|
||||||
|
top_horizontal: '─',
|
||||||
|
middle_horizontal: '─',
|
||||||
|
bottom_horizontal: '─',
|
||||||
|
|
||||||
|
left_vertical: '│',
|
||||||
|
center_vertical: '│',
|
||||||
|
right_vertical: '│',
|
||||||
|
|
||||||
|
separate_header: true,
|
||||||
|
separate_rows: true,
|
||||||
|
|
||||||
|
print_left_border: true,
|
||||||
|
print_right_border: true,
|
||||||
|
print_top_border: true,
|
||||||
|
print_bottom_border: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn light() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: ' ',
|
||||||
|
middle_left: '─',
|
||||||
|
bottom_left: ' ',
|
||||||
|
top_center: ' ',
|
||||||
|
center: '─',
|
||||||
|
bottom_center: ' ',
|
||||||
|
top_right: ' ',
|
||||||
|
middle_right: '─',
|
||||||
|
bottom_right: ' ',
|
||||||
|
|
||||||
|
top_horizontal: ' ',
|
||||||
|
middle_horizontal: '─',
|
||||||
|
bottom_horizontal: ' ',
|
||||||
|
|
||||||
|
left_vertical: ' ',
|
||||||
|
center_vertical: ' ',
|
||||||
|
right_vertical: ' ',
|
||||||
|
|
||||||
|
separate_header: true,
|
||||||
|
separate_rows: false,
|
||||||
|
|
||||||
|
print_left_border: true,
|
||||||
|
print_right_border: true,
|
||||||
|
print_top_border: false,
|
||||||
|
print_bottom_border: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn compact() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: '─',
|
||||||
|
middle_left: '─',
|
||||||
|
bottom_left: '─',
|
||||||
|
top_center: '┬',
|
||||||
|
center: '┼',
|
||||||
|
bottom_center: '┴',
|
||||||
|
top_right: '─',
|
||||||
|
middle_right: '─',
|
||||||
|
bottom_right: '─',
|
||||||
|
top_horizontal: '─',
|
||||||
|
middle_horizontal: '─',
|
||||||
|
bottom_horizontal: '─',
|
||||||
|
|
||||||
|
left_vertical: ' ',
|
||||||
|
center_vertical: '│',
|
||||||
|
right_vertical: ' ',
|
||||||
|
|
||||||
|
separate_header: true,
|
||||||
|
separate_rows: false,
|
||||||
|
|
||||||
|
print_left_border: false,
|
||||||
|
print_right_border: false,
|
||||||
|
print_top_border: true,
|
||||||
|
print_bottom_border: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn with_love() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: '❤',
|
||||||
|
middle_left: '❤',
|
||||||
|
bottom_left: '❤',
|
||||||
|
top_center: '❤',
|
||||||
|
center: '❤',
|
||||||
|
bottom_center: '❤',
|
||||||
|
top_right: '❤',
|
||||||
|
middle_right: '❤',
|
||||||
|
bottom_right: '❤',
|
||||||
|
top_horizontal: '❤',
|
||||||
|
middle_horizontal: '❤',
|
||||||
|
bottom_horizontal: '❤',
|
||||||
|
|
||||||
|
left_vertical: ' ',
|
||||||
|
center_vertical: '❤',
|
||||||
|
right_vertical: ' ',
|
||||||
|
|
||||||
|
separate_header: true,
|
||||||
|
separate_rows: false,
|
||||||
|
|
||||||
|
print_left_border: false,
|
||||||
|
print_right_border: false,
|
||||||
|
print_top_border: true,
|
||||||
|
print_bottom_border: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn compact_double() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: '═',
|
||||||
|
middle_left: '═',
|
||||||
|
bottom_left: '═',
|
||||||
|
top_center: '╦',
|
||||||
|
center: '╬',
|
||||||
|
bottom_center: '╩',
|
||||||
|
top_right: '═',
|
||||||
|
middle_right: '═',
|
||||||
|
bottom_right: '═',
|
||||||
|
top_horizontal: '═',
|
||||||
|
middle_horizontal: '═',
|
||||||
|
bottom_horizontal: '═',
|
||||||
|
|
||||||
|
left_vertical: ' ',
|
||||||
|
center_vertical: '║',
|
||||||
|
right_vertical: ' ',
|
||||||
|
|
||||||
|
separate_header: true,
|
||||||
|
separate_rows: false,
|
||||||
|
|
||||||
|
print_left_border: false,
|
||||||
|
print_right_border: false,
|
||||||
|
print_top_border: true,
|
||||||
|
print_bottom_border: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn rounded() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: '╭',
|
||||||
|
middle_left: '├',
|
||||||
|
bottom_left: '╰',
|
||||||
|
top_center: '┬',
|
||||||
|
center: '┼',
|
||||||
|
bottom_center: '┴',
|
||||||
|
top_right: '╮',
|
||||||
|
middle_right: '┤',
|
||||||
|
bottom_right: '╯',
|
||||||
|
top_horizontal: '─',
|
||||||
|
middle_horizontal: '─',
|
||||||
|
bottom_horizontal: '─',
|
||||||
|
|
||||||
|
left_vertical: '│',
|
||||||
|
center_vertical: '│',
|
||||||
|
right_vertical: '│',
|
||||||
|
|
||||||
|
separate_header: true,
|
||||||
|
separate_rows: false,
|
||||||
|
|
||||||
|
print_left_border: true,
|
||||||
|
print_right_border: true,
|
||||||
|
print_top_border: true,
|
||||||
|
print_bottom_border: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn reinforced() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: '┏',
|
||||||
|
middle_left: '├',
|
||||||
|
bottom_left: '┗',
|
||||||
|
top_center: '┬',
|
||||||
|
center: '┼',
|
||||||
|
bottom_center: '┴',
|
||||||
|
top_right: '┓',
|
||||||
|
middle_right: '┤',
|
||||||
|
bottom_right: '┛',
|
||||||
|
top_horizontal: '─',
|
||||||
|
middle_horizontal: '─',
|
||||||
|
bottom_horizontal: '─',
|
||||||
|
|
||||||
|
left_vertical: '│',
|
||||||
|
center_vertical: '│',
|
||||||
|
right_vertical: '│',
|
||||||
|
|
||||||
|
separate_header: true,
|
||||||
|
separate_rows: false,
|
||||||
|
|
||||||
|
print_left_border: true,
|
||||||
|
print_right_border: true,
|
||||||
|
print_top_border: true,
|
||||||
|
print_bottom_border: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn heavy() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: '┏',
|
||||||
|
middle_left: '┣',
|
||||||
|
bottom_left: '┗',
|
||||||
|
top_center: '┳',
|
||||||
|
center: '╋',
|
||||||
|
bottom_center: '┻',
|
||||||
|
top_right: '┓',
|
||||||
|
middle_right: '┫',
|
||||||
|
bottom_right: '┛',
|
||||||
|
top_horizontal: '━',
|
||||||
|
middle_horizontal: '━',
|
||||||
|
bottom_horizontal: '━',
|
||||||
|
|
||||||
|
left_vertical: '┃',
|
||||||
|
center_vertical: '┃',
|
||||||
|
right_vertical: '┃',
|
||||||
|
|
||||||
|
separate_header: true,
|
||||||
|
separate_rows: false,
|
||||||
|
|
||||||
|
print_left_border: true,
|
||||||
|
print_right_border: true,
|
||||||
|
print_top_border: true,
|
||||||
|
print_bottom_border: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[allow(unused)]
|
||||||
|
pub fn none() -> TableTheme {
|
||||||
|
TableTheme {
|
||||||
|
top_left: ' ',
|
||||||
|
middle_left: ' ',
|
||||||
|
bottom_left: ' ',
|
||||||
|
top_center: ' ',
|
||||||
|
center: ' ',
|
||||||
|
bottom_center: ' ',
|
||||||
|
top_right: ' ',
|
||||||
|
middle_right: ' ',
|
||||||
|
bottom_right: ' ',
|
||||||
|
|
||||||
|
top_horizontal: ' ',
|
||||||
|
middle_horizontal: ' ',
|
||||||
|
bottom_horizontal: ' ',
|
||||||
|
|
||||||
|
left_vertical: ' ',
|
||||||
|
center_vertical: ' ',
|
||||||
|
right_vertical: ' ',
|
||||||
|
|
||||||
|
separate_header: false,
|
||||||
|
separate_rows: false,
|
||||||
|
|
||||||
|
print_left_border: false,
|
||||||
|
print_right_border: false,
|
||||||
|
print_top_border: false,
|
||||||
|
print_bottom_border: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
256
crates/nu-table/src/textstyle.rs
Normal file
256
crates/nu-table/src/textstyle.rs
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
use crate::wrap::Alignment;
|
||||||
|
use nu_ansi_term::{Color, Style};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub struct TextStyle {
|
||||||
|
pub alignment: Alignment,
|
||||||
|
pub color_style: Option<Style>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TextStyle {
|
||||||
|
pub fn new() -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: Alignment::Left,
|
||||||
|
color_style: Some(Style::default()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn bold(&self, bool_value: Option<bool>) -> TextStyle {
|
||||||
|
let bv = bool_value.unwrap_or(false);
|
||||||
|
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
is_bold: bv,
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn is_bold(&self) -> bool {
|
||||||
|
self.color_style.unwrap_or_default().is_bold
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn dimmed(&self) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
is_dimmed: true,
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn is_dimmed(&self) -> bool {
|
||||||
|
self.color_style.unwrap_or_default().is_dimmed
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn italic(&self) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
is_italic: true,
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn is_italic(&self) -> bool {
|
||||||
|
self.color_style.unwrap_or_default().is_italic
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn underline(&self) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
is_underline: true,
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn is_underline(&self) -> bool {
|
||||||
|
self.color_style.unwrap_or_default().is_underline
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn blink(&self) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
is_blink: true,
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn is_blink(&self) -> bool {
|
||||||
|
self.color_style.unwrap_or_default().is_blink
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn reverse(&self) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
is_reverse: true,
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn is_reverse(&self) -> bool {
|
||||||
|
self.color_style.unwrap_or_default().is_reverse
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn hidden(&self) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
is_hidden: true,
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn is_hidden(&self) -> bool {
|
||||||
|
self.color_style.unwrap_or_default().is_hidden
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn strikethrough(&self) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
is_strikethrough: true,
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn is_strikethrough(&self) -> bool {
|
||||||
|
self.color_style.unwrap_or_default().is_strikethrough
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn fg(&self, foreground: Color) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
foreground: Some(foreground),
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn on(&self, background: Color) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
background: Some(background),
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn bg(&self, background: Color) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
background: Some(background),
|
||||||
|
..self.color_style.unwrap_or_default()
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn alignment(&self, align: Alignment) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: align,
|
||||||
|
color_style: self.color_style,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn style(&self, style: Style) -> TextStyle {
|
||||||
|
TextStyle {
|
||||||
|
alignment: self.alignment,
|
||||||
|
color_style: Some(Style {
|
||||||
|
foreground: style.foreground,
|
||||||
|
background: style.background,
|
||||||
|
is_bold: style.is_bold,
|
||||||
|
is_dimmed: style.is_dimmed,
|
||||||
|
is_italic: style.is_italic,
|
||||||
|
is_underline: style.is_underline,
|
||||||
|
is_blink: style.is_blink,
|
||||||
|
is_reverse: style.is_reverse,
|
||||||
|
is_hidden: style.is_hidden,
|
||||||
|
is_strikethrough: style.is_strikethrough,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn basic_center() -> TextStyle {
|
||||||
|
TextStyle::new()
|
||||||
|
.alignment(Alignment::Center)
|
||||||
|
.style(Style::default())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn basic_right() -> TextStyle {
|
||||||
|
TextStyle::new()
|
||||||
|
.alignment(Alignment::Right)
|
||||||
|
.style(Style::default())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn basic_left() -> TextStyle {
|
||||||
|
TextStyle::new()
|
||||||
|
.alignment(Alignment::Left)
|
||||||
|
.style(Style::default())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn default_header() -> TextStyle {
|
||||||
|
TextStyle::new()
|
||||||
|
.alignment(Alignment::Center)
|
||||||
|
.fg(Color::Green)
|
||||||
|
.bold(Some(true))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn default_field() -> TextStyle {
|
||||||
|
TextStyle::new().fg(Color::Green).bold(Some(true))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_attributes(bo: bool, al: Alignment, co: Color) -> TextStyle {
|
||||||
|
TextStyle::new().alignment(al).fg(co).bold(Some(bo))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_style(al: Alignment, style: Style) -> TextStyle {
|
||||||
|
TextStyle::new().alignment(al).style(Style {
|
||||||
|
foreground: style.foreground,
|
||||||
|
background: style.background,
|
||||||
|
is_bold: style.is_bold,
|
||||||
|
is_dimmed: style.is_dimmed,
|
||||||
|
is_italic: style.is_italic,
|
||||||
|
is_underline: style.is_underline,
|
||||||
|
is_blink: style.is_blink,
|
||||||
|
is_reverse: style.is_reverse,
|
||||||
|
is_hidden: style.is_hidden,
|
||||||
|
is_strikethrough: style.is_strikethrough,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for TextStyle {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub struct StyledString {
|
||||||
|
pub contents: String,
|
||||||
|
pub style: TextStyle,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StyledString {
|
||||||
|
pub fn new(contents: String, style: TextStyle) -> StyledString {
|
||||||
|
StyledString { contents, style }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_style(&mut self, style: TextStyle) {
|
||||||
|
self.style = style;
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
use crate::table::TextStyle;
|
use crate::textstyle::TextStyle;
|
||||||
use ansi_str::AnsiStr;
|
use ansi_str::AnsiStr;
|
||||||
use nu_ansi_term::Style;
|
use nu_ansi_term::Style;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
|
Loading…
Reference in New Issue
Block a user