packages feed

kitchen-sink-0.1.0.0: src/KitchenSink/Layout/Blog/Analyses/Wordcount.hs

module KitchenSink.Layout.Blog.Analyses.Wordcount where

import Commonmark qualified
import Data.Text qualified as Text

import KitchenSink.Core.Assembler.Sections
import KitchenSink.Core.Build.Target (runAssembler)
import KitchenSink.Core.Section (extract)
import KitchenSink.Layout.Blog.Extensions (Section)
import KitchenSink.Prelude

wordcount :: Text -> Int
wordcount = length . Text.words

contentWordCount :: [Section [Text]] -> Int
contentWordCount xs = sum $ fmap go xs
  where
    go :: Section [Text] -> Int
    go sec =
        case runAssembler $ parseCMark sec of
            Left _ -> sum $ [wordcount w | w <- extract sec]
            Right html -> wordcount $ Commonmark.toPlainText $ extract html