idk why this isn't in master yet #94

Merged
cscherrNT merged 79 commits from devel into master 2024-07-22 13:30:20 +02:00
1 changed files with 101 additions and 7 deletions
Showing only changes of commit 502298d47b - Show all commits

View File

@ -1,11 +1,105 @@
//! # tools that make printing stuff better
use comfy_table::presets;
use comfy_table::{CellAlignment, ContentArrangement, Table};
use console::{style, Color};
/// Quickly get a one line visual divider
pub fn divider() -> String {
format!("{:=^80}", "=")
/// Prints content with a simple border around it.
///
/// This function is a convenience wrapper around [blockfmt] and [println]. It automatically
/// formats the content with a border using the specified color and then prints it to the console.
///
/// # Example
///
/// ```
/// use libpt_cli::console::Color;
/// use libpt_cli::printing::blockprint;
/// # fn main() {
/// blockprint("Hello world!".to_string(), Color::Blue);
/// # }
/// ```
#[inline]
pub fn blockprint(content: impl ToString, color: Color) {
println!("{}", blockfmt(content, color))
}
/// Quickly print a one line visual divider
pub fn print_divider() {
println!("{:=^80}", "=")
/// Formats content with a simple border around it.
///
/// This function is a convenience wrapper around [blockfmt_advanced] with preset values for
/// border style, content arrangement, and cell alignment. It automatically formats the content
/// with a border as large as possible and centers the content. The resulting cell is colored in
/// the specified color.
///
/// # Example
///
/// ```
/// use libpt_cli::console::Color;
/// use libpt_cli::printing::blockfmt;
/// # fn main() {
/// let formatted_content = blockfmt("Hello world!".to_string(), Color::Blue);
/// println!("{}", formatted_content);
/// # }
/// ```
#[inline]
pub fn blockfmt(content: impl ToString, color: Color) -> String {
blockfmt_advanced(
content,
color,
presets::UTF8_BORDERS_ONLY,
ContentArrangement::DynamicFullWidth,
CellAlignment::Center
)
}
/// Formats content with a border around it.
///
/// Unless you are looking for something specific, use [blockfmt] or [blockprint].
///
/// The border can be created using box-drawing characters, and the content is formatted
/// within the border. The function allows customization of the border's color, preset,
/// content arrangement, and cell alignment.
///
/// # Example
/// ```
/// use libpt_cli::comfy_table::{presets, CellAlignment, ContentArrangement};
/// use libpt_cli::console::Color;
/// use libpt_cli::printing::blockfmt_advanced;
/// # fn main() {
/// println!(
/// "{}",
/// blockfmt_advanced(
/// "Hello world!".to_string(),
/// Color::Blue,
/// presets::UTF8_FULL,
/// ContentArrangement::DynamicFullWidth,
/// CellAlignment::Center
/// )
/// );
/// # }
/// ```
/// ```text
/// ┌────────────────────────────────────────────────────────────────────────────────────────┐
/// │ Hello world! │
/// └────────────────────────────────────────────────────────────────────────────────────────┘
/// ```
///
/// # Parameters
///
///
pub fn blockfmt_advanced(
content: impl ToString,
color: Color,
preset: &str,
arrangement: ContentArrangement,
alignment: CellAlignment
) -> String {
let mut table = Table::new();
table
.load_preset(preset)
.set_content_arrangement(arrangement)
.add_row(vec![content.to_string()]);
table
.column_mut(0)
.unwrap()
.set_cell_alignment(alignment);
format!("{}", style(table).fg(color))
}