summaryrefslogtreecommitdiffstats
path: root/svgbob
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2020-02-29 01:25:05 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2020-02-29 01:25:05 +0800
commitec2beec5c585b776fe0f31b33fc0493e52c53061 (patch)
tree49eebb8a22be53a12ec9bcf8e9e0f9113ff871b8 /svgbob
parent0fb7a8d352b3e1facd6b9092bec0449f1f3e5d4a (diff)
Make functions that return Node<()> into a return generics Node<MSG> to allow usage of Node<MSG> generics in sauron apps
Diffstat (limited to 'svgbob')
-rw-r--r--svgbob/Cargo.toml2
-rw-r--r--svgbob/src/buffer/cell_buffer.rs34
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment.rs4
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/arc.rs4
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/circle.rs4
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/line.rs4
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs6
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/polygon.rs4
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/rect.rs4
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment/text.rs11
-rw-r--r--svgbob/src/buffer/fragment_buffer/fragment_tree.rs6
-rw-r--r--svgbob/src/lib.rs6
12 files changed, 49 insertions, 40 deletions
diff --git a/svgbob/Cargo.toml b/svgbob/Cargo.toml
index 287b509..b110a82 100644
--- a/svgbob/Cargo.toml
+++ b/svgbob/Cargo.toml
@@ -13,7 +13,7 @@ license = "Apache-2.0"
nalgebra = "0.18.0"
ncollide2d = "0.19.1"
lazy_static = "1.3.0"
-sauron = { version = "0.21.0", default-features = false}
+sauron = { version = "0.22.0", default-features = false, features = ["with-dom"]}
unicode-width = "0.1.5"
itertools = "0.8.0"
pom = { version = "3.1.0" }
diff --git a/svgbob/src/buffer/cell_buffer.rs b/svgbob/src/buffer/cell_buffer.rs
index c2f9239..d4cda46 100644
--- a/svgbob/src/buffer/cell_buffer.rs
+++ b/svgbob/src/buffer/cell_buffer.rs
@@ -131,7 +131,7 @@ impl CellBuffer {
}
/// get the svg node of this cell buffer, using the default settings for the sizes
- pub fn get_node(&self) -> Node<()> {
+ pub fn get_node<MSG>(&self) -> Node<MSG> {
let (node, _w, _h) = self.get_node_with_size(&Settings::default());
node
}
@@ -146,7 +146,7 @@ impl CellBuffer {
}
/// get all nodes of this cell buffer
- pub fn get_node_with_size(&self, settings: &Settings) -> (Node<()>, f32, f32) {
+ pub fn get_node_with_size<MSG>(&self, settings: &Settings) -> (Node<MSG>, f32, f32) {
let (w, h) = self.get_size(&settings);
// vec_fragments are the fragment result of successful endorsement
//
@@ -170,14 +170,18 @@ impl CellBuffer {
.flat_map(|contact| contact.0)
.collect();
- let group_nodes: Vec<Node<()>> = vec_groups
+ let group_nodes: Vec<Node<MSG>> = vec_groups
.into_iter()
.map(|contact| contact.0)
.map(move |contacts| {
let mut group_members = contacts
.iter()
- .map(move |gfrag| gfrag.scale(settings.scale).into())
- .collect::<Vec<_>>();
+ .map(move |gfrag| {
+ let scaled = gfrag.scale(settings.scale);
+ let node: Node<MSG> = scaled.into();
+ node
+ })
+ .collect::<Vec<Node<MSG>>>();
g(vec![], group_members)
})
.collect();
@@ -199,7 +203,7 @@ impl CellBuffer {
classes.join("\n")
}
- fn get_style(settings: &Settings, legend_css: String) -> Node<()> {
+ fn get_style<MSG>(settings: &Settings, legend_css: String) -> Node<MSG> {
html::tags::style(
vec![],
vec![text(format!(
@@ -287,18 +291,18 @@ impl CellBuffer {
/// convert the fragments into svg nodes using the supplied settings, with size for the
/// dimension
- pub(crate) fn fragments_to_node(
+ pub(crate) fn fragments_to_node<MSG>(
fragments: Vec<Fragment>,
legend_css: String,
settings: &Settings,
w: f32,
h: f32,
- ) -> Node<()> {
+ ) -> Node<MSG> {
let fragments_scaled: Vec<Fragment> = fragments
.into_iter()
.map(|frag| frag.scale(settings.scale))
.collect();
- let fragment_nodes: Vec<Node<()>> = FragmentTree::fragments_to_node(fragments_scaled);
+ let fragment_nodes: Vec<Node<MSG>> = FragmentTree::fragments_to_node(fragments_scaled);
let svg_node = svg(
vec![xmlns("http://www.w3.org/2000/svg"), width(w), height(h)],
@@ -315,7 +319,7 @@ impl CellBuffer {
svg_node
}
- fn get_defs() -> Node<()> {
+ fn get_defs<MSG>() -> Node<MSG> {
defs(
vec![],
vec![
@@ -328,7 +332,7 @@ impl CellBuffer {
)
}
- fn arrow_marker() -> Node<()> {
+ fn arrow_marker<MSG>() -> Node<MSG> {
marker(
vec![
id("arrow"),
@@ -343,7 +347,7 @@ impl CellBuffer {
)
}
- fn diamond_marker() -> Node<()> {
+ fn diamond_marker<MSG>() -> Node<MSG> {
marker(
vec![
id("diamond"),
@@ -358,7 +362,7 @@ impl CellBuffer {
)
}
- fn open_circle_marker() -> Node<()> {
+ fn open_circle_marker<MSG>() -> Node<MSG> {
marker(
vec![
id("open_circle"),
@@ -376,7 +380,7 @@ impl CellBuffer {
)
}
- fn circle_marker() -> Node<()> {
+ fn circle_marker<MSG>() -> Node<MSG> {
marker(
vec![
id("circle"),
@@ -394,7 +398,7 @@ impl CellBuffer {
)
}
- fn big_open_circle_marker() -> Node<()> {
+ fn big_open_circle_marker<MSG>() -> Node<MSG> {
marker(
vec![
id("big_open_circle"),
diff --git a/svgbob/src/buffer/fragment_buffer/fragment.rs b/svgbob/src/buffer/fragment_buffer/fragment.rs
index a968e1e..3329315 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment.rs
@@ -450,8 +450,8 @@ impl Bounds for Fragment {
}
}
-impl Into<Node<()>> for Fragment {
- fn into(self) -> Node<()> {
+impl<MSG> Into<Node<MSG>> for Fragment {
+ fn into(self) -> Node<MSG> {
match self {
Fragment::Line(line) => line.into(),
Fragment::MarkerLine(marker_line) => marker_line.into(),
diff --git a/svgbob/src/buffer/fragment_buffer/fragment/arc.rs b/svgbob/src/buffer/fragment_buffer/fragment/arc.rs
index d37a1c5..12a477e 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment/arc.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment/arc.rs
@@ -156,8 +156,8 @@ impl fmt::Display for Arc {
}
}
-impl Into<Node<()>> for Arc {
- fn into(self) -> Node<()> {
+impl<MSG> Into<Node<MSG>> for Arc {
+ fn into(self) -> Node<MSG> {
let dv = format!(
"M {},{} A {},{} {},{},{} {},{}",
self.start.x,
diff --git a/svgbob/src/buffer/fragment_buffer/fragment/circle.rs b/svgbob/src/buffer/fragment_buffer/fragment/circle.rs
index 585de64..03a7e65 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment/circle.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment/circle.rs
@@ -61,8 +61,8 @@ impl fmt::Display for Circle {
}
}
-impl Into<Node<()>> for Circle {
- fn into(self) -> Node<()> {
+impl<MSG> Into<Node<MSG>> for Circle {
+ fn into(self) -> Node<MSG> {
circle(
vec![
cx(self.center.x),
diff --git a/svgbob/src/buffer/fragment_buffer/fragment/line.rs b/svgbob/src/buffer/fragment_buffer/fragment/line.rs
index a69b5d4..f51eb27 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment/line.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment/line.rs
@@ -558,8 +558,8 @@ impl fmt::Display for Line {
}
}
-impl Into<Node<()>> for Line {
- fn into(self) -> Node<()> {
+impl<MSG> Into<Node<MSG>> for Line {
+ fn into(self) -> Node<MSG> {
svg::tags::line(
vec![
x1(self.start.x),
diff --git a/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs b/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs
index 7e57490..423612f 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment/marker_line.rs
@@ -175,9 +175,9 @@ impl fmt::Display for MarkerLine {
}
}
-impl Into<Node<()>> for MarkerLine {
- fn into(self) -> Node<()> {
- let mut node: Node<()> = self.line.into();
+impl<MSG> Into<Node<MSG>> for MarkerLine {
+ fn into(self) -> Node<MSG> {
+ let mut node: Node<MSG> = self.line.into();
let mut classes = vec![];
if let Some(start_marker) = self.start_marker {
classes.push(class(format!("start_marked_{}", start_marker)));
diff --git a/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs b/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs
index b1a9239..ce82ae4 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment/polygon.rs
@@ -159,8 +159,8 @@ impl fmt::Display for Polygon {
}
}
-impl Into<Node<()>> for Polygon {
- fn into(self) -> Node<()> {
+impl<MSG> Into<Node<MSG>> for Polygon {
+ fn into(self) -> Node<MSG> {
polygon(
vec![
points(
diff --git a/svgbob/src/buffer/fragment_buffer/fragment/rect.rs b/svgbob/src/buffer/fragment_buffer/fragment/rect.rs
index d716dc7..97a15e0 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment/rect.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment/rect.rs
@@ -107,8 +107,8 @@ impl fmt::Display for Rect {
}
}
-impl Into<Node<()>> for Rect {
- fn into(self) -> Node<()> {
+impl<MSG> Into<Node<MSG>> for Rect {
+ fn into(self) -> Node<MSG> {
rect(
vec![
x(self.start.x),
diff --git a/svgbob/src/buffer/fragment_buffer/fragment/text.rs b/svgbob/src/buffer/fragment_buffer/fragment/text.rs
index b5ce261..039e6d7 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment/text.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment/text.rs
@@ -95,8 +95,8 @@ impl Into<Text> for CellText {
}
}
-impl Into<Node<()>> for CellText {
- fn into(self) -> Node<()> {
+impl<MSG> Into<Node<MSG>> for CellText {
+ fn into(self) -> Node<MSG> {
let text: Text = self.into();
text.into()
}
@@ -162,11 +162,14 @@ impl fmt::Display for Text {
}
}
-impl Into<Node<()>> for Text {
- fn into(self) -> Node<()> {
+impl<MSG> Into<Node<MSG>> for Text {
+ fn into(self) -> Node<MSG> {
svg::tags::text(
vec![x(self.start.x), y(self.start.y)],
+ #[cfg(not(feature = "with-dom"))]
vec![text(escape_html_text(&self.text))],
+ #[cfg(feature = "with-dom")]
+ vec![text(&self.text)],
)
}
}
diff --git a/svgbob/src/buffer/fragment_buffer/fragment_tree.rs b/svgbob/src/buffer/fragment_buffer/fragment_tree.rs
index 863dfad..e3f476b 100644
--- a/svgbob/src/buffer/fragment_buffer/fragment_tree.rs
+++ b/svgbob/src/buffer/fragment_buffer/fragment_tree.rs
@@ -99,9 +99,9 @@ impl FragmentTree {
}
/// convert back into fragments
- fn into_nodes(self) -> Vec<Node<()>> {
+ fn into_nodes<MSG>(self) -> Vec<Node<MSG>> {
let mut nodes = vec![];
- let mut fragment_node: Node<()> = self.fragment.into();
+ let mut fragment_node: Node<MSG> = self.fragment.into();
fragment_node = fragment_node.add_attributes(vec![classes(self.css_tag)]);
nodes.push(fragment_node);
for child in self.enclosing {
@@ -112,7 +112,7 @@ impl FragmentTree {
/// convert fragments to node, where cell_text and text may become
/// css class of the contain fragment
- pub(crate) fn fragments_to_node(fragments: Vec<Fragment>) -> Vec<Node<()>> {
+ pub(crate) fn fragments_to_node<MSG>(fragments: Vec<Fragment>) -> Vec<Node<MSG>> {
let fragment_trees: Vec<FragmentTree> = Self::enclose_fragments(fragments);
fragment_trees
.into_iter()
diff --git a/svgbob/src/lib.rs b/svgbob/src/lib.rs
index 1d9e836..dff232c 100644
--- a/svgbob/src/lib.rs
+++ b/svgbob/src/lib.rs
@@ -13,16 +13,18 @@ pub use buffer::{
Signal,
};
pub use point::Point;
+use sauron::Node;
/// convert svgbob ascii art to svg
pub fn to_svg(ascii: &str) -> String {
let cb = CellBuffer::from(ascii);
- cb.get_node().to_string()
+ let node: Node<()> = cb.get_node();
+ node.to_string()
}
/// convert ascii art into an svg
pub fn to_svg_with_settings(ascii: &str, settings: &Settings) -> String {
let cb = CellBuffer::from(ascii);
- let (node, _w, _h) = cb.get_node_with_size(settings);
+ let (node, _w, _h): (Node<()>, f32, f32) = cb.get_node_with_size(settings);
node.to_string()
}