mirror of
https://github.com/FliegendeWurst/cursive.git
synced 2024-11-23 17:35:00 +00:00
Re-organize utils module
This commit is contained in:
parent
943da46e82
commit
7ac003c4de
4
src/utils/lines/mod.rs
Normal file
4
src/utils/lines/mod.rs
Normal file
@ -0,0 +1,4 @@
|
||||
//! Compute rows of text with a width constraint.
|
||||
|
||||
pub mod simple;
|
||||
pub mod spans;
|
@ -1,3 +1,9 @@
|
||||
//! Compute lines on simple text.
|
||||
//!
|
||||
//! The input is a single `&str`.
|
||||
//!
|
||||
//! Computed rows will include start/end byte offsets in the input string.
|
||||
|
||||
use With;
|
||||
use unicode_segmentation::UnicodeSegmentation;
|
||||
use unicode_width::UnicodeWidthStr;
|
@ -1,4 +1,10 @@
|
||||
//! bla
|
||||
//! Compute lines on multiple spans of text.
|
||||
//!
|
||||
//! The input is a list of consecutive text spans.
|
||||
//!
|
||||
//! Computed rows will include a list of span segments.
|
||||
//! Each segment include the source span ID, and start/end byte offsets.
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::iter::Peekable;
|
||||
use theme::Style;
|
||||
@ -255,6 +261,25 @@ pub struct Row {
|
||||
pub width: usize,
|
||||
}
|
||||
|
||||
impl Row {
|
||||
/// Resolve the row indices into styled spans.
|
||||
pub fn resolve<'a: 'b, 'b>(&self, spans: &'b [Span<'a>]) -> Vec<Span<'b>> {
|
||||
self.segments
|
||||
.iter()
|
||||
.map(|seg| {
|
||||
let span: &'b Span<'a> = &spans[seg.span_id];
|
||||
let text: &'b str = &span.text;
|
||||
let text: &'b str = &text[seg.start..seg.end];
|
||||
|
||||
Span {
|
||||
text: Cow::Borrowed(text),
|
||||
style: span.style,
|
||||
}
|
||||
})
|
||||
.collect()
|
||||
}
|
||||
}
|
||||
|
||||
/// Generates rows of text in constrainted width.
|
||||
///
|
||||
/// Works on spans of text.
|
||||
@ -584,6 +609,46 @@ mod tests {
|
||||
|
||||
let iter = SpanLinesIterator::new(&input, 16);
|
||||
let rows: Vec<Row> = iter.collect();
|
||||
let spans: Vec<_> =
|
||||
rows.iter().map(|row| row.resolve(&input)).collect();
|
||||
|
||||
assert_eq!(
|
||||
&spans[..],
|
||||
&[
|
||||
vec![
|
||||
Span {
|
||||
text: Cow::Borrowed("A beautiful "),
|
||||
style: Style::none(),
|
||||
},
|
||||
Span {
|
||||
text: Cow::Borrowed("boat"),
|
||||
style: Style::none(),
|
||||
}
|
||||
],
|
||||
vec![
|
||||
Span {
|
||||
text: Cow::Borrowed("isn\'t it?"),
|
||||
style: Style::none(),
|
||||
}
|
||||
],
|
||||
vec![
|
||||
Span {
|
||||
text: Cow::Borrowed("Yes indeed, my "),
|
||||
style: Style::none(),
|
||||
}
|
||||
],
|
||||
vec![
|
||||
Span {
|
||||
text: Cow::Borrowed("Super"),
|
||||
style: Style::none(),
|
||||
},
|
||||
Span {
|
||||
text: Cow::Borrowed("Captain !"),
|
||||
style: Style::none(),
|
||||
}
|
||||
]
|
||||
]
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
&rows[..],
|
@ -3,11 +3,9 @@
|
||||
use unicode_segmentation::UnicodeSegmentation;
|
||||
use unicode_width::UnicodeWidthStr;
|
||||
|
||||
mod lines_iterator;
|
||||
mod reader;
|
||||
pub mod span_lines_iterator;
|
||||
pub mod lines;
|
||||
|
||||
pub use self::lines_iterator::{LinesIterator, Row};
|
||||
pub use self::reader::ProgressReader;
|
||||
|
||||
/// The length and width of a part of a string.
|
||||
|
@ -5,7 +5,8 @@ use std::cmp::min;
|
||||
use theme::{ColorStyle, Effect};
|
||||
use unicode_segmentation::UnicodeSegmentation;
|
||||
use unicode_width::UnicodeWidthStr;
|
||||
use utils::{prefix, simple_prefix, LinesIterator, Row};
|
||||
use utils::{prefix, simple_prefix};
|
||||
use utils::lines::simple::{LinesIterator, Row};
|
||||
use vec::Vec2;
|
||||
use view::{ScrollBase, SizeCache, View};
|
||||
|
||||
|
@ -10,7 +10,7 @@ use std::sync::{Mutex, MutexGuard};
|
||||
use std::sync::Arc;
|
||||
use theme::Effect;
|
||||
use unicode_width::UnicodeWidthStr;
|
||||
use utils::{LinesIterator, Row};
|
||||
use utils::lines::simple::{LinesIterator, Row};
|
||||
use vec::Vec2;
|
||||
use view::{ScrollBase, ScrollStrategy, SizeCache, View};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user