on master help sign in
Unified code for global and external metadata
dbabe03Alexey Kreshchuk
src/Hakyll/Core/Metadata.hs+2−1
@@ -67,7 +67,8 @@ makePatternDependency pattern = do
67--------------------------------------------------------------------------------
67--------------------------------------------------------------------------------
68-- | Returns a list of all directory-wise metadata files, subdir first, global last
68-- | Returns a list of all directory-wise metadata files, subdir first, global last
69metadataFiles :: Identifier -> [Identifier]
69metadataFiles :: Identifier -> [Identifier]
70−metadataFiles = go . takeDirectory . toFilePath where
70+metadataFiles identifier = local : go (takeDirectory $ toFilePath identifier) where
71 go "." = [fromFilePath "metadata"]
71 go "." = [fromFilePath "metadata"]
72 go dir = fromFilePath (dir </> "metadata") : go (takeDirectory dir)
72 go dir = fromFilePath (dir </> "metadata") : go (takeDirectory dir)
73+ local = fromFilePath $ toFilePath identifier ++ ".metadata"
73
74
src/Hakyll/Core/Provider/Metadata.hs+7−5
@@ -46,7 +46,7 @@ loadMetadata p identifier = do
46
46
47 gmd <- loadGlobalMetadata p identifier
47 gmd <- loadGlobalMetadata p identifier
48
48
49− return (M.unions [md, emd, gmd], body)
49+ return (M.unions [md, gmd], body)
50 where
50 where
51 normal = setVersion Nothing identifier
51 normal = setVersion Nothing identifier
52 fp = resourceFilePath p identifier
52 fp = resourceFilePath p identifier
@@ -154,11 +154,13 @@ loadGlobalMetadata p fp = liftM M.fromList $ loadgm fp where
154 concatMap snd . filter (flip matches fp . fromGlob . normalise . combine dir . fst)
154 concatMap snd . filter (flip matches fp . fromGlob . normalise . combine dir . fst)
155
155
156namedMetadata :: Parser [(String, [(String, String)])]
156namedMetadata :: Parser [(String, [(String, String)])]
157−namedMetadata = P.many namedMetadataBlock
157+namedMetadata = liftA2 (:) (namedMetadataBlock False) $ P.many $ namedMetadataBlock True
158
158
159−namedMetadataBlock :: Parser (String, [(String, String)])
159+namedMetadataBlock :: Bool -> Parser (String, [(String, String)])
160−namedMetadataBlock = do
160+namedMetadataBlock isNamed = do
161+ name <- if isNamed
161− name <- P.many1 (P.char '-') *> P.many inlineSpace *> P.manyTill P.anyChar newline
162+ then P.many1 (P.char '-') *> P.many inlineSpace *> P.manyTill P.anyChar newline
163+ else pure "**"
162 metadata' <- metadata
164 metadata' <- metadata
163 P.skipMany P.space
165 P.skipMany P.space
164 return (name, metadata')
166 return (name, metadata')
src/Hakyll/Core/Rules/Default.hs+1
@@ -14,6 +14,7 @@ internalRules :: Rules ()
14internalRules = do
14internalRules = do
15 match "metadata" $ compile $ makeItem ()
15 match "metadata" $ compile $ makeItem ()
16 match "**/metadata" $ compile $ makeItem ()
16 match "**/metadata" $ compile $ makeItem ()
17+ match "**.metadata" $ compile $ makeItem ()
17
18
18--------------------------------------------------------------------------------
19--------------------------------------------------------------------------------
19addMetadataDependencies :: Compiler ()
20addMetadataDependencies :: Compiler ()
tests/data/posts/metadata+2
@@ -16,3 +16,5 @@ a1: 3
16a2: 3
16a2: 3
17a3: 3
17a3: 3
18
18
19+--- nonexistent
20+a3: 0