From 32a49d3179a969604410ff7507af939c77045b4f Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Sat, 17 Jun 2023 20:40:11 +0200 Subject: export search data, add indexing script --- site.hs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'site.hs') diff --git a/site.hs b/site.hs index e634f05..918fdff 100644 --- a/site.hs +++ b/site.hs @@ -6,6 +6,7 @@ module Main where import Control.Monad ((>=>), unless, when) import Control.Monad.Extra (whenM) import Control.Monad.Trans.State.Lazy +import qualified Data.Aeson as AE import qualified Data.Aeson.KeyMap as KM import qualified Data.ByteString.Lazy as B import Data.Digest.Pure.SHA (sha256, showDigest) @@ -35,6 +36,7 @@ import System.FilePath import qualified Text.Mustache as Mu import Text.Pandoc.Class (runIOorExplode) import Text.Pandoc.Readers.Markdown (readMarkdown) +import Text.Pandoc.Writers (writePlain) import Text.Pandoc.Writers.HTML (writeHtml5String) import qualified Text.Parsec.Error @@ -343,6 +345,29 @@ renderTag tag = do renderTags :: Site () renderTags = use (htags . to M.keys) >>= traverse_ renderTag +-- | Transform one mounted PageInfo to the base search data +mkSearchData :: FilePath -> PageInfo -> Site Y.Value +mkSearchData mount pi = do + text <- io . runIOorExplode $ writePlain plainWriteOpts (pi ^. pageDoc) + let title = pi ^? pageMeta . key "title" . _String + link <- rootUrl mount + pure $ + Y.object + [ ("link", fromString link) + , ("title", maybe (fromString mount) Y.String title) + , ("text", Y.String text) + ] + +-- | Collect all pages' search data to the file +renderSearchData :: Site () +renderSearchData = use searchDataOut >>= traverse_ go + where + go out = do + ps <- use (pages . to M.assocs) >>= traverse (uncurry mkSearchData) + io $ do + putStrLn $ "S -> " ++ out + AE.encodeFile out $ Y.array ps + -- | Build the whole site. main = do init <- Options.Applicative.execParser siteOptions @@ -353,5 +378,6 @@ main = do use templateDir >>= sourceTemplates use pages >>= traverse (uncurry installPage) . M.assocs renderTags + renderSearchData io $ putStrLn "OK" whenM (use dumpFinalState) $ get >>= io . print -- cgit v1.2.3