Skip to content

Commit

Permalink
Add config option to ignore code blocks for word count (#2599)
Browse files Browse the repository at this point in the history
* update docs

* add config option, logic, and tests

* remove config option
  • Loading branch information
Walnut356 authored and Keats committed Aug 15, 2024
1 parent 9dad659 commit abc8510
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion components/content/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ pub fn find_related_assets(path: &Path, config: &Config, recursive: bool) -> Vec

/// Get word count and estimated reading time
pub fn get_reading_analytics(content: &str) -> (usize, usize) {
let word_count: usize = content.unicode_words().count();
// code fences "toggle" the state from non-code to code and back, so anything inbetween the
// first fence and the next can be ignored
let split = content.split("```");
let word_count = split.step_by(2).map(|section| section.unicode_words().count()).sum();

// https://help.medium.com/hc/en-us/articles/214991667-Read-time
// 275 seems a bit too high though
Expand Down Expand Up @@ -241,4 +244,18 @@ mod tests {
assert_eq!(word_count, 2000);
assert_eq!(reading_time, 10);
}

#[test]
fn reading_analytics_no_code() {
let (word_count, reading_time) =
get_reading_analytics("hello world ``` code goes here ``` goodbye world");
assert_eq!(word_count, 4);
assert_eq!(reading_time, 1);

let (word_count, reading_time) = get_reading_analytics(
"hello world ``` code goes here ``` goodbye world ``` dangling fence",
);
assert_eq!(word_count, 4);
assert_eq!(reading_time, 1);
}
}

0 comments on commit abc8510

Please sign in to comment.