module Data.CSS.Syntax.StylishUtils( concatP, capture, skipSpace, scanBlock, skipBlock, scanInner ) where import Data.CSS.Syntax.Tokens concatP join left right tokens = (join x y, remainder) where (x, tokens') = left tokens (y, remainder) = right tokens' capture cb (token:tokens) = (token:captured, tokens') where (captured, tokens') = cb tokens capture _ [] = ([], []) skipSpace (Whitespace:tokens) = skipSpace tokens skipSpace tokens = tokens -- TODO assert closing tags are correct -- But what should the error recovery be? scanBlock (RightCurlyBracket:tokens) = ([RightCurlyBracket], tokens) scanBlock (RightParen:tokens) = ([RightParen], tokens) scanBlock (RightSquareBracket:tokens) = ([RightSquareBracket], tokens) scanBlock (LeftCurlyBracket:tokens) = scanInner tokens scanBlock scanBlock (LeftParen:tokens) = scanInner tokens scanBlock scanBlock (LeftSquareBracket:tokens) = scanInner tokens scanBlock scanBlock tokens = capture scanBlock tokens skipBlock tokens = snd $ scanBlock tokens scanInner tokens cb = concatP (++) scanBlock cb tokens