module Text.XML.Selectors.Types
where
import Text.XML
import Text.XML.Cursor
import Data.Text (Text)
import qualified Data.Text as Text
import Control.Applicative
data Selector
= None
| Any
| Append Selector Selector
| Elem Name
| Attrib AttribSelector
| Descendant
| Child
| Sibling
| NextSibling
| FirstChild
| LastChild
| NthChild Int
| Choice [Selector]
| Having Selector
| Not Selector
deriving (Int -> Selector -> ShowS
[Selector] -> ShowS
Selector -> String
(Int -> Selector -> ShowS)
-> (Selector -> String) -> ([Selector] -> ShowS) -> Show Selector
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Selector] -> ShowS
$cshowList :: [Selector] -> ShowS
show :: Selector -> String
$cshow :: Selector -> String
showsPrec :: Int -> Selector -> ShowS
$cshowsPrec :: Int -> Selector -> ShowS
Show)
selectorAppend :: Selector -> Selector -> Selector
selectorAppend :: Selector -> Selector -> Selector
selectorAppend Selector
Any Selector
x = Selector
x
selectorAppend Selector
x Selector
Any = Selector
x
selectorAppend Selector
a Selector
b = Selector -> Selector -> Selector
Append Selector
a Selector
b
instance Semigroup Selector where
<> :: Selector -> Selector -> Selector
(<>) = Selector -> Selector -> Selector
selectorAppend
instance Monoid Selector where
mappend :: Selector -> Selector -> Selector
mappend = Selector -> Selector -> Selector
forall a. Semigroup a => a -> a -> a
(<>)
mempty :: Selector
mempty = Selector
Any
(<||>) :: Selector -> Selector -> Selector
Choice [Selector]
xs <||> :: Selector -> Selector -> Selector
<||> Choice [Selector]
ys = [Selector] -> Selector
Choice ([Selector]
xs [Selector] -> [Selector] -> [Selector]
forall a. [a] -> [a] -> [a]
++ [Selector]
ys)
Choice [Selector]
xs <||> Selector
y = [Selector] -> Selector
Choice ([Selector]
xs [Selector] -> [Selector] -> [Selector]
forall a. [a] -> [a] -> [a]
++ [Selector
y])
Selector
x <||> Choice [Selector]
ys = [Selector] -> Selector
Choice (Selector
x Selector -> [Selector] -> [Selector]
forall a. a -> [a] -> [a]
: [Selector]
ys)
Selector
x <||> Selector
y = [Selector] -> Selector
Choice [Selector
x, Selector
y]
infixl 3 <||>
data AttribSelector
= AttribExists Name
| AttribIs Name Text
| AttribIsNot Name Text
| AttribStartsWith Name Text
| AttribEndsWith Name Text
| AttribContains Name Text
| AttribContainsWord Name Text
| AttribContainsPrefix Name Text
deriving (Int -> AttribSelector -> ShowS
[AttribSelector] -> ShowS
AttribSelector -> String
(Int -> AttribSelector -> ShowS)
-> (AttribSelector -> String)
-> ([AttribSelector] -> ShowS)
-> Show AttribSelector
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [AttribSelector] -> ShowS
$cshowList :: [AttribSelector] -> ShowS
show :: AttribSelector -> String
$cshow :: AttribSelector -> String
showsPrec :: Int -> AttribSelector -> ShowS
$cshowsPrec :: Int -> AttribSelector -> ShowS
Show, AttribSelector -> AttribSelector -> Bool
(AttribSelector -> AttribSelector -> Bool)
-> (AttribSelector -> AttribSelector -> Bool) -> Eq AttribSelector
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: AttribSelector -> AttribSelector -> Bool
$c/= :: AttribSelector -> AttribSelector -> Bool
== :: AttribSelector -> AttribSelector -> Bool
$c== :: AttribSelector -> AttribSelector -> Bool
Eq)