diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/src/main.rs b/src/main.rs index ee8c3eb..e76da66 100644 --- a/src/main.rs +++ b/src/main.rs | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | extern crate regex; | 1 | extern crate regex; |
| 2 | use regex::Regex; | ||
| 2 | extern crate yaml_rust; | 3 | extern crate yaml_rust; |
| 3 | 4 | ||
| 4 | extern crate walkdir; | 5 | extern crate walkdir; |
| @@ -11,27 +12,23 @@ use std::path::Path; | |||
| 11 | use std::collections::HashMap; | 12 | use std::collections::HashMap; |
| 12 | 13 | ||
| 13 | mod pre_process; | 14 | mod pre_process; |
| 14 | use pre_process::Section; | 15 | mod section; |
| 15 | 16 | use section::Section; | |
| 16 | mod config; | ||
| 17 | use config::Config; | ||
| 18 | 17 | ||
| 19 | mod character; | 18 | mod character; |
| 20 | use character::{Images, Names, Traits, Character}; | 19 | use character::{Images, Names, Traits, Character}; |
| 21 | 20 | ||
| 22 | mod tags; | 21 | mod tags; |
| 23 | mod traits; | 22 | mod dl_list; |
| 23 | use dl_list::DLListItem; | ||
| 24 | 24 | ||
| 25 | fn main() { | 25 | fn main() { |
| 26 | let raw_files = env::var("RAW_FILES").unwrap_or("characters".into()); | 26 | let raw_files = env::var("RAW_FILES").unwrap_or("characters".into()); |
| 27 | let base_path = Path::new(&raw_files); | 27 | let base_path = Path::new(&raw_files); |
| 28 | 28 | ||
| 29 | let cfg = Config::from_file("config.yml", vec!["name", "image", "misc", "tags", "traits"]); | 29 | let re_extras = Regex::new(r#"(?is)Extra Details \| [0-9]+</H3>.*?<dl>(.*?)</dl>"#).unwrap(); |
| 30 | 30 | ||
| 31 | let mut sections: HashMap<String, Section> = HashMap::new(); | 31 | let mut sections: HashMap<String, Section> = character::get_sections(); |
| 32 | for (name, sec) in &cfg.sections { | ||
| 33 | sections.insert(name.clone(), Section::new(&name, &sec.pattern, sec.groups.clone())); | ||
| 34 | } | ||
| 35 | 32 | ||
| 36 | for entry in WalkDir::new(base_path).min_depth(1).into_iter().filter_map(|e| e.ok()) { | 33 | for entry in WalkDir::new(base_path).min_depth(1).into_iter().filter_map(|e| e.ok()) { |
| 37 | let mut f = File::open(entry.path()).expect("could not open file"); | 34 | let mut f = File::open(entry.path()).expect("could not open file"); |
| @@ -43,7 +40,14 @@ fn main() { | |||
| 43 | 40 | ||
| 44 | let buf = pre_process::strip_irrelevant_content(&buf); | 41 | let buf = pre_process::strip_irrelevant_content(&buf); |
| 45 | 42 | ||
| 46 | pre_process::split_sections(&buf, &mut sections); | 43 | section::process(&buf, &mut sections); |
| 44 | |||
| 45 | // find optional extra details | ||
| 46 | let mut extra_details: Vec<DLListItem> = vec![]; | ||
| 47 | let caps = re_extras.captures(&buf); | ||
| 48 | if caps.is_some() { | ||
| 49 | extra_details = dl_list::parse(caps.unwrap().at(1).unwrap()); | ||
| 50 | } | ||
| 47 | 51 | ||
| 48 | { | 52 | { |
| 49 | let name: &Section = §ions["name".into()]; | 53 | let name: &Section = §ions["name".into()]; |
| @@ -53,7 +57,10 @@ fn main() { | |||
| 53 | name: Names { | 57 | name: Names { |
| 54 | romaji: name.data["romaji".into()].clone(), | 58 | romaji: name.data["romaji".into()].clone(), |
| 55 | japanese: name.data["japanese".into()].clone(), | 59 | japanese: name.data["japanese".into()].clone(), |
| 56 | aliases: name.data["aliases".into()].split(", ").map(|s| s.to_string()).collect(), | 60 | aliases: match name.data["aliases".into()].len() > 0 { |
| 61 | true => name.data["aliases".into()].split(", ").map(|s| s.to_string()).collect(), | ||
| 62 | false => vec![] | ||
| 63 | } | ||
| 57 | }, | 64 | }, |
| 58 | image: Images { | 65 | image: Images { |
| 59 | thumb: image.data["thumb".into()].clone(), | 66 | thumb: image.data["thumb".into()].clone(), |
| @@ -61,9 +68,10 @@ fn main() { | |||
| 61 | }, | 68 | }, |
| 62 | tags: tags::parse(&(§ions["tags".into()] as &Section).data["tags_raw".into()]), | 69 | tags: tags::parse(&(§ions["tags".into()] as &Section).data["tags_raw".into()]), |
| 63 | traits: Traits { | 70 | traits: Traits { |
| 64 | official: traits::parse(&(§ions["traits"] as &Section).data["official_raw".into()]), | 71 | official: dl_list::parse(&(§ions["traits"] as &Section).data["official_raw".into()]), |
| 65 | indexed: traits::parse(&(§ions["traits"] as &Section).data["indexed_raw".into()]), | 72 | indexed: dl_list::parse(&(§ions["traits"] as &Section).data["indexed_raw".into()]), |
| 66 | }, | 73 | }, |
| 74 | extra: extra_details, | ||
| 67 | role: match misc.data["role".into()].len() > 0 { | 75 | role: match misc.data["role".into()].len() > 0 { |
| 68 | true => Some(misc.data["role".into()].clone()), | 76 | true => Some(misc.data["role".into()].clone()), |
| 69 | false => None | 77 | false => None |
