packages feed

inliterate-0.1.0: lib/Inliterate/Inspect.hs

{-# LANGUAGE OverloadedStrings #-}

module Inliterate.Inspect where

import Cheapskate
import Cheapskate.Html
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import qualified Data.Text.IO as T
import Data.Foldable (toList)
import Text.Blaze.Html.Renderer.Text (renderHtml)



readDoc :: FilePath -> IO Doc
readDoc fp = do
  t <- T.readFile fp
  return $ markdown def t


inspect :: FilePath -> IO (T.Text, T.Text)
inspect fp = do
  d <- readDoc fp

  return $ getTitleFirstP d

getTitleFirstP :: Doc -> (T.Text, T.Text)
getTitleFirstP (Doc _ sblocks) = go allBlocks where
  allBlocks = toList sblocks
  go (Header _ inls : rest ) = (T.concat $ map inlineToText $ toList inls, goPara rest)
  go (_ : blocks ) = go blocks
  go [] = ("No Title", goPara allBlocks)
  goPara (Para inls : rest )  = TL.toStrict $ renderHtml $ renderInlines def inls
  goPara (_:rest) = goPara rest
  goPara [] = ""

--strip formatting
inlineToText :: Inline -> T.Text
inlineToText (Str s) = s
inlineToText Space = " "
inlineToText SoftBreak = " " -- ??
inlineToText LineBreak = " "
inlineToText (Emph inls) = T.concat $ map inlineToText $ toList inls
inlineToText (Strong inls) = T.concat $ map inlineToText $ toList inls