From 5687d9d5433a63a1caf9e9b734c8f6109e62d5bd Mon Sep 17 00:00:00 2001 From: Walnut <39544927+Walnut356@users.noreply.github.com> Date: Fri, 9 Aug 2024 02:48:58 -0500 Subject: [PATCH] Add config option to ignore code blocks for word count (#2599) * update docs * add config option, logic, and tests * remove config option --- components/content/src/utils.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/components/content/src/utils.rs b/components/content/src/utils.rs index 8349c2b9f..e26998862 100644 --- a/components/content/src/utils.rs +++ b/components/content/src/utils.rs @@ -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 @@ -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); + } }