Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add config option to ignore code blocks for word count #2599

Merged
merged 3 commits into from
Aug 9, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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);
}
}