hakyll 0.4 → 0.4.1
raw patch · 7 files changed
+88/−25 lines, 7 filesdep +regex-basedep +regex-tdfadep −regex-compatdep ~bytestringPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: regex-base, regex-tdfa
Dependencies removed: regex-compat
Dependency ranges changed: bytestring
API changes (from Hackage documentation)
- Text.Hakyll.Util: split :: String -> String -> [String]
+ Text.Hakyll.Regex: split :: String -> String -> [String]
+ Text.Hakyll.Regex: substitute :: String -> String -> String -> String
Files
- hakyll.cabal +11/−4
- src/Network/Hakyll/SimpleServer.hs +1/−0
- src/Text/Hakyll/CompressCSS.hs +6/−10
- src/Text/Hakyll/Context.hs +3/−4
- src/Text/Hakyll/Regex.hs +66/−0
- src/Text/Hakyll/Tags.hs +1/−0
- src/Text/Hakyll/Util.hs +0/−7
hakyll.cabal view
@@ -1,5 +1,5 @@ Name: hakyll-Version: 0.4+Version: 0.4.1 Synopsis: A simple static site generator library. Description:@@ -8,13 +8,18 @@ Author: Jasper Van der Jeugt Maintainer: jaspervdj@gmail.com Homepage: http://jaspervdj.be/hakyll+Bug-Reports: http://github.com/jaspervdj/Hakyll/issues License: BSD3 License-File: LICENSE Category: Text-Cabal-Version: >= 1.2+Cabal-Version: >= 1.6 build-type: Simple +source-repository head+ type: git+ location: git://github.com/jaspervdj/Hakyll.git+ library ghc-options: -Wall hs-source-dirs: src/@@ -23,9 +28,10 @@ filepath >= 1.1, directory >= 1, containers >= 0.1,- bytestring >= 0.9 && <= 0.9.1.4,+ bytestring >= 0.9 && < 0.9.2, pandoc >= 1,- regex-compat >= 0.92,+ regex-base >= 0.83,+ regex-tdfa >= 0.92, network >= 2, mtl >= 1.1, old-locale >= 1,@@ -40,4 +46,5 @@ Text.Hakyll.Util Text.Hakyll.Tags Text.Hakyll.Context+ Text.Hakyll.Regex Network.Hakyll.SimpleServer
src/Network/Hakyll/SimpleServer.hs view
@@ -17,6 +17,7 @@ import qualified Data.Map as M import Text.Hakyll.Util+import Text.Hakyll.Regex -- | Function to log from a chan. log :: Chan String -> IO ()
src/Text/Hakyll/CompressCSS.hs view
@@ -3,27 +3,23 @@ ) where import Data.List (isPrefixOf)-import Text.Regex (subRegex, mkRegex)---- | subRegex with arguments flipped for easy function composition.-subRegex' :: String -> String -> String -> String-subRegex' pattern replacement str = subRegex (mkRegex pattern) str replacement+import Text.Hakyll.Regex (substitute) -- | Compress CSS to speed up your site. compressCSS :: String -> String compressCSS = compressSeparators- . compressWhitespace . stripComments+ . compressWhitespace -- | Compresses certain forms of separators. compressSeparators :: String -> String-compressSeparators = subRegex' ";\\s*}" "}" - . subRegex' "\\s*([{};:])\\s*" "\\1"- . subRegex' ";;*" ";"+compressSeparators = substitute "; *}" "}" + . substitute " *([{};:]) *" "\\1"+ . substitute ";;*" ";" -- | Compresses all whitespace. compressWhitespace :: String -> String-compressWhitespace = subRegex' "\\s\\s*" " "+compressWhitespace = substitute "[ \t\n][ \t\n]*" " " -- | Function that strips CSS comments away. stripComments :: String -> String
src/Text/Hakyll/Context.hs view
@@ -10,11 +10,11 @@ import System.Locale (defaultTimeLocale) import System.FilePath (takeFileName)-import Text.Regex (subRegex, mkRegex) import Text.Template (Context) import Data.Time.Format (parseTime, formatTime) import Data.Time.Clock (UTCTime) import Data.Maybe (fromMaybe)+import Text.Hakyll.Regex (substitute) -- | Type for context manipulating functions. type ContextManipulation = Context -> Context@@ -38,9 +38,8 @@ M.insert (B.pack key) (B.pack value) context where value = fromMaybe defaultValue pretty pretty = do filePath <- M.lookup (B.pack "path") context- let dateString = subRegex (mkRegex "^([0-9]*-[0-9]*-[0-9]*).*")- (takeFileName $ B.unpack filePath)- "\\1"+ let dateString = substitute "^([0-9]*-[0-9]*-[0-9]*).*" "\\1"+ (takeFileName $ B.unpack filePath) time <- parseTime defaultTimeLocale "%Y-%m-%d" dateString :: Maybe UTCTime
+ src/Text/Hakyll/Regex.hs view
@@ -0,0 +1,66 @@+-- | A module that exports a simple regex interface. This code is mostly copied+-- from the regex-compat package at hackage.+module Text.Hakyll.Regex+ ( split+ , substitute+ ) where++import Text.Regex.TDFA++-- | Match a regular expression against a string, returning more information+-- about the match.+matchRegexAll :: Regex -> String -> Maybe (String, String, String, [String])+matchRegexAll p str = matchM p str++-- | Replaces every occurance of the given regexp with the replacement string.+subRegex :: Regex -- ^ Search pattern+ -> String -- ^ Input string+ -> String -- ^ Replacement text+ -> String -- ^ Output string+subRegex _ "" _ = ""+subRegex regexp inp replacement =+ let -- bre matches a backslash then capture either a backslash or some digits+ bre = makeRegex "\\\\(\\\\|[0-9]+)"+ lookup' _ [] _ = []+ lookup' [] _ _ = []+ lookup' match' repl groups =+ case matchRegexAll bre repl of+ Nothing -> repl+ Just (lead, _, trail, bgroups) ->+ let newval =+ if (head bgroups) == "\\"+ then "\\"+ else let index :: Int+ index = (read (head bgroups)) - 1+ in if index == -1+ then match'+ else groups !! index+ in lead ++ newval ++ lookup' match' trail groups+ in case matchRegexAll regexp inp of+ Nothing -> inp+ Just (lead, match', trail, groups) ->+ lead ++ lookup' match' replacement groups ++ (subRegex regexp trail replacement)++-- | Splits a string based on a regular expression. The regular expression+-- should identify one delimiter.+splitRegex :: Regex -> String -> [String]+splitRegex _ [] = []+splitRegex delim strIn = loop strIn where+ loop str = case matchOnceText delim str of+ Nothing -> [str]+ Just (firstline, _, remainder) ->+ if null remainder+ then [firstline,""]+ else firstline : loop remainder++-- | Split a list at a certain element.+split :: String -> String -> [String]+split pattern = filter (not . null)+ . splitRegex (makeRegex pattern)++-- | Substitute a regex. Simplified interface.+substitute :: String -- ^ Pattern to replace (regex).+ -> String -- ^ Replacement string.+ -> String -- ^ Input string.+ -> String -- ^ Result.+substitute pattern replacement str = subRegex (makeRegex pattern) str replacement
src/Text/Hakyll/Tags.hs view
@@ -12,6 +12,7 @@ import Control.Monad (foldM) import Text.Hakyll.Context (ContextManipulation, renderValue)+import Text.Hakyll.Regex import Text.Hakyll.Util import Text.Hakyll.Page import Control.Arrow (second)
src/Text/Hakyll/Util.hs view
@@ -1,12 +1,10 @@ module Text.Hakyll.Util ( trim- , split , stripHTML , link ) where import Data.Char (isSpace)-import Text.Regex (splitRegex, mkRegex) -- | Trim a string (drop spaces and tabs at both sides). trim :: String -> String@@ -22,11 +20,6 @@ -- We need a failsafe tail function. where tail' [] = [] tail' xs = tail xs---- | Split a list at a certain element.-split :: String -> String -> [String]-split pattern = filter (not . null)- . splitRegex (mkRegex pattern) -- | Make a HTML link. --