css-text 0.0.0 → 0.1.0
raw patch · 3 files changed
+32/−15 lines, 3 filesdep +QuickCheckPVP ok
version bump matches the API change (PVP)
Dependencies added: QuickCheck
API changes (from Hackage documentation)
+ Text.CSS.Parse: attrParser :: Parser (Text, Text)
+ Text.CSS.Parse: attrsParser :: Parser [(Text, Text)]
+ Text.CSS.Parse: blockParser :: Parser (Text, [(Text, Text)])
+ Text.CSS.Parse: blocksParser :: Parser [(Text, [(Text, Text)])]
- Text.CSS.Parse: parseAttr :: Parser (Text, Text)
+ Text.CSS.Parse: parseAttr :: Text -> Either String (Text, Text)
- Text.CSS.Parse: parseAttrs :: Parser [(Text, Text)]
+ Text.CSS.Parse: parseAttrs :: Text -> Either String [(Text, Text)]
- Text.CSS.Parse: parseBlock :: Parser (Text, [(Text, Text)])
+ Text.CSS.Parse: parseBlock :: Text -> Either String (Text, [(Text, Text)])
- Text.CSS.Parse: parseBlocks :: Parser [(Text, [(Text, Text)])]
+ Text.CSS.Parse: parseBlocks :: Text -> Either String [(Text, [(Text, Text)])]
Files
- Text/CSS/Parse.hs +28/−13
- Text/CSS/Render.hs +1/−0
- css-text.cabal +3/−2
Text/CSS/Parse.hs view
@@ -1,6 +1,10 @@ {-# LANGUAGE OverloadedStrings #-} module Text.CSS.Parse- ( parseAttr+ ( attrParser+ , attrsParser+ , blockParser+ , blocksParser+ , parseAttr , parseAttrs , parseBlock , parseBlocks@@ -9,12 +13,23 @@ import Prelude hiding (takeWhile) import Data.Attoparsec.Text import Data.Text (Text, strip)-import Data.Char (isSpace) import Control.Applicative ((<|>)) +parseAttrs :: Text -> Either String [(Text, Text)]+parseAttrs = parseOnly attrsParser++parseAttr :: Text -> Either String (Text, Text)+parseAttr = parseOnly attrParser++parseBlocks :: Text -> Either String [(Text, [(Text, Text)])]+parseBlocks = parseOnly blocksParser++parseBlock :: Text -> Either String (Text, [(Text, Text)])+parseBlock = parseOnly blockParser+ skipWS :: Parser () skipWS = (string "/*" >> endComment >> skipWS)- <|> (satisfy isSpace >> skipSpace >> skipWS)+ <|> (space >> skipSpace >> skipWS) <|> return () where endComment = do@@ -24,34 +39,34 @@ (char '/' >> return ()) <|> endComment ) <|> fail "Missing end comment" -parseAttr :: Parser (Text, Text)-parseAttr = do+attrParser :: Parser (Text, Text)+attrParser = do skipWS key <- takeWhile1 (not . flip elem ":{}") _ <- char ':' <|> fail "Missing colon in attribute" value <- (takeWhile (not . flip elem ";}")) return (strip key, strip value) -parseAttrs :: Parser [(Text, Text)]-parseAttrs =+attrsParser :: Parser [(Text, Text)]+attrsParser = go id where go front = (do- a <- parseAttr+ a <- attrParser (char ';' >> return ()) <|> return () skipWS go $ front . (:) a ) <|> return (front []) -parseBlock :: Parser (Text, [(Text, Text)])-parseBlock = do+blockParser :: Parser (Text, [(Text, Text)])+blockParser = do skipWS sel <- takeWhile (/= '{') _ <- char '{'- attrs <- parseAttrs+ attrs <- attrsParser skipWS _ <- char '}' return (strip sel, attrs) -parseBlocks :: Parser [(Text, [(Text, Text)])]-parseBlocks = many parseBlock+blocksParser :: Parser [(Text, [(Text, Text)])]+blocksParser = many blockParser
Text/CSS/Render.hs view
@@ -10,6 +10,7 @@ import Data.Text.Lazy.Builder (Builder, fromText, singleton) import Data.Monoid (mappend, mempty, mconcat) +(<>) :: Builder -> Builder -> Builder (<>) = mappend renderAttr :: (Text, Text) -> Builder
css-text.cabal view
@@ -1,5 +1,5 @@ name: css-text-version: 0.0.0+version: 0.1.0 license: BSD3 license-file: LICENSE author: Michael Snoyman <michael@snoyman.com>@@ -27,7 +27,8 @@ , attoparsec-text >= 0.8.5.1 && < 0.9 , HUnit >= 1.2 && < 1.3 , hspec >= 0.6.1 && < 0.7+ , QuickCheck source-repository head type: git- location: git://github.com/snoyberg/css-text.git+ location: git://github.com/yesodweb/css-text.git