summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJovansonlee Cesar <ivanceras@gmail.com>2020-11-04 12:00:56 +0800
committerJovansonlee Cesar <ivanceras@gmail.com>2020-11-04 12:00:56 +0800
commit206bef007ea58bef7aab1a4d20e55ccd8286188b (patch)
treec61897aa85ec3e7f2e8dd0c14774b4a965ce9566
parentf42571a7083b9fe61d412bc3e87dfc1250e3e484 (diff)
Add options settings to include/exclude backdrop, styles and defs
This is useful for test fixtures, which we only care about the generated shapes and less about the styling and definitions
-rw-r--r--svgbob/src/buffer/cell_buffer.rs29
-rw-r--r--svgbob/src/buffer/cell_buffer/settings.rs10
-rw-r--r--svgbob/tests/simple_shapes.rs97
3 files changed, 35 insertions, 101 deletions
diff --git a/svgbob/src/buffer/cell_buffer.rs b/svgbob/src/buffer/cell_buffer.rs
index d4cda46..f50c1e9 100644
--- a/svgbob/src/buffer/cell_buffer.rs
+++ b/svgbob/src/buffer/cell_buffer.rs
@@ -304,19 +304,26 @@ impl CellBuffer {
.collect();
let fragment_nodes: Vec<Node<MSG>> = FragmentTree::fragments_to_node(fragments_scaled);
- let svg_node = svg(
+ let mut children = vec![];
+ if settings.include_styles {
+ children.push(Self::get_style(settings, legend_css));
+ }
+ if settings.include_defs {
+ children.push(Self::get_defs());
+ }
+ children.extend(fragment_nodes);
+
+ if settings.include_backdrop {
+ children.push(rect(
+ vec![class("backdrop"), x(0), y(0), width(w), height(h)],
+ vec![],
+ ));
+ }
+
+ svg(
vec![xmlns("http://www.w3.org/2000/svg"), width(w), height(h)],
- vec![
- Self::get_style(settings, legend_css),
- Self::get_defs(),
- rect(
- vec![class("backdrop"), x(0), y(0), width(w), height(h)],
- vec![],
- ),
- ],
+ children,
)
- .add_children(fragment_nodes);
- svg_node
}
fn get_defs<MSG>() -> Node<MSG> {
diff --git a/svgbob/src/buffer/cell_buffer/settings.rs b/svgbob/src/buffer/cell_buffer/settings.rs
index aadcb6e..2db4f95 100644
--- a/svgbob/src/buffer/cell_buffer/settings.rs
+++ b/svgbob/src/buffer/cell_buffer/settings.rs
@@ -16,6 +16,13 @@ pub struct Settings {
pub scale: f32,
/// flag whether to enhace circuitries or not, default true
pub enhance_circuitries: bool,
+ /// flag whether to include the big rectangle as backdrop
+ /// for all of the svg shapes
+ pub include_backdrop: bool,
+ /// flag whether to include the svg styles and legen css styles
+ pub include_styles: bool,
+ /// flag whether to include the def of markers, etc in the svg
+ pub include_defs: bool,
}
impl Settings {
/// the inverse of the default scale 10
@@ -35,6 +42,9 @@ impl Default for Settings {
stroke_width: 2.0,
scale: 8.0,
enhance_circuitries: true,
+ include_backdrop: true,
+ include_styles: true,
+ include_defs: true,
}
}
}
diff --git a/svgbob/tests/simple_shapes.rs b/svgbob/tests/simple_shapes.rs
index c33f424..8452d73 100644
--- a/svgbob/tests/simple_shapes.rs
+++ b/svgbob/tests/simple_shapes.rs
@@ -1,3 +1,5 @@
+use svgbob::Settings;
+
#[test]
fn rect1() {
let bob = r#"
@@ -7,99 +9,14 @@ fn rect1() {
"#;
let expected = r#"<svg xmlns="http://www.w3.org/2000/svg" width="136" height="80">
- <style>line, path, circle,rect,polygon {
- stroke: black;
- stroke-width: 2;
- stroke-opacity: 1;
- fill-opacity: 1;
- stroke-linecap: round;
- stroke-linejoin: miter;
- }
-
- text {
- fill: black;
- }
- rect.backdrop{
- stroke: none;
- fill: white;
- }
- .broken{
- stroke-dasharray: 8;
- }
- .filled{
- fill: black;
- }
- .bg_filled{
- fill: white;
- }
- .nofill{
- fill: white;
- }
-
- text {
- font-family: monospace;
- font-size: 14px;
- }
-
- .end_marked_arrow{
- marker-end: url(#arrow);
- }
- .start_marked_arrow{
- marker-start: url(#arrow);
- }
-
- .end_marked_diamond{
- marker-end: url(#diamond);
- }
- .start_marked_diamond{
- marker-start: url(#diamond);
- }
-
- .end_marked_circle{
- marker-end: url(#circle);
- }
- .start_marked_circle{
- marker-start: url(#circle);
- }
-
- .end_marked_open_circle{
- marker-end: url(#open_circle);
- }
- .start_marked_open_circle{
- marker-start: url(#open_circle);
- }
-
- .end_marked_big_open_circle{
- marker-end: url(#big_open_circle);
- }
- .start_marked_big_open_circle{
- marker-start: url(#big_open_circle);
- }
-
-
- </style>
- <defs>
- <marker id="arrow" viewBox="-2 -2 8 8" refX="4" refY="2" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
- <polygon points="0,0 0,4 4,2 0,0"></polygon>
- </marker>
- <marker id="diamond" viewBox="-2 -2 8 8" refX="4" refY="2" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
- <polygon points="0,2 2,0 4,2 2,4 0,2"></polygon>
- </marker>
- <marker id="circle" viewBox="0 0 8 8" refX="4" refY="4" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
- <circle cx="4" cy="4" r="2" class="filled"></circle>
- </marker>
- <marker id="open_circle" viewBox="0 0 8 8" refX="4" refY="4" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
- <circle cx="4" cy="4" r="2" class="bg_filled"></circle>
- </marker>
- <marker id="big_open_circle" viewBox="0 0 8 8" refX="4" refY="4" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
- <circle cx="4" cy="4" r="3" class="bg_filled"></circle>
- </marker>
- </defs>
- <rect class="backdrop" x="0" y="0" width="136" height="80"></rect>
<rect x="36" y="24" width="88" height="32" class="solid nofill" rx="0"></rect>
</svg>"#;
- let svg = svgbob::to_svg(bob);
+ let mut settings = Settings::default();
+ settings.include_backdrop = false;
+ settings.include_styles = false;
+ settings.include_defs = false;
+ let svg = svgbob::to_svg_with_settings(bob, &settings);
println!("{}", svg);
assert_eq!(expected, svg);
}