{-# LANGUAGE DeriveLift #-}
{-# OPTIONS_GHC -Wno-unused-do-bind #-}
module Data.Aeson.JSONPath.Parser
( JSPQuery (..)
, JSPSegment (..)
, JSPChildSegment (..)
, JSPDescSegment (..)
, JSPSelector (..)
, JSPWildcardT (..)
, pJSPQuery
)
where
import qualified Data.Text as T
import qualified Text.ParserCombinators.Parsec as P
import Data.Functor (($>))
import Data.Text (Text)
import Data.Char (ord)
import Text.ParserCombinators.Parsec ((<|>))
import Language.Haskell.TH.Syntax (Lift (..))
import Prelude
newtype JSPQuery
= JSPRoot [JSPSegment]
deriving (JSPQuery -> JSPQuery -> Bool
(JSPQuery -> JSPQuery -> Bool)
-> (JSPQuery -> JSPQuery -> Bool) -> Eq JSPQuery
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSPQuery -> JSPQuery -> Bool
== :: JSPQuery -> JSPQuery -> Bool
$c/= :: JSPQuery -> JSPQuery -> Bool
/= :: JSPQuery -> JSPQuery -> Bool
Eq, Int -> JSPQuery -> ShowS
[JSPQuery] -> ShowS
JSPQuery -> String
(Int -> JSPQuery -> ShowS)
-> (JSPQuery -> String) -> ([JSPQuery] -> ShowS) -> Show JSPQuery
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSPQuery -> ShowS
showsPrec :: Int -> JSPQuery -> ShowS
$cshow :: JSPQuery -> String
show :: JSPQuery -> String
$cshowList :: [JSPQuery] -> ShowS
showList :: [JSPQuery] -> ShowS
Show, (forall (m :: * -> *). Quote m => JSPQuery -> m Exp)
-> (forall (m :: * -> *). Quote m => JSPQuery -> Code m JSPQuery)
-> Lift JSPQuery
forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => JSPQuery -> m Exp
forall (m :: * -> *). Quote m => JSPQuery -> Code m JSPQuery
$clift :: forall (m :: * -> *). Quote m => JSPQuery -> m Exp
lift :: forall (m :: * -> *). Quote m => JSPQuery -> m Exp
$cliftTyped :: forall (m :: * -> *). Quote m => JSPQuery -> Code m JSPQuery
liftTyped :: forall (m :: * -> *). Quote m => JSPQuery -> Code m JSPQuery
Lift)
data JSPSegment
= JSPChildSeg JSPChildSegment
| JSPDescSeg JSPDescSegment
deriving (JSPSegment -> JSPSegment -> Bool
(JSPSegment -> JSPSegment -> Bool)
-> (JSPSegment -> JSPSegment -> Bool) -> Eq JSPSegment
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSPSegment -> JSPSegment -> Bool
== :: JSPSegment -> JSPSegment -> Bool
$c/= :: JSPSegment -> JSPSegment -> Bool
/= :: JSPSegment -> JSPSegment -> Bool
Eq, Int -> JSPSegment -> ShowS
[JSPSegment] -> ShowS
JSPSegment -> String
(Int -> JSPSegment -> ShowS)
-> (JSPSegment -> String)
-> ([JSPSegment] -> ShowS)
-> Show JSPSegment
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSPSegment -> ShowS
showsPrec :: Int -> JSPSegment -> ShowS
$cshow :: JSPSegment -> String
show :: JSPSegment -> String
$cshowList :: [JSPSegment] -> ShowS
showList :: [JSPSegment] -> ShowS
Show, (forall (m :: * -> *). Quote m => JSPSegment -> m Exp)
-> (forall (m :: * -> *).
Quote m =>
JSPSegment -> Code m JSPSegment)
-> Lift JSPSegment
forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => JSPSegment -> m Exp
forall (m :: * -> *). Quote m => JSPSegment -> Code m JSPSegment
$clift :: forall (m :: * -> *). Quote m => JSPSegment -> m Exp
lift :: forall (m :: * -> *). Quote m => JSPSegment -> m Exp
$cliftTyped :: forall (m :: * -> *). Quote m => JSPSegment -> Code m JSPSegment
liftTyped :: forall (m :: * -> *). Quote m => JSPSegment -> Code m JSPSegment
Lift)
data JSPChildSegment
= JSPChildBracketed [JSPSelector]
| JSPChildMemberNameSH JSPNameSelector
| JSPChildWildSeg JSPWildcardT
deriving (JSPChildSegment -> JSPChildSegment -> Bool
(JSPChildSegment -> JSPChildSegment -> Bool)
-> (JSPChildSegment -> JSPChildSegment -> Bool)
-> Eq JSPChildSegment
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSPChildSegment -> JSPChildSegment -> Bool
== :: JSPChildSegment -> JSPChildSegment -> Bool
$c/= :: JSPChildSegment -> JSPChildSegment -> Bool
/= :: JSPChildSegment -> JSPChildSegment -> Bool
Eq, Int -> JSPChildSegment -> ShowS
[JSPChildSegment] -> ShowS
JSPChildSegment -> String
(Int -> JSPChildSegment -> ShowS)
-> (JSPChildSegment -> String)
-> ([JSPChildSegment] -> ShowS)
-> Show JSPChildSegment
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSPChildSegment -> ShowS
showsPrec :: Int -> JSPChildSegment -> ShowS
$cshow :: JSPChildSegment -> String
show :: JSPChildSegment -> String
$cshowList :: [JSPChildSegment] -> ShowS
showList :: [JSPChildSegment] -> ShowS
Show, (forall (m :: * -> *). Quote m => JSPChildSegment -> m Exp)
-> (forall (m :: * -> *).
Quote m =>
JSPChildSegment -> Code m JSPChildSegment)
-> Lift JSPChildSegment
forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => JSPChildSegment -> m Exp
forall (m :: * -> *).
Quote m =>
JSPChildSegment -> Code m JSPChildSegment
$clift :: forall (m :: * -> *). Quote m => JSPChildSegment -> m Exp
lift :: forall (m :: * -> *). Quote m => JSPChildSegment -> m Exp
$cliftTyped :: forall (m :: * -> *).
Quote m =>
JSPChildSegment -> Code m JSPChildSegment
liftTyped :: forall (m :: * -> *).
Quote m =>
JSPChildSegment -> Code m JSPChildSegment
Lift)
data JSPDescSegment
= JSPDescBracketed [JSPSelector]
| JSPDescMemberNameSH JSPNameSelector
| JSPDescWildSeg JSPWildcardT
deriving (JSPDescSegment -> JSPDescSegment -> Bool
(JSPDescSegment -> JSPDescSegment -> Bool)
-> (JSPDescSegment -> JSPDescSegment -> Bool) -> Eq JSPDescSegment
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSPDescSegment -> JSPDescSegment -> Bool
== :: JSPDescSegment -> JSPDescSegment -> Bool
$c/= :: JSPDescSegment -> JSPDescSegment -> Bool
/= :: JSPDescSegment -> JSPDescSegment -> Bool
Eq, Int -> JSPDescSegment -> ShowS
[JSPDescSegment] -> ShowS
JSPDescSegment -> String
(Int -> JSPDescSegment -> ShowS)
-> (JSPDescSegment -> String)
-> ([JSPDescSegment] -> ShowS)
-> Show JSPDescSegment
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSPDescSegment -> ShowS
showsPrec :: Int -> JSPDescSegment -> ShowS
$cshow :: JSPDescSegment -> String
show :: JSPDescSegment -> String
$cshowList :: [JSPDescSegment] -> ShowS
showList :: [JSPDescSegment] -> ShowS
Show, (forall (m :: * -> *). Quote m => JSPDescSegment -> m Exp)
-> (forall (m :: * -> *).
Quote m =>
JSPDescSegment -> Code m JSPDescSegment)
-> Lift JSPDescSegment
forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => JSPDescSegment -> m Exp
forall (m :: * -> *).
Quote m =>
JSPDescSegment -> Code m JSPDescSegment
$clift :: forall (m :: * -> *). Quote m => JSPDescSegment -> m Exp
lift :: forall (m :: * -> *). Quote m => JSPDescSegment -> m Exp
$cliftTyped :: forall (m :: * -> *).
Quote m =>
JSPDescSegment -> Code m JSPDescSegment
liftTyped :: forall (m :: * -> *).
Quote m =>
JSPDescSegment -> Code m JSPDescSegment
Lift)
data JSPSelector
= JSPNameSel JSPNameSelector
| JSPIndexSel JSPIndexSelector
| JSPSliceSel JSPSliceSelector
| JSPWildSel JSPWildcardT
deriving (JSPSelector -> JSPSelector -> Bool
(JSPSelector -> JSPSelector -> Bool)
-> (JSPSelector -> JSPSelector -> Bool) -> Eq JSPSelector
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSPSelector -> JSPSelector -> Bool
== :: JSPSelector -> JSPSelector -> Bool
$c/= :: JSPSelector -> JSPSelector -> Bool
/= :: JSPSelector -> JSPSelector -> Bool
Eq, Int -> JSPSelector -> ShowS
[JSPSelector] -> ShowS
JSPSelector -> String
(Int -> JSPSelector -> ShowS)
-> (JSPSelector -> String)
-> ([JSPSelector] -> ShowS)
-> Show JSPSelector
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSPSelector -> ShowS
showsPrec :: Int -> JSPSelector -> ShowS
$cshow :: JSPSelector -> String
show :: JSPSelector -> String
$cshowList :: [JSPSelector] -> ShowS
showList :: [JSPSelector] -> ShowS
Show, (forall (m :: * -> *). Quote m => JSPSelector -> m Exp)
-> (forall (m :: * -> *).
Quote m =>
JSPSelector -> Code m JSPSelector)
-> Lift JSPSelector
forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => JSPSelector -> m Exp
forall (m :: * -> *). Quote m => JSPSelector -> Code m JSPSelector
$clift :: forall (m :: * -> *). Quote m => JSPSelector -> m Exp
lift :: forall (m :: * -> *). Quote m => JSPSelector -> m Exp
$cliftTyped :: forall (m :: * -> *). Quote m => JSPSelector -> Code m JSPSelector
liftTyped :: forall (m :: * -> *). Quote m => JSPSelector -> Code m JSPSelector
Lift)
data JSPWildcardT = JSPWildcard
deriving (JSPWildcardT -> JSPWildcardT -> Bool
(JSPWildcardT -> JSPWildcardT -> Bool)
-> (JSPWildcardT -> JSPWildcardT -> Bool) -> Eq JSPWildcardT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: JSPWildcardT -> JSPWildcardT -> Bool
== :: JSPWildcardT -> JSPWildcardT -> Bool
$c/= :: JSPWildcardT -> JSPWildcardT -> Bool
/= :: JSPWildcardT -> JSPWildcardT -> Bool
Eq, Int -> JSPWildcardT -> ShowS
[JSPWildcardT] -> ShowS
JSPWildcardT -> String
(Int -> JSPWildcardT -> ShowS)
-> (JSPWildcardT -> String)
-> ([JSPWildcardT] -> ShowS)
-> Show JSPWildcardT
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> JSPWildcardT -> ShowS
showsPrec :: Int -> JSPWildcardT -> ShowS
$cshow :: JSPWildcardT -> String
show :: JSPWildcardT -> String
$cshowList :: [JSPWildcardT] -> ShowS
showList :: [JSPWildcardT] -> ShowS
Show, (forall (m :: * -> *). Quote m => JSPWildcardT -> m Exp)
-> (forall (m :: * -> *).
Quote m =>
JSPWildcardT -> Code m JSPWildcardT)
-> Lift JSPWildcardT
forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => JSPWildcardT -> m Exp
forall (m :: * -> *).
Quote m =>
JSPWildcardT -> Code m JSPWildcardT
$clift :: forall (m :: * -> *). Quote m => JSPWildcardT -> m Exp
lift :: forall (m :: * -> *). Quote m => JSPWildcardT -> m Exp
$cliftTyped :: forall (m :: * -> *).
Quote m =>
JSPWildcardT -> Code m JSPWildcardT
liftTyped :: forall (m :: * -> *).
Quote m =>
JSPWildcardT -> Code m JSPWildcardT
Lift)
type JSPNameSelector = Text
type JSPIndexSelector = Int
type JSPSliceSelector = (Maybe Int, Maybe Int, Int)
pJSPQuery :: P.Parser JSPQuery
pJSPQuery :: Parser JSPQuery
pJSPQuery = do
Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
'$'
[JSPSegment]
segs <- ParsecT String () Identity JSPSegment
-> ParsecT String () Identity [JSPSegment]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
P.many ParsecT String () Identity JSPSegment
pJSPSegment
ParsecT String () Identity ()
forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
P.eof
JSPQuery -> Parser JSPQuery
forall a. a -> ParsecT String () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (JSPQuery -> Parser JSPQuery) -> JSPQuery -> Parser JSPQuery
forall a b. (a -> b) -> a -> b
$ [JSPSegment] -> JSPQuery
JSPRoot [JSPSegment]
segs
pJSPSelector :: P.Parser JSPSelector
pJSPSelector :: Parser JSPSelector
pJSPSelector = Parser JSPSelector -> Parser JSPSelector
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try Parser JSPSelector
pJSPNameSel
Parser JSPSelector -> Parser JSPSelector -> Parser JSPSelector
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parser JSPSelector -> Parser JSPSelector
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try Parser JSPSelector
pJSPIndexSel
Parser JSPSelector -> Parser JSPSelector -> Parser JSPSelector
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parser JSPSelector -> Parser JSPSelector
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try Parser JSPSelector
pJSPSliceSel
Parser JSPSelector -> Parser JSPSelector -> Parser JSPSelector
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parser JSPSelector -> Parser JSPSelector
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try Parser JSPSelector
pJSPWildSel
pJSPNameSel :: P.Parser JSPSelector
pJSPNameSel :: Parser JSPSelector
pJSPNameSel = JSPNameSelector -> JSPSelector
JSPNameSel (JSPNameSelector -> JSPSelector)
-> (String -> JSPNameSelector) -> String -> JSPSelector
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> JSPNameSelector
T.pack (String -> JSPSelector)
-> ParsecT String () Identity String -> Parser JSPSelector
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
'\'' ParsecT String () Identity Char
-> ParsecT String () Identity String
-> ParsecT String () Identity String
forall a b.
ParsecT String () Identity a
-> ParsecT String () Identity b -> ParsecT String () Identity b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ParsecT String () Identity Char
-> ParsecT String () Identity String
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
P.many (String -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
P.noneOf String
"\'") ParsecT String () Identity String
-> ParsecT String () Identity Char
-> ParsecT String () Identity String
forall a b.
ParsecT String () Identity a
-> ParsecT String () Identity b -> ParsecT String () Identity a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
'\'')
pJSPIndexSel :: P.Parser JSPSelector
pJSPIndexSel :: Parser JSPSelector
pJSPIndexSel = do
Int
num <- Parser Int
pSignedInt
ParsecT String () Identity Char -> ParsecT String () Identity ()
forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
P.notFollowedBy (ParsecT String () Identity Char -> ParsecT String () Identity ())
-> ParsecT String () Identity Char -> ParsecT String () Identity ()
forall a b. (a -> b) -> a -> b
$ Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
':'
JSPSelector -> Parser JSPSelector
forall a. a -> ParsecT String () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (JSPSelector -> Parser JSPSelector)
-> JSPSelector -> Parser JSPSelector
forall a b. (a -> b) -> a -> b
$ Int -> JSPSelector
JSPIndexSel Int
num
pJSPSliceSel :: P.Parser JSPSelector
pJSPSliceSel :: Parser JSPSelector
pJSPSliceSel = do
Maybe Int
start <- Parser Int -> ParsecT String () Identity (Maybe Int)
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m (Maybe a)
P.optionMaybe Parser Int
pSignedInt
Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
':'
Maybe Int
end <- Parser Int -> ParsecT String () Identity (Maybe Int)
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m (Maybe a)
P.optionMaybe Parser Int
pSignedInt
Maybe (Maybe Int)
step <- ParsecT String () Identity (Maybe Int)
-> ParsecT String () Identity (Maybe (Maybe Int))
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m (Maybe a)
P.optionMaybe (Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
':' ParsecT String () Identity Char
-> ParsecT String () Identity (Maybe Int)
-> ParsecT String () Identity (Maybe Int)
forall a b.
ParsecT String () Identity a
-> ParsecT String () Identity b -> ParsecT String () Identity b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser Int -> ParsecT String () Identity (Maybe Int)
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m (Maybe a)
P.optionMaybe Parser Int
pSignedInt)
JSPSelector -> Parser JSPSelector
forall a. a -> ParsecT String () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (JSPSelector -> Parser JSPSelector)
-> JSPSelector -> Parser JSPSelector
forall a b. (a -> b) -> a -> b
$ JSPSliceSelector -> JSPSelector
JSPSliceSel (Maybe Int
start, Maybe Int
end, case Maybe (Maybe Int)
step of
Just (Just Int
n) -> Int
n
Maybe (Maybe Int)
_ -> Int
1)
pJSPWildSel :: P.Parser JSPSelector
pJSPWildSel :: Parser JSPSelector
pJSPWildSel = JSPWildcardT -> JSPSelector
JSPWildSel (JSPWildcardT -> JSPSelector)
-> ParsecT String () Identity JSPWildcardT -> Parser JSPSelector
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
'*' ParsecT String () Identity Char
-> JSPWildcardT -> ParsecT String () Identity JSPWildcardT
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> JSPWildcardT
JSPWildcard)
pJSPSegment :: P.Parser JSPSegment
pJSPSegment :: ParsecT String () Identity JSPSegment
pJSPSegment = ParsecT String () Identity JSPSegment
pJSPChildSegment ParsecT String () Identity JSPSegment
-> ParsecT String () Identity JSPSegment
-> ParsecT String () Identity JSPSegment
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String () Identity JSPSegment
pJSPDescSegment
pJSPChildSegment :: P.Parser JSPSegment
pJSPChildSegment :: ParsecT String () Identity JSPSegment
pJSPChildSegment =
JSPChildSegment -> JSPSegment
JSPChildSeg (JSPChildSegment -> JSPSegment)
-> ParsecT String () Identity JSPChildSegment
-> ParsecT String () Identity JSPSegment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ParsecT String () Identity JSPChildSegment
-> ParsecT String () Identity JSPChildSegment
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try ParsecT String () Identity JSPChildSegment
pJSPChildBracketed
ParsecT String () Identity JSPChildSegment
-> ParsecT String () Identity JSPChildSegment
-> ParsecT String () Identity JSPChildSegment
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String () Identity JSPChildSegment
-> ParsecT String () Identity JSPChildSegment
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try ParsecT String () Identity JSPChildSegment
pJSPChildMemberNameSH
ParsecT String () Identity JSPChildSegment
-> ParsecT String () Identity JSPChildSegment
-> ParsecT String () Identity JSPChildSegment
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String () Identity JSPChildSegment
-> ParsecT String () Identity JSPChildSegment
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try ParsecT String () Identity JSPChildSegment
pJSPChildWildSeg)
pJSPChildBracketed :: P.Parser JSPChildSegment
pJSPChildBracketed :: ParsecT String () Identity JSPChildSegment
pJSPChildBracketed = do
Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
'['
JSPSelector
sel <- Parser JSPSelector
pJSPSelector
[JSPSelector]
optionalSels <- Parser JSPSelector -> ParsecT String () Identity [JSPSelector]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
P.many Parser JSPSelector
pCommaSepSelectors
Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
']'
JSPChildSegment -> ParsecT String () Identity JSPChildSegment
forall a. a -> ParsecT String () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (JSPChildSegment -> ParsecT String () Identity JSPChildSegment)
-> JSPChildSegment -> ParsecT String () Identity JSPChildSegment
forall a b. (a -> b) -> a -> b
$ [JSPSelector] -> JSPChildSegment
JSPChildBracketed (JSPSelector
selJSPSelector -> [JSPSelector] -> [JSPSelector]
forall a. a -> [a] -> [a]
:[JSPSelector]
optionalSels)
where
pCommaSepSelectors :: P.Parser JSPSelector
pCommaSepSelectors :: Parser JSPSelector
pCommaSepSelectors = Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
',' ParsecT String () Identity Char
-> ParsecT String () Identity () -> ParsecT String () Identity ()
forall a b.
ParsecT String () Identity a
-> ParsecT String () Identity b -> ParsecT String () Identity b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ParsecT String () Identity ()
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
P.spaces ParsecT String () Identity ()
-> Parser JSPSelector -> Parser JSPSelector
forall a b.
ParsecT String () Identity a
-> ParsecT String () Identity b -> ParsecT String () Identity b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser JSPSelector
pJSPSelector
pJSPChildMemberNameSH :: P.Parser JSPChildSegment
pJSPChildMemberNameSH :: ParsecT String () Identity JSPChildSegment
pJSPChildMemberNameSH = do
Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
'.'
ParsecT String () Identity Char -> ParsecT String () Identity Char
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m a
P.lookAhead (ParsecT String () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
P.letter ParsecT String () Identity Char
-> ParsecT String () Identity Char
-> ParsecT String () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> String -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
P.oneOf String
"-" ParsecT String () Identity Char
-> ParsecT String () Identity Char
-> ParsecT String () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String () Identity Char
pUnicodeChar)
JSPNameSelector
val <- String -> JSPNameSelector
T.pack (String -> JSPNameSelector)
-> ParsecT String () Identity String
-> ParsecT String () Identity JSPNameSelector
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String () Identity Char
-> ParsecT String () Identity String
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
P.many1 (ParsecT String () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
P.alphaNum ParsecT String () Identity Char
-> ParsecT String () Identity Char
-> ParsecT String () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> (String -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
P.oneOf String
"-" ParsecT String () Identity Char
-> ParsecT String () Identity Char
-> ParsecT String () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String () Identity Char
pUnicodeChar))
JSPChildSegment -> ParsecT String () Identity JSPChildSegment
forall a. a -> ParsecT String () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (JSPNameSelector -> JSPChildSegment
JSPChildMemberNameSH JSPNameSelector
val)
pJSPChildWildSeg :: P.Parser JSPChildSegment
pJSPChildWildSeg :: ParsecT String () Identity JSPChildSegment
pJSPChildWildSeg = JSPWildcardT -> JSPChildSegment
JSPChildWildSeg (JSPWildcardT -> JSPChildSegment)
-> ParsecT String () Identity JSPWildcardT
-> ParsecT String () Identity JSPChildSegment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> ParsecT String () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
P.string String
".*" ParsecT String () Identity String
-> JSPWildcardT -> ParsecT String () Identity JSPWildcardT
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> JSPWildcardT
JSPWildcard)
pJSPDescSegment :: P.Parser JSPSegment
pJSPDescSegment :: ParsecT String () Identity JSPSegment
pJSPDescSegment =
JSPDescSegment -> JSPSegment
JSPDescSeg (JSPDescSegment -> JSPSegment)
-> ParsecT String () Identity JSPDescSegment
-> ParsecT String () Identity JSPSegment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ParsecT String () Identity JSPDescSegment
-> ParsecT String () Identity JSPDescSegment
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try ParsecT String () Identity JSPDescSegment
pJSPDescBracketed
ParsecT String () Identity JSPDescSegment
-> ParsecT String () Identity JSPDescSegment
-> ParsecT String () Identity JSPDescSegment
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String () Identity JSPDescSegment
-> ParsecT String () Identity JSPDescSegment
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try ParsecT String () Identity JSPDescSegment
pJSPDescMemberNameSH
ParsecT String () Identity JSPDescSegment
-> ParsecT String () Identity JSPDescSegment
-> ParsecT String () Identity JSPDescSegment
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String () Identity JSPDescSegment
-> ParsecT String () Identity JSPDescSegment
forall tok st a. GenParser tok st a -> GenParser tok st a
P.try ParsecT String () Identity JSPDescSegment
pJSPDescWildSeg)
pJSPDescBracketed :: P.Parser JSPDescSegment
pJSPDescBracketed :: ParsecT String () Identity JSPDescSegment
pJSPDescBracketed = do
String -> ParsecT String () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
P.string String
".."
Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
'['
JSPSelector
sel <- Parser JSPSelector
pJSPSelector
[JSPSelector]
optionalSels <- Parser JSPSelector -> ParsecT String () Identity [JSPSelector]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
P.many Parser JSPSelector
pCommaSepSelectors
Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
']'
JSPDescSegment -> ParsecT String () Identity JSPDescSegment
forall a. a -> ParsecT String () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (JSPDescSegment -> ParsecT String () Identity JSPDescSegment)
-> JSPDescSegment -> ParsecT String () Identity JSPDescSegment
forall a b. (a -> b) -> a -> b
$ [JSPSelector] -> JSPDescSegment
JSPDescBracketed (JSPSelector
selJSPSelector -> [JSPSelector] -> [JSPSelector]
forall a. a -> [a] -> [a]
:[JSPSelector]
optionalSels)
where
pCommaSepSelectors :: P.Parser JSPSelector
pCommaSepSelectors :: Parser JSPSelector
pCommaSepSelectors = Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
',' ParsecT String () Identity Char
-> ParsecT String () Identity () -> ParsecT String () Identity ()
forall a b.
ParsecT String () Identity a
-> ParsecT String () Identity b -> ParsecT String () Identity b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ParsecT String () Identity ()
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
P.spaces ParsecT String () Identity ()
-> Parser JSPSelector -> Parser JSPSelector
forall a b.
ParsecT String () Identity a
-> ParsecT String () Identity b -> ParsecT String () Identity b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser JSPSelector
pJSPSelector
pJSPDescMemberNameSH :: P.Parser JSPDescSegment
pJSPDescMemberNameSH :: ParsecT String () Identity JSPDescSegment
pJSPDescMemberNameSH = do
String -> ParsecT String () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
P.string String
".."
ParsecT String () Identity Char -> ParsecT String () Identity Char
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m a
P.lookAhead (ParsecT String () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
P.letter ParsecT String () Identity Char
-> ParsecT String () Identity Char
-> ParsecT String () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> String -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
P.oneOf String
"-" ParsecT String () Identity Char
-> ParsecT String () Identity Char
-> ParsecT String () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String () Identity Char
pUnicodeChar)
JSPNameSelector
val <- String -> JSPNameSelector
T.pack (String -> JSPNameSelector)
-> ParsecT String () Identity String
-> ParsecT String () Identity JSPNameSelector
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String () Identity Char
-> ParsecT String () Identity String
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
P.many1 (ParsecT String () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
P.alphaNum ParsecT String () Identity Char
-> ParsecT String () Identity Char
-> ParsecT String () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> String -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
P.oneOf String
"-" ParsecT String () Identity Char
-> ParsecT String () Identity Char
-> ParsecT String () Identity Char
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String () Identity Char
pUnicodeChar)
JSPDescSegment -> ParsecT String () Identity JSPDescSegment
forall a. a -> ParsecT String () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (JSPNameSelector -> JSPDescSegment
JSPDescMemberNameSH JSPNameSelector
val)
pJSPDescWildSeg :: P.Parser JSPDescSegment
pJSPDescWildSeg :: ParsecT String () Identity JSPDescSegment
pJSPDescWildSeg = JSPWildcardT -> JSPDescSegment
JSPDescWildSeg (JSPWildcardT -> JSPDescSegment)
-> ParsecT String () Identity JSPWildcardT
-> ParsecT String () Identity JSPDescSegment
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (String -> ParsecT String () Identity String
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
P.string String
"..*" ParsecT String () Identity String
-> JSPWildcardT -> ParsecT String () Identity JSPWildcardT
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> JSPWildcardT
JSPWildcard)
pSignedInt :: P.Parser Int
pSignedInt :: Parser Int
pSignedInt = do
Maybe Char
sign <- ParsecT String () Identity Char
-> ParsecT String () Identity (Maybe Char)
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m (Maybe a)
P.optionMaybe (ParsecT String () Identity Char
-> ParsecT String () Identity (Maybe Char))
-> ParsecT String () Identity Char
-> ParsecT String () Identity (Maybe Char)
forall a b. (a -> b) -> a -> b
$ Char -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
P.char Char
'-'
Int
num <- String -> Int
forall a. Read a => String -> a
read (String -> Int) -> ParsecT String () Identity String -> Parser Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String () Identity Char
-> ParsecT String () Identity String
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
P.many1 ParsecT String () Identity Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
P.digit
Int -> Parser Int
forall a. a -> ParsecT String () Identity a
forall (m :: * -> *) a. Monad m => a -> m a
return (Int -> Parser Int) -> Int -> Parser Int
forall a b. (a -> b) -> a -> b
$
case Maybe Char
sign of
Just Char
_ -> -Int
num
Maybe Char
Nothing -> Int
num
pUnicodeChar :: P.Parser Char
pUnicodeChar :: ParsecT String () Identity Char
pUnicodeChar = (Char -> Bool) -> ParsecT String () Identity Char
forall s (m :: * -> *) u.
Stream s m Char =>
(Char -> Bool) -> ParsecT s u m Char
P.satisfy Char -> Bool
inRange
where
inRange :: Char -> Bool
inRange Char
c = let code :: Int
code = Char -> Int
ord Char
c in
(Int
code Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
0x80 Bool -> Bool -> Bool
&& Int
code Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
0xD7FF) Bool -> Bool -> Bool
||
(Int
code Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
0xE000 Bool -> Bool -> Bool
&& Int
code Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
0x10FFFF)