aboutsummaryrefslogtreecommitdiff
path: root/src/character.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/character.rs')
-rw-r--r--src/character.rs64
1 files changed, 46 insertions, 18 deletions
diff --git a/src/character.rs b/src/character.rs
index 0630a45..f4686cf 100644
--- a/src/character.rs
+++ b/src/character.rs
@@ -42,19 +42,29 @@ pub struct Character {
42 42
43impl Names { 43impl Names {
44 pub fn new() -> Self { 44 pub fn new() -> Self {
45 Names { romaji: String::new(), japanese: String::new(), aliases: vec![] } 45 Names {
46 romaji: String::new(),
47 japanese: String::new(),
48 aliases: vec![],
49 }
46 } 50 }
47} 51}
48 52
49impl Images { 53impl Images {
50 pub fn new() -> Self { 54 pub fn new() -> Self {
51 Images { thumb: String::new(), full: String::new() } 55 Images {
56 thumb: String::new(),
57 full: String::new(),
58 }
52 } 59 }
53} 60}
54 61
55impl Traits { 62impl Traits {
56 pub fn new() -> Self { 63 pub fn new() -> Self {
57 Traits { official: vec![], indexed: vec![] } 64 Traits {
65 official: vec![],
66 indexed: vec![],
67 }
58 } 68 }
59} 69}
60 70
@@ -67,13 +77,14 @@ impl Character {
67 traits: Traits::new(), 77 traits: Traits::new(),
68 assignments: vec![], 78 assignments: vec![],
69 extra: vec![], 79 extra: vec![],
70 role: None 80 role: None,
71 } 81 }
72 } 82 }
73 83
74 pub fn parse(&mut self, buf: &str) { 84 pub fn parse(&mut self, buf: &str) {
75 let re_extras = Regex::new(r#"(?is)Extra Details \| [0-9]+</H3>.*?<dl>(.*?)</dl>"#).unwrap(); 85 let re_extras = Regex::new(r#"(?is)Extra Details \| [0-9]+</H3>.*?<dl>(.*?)</dl>"#)
76 let mut sections = get_sections(); 86 .unwrap();
87 let mut sections = get_sections();
77 section::process(&buf, &mut sections); 88 section::process(&buf, &mut sections);
78 89
79 let caps = re_extras.captures(&buf); 90 let caps = re_extras.captures(&buf);
@@ -89,40 +100,57 @@ impl Character {
89 100
90 self.name.romaji = name.data["romaji".into()].clone(); 101 self.name.romaji = name.data["romaji".into()].clone();
91 self.name.japanese = name.data["japanese".into()].clone(); 102 self.name.japanese = name.data["japanese".into()].clone();
92 103
93 if name.data["aliases".into()].len() > 0 { 104 if name.data["aliases".into()].len() > 0 {
94 self.name.aliases = name.data["aliases".into()].split(", ").map(|s| s.to_string()).collect(); 105 self.name.aliases = name.data["aliases".into()]
106 .split(", ")
107 .map(|s| s.to_string())
108 .collect();
95 } 109 }
96 110
97 self.image.thumb = image.data["thumb".into()].clone(); 111 self.image.thumb = image.data["thumb".into()].clone();
98 self.image.full = image.data["full".into()].clone(); 112 self.image.full = image.data["full".into()].clone();
99 113
100 if tags.data.contains_key("tags_raw".into()) { 114 if tags.data.contains_key("tags_raw".into()) {
101 self.tags = tags::parse(&tags.data["tags_raw".into()]); 115 self.tags = tags::parse(&tags.data["tags_raw".into()]);
102 } 116 }
103 117
104 self.traits.official = dl_list::parse(&(&sections["traits"] as &Section).data["official_raw".into()]); 118 self.traits.official =
105 self.traits.indexed = dl_list::parse(&(&sections["traits"] as &Section).data["indexed_raw".into()]); 119 dl_list::parse(&(&sections["traits"] as &Section).data["official_raw".into()]);
120 self.traits.indexed =
121 dl_list::parse(&(&sections["traits"] as &Section).data["indexed_raw".into()]);
106 122
107 self.assignments = tiles::parse_tile_link_ids(&(&sections["assignments"] as &Section).data["raw".into()], "series"); 123 self.assignments = tiles::parse_tile_link_ids(&(&sections["assignments"] as &Section).data["raw".into()], "series");
108 124
109 if misc.data["role".into()].len() > 0 { 125 if misc.data["role".into()].len() > 0 {
110 self.role = Some(misc.data["role".into()].clone()); 126 self.role = Some(misc.data["role".into()].clone());
111 } 127 }
112 } 128 }
113 } 129 }
114} 130}
115 131
116fn get_sections() -> HashMap<String, Section> { 132fn get_sections() -> HashMap<String, Section> {
117 let mut s: HashMap<String, Section> = HashMap::new(); 133 let mut s: HashMap<String, Section> = HashMap::new();
118 134
119 s.insert("name".into(), Section::new("name", r#"(?is)Romaji Name.*?<TD>(.*?)\s?</TD>.*?Japanese Name.*?<TD>(.*?)\s?</TD>.*?Aliases.*?<TD>(.*?)\s?</TD>"#, vec!["romaji", "japanese", "aliases"])); 135 s.insert("name".into(), Section::new("name", r#"(?is)Romaji Name.*?<TD>(.*?)\s?</TD>.*?Japanese Name.*?<TD>(.*?)\s?</TD>.*?Aliases.*?<TD>(.*?)\s?</TD>"#, vec!["romaji", "japanese", "aliases"]));
120 s.insert("misc".into(), Section::new("misc", r#"(?is)Role</TH>.*?<TD>(.*?)\s?</TD>"#, vec!["role"])); 136 s.insert("misc".into(),
137 Section::new("misc",
138 r#"(?is)Role</TH>.*?<TD>(.*?)\s?</TD>"#,
139 vec!["role"]));
121 s.insert("image".into(), Section::new("image", r#"(?is)<H3 id="section99">.*<img src="(.*?)" alt=.*?></a><p><a href="(.*?)">View Full Size Image"#, vec!["thumb", "full"])); 140 s.insert("image".into(), Section::new("image", r#"(?is)<H3 id="section99">.*<img src="(.*?)" alt=.*?></a><p><a href="(.*?)">View Full Size Image"#, vec!["thumb", "full"]));
122 s.insert("tags".into(), Section::new("tags", r#"(?is)tagged as</P>.*?<TH>(.*?)</TH>"#, vec!["tags_raw"])); 141 s.insert("tags".into(),
142 Section::new("tags",
143 r#"(?is)tagged as</P>.*?<TH>(.*?)</TH>"#,
144 vec!["tags_raw"]));
123 s.insert("traits".into(), Section::new("traits", r#"(?is)indexed traits</P>.*?<dl>(.*?)</dl>.*?official traits\s?</P>.*?<dl>(.*?)</dl>"#, vec!["indexed_raw", "official_raw"])); 145 s.insert("traits".into(), Section::new("traits", r#"(?is)indexed traits</P>.*?<dl>(.*?)</dl>.*?official traits\s?</P>.*?<dl>(.*?)</dl>"#, vec!["indexed_raw", "official_raw"]));
124 s.insert("assignments".into(), Section::new("assignments", r#"(?is)appears in the following</P>(.*?)</UL>"#, vec!["raw"])); 146 s.insert("assignments".into(),
125 s.insert("chars_similar_traits".into(), Section::new("assignments", r#"(?is)with Similar Traits</H3>(.*?)</UL>"#, vec!["raw"])); 147 Section::new("assignments",
148 r#"(?is)appears in the following</P>(.*?)</UL>"#,
149 vec!["raw"]));
150 s.insert("chars_similar_traits".into(),
151 Section::new("assignments",
152 r#"(?is)with Similar Traits</H3>(.*?)</UL>"#,
153 vec!["raw"]));
126 154
127 s 155 s
128} 156}