diff options
author | Jovansonlee Cesar <ivanceras@gmail.com> | 2020-11-04 12:00:56 +0800 |
---|---|---|
committer | Jovansonlee Cesar <ivanceras@gmail.com> | 2020-11-04 12:00:56 +0800 |
commit | 206bef007ea58bef7aab1a4d20e55ccd8286188b (patch) | |
tree | c61897aa85ec3e7f2e8dd0c14774b4a965ce9566 | |
parent | f42571a7083b9fe61d412bc3e87dfc1250e3e484 (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.rs | 29 | ||||
-rw-r--r-- | svgbob/src/buffer/cell_buffer/settings.rs | 10 | ||||
-rw-r--r-- | svgbob/tests/simple_shapes.rs | 97 |
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); } |