diff --git a/src/main.rs b/src/main.rs index 0222f0f..560c076 100644 --- a/src/main.rs +++ b/src/main.rs @@ -247,13 +247,13 @@ fn main() -> std::io::Result<()> { #[allow(dead_code)] // test zone //TODO refactor -//todo implement 2001/11/01 3 getters !clement -//todo implement 2001/11/01 3 getters !thomas -//fix implement 18/11/2001 getters +//todo implement 2001/11/01 #3 getters !clement +//todo implement 2001/11/01 #3 getters !thomas +//fix implement 18/11/2001 getters !jht5945 //4 //10/10/10 fn test(){ todo!("implements getters"); } -//todo implement 2020/08/14 5 getters !clement \ No newline at end of file +//todo implement 2020/08/14 #5 getters !clement \ No newline at end of file diff --git a/src/token.rs b/src/token.rs index 7ca7383..4b5c47c 100644 --- a/src/token.rs +++ b/src/token.rs @@ -17,17 +17,15 @@ pub struct Token{ impl Token { pub fn new(file: String, line: usize, s: String, verbosity: i8) -> Token { - // println!("{}", s); + println!(">>>>>>>>>>>{}", s); let fields: Vec<&str>= s.split_whitespace().collect(); - let number_regex = Regex::new("\\b[1-9]\\b").unwrap(); - let date_regex = Regex::new("(\\d*/\\d*/\\d*)").unwrap(); - let member_regex = Regex::new("!\\w*").unwrap(); + let number_regex = Regex::new("#[0-9]").unwrap(); + let date_regex = Regex::new("(\\d+/\\d+/\\d+)").unwrap(); + let member_regex = Regex::new("![\\w]+").unwrap(); if date_regex.is_match("5") { panic!("regex"); } - // for i in &fields { - // println!("{}", i); - // } + println!("///////////{:?}", fields); let mut t = Token { file, @@ -40,27 +38,23 @@ impl Token { verbosity, }; - for i in 0..fields.len() { + for (i, field) in fields.iter().enumerate() { if i == 0 { - t.keyword = fields[0].to_string().to_lowercase(); - } else if number_regex.is_match(fields[i]) { - t.priority = Some(fields[i].to_string()); - } else if date_regex.is_match(fields[i]) { - let date : Vec<&str> = fields[i].split('/').collect(); - t.date = NaiveDate::from_ymd_opt(date[0].parse::().unwrap(), date[1].parse::().unwrap(), date[2].parse::().unwrap()); - // t.date = Some(fields[i].to_string()); - } else if member_regex.is_match(fields[i]) { - let mut member = String::new(); //from(fields[i].clone()).chars().next().map(|c| &s[c.len_utf8()..]).unwrap(); - let it = fields[i].chars().skip(1); - for i in it { - member.push(i); - } - - t.member = Some(member); + t.keyword = field.to_lowercase(); + } else if number_regex.is_match(field) { + t.priority = Some(field.chars().skip(1).collect::()); + } else if date_regex.is_match(field) { + let date: Vec<&str> = field.split('/').collect(); + let year = date[0].parse::().unwrap(); + let month = date[1].parse::().unwrap(); + let day = date[2].parse::().unwrap(); + t.date = NaiveDate::from_ymd_opt(year, month, day); + } else if member_regex.is_match(field) { + t.member = Some(field.chars().skip(1).collect::()); } else { t.comment = match t.comment { - None => Some(fields[i].to_string()), - Some(comment) => Some(format!("{} {}", comment, fields[i])), + None => Some(field.to_string()), + Some(comment) => Some(format!("{} {}", comment, field)), }; } } @@ -113,11 +107,8 @@ impl fmt::Display for Token { if let Some(comment) = &self.comment { multiline_msg.push(format!("{}", comment.blue())); } - // if self.comment.is_some() { - // s = string_format!("{}{}\n".to_string(), s, self.comment.clone().unwrap().blue().to_string()); - // } } - + write!(f, "{}\n", multiline_msg.join("\n"))?; Ok(()) }