readability-0.1.0.0: src/Readability/Types.hs
module Readability.Types
( Article (..),
Settings (..),
Scores (..),
alterScores,
emptyScores,
lookupCursor,
lookupScore,
mapScores,
maxScore,
nullScores,
)
where
import Data.List (maximumBy)
import qualified Data.Map.Strict as M
import qualified Data.Text as T
import Text.XML
import Text.XML.Cursor
-- | Result of processing HTML through /readability/.
data Article = Article
{ -- | Body of article of original HTML.
summary :: Document,
-- | Title of original HTML if found.
title :: Maybe T.Text,
-- | Possibly simplified title.
shortTitle :: Maybe T.Text
}
deriving (Show)
data Settings = Settings
{ -- | Remove HTML attributes for which the function returns true
reRemoveAttributes :: Name -> Bool
}
newtype Scores = Scores {scoreMap :: M.Map Node (Cursor, Double)} deriving (Show)
alterScores :: (Maybe (Cursor, Double) -> Maybe (Cursor, Double)) -> Node -> Scores -> Scores
alterScores f n (Scores sm) = Scores (M.alter f n sm)
emptyScores :: Scores
emptyScores = Scores M.empty
nullScores :: Scores -> Bool
nullScores (Scores sm) = M.null sm
mapScores :: (Cursor -> Double -> (Cursor, Double)) -> Scores -> Scores
mapScores f (Scores sm) = Scores $ M.map (uncurry f) sm
lookupScore :: Node -> Scores -> Maybe Double
lookupScore n (Scores sm) = snd <$> M.lookup n sm
lookupCursor :: Node -> Scores -> Maybe Cursor
lookupCursor n (Scores sm) = fst <$> M.lookup n sm
maxScore :: Scores -> (Cursor, Double)
maxScore (Scores sm) = snd $ maximumBy (\a b -> compare (ssnd a) (ssnd b)) $ M.toList sm
where
ssnd = snd . snd