diff options
author | Jovansonlee Cesar <ivanceras@gmail.com> | 2021-06-30 04:01:29 +0800 |
---|---|---|
committer | Jovansonlee Cesar <ivanceras@gmail.com> | 2021-06-30 04:01:29 +0800 |
commit | d5265ef87fff2293fdd842594499b565b3da2420 (patch) | |
tree | c508d708b13b87f3276e8c6f9697505f32327cfa | |
parent | d58b79164ac5404639821209151bca8c0c708af4 (diff) |
Add a function to convert ascii to svg with an override size
-rw-r--r-- | svgbob/src/buffer/cell_buffer.rs | 49 | ||||
-rw-r--r-- | svgbob/src/lib.rs | 14 |
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 +} |