diff options
Diffstat (limited to 'src/character.rs')
-rw-r--r-- | src/character.rs | 64 |
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 | ||
43 | impl Names { | 43 | impl 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 | ||
49 | impl Images { | 53 | impl 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 | ||
55 | impl Traits { | 62 | impl 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(&(§ions["traits"] as &Section).data["official_raw".into()]); | 118 | self.traits.official = |
105 | self.traits.indexed = dl_list::parse(&(§ions["traits"] as &Section).data["indexed_raw".into()]); | 119 | dl_list::parse(&(§ions["traits"] as &Section).data["official_raw".into()]); |
120 | self.traits.indexed = | ||
121 | dl_list::parse(&(§ions["traits"] as &Section).data["indexed_raw".into()]); | ||
106 | 122 | ||
107 | self.assignments = tiles::parse_tile_link_ids(&(§ions["assignments"] as &Section).data["raw".into()], "series"); | 123 | self.assignments = tiles::parse_tile_link_ids(&(§ions["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 | ||
116 | fn get_sections() -> HashMap<String, Section> { | 132 | fn 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 | } |