summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2021-06-30 04:01:29 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2021-06-30 04:01:29 +0800
commitd5265ef87fff2293fdd842594499b565b3da2420 (patch)
treec508d708b13b87f3276e8c6f9697505f32327cfa
parentd58b79164ac5404639821209151bca8c0c708af4 (diff)
Add a function to convert ascii to svg with an override size
-rw-r--r--svgbob/src/buffer/cell_buffer.rs49
-rw-r--r--svgbob/src/lib.rs14
2 files changed, 54 insertions, 9 deletions
diff --git a/svgbob/src/buffer/cell_buffer.rs b/svgbob/src/buffer/cell_buffer.rs
index d2e4f70..1ef4e1f 100644
--- a/svgbob/src/buffer/cell_buffer.rs
+++ b/svgbob/src/buffer/cell_buffer.rs
@@ -157,6 +157,45 @@ impl CellBuffer {
settings: &Settings,
) -> (Node<MSG>, f32, f32) {
let (w, h) = self.get_size(&settings);
+
+ let (group_nodes, fragments) = self.group_nodes_and_fragments(settings);
+
+ let svg_node = Self::fragments_to_node(
+ fragments,
+ self.legend_css(),
+ settings,
+ w,
+ h,
+ )
+ .add_children(group_nodes);
+ (svg_node, w, h)
+ }
+
+ /// get all nodes and use the size supplied
+ pub fn get_node_override_size<MSG>(
+ &self,
+ settings: &Settings,
+ w: f32,
+ h: f32,
+ ) -> Node<MSG> {
+ let (group_nodes, fragments) = self.group_nodes_and_fragments(settings);
+
+ let svg_node = Self::fragments_to_node(
+ fragments,
+ self.legend_css(),
+ settings,
+ w,
+ h,
+ )
+ .add_children(group_nodes);
+
+ svg_node
+ }
+
+ fn group_nodes_and_fragments<MSG>(
+ &self,
+ settings: &Settings,
+ ) -> (Vec<Node<MSG>>, Vec<Fragment>) {
// vec_fragments are the fragment result of successful endorsement
//
// vec_groups are not endorsed, but are still touching, these will be grouped together in
@@ -205,15 +244,7 @@ impl CellBuffer {
fragments.extend(single_member_fragments);
fragments.extend(self.escaped_text_nodes());
- let svg_node = Self::fragments_to_node(
- fragments,
- self.legend_css(),
- settings,
- w,
- h,
- )
- .add_children(group_nodes);
- (svg_node, w, h)
+ (group_nodes, fragments)
}
fn escaped_text_nodes(&self) -> Vec<Fragment> {
diff --git a/svgbob/src/lib.rs b/svgbob/src/lib.rs
index 3fe7c75..bd4fe48 100644
--- a/svgbob/src/lib.rs
+++ b/svgbob/src/lib.rs
@@ -32,3 +32,17 @@ pub fn to_svg_with_settings(ascii: &str, settings: &Settings) -> String {
node.render(&mut buffer).expect("must render");
buffer
}
+
+/// convert ascii art to svg using the size supplied
+pub fn to_svg_with_override_size(
+ ascii: &str,
+ settings: &Settings,
+ w: f32,
+ h: f32,
+) -> String {
+ let cb = CellBuffer::from(ascii);
+ let node: Node<()> = cb.get_node_override_size(settings, w, h);
+ let mut buffer = String::new();
+ node.render(&mut buffer).expect("must render");
+ buffer
+}