use crate::preview::appearance;
use ratatui::{
style::Style,
text::{Line, Span},
};
pub(in crate::preview::code) fn render_plain_code_preview<F>(
text: &str,
line_numbers: bool,
line_limit: usize,
canceled: &F,
) -> Vec<Line<'static>>
where
F: Fn() -> bool,
{
let code_palette = appearance::code_palette();
let source_lines = crate::preview::collect_preview_lines_with_limit(
text,
crate::preview::clamp_code_preview_line_limit(line_limit),
);
let number_width = crate::preview::line_number_width(source_lines.len());
let mut rendered = Vec::new();
for (index, line) in source_lines.iter().enumerate() {
if canceled() {
break;
}
let mut spans = Vec::new();
if line_numbers {
spans.push(crate::preview::line_number_span(index + 1, number_width));
} else {
spans.push(Span::styled(
"│ ",
Style::default().fg(code_palette.line_number),
));
}
spans.push(Span::styled(
crate::preview::expand_tabs(line),
Style::default().fg(code_palette.fg),
));
rendered.push(Line::from(spans));
}
if rendered.is_empty() && !canceled() {
rendered.push(Line::from("File is empty"));
}
rendered
}