summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2020-11-26 00:37:09 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2020-11-26 00:37:09 +0800
commita33379db295d188fcbee430399401d16c535ddd9 (patch)
treec2c4233cfdeaa59c59f277b6ed9153d9a83f08e6
parentb89293bc61233f746474c57b23db09c71a6ac0c3 (diff)
Fix some bugs on text escaping, where the last bit of the text at the end is omitted
-rw-r--r--svgbob/TODO.md1
-rw-r--r--svgbob/src/buffer/cell_buffer.rs26
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/line.rs1
-rw-r--r--svgbob/test_data/example.bob8
4 files changed, 32 insertions, 4 deletions
diff --git a/svgbob/TODO.md b/svgbob/TODO.md
index 19c8dcf..1a28791 100644
--- a/svgbob/TODO.md
+++ b/svgbob/TODO.md
@@ -16,3 +16,4 @@
- [ ] Fix the double arrow issue
When there is 2 arrows in the middle of a line `---->>-------` or `----<<----`
- [ ] Clean the project enforce deny warnings.
+- [ ] Fix a bug where an escaped text has whitespaces, the whitespaces are gone.
diff --git a/svgbob/src/buffer/cell_buffer.rs b/svgbob/src/buffer/cell_buffer.rs
index d47542c..99a2e53 100644
--- a/svgbob/src/buffer/cell_buffer.rs
+++ b/svgbob/src/buffer/cell_buffer.rs
@@ -201,8 +201,10 @@ impl CellBuffer {
let mut fragments: Vec<Fragment> =
vec_fragments.into_iter().flatten().collect();
+
fragments.extend(single_member_fragments);
fragments.extend(self.escaped_text_nodes());
+
let svg_node = Self::fragments_to_node(
fragments,
self.legend_css(),
@@ -480,6 +482,8 @@ impl CellBuffer {
no_escaped_text.push_str(&" ".repeat(end + 1 - start));
index = end + 1;
}
+ // the rest of the text
+ no_escaped_text.push_str(&raw[index..raw.len()]);
}
(escaped_text, no_escaped_text)
}
@@ -561,6 +565,28 @@ mod tests {
}
#[test]
+ fn test_escape_line2() {
+ let raw = r#"The quick brown fox jumps over the "lazy" dog"#;
+ let ex2 = r#"The quick brown fox jumps over the dog"#;
+ let (escaped, unescaped) = CellBuffer::escape_line(0, raw);
+ println!("escaped: {:#?}", escaped);
+ println!("unescaped: {}", unescaped);
+ assert_eq!(vec![(Cell::new(35, 0), "lazy".to_string())], escaped);
+ assert_eq!(ex2, unescaped);
+ }
+
+ #[test]
+ fn test_escape_line3() {
+ let raw = r#" in between "| |" these "#;
+ let ex2 = r#" in between these "#;
+ let (escaped, unescaped) = CellBuffer::escape_line(0, raw);
+ println!("escaped: {:#?}", escaped);
+ println!("unescaped: {}", unescaped);
+ assert_eq!(vec![(Cell::new(12, 0), "| |".to_string())], escaped);
+ assert_eq!(ex2, unescaped);
+ }
+
+ #[test]
fn test_simple_adjacents() {
let art = r#"
.. ._.
diff --git a/svgbob/src/buffer/fragment_buffer/fragment/line.rs b/svgbob/src/buffer/fragment_buffer/fragment/line.rs
index 9f5586d..1be9425 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment/line.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment/line.rs
@@ -557,6 +557,7 @@ impl PartialEq for Line {
#[cfg(test)]
mod tests {
use super::*;
+ use crate::buffer::fragment_buffer::fragment::polygon::PolygonTag;
use crate::buffer::CellGrid;
#[test]
diff --git a/svgbob/test_data/example.bob b/svgbob/test_data/example.bob
index 7e69484..646bc48 100644
--- a/svgbob/test_data/example.bob
+++ b/svgbob/test_data/example.bob
@@ -45,10 +45,10 @@ What can it do?
! `.____.' `._____.' !
! ______ !
! ,' `. !
- ! / \ .-----. .----. !
- ! | | \ / \ \ !
- ! | | \ / \ \ !
- ! \ / ' '----' !
+ ! / \ .-----. .----. ".--------------." !
+ ! | | \ / \ \ "| Don't draw me|" !
+ ! | | \ / \ \ "| |" !
+ ! \ / ' '----' "'--------------'" !
! `.______.' !
! !
`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'