summaryrefslogtreecommitdiffstats
path: root/svgbob/src/grid.rs
diff options
context:
space:
mode:
Diffstat (limited to 'svgbob/src/grid.rs')
-rw-r--r--svgbob/src/grid.rs104
1 files changed, 44 insertions, 60 deletions
diff --git a/svgbob/src/grid.rs b/svgbob/src/grid.rs
index 679122d..4cc1057 100644
--- a/svgbob/src/grid.rs
+++ b/svgbob/src/grid.rs
@@ -1,24 +1,19 @@
-use loc::Loc;
+use element::Element;
use focus_char::FocusChar;
+use loc::Loc;
use optimizer::Optimizer;
-use svg_element::SvgElement;
+use pom;
+use pom::parser::{none_of, sym};
+use pom::TextInput;
+use settings::Settings;
use svg::node::element::SVG;
-use svg::Node;
use svg::node::element::{
- Definitions,
- Marker,
- Rectangle as SvgRect,
+ Circle as SvgCircle, Definitions, Group, Marker, Polygon as SvgPolygon, Rectangle as SvgRect,
Style,
- Circle as SvgCircle,
- Polygon as SvgPolygon,
- Group,
};
-use element::Element;
-use pom::TextInput;
-use pom::parser::{sym,none_of};
-use settings::Settings;
+use svg::Node;
+use svg_element::SvgElement;
use unicode_width::UnicodeWidthChar;
-use pom;
#[derive(Debug)]
pub struct Grid {
@@ -80,7 +75,6 @@ impl Grid {
g.pre_process()
}
-
pub fn rows(&self) -> usize {
self.index.len()
}
@@ -102,11 +96,10 @@ impl Grid {
}
}
-
fn text(&self, loc: &Loc) -> &str {
match self.get(loc) {
Some(ref s) => s,
- None => ""
+ None => "",
}
}
@@ -117,12 +110,12 @@ impl Grid {
/// process the enhancing of circle elements
/// this should be called before other elements are extracted from the grid
- fn get_enhance_circle_elements(&self) -> (Vec<Vec<Vec<Element>>>, Vec<Loc>){
+ fn get_enhance_circle_elements(&self) -> (Vec<Vec<Vec<Element>>>, Vec<Loc>) {
let mut rows: Vec<Vec<Vec<Element>>> = Vec::with_capacity(self.index.len());
let mut all_consumed_loc: Vec<Loc> = vec![];
- for (y,line) in self.index.iter().enumerate() {
+ for (y, line) in self.index.iter().enumerate() {
let mut row: Vec<Vec<Element>> = Vec::with_capacity(line.len());
- for (x,_cell) in line.iter().enumerate() {
+ for (x, _cell) in line.iter().enumerate() {
let loc = Loc::new(x as i32, y as i32);
let focus_char = self.get_focuschar(&loc);
let (cell_elements, consumed_loc) = focus_char.get_enhance_circle_elements();
@@ -136,16 +129,16 @@ impl Grid {
/// process the enhanced circle elements first
/// then process the generic enhancements
- fn get_enhance_elements(&self) -> (Vec<Vec<Vec<Element>>>, Vec<Loc>){
+ fn get_enhance_elements(&self) -> (Vec<Vec<Vec<Element>>>, Vec<Loc>) {
let (enhanced_circle_elm, circle_consumed_loc) = self.get_enhance_circle_elements();
let mut rows: Vec<Vec<Vec<Element>>> = Vec::with_capacity(self.index.len());
rows.extend(enhanced_circle_elm);
let mut all_consumed_loc: Vec<Loc> = vec![];
- for (y,line) in self.index.iter().enumerate() {
+ for (y, line) in self.index.iter().enumerate() {
let mut row: Vec<Vec<Element>> = Vec::with_capacity(line.len());
- for (x,_cell) in line.iter().enumerate() {
+ for (x, _cell) in line.iter().enumerate() {
let loc = Loc::new(x as i32, y as i32);
- if !circle_consumed_loc.contains(&loc){
+ if !circle_consumed_loc.contains(&loc) {
let focus_char = self.get_focuschar(&loc);
let (cell_elements, consumed_loc) = focus_char.get_enhance_elements();
all_consumed_loc.extend(consumed_loc);
@@ -160,7 +153,7 @@ impl Grid {
/// vector of each elements arranged in rows x columns
/// returns all the elements and the consumed location
- fn get_all_elements(&self) -> Vec<Vec<Vec<Element>>>{
+ fn get_all_elements(&self) -> Vec<Vec<Vec<Element>>> {
let (enhanced_elms, enhance_consumed_locs) = self.get_enhance_elements();
let mut rows: Vec<Vec<Vec<Element>>> = Vec::with_capacity(self.index.len());
rows.extend(enhanced_elms);
@@ -179,7 +172,6 @@ impl Grid {
rows
}
-
fn get_escaped_text_elements(&self) -> Vec<Element> {
self.text_elm
.iter()
@@ -191,14 +183,14 @@ impl Grid {
/// use this info for optimizing svg by checking closest neigbor
fn get_svg_nodes(&self) -> Vec<Vec<SvgElement>> {
let mut grouped_nodes = vec![];
- let mut elements= self.get_all_elements();
+ let mut elements = self.get_all_elements();
let text_elm = self.get_escaped_text_elements();
elements.push(vec![text_elm]);
let optimizer = Optimizer::new(elements);
- let optimized_elements:Vec<Vec<Element>> = optimizer.optimize(&self.settings);
+ let optimized_elements: Vec<Vec<Element>> = optimizer.optimize(&self.settings);
for group in optimized_elements {
let mut svg_group = vec![];
- for elem in group{
+ for elem in group {
let element: SvgElement = elem.to_svg(&self.settings);
svg_group.push(element);
}
@@ -207,7 +199,6 @@ impl Grid {
grouped_nodes
}
-
pub fn get_size(&self) -> (f32, f32) {
let width = self.settings.text_width * self.columns() as f32;
let height = self.settings.text_height * self.rows() as f32;
@@ -231,22 +222,20 @@ impl Grid {
svg.assign("width", width);
svg.assign("height", height);
-
svg.append(get_defs());
svg.append(get_styles(&self.settings));
-
let rect = SvgRect::new()
.set("x", 0)
.set("y", 0)
- .set("class","backdrop")
+ .set("class", "backdrop")
.set("width", width)
.set("height", height);
svg.append(rect);
for group in group_nodes {
let mut svg_group = Group::new();
- for node in group{
+ for node in group {
match node {
SvgElement::Circle(circle) => {
svg_group.append(circle);
@@ -269,19 +258,19 @@ impl Grid {
/// traverse each element of the grid and swap characters as needed
fn pre_process(&self) -> Self {
let mut new_index: Vec<Vec<String>> = vec![];
- for (y,line) in self.index.iter().enumerate(){
+ for (y, line) in self.index.iter().enumerate() {
let mut row: Vec<String> = vec![];
- for (x,_) in line.iter().enumerate(){
+ for (x, _) in line.iter().enumerate() {
let loc = &Loc::new(x as i32, y as i32);
let swap = self.swap_char(loc);
row.push(swap.to_string());
}
new_index.push(row);
}
- Grid{
+ Grid {
settings: self.settings.clone(),
index: new_index,
- text_elm: self.text_elm.clone()
+ text_elm: self.text_elm.clone(),
}
}
@@ -319,12 +308,10 @@ impl Grid {
|| (cell == "-" && left == " " && left2 == "-" && left3 == " " && left4 == "-")
{
"~"
- }
- else{
- cell
+ } else {
+ cell
}
}
-
}
fn get_defs() -> Definitions {
@@ -391,8 +378,7 @@ tspan.head{{
stroke_color = &settings.stroke_color,
background_color = &settings.background_color,
);
- Style::new(style)
- .set("type", "text/css")
+ Style::new(style).set("type", "text/css")
}
fn arrow_marker() -> Marker {
@@ -431,7 +417,6 @@ fn clear_arrow_marker() -> Marker {
marker
}
-
/// <marker id="dot" viewBox="0 0 10 10" refX="5" refY="5"
/// markerWidth="5" markerHeight="5">
/// <circle cx="5" cy="5" r="5" fill="red" />
@@ -447,9 +432,9 @@ fn circle_marker() -> Marker {
.set("markerHeight", 5);
let circle = SvgCircle::new()
- .set("cx",10)
- .set("cy",10)
- .set("r",8)
+ .set("cx", 10)
+ .set("cy", 10)
+ .set("r", 8)
.set("class", "fg_fill");
marker.append(circle);
marker
@@ -466,10 +451,10 @@ fn square_marker() -> Marker {
.set("markerHeight", 5);
let square = SvgRect::new()
- .set("x",0)
- .set("y",0)
- .set("width",20)
- .set("height",20)
+ .set("x", 0)
+ .set("y", 0)
+ .set("width", 20)
+ .set("height", 20)
.set("class", "fg_fill");
marker.append(square);
marker
@@ -486,9 +471,9 @@ fn open_circle_marker() -> Marker {
.set("markerHeight", 10);
let circle = SvgCircle::new()
- .set("cx",10)
- .set("cy",10)
- .set("r",4)
+ .set("cx", 10)
+ .set("cy", 10)
+ .set("r", 4)
.set("class", "bg_fill fg_stroke");
marker.append(circle);
marker
@@ -504,9 +489,9 @@ fn big_open_circle_marker() -> Marker {
.set("markerHeight", 20);
let circle = SvgCircle::new()
- .set("cx",20)
- .set("cy",20)
- .set("r",6)
+ .set("cx", 20)
+ .set("cy", 20)
+ .set("r", 6)
.set("class", "bg_fill fg_stroke");
marker.append(circle);
marker
@@ -593,7 +578,7 @@ fn line_parse() -> pom::parser::Parser<'static, char, Vec<(usize, usize)>> {
}
#[cfg(test)]
-mod test{
+mod test {
use super::*;
@@ -659,4 +644,3 @@ mod test{
}
}
-