summaryrefslogtreecommitdiff
path: root/src/Hakyll
diff options
context:
space:
mode:
authorJasper Van der Jeugt <jaspervdj@gmail.com>2011-01-02 10:22:49 +0100
committerJasper Van der Jeugt <jaspervdj@gmail.com>2011-01-02 10:22:49 +0100
commit2d1225104cb5a050a84bc70916e1aadfff25fb00 (patch)
tree7d806948d01c5a0c91406784bd7fca7dcd1e813d /src/Hakyll
parente1aa9600993363eec55425bc05cb9813b9054f91 (diff)
downloadhakyll-2d1225104cb5a050a84bc70916e1aadfff25fb00.tar.gz
Add toUrl, move & optimize replaceAll a bit
Diffstat (limited to 'src/Hakyll')
-rw-r--r--src/Hakyll/Web/CompressCss.hs16
-rw-r--r--src/Hakyll/Web/Page.hs4
-rw-r--r--src/Hakyll/Web/Util/String.hs34
3 files changed, 36 insertions, 18 deletions
diff --git a/src/Hakyll/Web/CompressCss.hs b/src/Hakyll/Web/CompressCss.hs
index cd03237..6e3b6f2 100644
--- a/src/Hakyll/Web/CompressCss.hs
+++ b/src/Hakyll/Web/CompressCss.hs
@@ -6,23 +6,9 @@ module Text.Hakyll.Internal.CompressCss
) where
import Data.Char (isSpace)
-import Data.Maybe (listToMaybe)
import Data.List (isPrefixOf)
-import Text.Regex.Posix ((=~~))
--- | A simple (but inefficient) regex replace funcion
---
-replaceAll :: String -- ^ Pattern
- -> (String -> String) -- ^ Replacement (called on capture)
- -> String -- ^ Source string
- -> String -- ^ Result
-replaceAll pattern f source =
- case listToMaybe (source =~~ pattern) of
- Nothing -> source
- Just (o, l) ->
- let (before, tmp) = splitAt o source
- (capture, after) = splitAt l tmp
- in before ++ f capture ++ replaceAll pattern f after
+import Hakyll.Web.Util.String
-- | Compress CSS to speed up your site.
--
diff --git a/src/Hakyll/Web/Page.hs b/src/Hakyll/Web/Page.hs
index 9294231..531c951 100644
--- a/src/Hakyll/Web/Page.hs
+++ b/src/Hakyll/Web/Page.hs
@@ -56,8 +56,8 @@ addDefaultFields = (getRoute &&& id >>^ uncurry addRoute)
where
-- Add root and url, based on route
addRoute Nothing = id
- addRoute (Just r) = addField "url" r
- . addField "root" (toSiteRoot r)
+ addRoute (Just r) = addField "url" (toUrl r)
+ . addField "root" (toSiteRoot $ toUrl r)
-- Add title and category, based on identifier
addIdentifier i = addField "title" (takeBaseName p)
diff --git a/src/Hakyll/Web/Util/String.hs b/src/Hakyll/Web/Util/String.hs
index e48580b..ed8b904 100644
--- a/src/Hakyll/Web/Util/String.hs
+++ b/src/Hakyll/Web/Util/String.hs
@@ -2,12 +2,16 @@
--
module Hakyll.Web.Util.String
( trim
+ , replaceAll
+ , toUrl
, toSiteRoot
) where
import Data.Char (isSpace)
+import Data.Maybe (listToMaybe)
import System.FilePath (splitPath, takeDirectory, joinPath)
+import Text.Regex.PCRE ((=~~))
-- | Trim a string (drop spaces, tabs and newlines at both sides).
--
@@ -16,9 +20,37 @@ trim = reverse . trim' . reverse . trim'
where
trim' = dropWhile isSpace
+-- | A simple (but inefficient) regex replace funcion
+--
+replaceAll :: String -- ^ Pattern
+ -> (String -> String) -- ^ Replacement (called on capture)
+ -> String -- ^ Source string
+ -> String -- ^ Result
+replaceAll pattern f source = replaceAll' source
+ where
+ replaceAll' src = case listToMaybe (src =~~ pattern) of
+ Nothing -> src
+ Just (o, l) ->
+ let (before, tmp) = splitAt o src
+ (capture, after) = splitAt l tmp
+ in before ++ f capture ++ replaceAll' after
+
+-- | Convert a filepath to an URL starting from the site root
+--
+-- Example:
+--
+-- > toUrl "foo/bar.html"
+--
+-- Result:
+--
+-- > "/foo/bar.html"
+--
+toUrl :: FilePath -> String
+toUrl = ('/' :)
+
-- | Get the relative url to the site root, for a given (absolute) url
--
-toSiteRoot :: FilePath -> FilePath
+toSiteRoot :: String -> String
toSiteRoot = emptyException . joinPath . map parent . splitPath . takeDirectory
where
parent = const ".."