diff options
| author | Chris Wells <chris@mathematicaster.org> | 2026-01-20 17:00:40 -0600 |
|---|---|---|
| committer | Chris Wells <chris@mathematicaster.org> | 2026-01-20 17:00:40 -0600 |
| commit | 5d83e36ef8210d1514259c89ff97a25c4d19600c (patch) | |
| tree | bb15b5d2f15e671b6963b1088a501e0dee758f2e /src/Hakyll/Paper.hs | |
| parent | 8424579b0c79038510c3e763b1154cb6aea5cdfe (diff) | |
| download | main-5d83e36ef8210d1514259c89ff97a25c4d19600c.tar main-5d83e36ef8210d1514259c89ff97a25c4d19600c.tar.gz main-5d83e36ef8210d1514259c89ff97a25c4d19600c.tar.bz2 main-5d83e36ef8210d1514259c89ff97a25c4d19600c.tar.lz main-5d83e36ef8210d1514259c89ff97a25c4d19600c.tar.xz main-5d83e36ef8210d1514259c89ff97a25c4d19600c.tar.zst main-5d83e36ef8210d1514259c89ff97a25c4d19600c.zip | |
Technically working, but I need a cleaner way to pass personA and
journalA into a list context...
Diffstat (limited to 'src/Hakyll/Paper.hs')
| -rw-r--r-- | src/Hakyll/Paper.hs | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/src/Hakyll/Paper.hs b/src/Hakyll/Paper.hs index 0c997eb..609f74d 100644 --- a/src/Hakyll/Paper.hs +++ b/src/Hakyll/Paper.hs @@ -8,25 +8,36 @@ import Data.Time.Format import Hakyll.Util (transformContext_) import Hakyll.Core.Identifier.Pattorn import System.FilePath +import Witherable +import Network.URI (parseRelativeReference) +import Data.String.Slugger (toSlug) +import Hakyll.TeX.BibTeX (compileBibtex) +data FieldContext a = FieldContext + { _authorCtxt :: Context (Name a) + , _journalCtxt :: Context (Status a) + } + + authorCtxt :: StringConv a String => Context (Name a) authorCtxt = fold $ - [ field "name" $ pure . renderNameFML . fmap toSL . getItemBody + [ field "name" $ pure . renderNameFML . fmap toSL . itemBody ] -paperCtxt :: StringConv a String => Context (Paper a) -paperCtxt = fold $ - [ listFieldWith "authors" authorCtxt $ pure . authors . itemBody +paperCtxt :: StringConv a String => FieldContext a -> Context (Paper a) +paperCtxt fctxt = fold $ + [ listFieldWith "authors" (_authorCtxt fctxt <> authorCtxt) $ pure . traverse authors + -- fmap pure . authors . itemBody , field "abstract" $ liftMaybe . fmap toSL . abstract . itemBody , field "title" $ pure . toSL . title . itemBody , field "key" $ pure . sluggedKey . itemBody - , status >$< statusCtxt - , listFieldWith "eprints" eprintCtxt $ pure . eprints . itemBody + , status >$< (statusCtxt <> _journalCtxt fctxt) + , listFieldWith "eprints" eprintCtxt $ pure . traverse eprints -- , eprint >$< maybeContext eprintCtxt - , field "extra" $ \i -> case extraLink $ getItemBody i of + , field "extra" $ \i -> case extraLink $ itemBody i of Just l -> pure $ show l Nothing -> do let k = sluggedKey $ itemBody i @@ -36,19 +47,19 @@ paperCtxt = fold $ _ -> fail $ "No extra for " <> k ] -mkPaperContext :: StringConv a String => [Paper a] -> Context b -mkPaperContext papers = listField "papers" paperCtxt $ do +mkPaperContext :: (StringConv a String, StringConv String a) => FieldContext a -> [Paper a] -> Context b +mkPaperContext fctxt papers = listField "papers" (paperCtxt fctxt) $ do fp <- getResourceFilePath forM papers $ \p -> do let itm = Item (fromFilePath $ replaceFileName fp (sluggedKey p)) p e <- findLocal itm - pure $ (\x -> x { eprint = eprint x <> e }) <$> itm + pure $ (\x -> x { eprints = eprints x <> e }) <$> itm statusCtxt :: StringConv a String => Context (Status a) statusCtxt = fold $ - [ field "date" $ formatTime defaultTimeLocale "%b %Y" . date . itemBody + [ field "date" $ pure . formatTime defaultTimeLocale "%b %Y" . date . itemBody , field "journal" $ \i -> case itemBody i of Published _ j _ -> pure $ toSL j Accepted _ j -> pure $ toSL j @@ -57,7 +68,7 @@ statusCtxt = fold $ Published _ _ d -> pure $ show (doiLink d) _ -> fail "No DOI" , boolField "published" $ \case - Item _ (Published {..}) -> True + Item _ (Published {}) -> True _ -> False -- \i -> case itemBody i of -- Published _ _ _ -> True @@ -76,13 +87,13 @@ statusCtxt = fold $ eprintCtxt :: StringConv a String => Context (Eprint a) eprintCtxt = fold $ [ field "eprint" $ \i -> pure $ case itemBody i of - ArXivEprint a _ -> show $ arXivLink ArXivAbs a - OtherEprint _ l -> show $ l + ArXivEprint a -> show $ arXivLink ArXivAbs a + OtherEprint _ l -> show l , field "eprintName" $ \i -> pure $ case itemBody i of - ArXivEprint _ c -> "arXiv[" <> toSL c <> "]" - OtherEprint n _ -> show n + ArXivEprint (ArXiv _ c) -> "arXiv[" <> toSL c <> "]" + OtherEprint n _ -> toSL n , field "arXivClass" $ \i -> case itemBody i of - ArXivEprint _ c -> pure $ toSL c + ArXivEprint (ArXiv _ c) -> pure $ toSL c _ -> fail "No arXiv" , functionField "arXivLink" $ \args i -> case itemBody i of ArXivEprint a -> @@ -91,7 +102,7 @@ eprintCtxt = fold $ ["pdf"] -> pure $ show $ arXivLink ArXivPdf a ["src"] -> pure $ show $ arXivLink ArXivSrc a xs -> fail $ "Invalid argument to arXivLink: " <> show xs - _ -> fail "No ArXiv" + _ -> fail "No ArXiv" ] findLocal :: (StringConv a String, StringConv String a) => Item (Paper a) -> Compiler [Eprint a] |
