summaryrefslogtreecommitdiff
path: root/src/Hakyll/Paper.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Hakyll/Paper.hs')
-rw-r--r--src/Hakyll/Paper.hs47
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]