diff options
author | Till Höppner | 2016-02-25 06:58:22 +0100 |
---|---|---|
committer | Till Höppner | 2016-02-25 06:58:22 +0100 |
commit | cd15d4f8de1ee9bc6d00fb0a08659ca2c74d2e2d (patch) | |
tree | 66b6a4fff228446fc46f4b47ba3b8551ba46e8b2 /src/app/freq.rs | |
parent | 9f5dd9dad6b13476bab2c6eb3c6528f8ad49311a (diff) | |
download | ilc-cd15d4f8de1ee9bc6d00fb0a08659ca2c74d2e2d.tar.gz ilc-cd15d4f8de1ee9bc6d00fb0a08659ca2c74d2e2d.tar.xz ilc-cd15d4f8de1ee9bc6d00fb0a08659ca2c74d2e2d.zip |
Update Cargo.toml files with more metadata
Diffstat (limited to 'src/app/freq.rs')
-rw-r--r-- | src/app/freq.rs | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/src/app/freq.rs b/src/app/freq.rs deleted file mode 100644 index 88a8e1f..0000000 --- a/src/app/freq.rs +++ /dev/null @@ -1,93 +0,0 @@ -use clap::ArgMatches; - -use std::collections::HashMap; - -use ilc::event::{Event, Type}; - -use super::*; - -struct Person { - lines: u32, - alpha_lines: u32, - words: u32, -} - -fn words_alpha(s: &str) -> (u32, bool) { - let mut alpha = false; - let mut words = 0; - for w in s.split_whitespace() { - if !w.is_empty() { - words += 1; - if w.chars().any(char::is_alphabetic) { - alpha = true - } - } - } - (words, alpha) -} - -fn strip_nick_prefix(s: &str) -> &str { - if s.is_empty() { - return s; - } - match s.as_bytes()[0] { - b'~' | b'&' | b'@' | b'%' | b'+' => &s[1..], - _ => s, - } -} - -pub fn freq(args: &ArgMatches) { - let env = Environment(args); - let (context, mut decoder, mut input, mut output) = (env.context(), - env.decoder(), - env.input(), - env.output()); - - let mut stats: HashMap<String, Person> = HashMap::new(); - - for e in decoder.decode(&context, &mut input) { - let m = match e { - Ok(m) => m, - Err(err) => error(Box::new(err)), - }; - - match m { - Event { ty: Type::Msg { ref from, ref content, .. }, .. } => { - let nick = strip_nick_prefix(from); - if stats.contains_key(nick) { - let p: &mut Person = stats.get_mut(nick).unwrap(); - let (words, alpha) = words_alpha(content); - p.lines += 1; - if alpha { - p.alpha_lines += 1 - } - p.words += words; - } else { - let (words, alpha) = words_alpha(content); - stats.insert(nick.to_owned(), - Person { - lines: 1, - alpha_lines: if alpha { 1 } else { 0 }, - words: words, - }); - } - } - _ => (), - } - } - - let mut stats: Vec<(String, Person)> = stats.into_iter().collect(); - stats.sort_by(|&(_, ref a), &(_, ref b)| b.words.cmp(&a.words)); - - let count = value_t!(args, "count", usize).unwrap_or(stats.len()); - for &(ref name, ref stat) in stats.iter().take(count) { - let _ = write!(&mut output, - "{}:\n\tTotal lines: {}\n\tLines without alphabetic characters: \ - {}\n\tTotal words: {}\n\tWords per line: {}\n", - name, - stat.lines, - stat.lines - stat.alpha_lines, - stat.words, - stat.words as f32 / stat.lines as f32); - } -} |