diff options
Diffstat (limited to 'src/series.rs')
| -rw-r--r-- | src/series.rs | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/src/series.rs b/src/series.rs index d111fb8..3037e6a 100644 --- a/src/series.rs +++ b/src/series.rs | |||
| @@ -21,12 +21,17 @@ pub struct Names { | |||
| 21 | #[derive(Debug, Serialize)] | 21 | #[derive(Debug, Serialize)] |
| 22 | pub struct Series { | 22 | pub struct Series { |
| 23 | pub name: Names, | 23 | pub name: Names, |
| 24 | pub tags: Vec<String>, | ||
| 24 | } | 25 | } |
| 25 | 26 | ||
| 26 | impl Names { | 27 | impl Names { |
| 27 | pub fn new() -> Self { | 28 | pub fn new() -> Self { |
| 28 | Names { | 29 | Names { |
| 29 | String::new(), String::new(), String::new(), String::new(), String::new() | 30 | english: String::new(), |
| 31 | aliases: String::new(), | ||
| 32 | romaji: String::new(), | ||
| 33 | furigana: String::new(), | ||
| 34 | japanese: String::new(), | ||
| 30 | } | 35 | } |
| 31 | } | 36 | } |
| 32 | } | 37 | } |
| @@ -34,30 +39,40 @@ impl Names { | |||
| 34 | impl Series { | 39 | impl Series { |
| 35 | pub fn new() -> Self { | 40 | pub fn new() -> Self { |
| 36 | Series { | 41 | Series { |
| 37 | name: Names::new() | 42 | name: Names::new(), |
| 43 | tags: vec![], | ||
| 38 | } | 44 | } |
| 39 | } | 45 | } |
| 40 | 46 | ||
| 41 | pub fn parse(&mut self, buf: &str) { | 47 | pub fn parse(&mut self, buf: &str) { |
| 42 | let mut sections = get_sections(); | 48 | let mut sections = get_sections(); |
| 43 | section::process(&buf, &mut sections); | 49 | section::process(&buf, &mut sections); |
| 44 | 50 | ||
| 51 | let re_genre_tags = Regex::new(r#"(?is)Genre Tags.*?>(.*?)</td>"#).unwrap(); | ||
| 52 | let re_genre_tag = Regex::new(r#"[0-9]">(.*?)</A>"#).unwrap(); | ||
| 53 | |||
| 54 | for cap in re_genre_tags.captures_iter(&buf) { | ||
| 55 | self.tags = re_genre_tag.captures_iter(cap.at(1).unwrap()) | ||
| 56 | .map(|v| v.at(1).unwrap().to_string()) | ||
| 57 | .collect(); | ||
| 58 | } | ||
| 59 | |||
| 45 | { | 60 | { |
| 46 | let name: &Section = §ions["name".into()]; | 61 | let name: &Section = §ions["name".into()]; |
| 47 | 62 | ||
| 48 | self.name.english = name["english".into()]; | 63 | self.name.english = name.data["english".into()].to_string(); |
| 49 | self.name.aliases = name["aliases".into()]; | 64 | self.name.aliases = name.data["aliases".into()].to_string(); |
| 50 | self.name.romaji = name["romaji".into()]; | 65 | self.name.romaji = name.data["romaji".into()].to_string(); |
| 51 | self.name.furigana = name["furigana".into()]; | 66 | self.name.furigana = name.data["furigana".into()].to_string(); |
| 52 | self.name.japanese = name["japanese".into()]; | 67 | self.name.japanese = name.data["japanese".into()].to_string(); |
| 53 | } | 68 | } |
| 54 | } | 69 | } |
| 55 | } | 70 | } |
| 56 | 71 | ||
| 57 | fn get_sections() -> HashMap<String, Section> { | 72 | fn get_sections() -> HashMap<String, Section> { |
| 58 | let mut s: HashMap<String, Section> = HashMap::new(); | 73 | let mut s: HashMap<String, Section> = HashMap::new(); |
| 59 | 74 | ||
| 60 | s.insert("name".into(), Section::new("name", r#"(?is)English Title.*?<TD>(.*?)</TD>.*?Aliases.*?<TD>(.*?)?</TD>.*?Romaji Title.*?<TD.*?>(.*?)</TD>.*?Furigana Title.*?<TD.*?>(.*?)</TD>.*?Japanese Title.*?<TD.*?>(.*?)</TD>"#, vec!["english", "aliases", "romaji", "furigana", "japanese"])); | 75 | s.insert("name".into(), Section::new("name", r#"(?is)English Title.*?<TD>(.*?)<.*?Aliases.*?<TD>(.*?)<.*?Romaji Title.*?<TD.*?>(.*?)</.*?Furigana Title.*?<TD.*?>(.*?)</.*?Japanese Title.*?<TD.*?>(.*?)</"#, vec!["english", "aliases", "romaji", "furigana", "japanese"])); |
| 61 | 76 | ||
| 62 | s | 77 | s |
| 63 | } | 78 | } |
