summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hakyll.cabal2
-rw-r--r--src/Hakyll/Core/Identifier/Pattern.hs8
-rw-r--r--src/Hakyll/Web/Tags.hs14
-rw-r--r--src/Hakyll/Web/Template/Context.hs3
4 files changed, 14 insertions, 13 deletions
diff --git a/hakyll.cabal b/hakyll.cabal
index 165611f..00d618f 100644
--- a/hakyll.cabal
+++ b/hakyll.cabal
@@ -120,7 +120,7 @@ Library
Hakyll.Web.Pandoc
Hakyll.Web.Pandoc.Biblio
Hakyll.Web.Pandoc.FileType
- -- Hakyll.Web.Tags
+ Hakyll.Web.Tags
Hakyll.Web.Template
Hakyll.Web.Template.Context
Hakyll.Web.Template.List
diff --git a/src/Hakyll/Core/Identifier/Pattern.hs b/src/Hakyll/Core/Identifier/Pattern.hs
index 48e5441..eb9da374 100644
--- a/src/Hakyll/Core/Identifier/Pattern.hs
+++ b/src/Hakyll/Core/Identifier/Pattern.hs
@@ -68,6 +68,8 @@ import Data.Binary (Binary (..), getWord8, putWord8)
import Data.List (inits, isPrefixOf, tails)
import Data.Maybe (isJust)
import Data.Monoid (Monoid, mappend, mempty)
+import Data.Set (Set)
+import qualified Data.Set as S
--------------------------------------------------------------------------------
@@ -108,7 +110,7 @@ data Pattern
| Complement Pattern
| And Pattern Pattern
| Glob [GlobComponent]
- | List [Identifier] -- TODO Maybe use a set here
+ | List (Set Identifier)
| Regex String
| Version (Maybe String)
deriving (Show)
@@ -162,7 +164,7 @@ fromGlob = Glob . parse'
--------------------------------------------------------------------------------
-- | Create a 'Pattern' from a list of 'Identifier's it should match
fromList :: [Identifier] -> Pattern
-fromList = List
+fromList = List . S.fromList
--------------------------------------------------------------------------------
@@ -205,7 +207,7 @@ matches Everything _ = True
matches (Complement p) i = not $ matches p i
matches (And x y) i = matches x i && matches y i
matches (Glob p) i = isJust $ capture (Glob p) i
-matches (List l) i = i `elem` l
+matches (List l) i = i `S.member` l
matches (Regex r) i = toFilePath i =~ r
matches (Version v) i = identifierVersion i == v
diff --git a/src/Hakyll/Web/Tags.hs b/src/Hakyll/Web/Tags.hs
index e10af56..2aa1cac 100644
--- a/src/Hakyll/Web/Tags.hs
+++ b/src/Hakyll/Web/Tags.hs
@@ -66,6 +66,7 @@ import qualified Text.Blaze.Html5.Attributes as A
--------------------------------------------------------------------------------
import Hakyll.Core.Compiler
import Hakyll.Core.Identifier
+import Hakyll.Core.Identifier.Pattern
import Hakyll.Core.Item
import Hakyll.Core.Metadata
import Hakyll.Core.Util.String
@@ -102,10 +103,11 @@ getCategory = return . return . takeBaseName . takeDirectory . toFilePath
--------------------------------------------------------------------------------
--- | Higher-level function to read tags
+-- | Higher-order function to read tags
buildTagsWith :: MonadMetadata m
- => (Identifier -> m [String]) -> [Identifier] -> m Tags
-buildTagsWith f ids = do
+ => (Identifier -> m [String]) -> Pattern -> m Tags
+buildTagsWith f pattern = do
+ ids <- getMatches pattern
tagMap <- foldM addTags M.empty ids
return $ Tags $ M.toList tagMap
where
@@ -117,15 +119,13 @@ buildTagsWith f ids = do
--------------------------------------------------------------------------------
-- | Read a tagmap using the @tags@ metadata field
--- TODO: Should use pattern
-buildTags :: MonadMetadata m => [Identifier] -> m Tags
+buildTags :: MonadMetadata m => Pattern -> m Tags
buildTags = buildTagsWith getTags
--------------------------------------------------------------------------------
-- | Read a tagmap using the @category@ metadata field
--- TODO: Should use pattern
-buildCategory :: MonadMetadata m => [Identifier] -> m Tags
+buildCategory :: MonadMetadata m => Pattern -> m Tags
buildCategory = buildTagsWith getCategory
diff --git a/src/Hakyll/Web/Template/Context.hs b/src/Hakyll/Web/Template/Context.hs
index 3b98ea3..67c4070 100644
--- a/src/Hakyll/Web/Template/Context.hs
+++ b/src/Hakyll/Web/Template/Context.hs
@@ -28,8 +28,7 @@ import qualified Data.Map as M
import Data.Monoid (Monoid (..))
import Data.Time.Clock (UTCTime (..))
import Data.Time.Format (formatTime, parseTime)
-import System.FilePath (takeBaseName, takeDirectory,
- takeFileName)
+import System.FilePath (takeBaseName, takeFileName)
import System.Locale (TimeLocale, defaultTimeLocale)