web-routes-boomerang 0.27.0 → 0.27.1
raw patch · 2 files changed
+20/−9 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Web.Routes.Boomerang: boomerangFromPathSegments :: PrinterParser TextsError [Text] () (url :- ()) -> URLParser url
+ Web.Routes.Boomerang: boomerangToPathSegments :: PrinterParser TextsError [Text] () (url :- ()) -> (url -> [Text])
Files
- Web/Routes/Boomerang.hs +18/−7
- web-routes-boomerang.cabal +2/−2
Web/Routes/Boomerang.hs view
@@ -146,9 +146,14 @@ , Router , boomerangSite , boomerangSiteRouteT+ , boomerangFromPathSegments+ , boomerangToPathSegments ) where +import Data.Function (on)+import Data.List (maximumBy) import Data.Text (Text, pack, unpack)+import qualified Data.Text as T import Text.Boomerang -- (PrinterParser(..), ParserError(..), (:-), condenseErrors, parse1, showParserError, unparse1) import Text.Boomerang.Texts -- (StringsPos(..), isComplete) import Text.ParserCombinators.Parsec.Prim (State(..), getParserState, setParserState)@@ -186,13 +191,19 @@ boomerangFromPathSegments (PrinterParser prs _) = do st <- getParserState let results = runParser prs (stateInput st) (MajorMinorPos (fromIntegral $ sourceLine (statePos st)) (fromIntegral $ sourceColumn (statePos st)))- case [ ((f (), tok), pos) | (Right ((f, tok), pos)) <- results, isComplete tok ] of- ((((u :- ()), tok), pos) : _) ->- do let st' = st { statePos = setSourceColumn (setSourceLine (statePos st) (fromIntegral $ major pos)) (fromIntegral $ minor pos)- , stateInput = tok- }- setParserState st'- return u+ successes = [ ((f (), tok), pos) | (Right ((f, tok), pos)) <- results]+ case successes of+ [] -> fail (showParserError (const "") $ head $ bestErrors [e | Left e <- results])+ _ -> case (maximumBy (compare `on` snd) successes) of+ (((u :- ()), tok), pos) ->+ do let st' = st { statePos = setSourceColumn (setSourceLine (statePos st) (fromIntegral $ major pos)) (fromIntegral $ minor pos)+ , stateInput = trim tok+ }+ setParserState st'+ return u+ where+ trim [] = []+ trim (t:ts) = if T.null t then ts else (t:ts) -- | convert to the type expected by 'toPathSegments' from 'PathInfo' boomerangToPathSegments :: PrinterParser TextsError [Text] () (url :- ()) -> (url -> [Text])
web-routes-boomerang.cabal view
@@ -1,5 +1,5 @@ Name: web-routes-boomerang-Version: 0.27.0+Version: 0.27.1 License: BSD3 License-File: LICENSE Author: jeremy@seereason.com@@ -24,4 +24,4 @@ source-repository head type: darcs- location: http://src.seereason.com/web-routes/+ location: http://hub.darcs.net/stepcut/web-routes