@@ -32,6 +32,7 @@ module Hakyll.Core.Routes
3232 , setExtension
3333 , ifMatch
3434 , customRoute
35+ , gsubRoute
3536 ) where
3637
3738import Data.Monoid (Monoid, mempty, mappend)
@@ -40,6 +41,7 @@ import System.FilePath (replaceExtension)
4041
4142import Hakyll.Core.Identifier
4243import Hakyll.Core.Identifier.Pattern
44+import Hakyll.Core.Util.String
4345
4446-- | Type used for a route
4547--
@@ -94,3 +96,19 @@ ifMatch pattern (Routes route) = Routes $ \id' ->
9496--
9597customRoute :: (Identifier -> FilePath) -> Routes
9698customRoute f = Routes $ Just . f
99+
100+-- | Create a gsub route
101+--
102+-- Example:
103+--
104+-- > runRoutes (gsubRoute "rss/" (const "")) "tags/rss/bar.xml"
105+--
106+-- Result:
107+--
108+-- > Just "tags/bar.xml"
109+--
110+gsubRoute :: String -- ^ Pattern
111+ -> (String -> String) -- ^ Replacement
112+ -> Routes -- ^ Resulting route
113+gsubRoute pattern replacement = customRoute $
114+ replaceAll pattern replacement . toFilePath