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