{-# LANGUAGE TemplateHaskell, QuasiQuotes #-} module Text.XML.Selector.TH (jq,queryT) where import Language.Haskell.TH import Language.Haskell.TH.Quote import Language.Haskell.TH.Lift import Text.Parsec import Text.XML.Selector import Text.XML.Cursor import Text.Parsec import Text.XML.Selector.Types import Text.XML.Selector.Parser import Data.Maybe import qualified Data.Map as M type Parser a = Parsec String () a $(deriveLift ''JQSelector) $(deriveLift ''TagAttr) $(deriveLift ''RelPrev) $(deriveLift ''AttrRel) -- instance Lift JQSelector where -- lift (JQSelector a b c d e) = [| JQSelector a b c d e |] jqueryExpr :: String -> Q Exp jqueryExpr str = do case parseJQ str of [] -> error "query: Invalid selector" sels -> [| sels |] -- | QuasiQuoter for CSS selector jq :: QuasiQuoter jq = QuasiQuoter jqueryExpr undefined undefined undefined -- |Get 'Axis' from jQuery selector QQ. -- -- >html = innerHtml $ cursor $| queryT [jq| ul.foo > li#bar |] queryT :: [JQSelector] -> Axis queryT sels = searchTree sels