use std::{fmt, time}; pub use radicle_term::format::*; pub use radicle_term::{style, Paint}; use radicle::cob::{ObjectId, Timestamp}; use radicle::node::{Alias, AliasStore, NodeId}; use radicle::prelude::Did; use radicle::profile::Profile; use radicle_term::element::Line; use crate::terminal as term; /// Format a node id to be more compact. pub fn node(node: &NodeId) -> String { let node = node.to_human(); let start = node.chars().take(7).collect::(); let end = node.chars().skip(node.len() - 7).collect::(); format!("{start}…{end}") } /// Format a git Oid. pub fn oid(oid: impl Into) -> Paint { Paint::new(format!("{:.7}", oid.into())) } /// Wrap parenthesis around styled input, eg. `"input"` -> `"(input)"`. pub fn parens(input: Paint) -> Paint { Paint::new(format!("({})", input.item)).with_style(input.style) } /// Format a command suggestion, eg. `rad init`. pub fn command(cmd: D) -> Paint { primary(format!("`{cmd}`")) } /// Format a COB id. pub fn cob(id: &ObjectId) -> String { format!("{:.7}", id.to_string()) } /// Format a DID. pub fn did(did: &Did) -> Paint { let nid = did.as_key().to_human(); Paint::new(format!("{}…{}", &nid[..7], &nid[nid.len() - 7..])) } /// Remove html style comments from a string. /// /// The html comments must start at the beginning of a line and stop at the end. pub fn strip_comments(s: &str) -> String { let ends_with_newline = s.ends_with('\n'); let mut is_comment = false; let mut w = String::new(); for line in s.lines() { if is_comment { if line.ends_with("-->") { is_comment = false; } continue; } else if line.starts_with(""; let exp = "\ commit 2\n\ "; let res = strip_comments(test); assert_eq!(exp, res); let test = "\ commit 2\n\ -->"; let exp = "\ commit 2\n\ -->"; let res = strip_comments(test); assert_eq!(exp, res); let test = "\ \n\ -->"; let exp = "\ commit 2\n\ \n\ -->"; let res = strip_comments(test); assert_eq!(exp, res); } }