{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PostfixOperators #-}
{-# LANGUAGE Safe #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
module Data.YAML.Token
( tokenize
, Token(..)
, Code(..)
, Encoding(..)
) where
import qualified Data.ByteString.Lazy.Char8 as BLC
import qualified Data.DList as D
import Prelude hiding ((*), (+), (-), (/), (^))
import qualified Prelude
import Data.YAML.Token.Encoding (Encoding (..), decode)
import Util hiding (empty)
import qualified Util
infixl 6 .+
(.+) :: Int -> Int -> Int
.+ :: Int -> Int -> Int
(.+) = forall a. Num a => a -> a -> a
(Prelude.+)
infixl 6 .-
(.-) :: Int -> Int -> Int
.- :: Int -> Int -> Int
(.-) = forall a. Num a => a -> a -> a
(Prelude.-)
infixl 8 ^.
(^.) :: record -> (record -> value) -> value
record
record ^. :: forall record value. record -> (record -> value) -> value
^. record -> value
field = record -> value
field record
record
data Code = Bom
| Text
| Meta
| Break
| LineFeed
| LineFold
| Indicator
| White
| Indent
| DirectivesEnd
| DocumentEnd
| BeginEscape
| EndEscape
|
|
| BeginDirective
| EndDirective
| BeginTag
| EndTag
| BeginHandle
| EndHandle
| BeginAnchor
| EndAnchor
| BeginProperties
| EndProperties
| BeginAlias
| EndAlias
| BeginScalar
| EndScalar
| BeginSequence
| EndSequence
| BeginMapping
| EndMapping
| BeginPair
| EndPair
| BeginNode
| EndNode
| BeginDocument
| EndDocument
| BeginStream
| EndStream
| Error
| Unparsed
| Detected
deriving (Int -> Code -> ShowS
[Code] -> ShowS
Code -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Code] -> ShowS
$cshowList :: [Code] -> ShowS
show :: Code -> String
$cshow :: Code -> String
showsPrec :: Int -> Code -> ShowS
$cshowsPrec :: Int -> Code -> ShowS
Show,Code -> Code -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Code -> Code -> Bool
$c/= :: Code -> Code -> Bool
== :: Code -> Code -> Bool
$c== :: Code -> Code -> Bool
Eq,forall x. Rep Code x -> Code
forall x. Code -> Rep Code x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Code x -> Code
$cfrom :: forall x. Code -> Rep Code x
Generic)
instance NFData Code where
rnf :: Code -> ()
rnf Code
x = seq :: forall a b. a -> b -> b
seq Code
x ()
data Token = Token {
Token -> Int
tByteOffset :: !Int,
Token -> Int
tCharOffset :: !Int,
Token -> Int
tLine :: !Int,
Token -> Int
tLineChar :: !Int,
Token -> Code
tCode :: !Code,
Token -> String
tText :: !String
} deriving (Int -> Token -> ShowS
[Token] -> ShowS
Token -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Token] -> ShowS
$cshowList :: [Token] -> ShowS
show :: Token -> String
$cshow :: Token -> String
showsPrec :: Int -> Token -> ShowS
$cshowsPrec :: Int -> Token -> ShowS
Show,forall x. Rep Token x -> Token
forall x. Token -> Rep Token x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Token x -> Token
$cfrom :: forall x. Token -> Rep Token x
Generic)
instance NFData Token where
rnf :: Token -> ()
rnf Token { tText :: Token -> String
tText = String
txt } = forall a. NFData a => a -> ()
rnf String
txt
newtype Parser result = Parser (State -> Reply result)
applyParser :: Parser result -> State -> Reply result
applyParser :: forall result. Parser result -> State -> Reply result
applyParser (Parser State -> Reply result
p) State
s = State -> Reply result
p State
s
data Result result = Failed String
| Result result
| More (Parser result)
data Reply result = Reply {
forall result. Reply result -> Result result
rResult :: !(Result result),
forall result. Reply result -> DList Token
rTokens :: !(D.DList Token),
forall result. Reply result -> Maybe Decision
rCommit :: !(Maybe Decision),
forall result. Reply result -> State
rState :: !State
}
type Pattern = Parser ()
data State = State {
State -> Encoding
sEncoding :: !Encoding,
State -> Decision
sDecision :: !Decision,
State -> Int
sLimit :: !Int,
State -> Maybe Pattern
sForbidden :: !(Maybe Pattern),
State -> Bool
sIsPeek :: !Bool,
State -> Bool
sIsSol :: !Bool,
State -> String
sChars :: ![Char],
State -> Int
sCharsByteOffset :: !Int,
State -> Int
sCharsCharOffset :: !Int,
State -> Int
sCharsLine :: !Int,
State -> Int
sCharsLineChar :: !Int,
State -> Int
sByteOffset :: !Int,
State -> Int
sCharOffset :: !Int,
State -> Int
sLine :: !Int,
State -> Int
sLineChar :: !Int,
State -> Code
sCode :: !Code,
State -> Char
sLast :: !Char,
State -> [(Int, Char)]
sInput :: ![(Int, Char)]
}
initialState :: BLC.ByteString -> State
initialState :: ByteString -> State
initialState ByteString
input
= State { sEncoding :: Encoding
sEncoding = Encoding
encoding
, sDecision :: Decision
sDecision = Decision
DeNone
, sLimit :: Int
sLimit = -Int
1
, sForbidden :: Maybe Pattern
sForbidden = forall a. Maybe a
Nothing
, sIsPeek :: Bool
sIsPeek = Bool
False
, sIsSol :: Bool
sIsSol = Bool
True
, sChars :: String
sChars = []
, sCharsByteOffset :: Int
sCharsByteOffset = -Int
1
, sCharsCharOffset :: Int
sCharsCharOffset = -Int
1
, sCharsLine :: Int
sCharsLine = -Int
1
, sCharsLineChar :: Int
sCharsLineChar = -Int
1
, sByteOffset :: Int
sByteOffset = Int
0
, sCharOffset :: Int
sCharOffset = Int
0
, sLine :: Int
sLine = Int
1
, sLineChar :: Int
sLineChar = Int
0
, sCode :: Code
sCode = Code
Unparsed
, sLast :: Char
sLast = Char
' '
, sInput :: [(Int, Char)]
sInput = [(Int, Char)]
decoded
}
where
(Encoding
encoding, [(Int, Char)]
decoded) = ByteString -> (Encoding, [(Int, Char)])
decode ByteString
input
setLimit :: Int -> State -> State
setLimit :: Int -> State -> State
setLimit Int
limit State
state = State
state { sLimit :: Int
sLimit = Int
limit }
{-# INLINE setLimit #-}
setForbidden :: Maybe Pattern -> State -> State
setForbidden :: Maybe Pattern -> State -> State
setForbidden Maybe Pattern
forbidden State
state = State
state { sForbidden :: Maybe Pattern
sForbidden = Maybe Pattern
forbidden }
{-# INLINE setForbidden #-}
setCode :: Code -> State -> State
setCode :: Code -> State -> State
setCode Code
code State
state = State
state { sCode :: Code
sCode = Code
code }
{-# INLINE setCode #-}
class Match parameter result | parameter -> result where
match :: parameter -> Parser result
instance Match (Parser result) result where
match :: Parser result -> Parser result
match = forall a. a -> a
id
instance Match Char () where
match :: Char -> Pattern
match Char
code = (Char -> Bool) -> Pattern
nextIf (forall a. Eq a => a -> a -> Bool
== Char
code)
instance Match (Char, Char) () where
match :: (Char, Char) -> Pattern
match (Char
low, Char
high) = (Char -> Bool) -> Pattern
nextIf forall a b. (a -> b) -> a -> b
$ \ Char
code -> Char
low forall a. Ord a => a -> a -> Bool
<= Char
code Bool -> Bool -> Bool
&& Char
code forall a. Ord a => a -> a -> Bool
<= Char
high
instance Match String () where
match :: String -> Pattern
match = forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
(&) Pattern
empty
returnReply :: State -> result -> Reply result
returnReply :: forall result. State -> result -> Reply result
returnReply State
state result
result = Reply { rResult :: Result result
rResult = forall result. result -> Result result
Result result
result,
rTokens :: DList Token
rTokens = forall a. DList a
D.empty,
rCommit :: Maybe Decision
rCommit = forall a. Maybe a
Nothing,
rState :: State
rState = State
state }
tokenReply :: State -> Token -> Reply ()
tokenReply :: State -> Token -> Reply ()
tokenReply State
state Token
token = Reply { rResult :: Result ()
rResult = forall result. result -> Result result
Result (),
rTokens :: DList Token
rTokens = forall a. a -> DList a
D.singleton Token
token,
rCommit :: Maybe Decision
rCommit = forall a. Maybe a
Nothing,
rState :: State
rState = State
state { sCharsByteOffset :: Int
sCharsByteOffset = -Int
1,
sCharsCharOffset :: Int
sCharsCharOffset = -Int
1,
sCharsLine :: Int
sCharsLine = -Int
1,
sCharsLineChar :: Int
sCharsLineChar = -Int
1,
sChars :: String
sChars = [] } }
failReply :: State -> String -> Reply result
failReply :: forall result. State -> String -> Reply result
failReply State
state String
message = Reply { rResult :: Result result
rResult = forall result. String -> Result result
Failed String
message,
rTokens :: DList Token
rTokens = forall a. DList a
D.empty,
rCommit :: Maybe Decision
rCommit = forall a. Maybe a
Nothing,
rState :: State
rState = State
state }
unexpectedReply :: State -> Reply result
unexpectedReply :: forall result. State -> Reply result
unexpectedReply State
state = case State
stateforall record value. record -> (record -> value) -> value
^.State -> [(Int, Char)]
sInput of
((Int
_, Char
char):[(Int, Char)]
_) -> forall result. State -> String -> Reply result
failReply State
state forall a b. (a -> b) -> a -> b
$ String
"Unexpected '" forall a. [a] -> [a] -> [a]
++ [Char
char] forall a. [a] -> [a] -> [a]
++ String
"'"
[] -> forall result. State -> String -> Reply result
failReply State
state String
"Unexpected end of input"
instance Functor Parser where
fmap :: forall a b. (a -> b) -> Parser a -> Parser b
fmap a -> b
g Parser a
f = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \State
state ->
let reply :: Reply a
reply = forall result. Parser result -> State -> Reply result
applyParser Parser a
f State
state
in case Reply a
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
message -> Reply a
reply { rResult :: Result b
rResult = forall result. String -> Result result
Failed String
message }
Result a
x -> Reply a
reply { rResult :: Result b
rResult = forall result. result -> Result result
Result (a -> b
g a
x) }
More Parser a
parser -> Reply a
reply { rResult :: Result b
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
g Parser a
parser }
instance Applicative Parser where
pure :: forall a. a -> Parser a
pure a
result = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \State
state -> forall result. State -> result -> Reply result
returnReply State
state a
result
<*> :: forall a b. Parser (a -> b) -> Parser a -> Parser b
(<*>) = forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap
Parser a
left *> :: forall a b. Parser a -> Parser b -> Parser b
*> Parser b
right = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \State
state ->
let reply :: Reply a
reply = forall result. Parser result -> State -> Reply result
applyParser Parser a
left State
state
in case Reply a
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
message -> Reply a
reply { rResult :: Result b
rResult = forall result. String -> Result result
Failed String
message }
Result a
_ -> Reply a
reply { rResult :: Result b
rResult = forall result. Parser result -> Result result
More Parser b
right }
More Parser a
parser -> Reply a
reply { rResult :: Result b
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ Parser a
parser forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser b
right }
instance Monad Parser where
return :: forall a. a -> Parser a
return = forall (f :: * -> *) a. Applicative f => a -> f a
pure
Parser a
left >>= :: forall a b. Parser a -> (a -> Parser b) -> Parser b
>>= a -> Parser b
right = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \State
state ->
let reply :: Reply a
reply = forall result. Parser result -> State -> Reply result
applyParser Parser a
left State
state
in case Reply a
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
message -> Reply a
reply { rResult :: Result b
rResult = forall result. String -> Result result
Failed String
message }
Result a
value -> Reply a
reply { rResult :: Result b
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ a -> Parser b
right a
value }
More Parser a
parser -> Reply a
reply { rResult :: Result b
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ Parser a
parser forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= a -> Parser b
right }
>> :: forall a b. Parser a -> Parser b -> Parser b
(>>) = forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
(*>)
pfail :: String -> Parser a
pfail :: forall a. String -> Parser a
pfail String
message = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \State
state -> forall result. State -> String -> Reply result
failReply State
state String
message
infix 3 ^
infix 3 %
infix 3 <%
infix 3 !
infix 3 ?!
infixl 3 -
infixr 2 &
infixr 1 /
infix 0 ?
infix 0 *
infix 0 +
infix 0 <?
infix 0 >?
infix 0 >!
(%) :: (Match match result) => match -> Int -> Pattern
match
parser % :: forall match result. Match match result => match -> Int -> Pattern
% Int
n
| Int
n forall a. Ord a => a -> a -> Bool
<= Int
0 = Pattern
empty
| Bool
otherwise = Parser result
parser' forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Parser result
parser' forall match result. Match match result => match -> Int -> Pattern
% Int
n Int -> Int -> Int
.- Int
1)
where
parser' :: Parser result
parser' = forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser
(<%) :: (Match match result) => match -> Int -> Pattern
match
parser <% :: forall match result. Match match result => match -> Int -> Pattern
<% Int
n = case Int
n forall a. Ord a => a -> a -> Ordering
`compare` Int
1 of
Ordering
LT -> forall a. String -> Parser a
pfail String
"Fewer than 0 repetitions"
Ordering
EQ -> forall match result.
Match match result =>
match -> Maybe String -> Pattern
reject match
parser forall a. Maybe a
Nothing
Ordering
GT -> Decision
DeLess forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( ((match
parser forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeLess) forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (match
parser forall match result. Match match result => match -> Int -> Pattern
<% Int
n Int -> Int -> Int
.- Int
1)) forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Pattern
empty )
data Decision = DeNone
| DeStar
| DeLess
| DeDirective
| DeDoc
| DeEscape
| DeEscaped
| DeFold
| DeKey
|
| DeMore
| DeNode
| DePair
deriving (Int -> Decision -> ShowS
[Decision] -> ShowS
Decision -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Decision] -> ShowS
$cshowList :: [Decision] -> ShowS
show :: Decision -> String
$cshow :: Decision -> String
showsPrec :: Int -> Decision -> ShowS
$cshowsPrec :: Int -> Decision -> ShowS
Show,Decision -> Decision -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Decision -> Decision -> Bool
$c/= :: Decision -> Decision -> Bool
== :: Decision -> Decision -> Bool
$c== :: Decision -> Decision -> Bool
Eq)
(^) :: (Match match result) => Decision -> match -> Parser result
Decision
decision ^ :: forall match result.
Match match result =>
Decision -> match -> Parser result
^ match
parser = forall result. Decision -> Parser result -> Parser result
choice Decision
decision forall a b. (a -> b) -> a -> b
$ forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser
(!) :: (Match match result) => match -> Decision -> Pattern
match
parser ! :: forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
decision = forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Decision -> Pattern
commit Decision
decision
(?!) :: (Match match result) => match -> Decision -> Pattern
match
parser ?! :: forall match result.
Match match result =>
match -> Decision -> Pattern
?! Decision
decision = forall parameter result.
Match parameter result =>
parameter -> Parser result
peek match
parser forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Decision -> Pattern
commit Decision
decision
(<?) :: (Match match result) => match -> Parser result
<? :: forall parameter result.
Match parameter result =>
parameter -> Parser result
(<?) match
lookbehind = forall parameter result.
Match parameter result =>
parameter -> Parser result
prev match
lookbehind
(>?) :: (Match match result) => match -> Parser result
>? :: forall parameter result.
Match parameter result =>
parameter -> Parser result
(>?) match
lookahead = forall parameter result.
Match parameter result =>
parameter -> Parser result
peek match
lookahead
(>!) :: (Match match result) => match -> Pattern
>! :: forall match result. Match match result => match -> Pattern
(>!) match
lookahead = forall match result.
Match match result =>
match -> Maybe String -> Pattern
reject match
lookahead forall a. Maybe a
Nothing
(-) :: (Match match1 result1, Match match2 result2) => match1 -> match2 -> Parser result1
match1
parser - :: forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- match2
rejected = forall match result.
Match match result =>
match -> Maybe String -> Pattern
reject match2
rejected forall a. Maybe a
Nothing forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> forall parameter result.
Match parameter result =>
parameter -> Parser result
match match1
parser
(&) :: (Match match1 result1, Match match2 result2) => match1 -> match2 -> Parser result2
match1
before & :: forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& match2
after = forall parameter result.
Match parameter result =>
parameter -> Parser result
match match1
before forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> forall parameter result.
Match parameter result =>
parameter -> Parser result
match match2
after
(/) :: (Match match1 result, Match match2 result) => match1 -> match2 -> Parser result
match1
first / :: forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ match2
second = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ forall result. Parser result -> State -> Reply result
applyParser (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match1
first forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> forall parameter result.
Match parameter result =>
parameter -> Parser result
match match2
second)
(?) :: (Match match result) => match -> Pattern
? :: forall match result. Match match result => match -> Pattern
(?) match
optional = (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
optional forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Pattern
empty) forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Pattern
empty
(*) :: (Match match result) => match -> Pattern
* :: forall match result. Match match result => match -> Pattern
(*) match
parser = Decision
DeStar forall match result.
Match match result =>
Decision -> match -> Parser result
^ Pattern
zomParser
where
zomParser :: Pattern
zomParser = ((match
parser forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeStar) forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> forall parameter result.
Match parameter result =>
parameter -> Parser result
match Pattern
zomParser) forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Pattern
empty
(+) :: (Match match result) => match -> Pattern
+ :: forall match result. Match match result => match -> Pattern
(+) match
parser = forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (match
parser *)
instance Alternative Parser where
empty :: forall a. Parser a
empty = forall a. String -> Parser a
pfail String
"empty"
Parser a
left <|> :: forall a. Parser a -> Parser a -> Parser a
<|> Parser a
right = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \State
state -> forall {result}.
State
-> DList Token
-> Parser result
-> Parser result
-> State
-> Reply result
decideParser State
state forall a. DList a
D.empty Parser a
left Parser a
right State
state
where
decideParser :: State
-> DList Token
-> Parser result
-> Parser result
-> State
-> Reply result
decideParser State
point DList Token
tokens Parser result
left Parser result
right State
state =
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser Parser result
left State
state
tokens' :: DList Token
tokens' = forall a. DList a -> DList a -> DList a
D.append DList Token
tokens forall a b. (a -> b) -> a -> b
$ Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> DList Token
rTokens
in case (Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult, Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Maybe Decision
rCommit) of
(Failed String
_, Maybe Decision
_) -> Reply { rState :: State
rState = State
point,
rTokens :: DList Token
rTokens = forall a. DList a
D.empty,
rResult :: Result result
rResult = forall result. Parser result -> Result result
More Parser result
right,
rCommit :: Maybe Decision
rCommit = forall a. Maybe a
Nothing }
(Result result
_, Maybe Decision
_) -> Reply result
reply { rTokens :: DList Token
rTokens = DList Token
tokens' }
(More Parser result
_, Just Decision
_) -> Reply result
reply { rTokens :: DList Token
rTokens = DList Token
tokens' }
(More Parser result
left', Maybe Decision
Nothing) -> State
-> DList Token
-> Parser result
-> Parser result
-> State
-> Reply result
decideParser State
point DList Token
tokens' Parser result
left' Parser result
right (Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState)
choice :: Decision -> Parser result -> Parser result
choice :: forall result. Decision -> Parser result -> Parser result
choice Decision
decision Parser result
parser = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
forall result. Parser result -> State -> Reply result
applyParser (forall {result}.
Decision -> Decision -> Parser result -> Parser result
choiceParser (State
stateforall record value. record -> (record -> value) -> value
^.State -> Decision
sDecision) Decision
decision Parser result
parser) State
state { sDecision :: Decision
sDecision = Decision
decision }
where choiceParser :: Decision -> Decision -> Parser result -> Parser result
choiceParser Decision
parentDecision Decision
makingDecision Parser result
parser = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser Parser result
parser State
state
commit' :: Maybe Decision
commit' = case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Maybe Decision
rCommit of
Maybe Decision
Nothing -> forall a. Maybe a
Nothing
Just Decision
decision | Decision
decision forall a. Eq a => a -> a -> Bool
== Decision
makingDecision -> forall a. Maybe a
Nothing
| Bool
otherwise -> Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Maybe Decision
rCommit
reply' :: Reply result
reply' = case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
More Parser result
parser' -> Reply result
reply { rCommit :: Maybe Decision
rCommit = Maybe Decision
commit',
rResult :: Result result
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ Decision -> Decision -> Parser result -> Parser result
choiceParser Decision
parentDecision Decision
makingDecision Parser result
parser' }
Result result
_ -> Reply result
reply { rCommit :: Maybe Decision
rCommit = Maybe Decision
commit',
rState :: State
rState = (Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState) { sDecision :: Decision
sDecision = Decision
parentDecision } }
in Reply result
reply'
recovery :: (Match match1 result) => match1 -> Parser result -> Parser result
recovery :: forall match1 result.
Match match1 result =>
match1 -> Parser result -> Parser result
recovery match1
pattern Parser result
recover =
forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match1
pattern) State
state
in if State
stateforall record value. record -> (record -> value) -> value
^.State -> Bool
sIsPeek
then Reply result
reply
else case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Result result
_ -> Reply result
reply
More Parser result
more -> Reply result
reply { rResult :: Result result
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ Parser result
more forall match1 result.
Match match1 result =>
match1 -> Parser result -> Parser result
`recovery` Parser result
recover }
Failed String
message -> Reply result
reply { rResult :: Result result
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ Code -> String -> Pattern
fake Code
Error String
message forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Pattern
unparsed forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser result
recover }
where unparsed :: Pattern
unparsed = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state -> forall result. Parser result -> State -> Reply result
applyParser (forall parameter result.
Match parameter result =>
parameter -> Parser result
match Pattern
finishToken) forall a b. (a -> b) -> a -> b
$ State
state { sCode :: Code
sCode = Code
Unparsed }
prev :: (Match match result) => match -> Parser result
prev :: forall parameter result.
Match parameter result =>
parameter -> Parser result
prev match
parser = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
forall {result}. State -> Parser result -> State -> Reply result
prevParser State
state (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser) State
state { sIsPeek :: Bool
sIsPeek = Bool
True, sInput :: [(Int, Char)]
sInput = (-Int
1, State
stateforall record value. record -> (record -> value) -> value
^.State -> Char
sLast) forall a. a -> [a] -> [a]
: State
stateforall record value. record -> (record -> value) -> value
^.State -> [(Int, Char)]
sInput }
where prevParser :: State -> Parser result -> State -> Reply result
prevParser State
point Parser result
parser State
state =
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser Parser result
parser State
state
in case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
message -> forall result. State -> String -> Reply result
failReply State
point String
message
Result result
value -> forall result. State -> result -> Reply result
returnReply State
point result
value
More Parser result
parser' -> State -> Parser result -> State -> Reply result
prevParser State
point Parser result
parser' forall a b. (a -> b) -> a -> b
$ Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState
peek :: (Match match result) => match -> Parser result
peek :: forall parameter result.
Match parameter result =>
parameter -> Parser result
peek match
parser = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
forall {result}. State -> Parser result -> State -> Reply result
peekParser State
state (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser) State
state { sIsPeek :: Bool
sIsPeek = Bool
True }
where peekParser :: State -> Parser result -> State -> Reply result
peekParser State
point Parser result
parser State
state =
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser Parser result
parser State
state
in case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
message -> forall result. State -> String -> Reply result
failReply State
point String
message
Result result
value -> forall result. State -> result -> Reply result
returnReply State
point result
value
More Parser result
parser' -> State -> Parser result -> State -> Reply result
peekParser State
point Parser result
parser' forall a b. (a -> b) -> a -> b
$ Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState
reject :: (Match match result) => match -> Maybe String -> Pattern
reject :: forall match result.
Match match result =>
match -> Maybe String -> Pattern
reject match
parser Maybe String
name = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
forall {result}.
State -> Maybe String -> Parser result -> State -> Reply ()
rejectParser State
state Maybe String
name (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser) State
state { sIsPeek :: Bool
sIsPeek = Bool
True }
where
rejectParser :: State -> Maybe String -> Parser result -> State -> Reply ()
rejectParser State
point Maybe String
name Parser result
parser State
state =
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser Parser result
parser State
state
in case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
_message -> forall result. State -> result -> Reply result
returnReply State
point ()
Result result
_value -> case Maybe String
name of
Maybe String
Nothing -> forall result. State -> Reply result
unexpectedReply State
point
Just String
text -> forall result. State -> String -> Reply result
failReply State
point forall a b. (a -> b) -> a -> b
$ String
"Unexpected " forall a. [a] -> [a] -> [a]
++ String
text
More Parser result
parser' -> State -> Maybe String -> Parser result -> State -> Reply ()
rejectParser State
point Maybe String
name Parser result
parser' forall a b. (a -> b) -> a -> b
$ Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState
upto :: Pattern -> Pattern
upto :: Pattern -> Pattern
upto Pattern
parser = ( ( Pattern
parser >!) forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Char -> Bool) -> Pattern
nextIf (forall a b. a -> b -> a
const Bool
True) *)
nonEmpty :: (Match match result) => match -> Parser result
nonEmpty :: forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty match
parser = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
forall result. Parser result -> State -> Reply result
applyParser (forall {result}. Int -> Parser result -> Parser result
nonEmptyParser (State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharOffset) (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser)) State
state
where
nonEmptyParser :: Int -> Parser result -> Parser result
nonEmptyParser Int
offset Parser result
parser = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser Parser result
parser State
state
state' :: State
state' = Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState
in case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
_message -> Reply result
reply
Result result
_value -> if State
state'forall record value. record -> (record -> value) -> value
^.State -> Int
sCharOffset forall a. Ord a => a -> a -> Bool
> Int
offset
then Reply result
reply
else forall result. State -> String -> Reply result
failReply State
state' String
"Matched empty pattern"
More Parser result
parser' -> Reply result
reply { rResult :: Result result
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ Int -> Parser result -> Parser result
nonEmptyParser Int
offset Parser result
parser' }
empty :: Pattern
empty :: Pattern
empty = forall (m :: * -> *) a. Monad m => a -> m a
return ()
eof :: Pattern
eof :: Pattern
eof = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
if forall (t :: * -> *) a. Foldable t => t a -> Bool
null (State
stateforall record value. record -> (record -> value) -> value
^.State -> [(Int, Char)]
sInput)
then forall result. State -> result -> Reply result
returnReply State
state ()
else forall result. State -> Reply result
unexpectedReply State
state
sol :: Pattern
sol :: Pattern
sol = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
if State
stateforall record value. record -> (record -> value) -> value
^.State -> Bool
sIsSol
then forall result. State -> result -> Reply result
returnReply State
state ()
else forall result. State -> String -> Reply result
failReply State
state String
"Expected start of line"
commit :: Decision -> Pattern
commit :: Decision -> Pattern
commit Decision
decision = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
Reply { rState :: State
rState = State
state,
rTokens :: DList Token
rTokens = forall a. DList a
D.empty,
rResult :: Result ()
rResult = forall result. result -> Result result
Result (),
rCommit :: Maybe Decision
rCommit = forall a. a -> Maybe a
Just Decision
decision }
nextLine :: Pattern
nextLine :: Pattern
nextLine = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
forall result. State -> result -> Reply result
returnReply State
state { sIsSol :: Bool
sIsSol = Bool
True,
sLine :: Int
sLine = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLine Int -> Int -> Int
.+ Int
1,
sLineChar :: Int
sLineChar = Int
0 }
()
with :: (value -> State -> State) -> (State -> value) -> value -> Parser result -> Parser result
with :: forall value result.
(value -> State -> State)
-> (State -> value) -> value -> Parser result -> Parser result
with value -> State -> State
setField State -> value
getField value
value Parser result
parser = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
let value' :: value
value' = State -> value
getField State
state
Parser State -> Reply result
parser' = value
value' seq :: forall a b. a -> b -> b
`seq` forall {result}. value -> Parser result -> Parser result
withParser value
value' Parser result
parser
in State -> Reply result
parser' forall a b. (a -> b) -> a -> b
$ value -> State -> State
setField value
value State
state
where
withParser :: value -> Parser result -> Parser result
withParser value
parentValue Parser result
parser = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser Parser result
parser State
state
in case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
_ -> Reply result
reply { rState :: State
rState = value -> State -> State
setField value
parentValue forall a b. (a -> b) -> a -> b
$ Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState }
Result result
_ -> Reply result
reply { rState :: State
rState = value -> State -> State
setField value
parentValue forall a b. (a -> b) -> a -> b
$ Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState }
More Parser result
parser' -> Reply result
reply { rResult :: Result result
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ value -> Parser result -> Parser result
withParser value
parentValue Parser result
parser' }
{-# INLINE with #-}
forbidding :: (Match match1 result1) => match1 -> Parser result1 -> Parser result1
forbidding :: forall match1 result.
Match match1 result =>
match1 -> Parser result -> Parser result
forbidding match1
parser Parser result1
forbidden = forall value result.
(value -> State -> State)
-> (State -> value) -> value -> Parser result -> Parser result
with Maybe Pattern -> State -> State
setForbidden State -> Maybe Pattern
sForbidden (forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ Parser result1
forbidden forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Pattern
empty) (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match1
parser)
limitedTo :: (Match match result) => match -> Int -> Parser result
limitedTo :: forall match result.
Match match result =>
match -> Int -> Parser result
limitedTo match
parser Int
limit = forall value result.
(value -> State -> State)
-> (State -> value) -> value -> Parser result -> Parser result
with Int -> State -> State
setLimit State -> Int
sLimit Int
limit (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser)
nextIf :: (Char -> Bool) -> Pattern
nextIf :: (Char -> Bool) -> Pattern
nextIf Char -> Bool
test = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
case State
stateforall record value. record -> (record -> value) -> value
^.State -> Maybe Pattern
sForbidden of
Maybe Pattern
Nothing -> State -> Reply ()
limitedNextIf State
state
Just Pattern
parser -> let reply :: Reply ()
reply = forall result. Parser result -> State -> Reply result
applyParser (forall match result.
Match match result =>
match -> Maybe String -> Pattern
reject Pattern
parser forall a b. (a -> b) -> a -> b
$ forall a. a -> Maybe a
Just String
"forbidden pattern") State
state { sForbidden :: Maybe Pattern
sForbidden = forall a. Maybe a
Nothing }
in case Reply ()
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
_ -> Reply ()
reply
Result ()
_ -> State -> Reply ()
limitedNextIf State
state
More Pattern
_ -> forall a. HasCallStack => String -> a
error String
"unexpected Result More _ pattern"
where
limitedNextIf :: State -> Reply ()
limitedNextIf State
state =
case State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLimit of
-1 -> State -> Reply ()
consumeNextIf State
state
Int
0 -> forall result. State -> String -> Reply result
failReply State
state String
"Lookahead limit reached"
Int
_limit -> State -> Reply ()
consumeNextIf State
state { sLimit :: Int
sLimit = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLimit Int -> Int -> Int
.- Int
1 }
consumeNextIf :: State -> Reply ()
consumeNextIf State
state =
case State
stateforall record value. record -> (record -> value) -> value
^.State -> [(Int, Char)]
sInput of
((Int
offset, Char
char):[(Int, Char)]
rest) | Char -> Bool
test Char
char -> let chars :: String
chars = if State
stateforall record value. record -> (record -> value) -> value
^.State -> Bool
sIsPeek then [] else Char
charforall a. a -> [a] -> [a]
:(State
stateforall record value. record -> (record -> value) -> value
^.State -> String
sChars)
byte_offset :: Int
byte_offset = forall {a}. Num a => (State -> a) -> (State -> a) -> a
charsOf State -> Int
sByteOffset State -> Int
sCharsByteOffset
char_offset :: Int
char_offset = forall {a}. Num a => (State -> a) -> (State -> a) -> a
charsOf State -> Int
sCharOffset State -> Int
sCharsCharOffset
line :: Int
line = forall {a}. Num a => (State -> a) -> (State -> a) -> a
charsOf State -> Int
sLine State -> Int
sCharsLine
line_char :: Int
line_char = forall {a}. Num a => (State -> a) -> (State -> a) -> a
charsOf State -> Int
sLineChar State -> Int
sCharsLineChar
is_sol :: Bool
is_sol = Char
char forall a. Eq a => a -> a -> Bool
== Char
'\xFEFF' Bool -> Bool -> Bool
&& State
stateforall record value. record -> (record -> value) -> value
^.State -> Bool
sIsSol
state' :: State
state' = State
state { sInput :: [(Int, Char)]
sInput = [(Int, Char)]
rest,
sLast :: Char
sLast = Char
char,
sChars :: String
sChars = String
chars,
sCharsByteOffset :: Int
sCharsByteOffset = Int
byte_offset,
sCharsCharOffset :: Int
sCharsCharOffset = Int
char_offset,
sCharsLine :: Int
sCharsLine = Int
line,
sCharsLineChar :: Int
sCharsLineChar = Int
line_char,
sIsSol :: Bool
sIsSol = Bool
is_sol,
sByteOffset :: Int
sByteOffset = Int
offset,
sCharOffset :: Int
sCharOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharOffset Int -> Int -> Int
.+ Int
1,
sLineChar :: Int
sLineChar = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLineChar Int -> Int -> Int
.+ Int
1 }
in forall result. State -> result -> Reply result
returnReply State
state' ()
| Bool
otherwise -> forall result. State -> Reply result
unexpectedReply State
state
[] -> forall result. State -> Reply result
unexpectedReply State
state
where
charsOf :: (State -> a) -> (State -> a) -> a
charsOf State -> a
field State -> a
charsField
| State
stateforall record value. record -> (record -> value) -> value
^.State -> Bool
sIsPeek = -a
1
| forall (t :: * -> *) a. Foldable t => t a -> Bool
null (State
stateforall record value. record -> (record -> value) -> value
^.State -> String
sChars) = State
stateforall record value. record -> (record -> value) -> value
^.State -> a
field
| Bool
otherwise = State
stateforall record value. record -> (record -> value) -> value
^.State -> a
charsField
finishToken :: Pattern
finishToken :: Pattern
finishToken = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
let state' :: State
state' = State
state { sChars :: String
sChars = [],
sCharsByteOffset :: Int
sCharsByteOffset = -Int
1,
sCharsCharOffset :: Int
sCharsCharOffset = -Int
1,
sCharsLine :: Int
sCharsLine = -Int
1,
sCharsLineChar :: Int
sCharsLineChar = -Int
1 }
in if State
stateforall record value. record -> (record -> value) -> value
^.State -> Bool
sIsPeek
then forall result. State -> result -> Reply result
returnReply State
state' ()
else case State
stateforall record value. record -> (record -> value) -> value
^.State -> String
sChars of
[] -> forall result. State -> result -> Reply result
returnReply State
state' ()
chars :: String
chars@(Char
_:String
_) -> State -> Token -> Reply ()
tokenReply State
state' Token { tByteOffset :: Int
tByteOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharsByteOffset,
tCharOffset :: Int
tCharOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharsCharOffset,
tLine :: Int
tLine = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharsLine,
tLineChar :: Int
tLineChar = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharsLineChar,
tCode :: Code
tCode = State
stateforall record value. record -> (record -> value) -> value
^.State -> Code
sCode,
tText :: String
tText = forall a. [a] -> [a]
reverse String
chars }
wrap :: (Match match result) => match -> Parser result
wrap :: forall parameter result.
Match parameter result =>
parameter -> Parser result
wrap match
parser = do result
result <- forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
parser
Pattern
finishToken
Pattern
eof
forall (m :: * -> *) a. Monad m => a -> m a
return result
result
token :: (Match match result) => Code -> match -> Pattern
token :: forall match result. Match match result => Code -> match -> Pattern
token Code
code match
parser = Pattern
finishToken forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall value result.
(value -> State -> State)
-> (State -> value) -> value -> Parser result -> Parser result
with Code -> State -> State
setCode State -> Code
sCode Code
code (match
parser forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
finishToken)
fake :: Code -> String -> Pattern
fake :: Code -> String -> Pattern
fake Code
code String
text = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
if State
stateforall record value. record -> (record -> value) -> value
^.State -> Bool
sIsPeek
then forall result. State -> result -> Reply result
returnReply State
state ()
else State -> Token -> Reply ()
tokenReply State
state Token { tByteOffset :: Int
tByteOffset = forall {t} {t}. (Eq t, Num t) => t -> (t -> t) -> (t -> t) -> t
value State
state State -> Int
sByteOffset State -> Int
sCharsByteOffset,
tCharOffset :: Int
tCharOffset = forall {t} {t}. (Eq t, Num t) => t -> (t -> t) -> (t -> t) -> t
value State
state State -> Int
sCharOffset State -> Int
sCharsCharOffset,
tLine :: Int
tLine = forall {t} {t}. (Eq t, Num t) => t -> (t -> t) -> (t -> t) -> t
value State
state State -> Int
sLine State -> Int
sCharsLine,
tLineChar :: Int
tLineChar = forall {t} {t}. (Eq t, Num t) => t -> (t -> t) -> (t -> t) -> t
value State
state State -> Int
sLineChar State -> Int
sCharsLineChar,
tCode :: Code
tCode = Code
code,
tText :: String
tText = String
text }
where value :: t -> (t -> t) -> (t -> t) -> t
value t
state t -> t
field1 t -> t
field2 =
if t -> t
field2 t
state forall a. Eq a => a -> a -> Bool
== -t
1
then t -> t
field1 t
state
else t -> t
field2 t
state
meta :: (Match match result) => match -> Pattern
meta :: forall match result. Match match result => match -> Pattern
meta match
parser = forall match result. Match match result => Code -> match -> Pattern
token Code
Meta match
parser
indicator :: (Match match result) => match -> Pattern
indicator :: forall match result. Match match result => match -> Pattern
indicator match
parser = forall match result. Match match result => Code -> match -> Pattern
token Code
Indicator forall a b. (a -> b) -> a -> b
$ match
parser
text :: (Match match result) => match -> Pattern
text :: forall match result. Match match result => match -> Pattern
text match
parser = forall match result. Match match result => Code -> match -> Pattern
token Code
Text match
parser
emptyToken :: Code -> Pattern
emptyToken :: Code -> Pattern
emptyToken Code
code = Pattern
finishToken forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Code -> Pattern
parser Code
code
where parser :: Code -> Pattern
parser Code
code = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
if State
stateforall record value. record -> (record -> value) -> value
^.State -> Bool
sIsPeek
then forall result. State -> result -> Reply result
returnReply State
state ()
else State -> Token -> Reply ()
tokenReply State
state Token { tByteOffset :: Int
tByteOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sByteOffset,
tCharOffset :: Int
tCharOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharOffset,
tLine :: Int
tLine = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLine,
tLineChar :: Int
tLineChar = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLineChar,
tCode :: Code
tCode = Code
code,
tText :: String
tText = String
"" }
wrapTokens :: Code -> Code -> Pattern -> Pattern
wrapTokens :: Code -> Code -> Pattern -> Pattern
wrapTokens Code
beginCode Code
endCode Pattern
pattern = Code -> Pattern
emptyToken Code
beginCode
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result.
Match match result =>
match -> Pattern -> Parser result
prefixErrorWith Pattern
pattern (Code -> Pattern
emptyToken Code
endCode)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Code -> Pattern
emptyToken Code
endCode
prefixErrorWith :: (Match match result) => match -> Pattern -> Parser result
prefixErrorWith :: forall match result.
Match match result =>
match -> Pattern -> Parser result
prefixErrorWith match
pattern Pattern
prefix =
forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state ->
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser (forall parameter result.
Match parameter result =>
parameter -> Parser result
match match
pattern) State
state
in case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Result result
_ -> Reply result
reply
More Parser result
more -> Reply result
reply { rResult :: Result result
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ forall match result.
Match match result =>
match -> Pattern -> Parser result
prefixErrorWith Parser result
more Pattern
prefix }
Failed String
message -> Reply result
reply { rResult :: Result result
rResult = forall result. Parser result -> Result result
More forall a b. (a -> b) -> a -> b
$ Pattern
prefix forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& (forall a. String -> Parser a
pfail String
message :: Parser result) }
data Context = BlockOut
| BlockIn
| FlowOut
| FlowIn
| BlockKey
| FlowKey
data Chomp = Strip
| Clip
| Keep
type Tokenizer = BLC.ByteString -> Bool -> [Token]
patternTokenizer :: Pattern -> Tokenizer
patternTokenizer :: Pattern -> Tokenizer
patternTokenizer Pattern
pattern ByteString
input Bool
withFollowing =
forall a. DList a -> [a]
D.toList forall a b. (a -> b) -> a -> b
$ forall {result}. Parser result -> State -> DList Token
patternParser (forall parameter result.
Match parameter result =>
parameter -> Parser result
wrap Pattern
pattern) (ByteString -> State
initialState ByteString
input)
where
patternParser :: Parser result -> State -> DList Token
patternParser Parser result
parser State
state =
let reply :: Reply result
reply = forall result. Parser result -> State -> Reply result
applyParser Parser result
parser State
state
tokens :: DList Token
tokens = forall result. Reply result -> DList Token
commitBugs Reply result
reply
state' :: State
state' = Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState
in case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Result result
rResult of
Failed String
message -> DList Token -> State -> String -> Bool -> DList Token
errorTokens DList Token
tokens State
state' String
message Bool
withFollowing
Result result
_ -> DList Token
tokens
More Parser result
parser' -> forall a. DList a -> DList a -> DList a
D.append DList Token
tokens forall a b. (a -> b) -> a -> b
$ Parser result -> State -> DList Token
patternParser Parser result
parser' State
state'
errorTokens :: D.DList Token -> State -> String -> Bool -> D.DList Token
errorTokens :: DList Token -> State -> String -> Bool -> DList Token
errorTokens DList Token
tokens State
state String
message Bool
withFollowing =
let tokens' :: DList Token
tokens' = forall a. DList a -> DList a -> DList a
D.append DList Token
tokens forall a b. (a -> b) -> a -> b
$ forall a. a -> DList a
D.singleton Token { tByteOffset :: Int
tByteOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sByteOffset,
tCharOffset :: Int
tCharOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharOffset,
tLine :: Int
tLine = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLine,
tLineChar :: Int
tLineChar = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLineChar,
tCode :: Code
tCode = Code
Error,
tText :: String
tText = String
message }
in if Bool
withFollowing Bool -> Bool -> Bool
&& State
stateforall record value. record -> (record -> value) -> value
^.State -> [(Int, Char)]
sInput forall a. Eq a => a -> a -> Bool
/= []
then forall a. DList a -> DList a -> DList a
D.append DList Token
tokens' forall a b. (a -> b) -> a -> b
$ forall a. a -> DList a
D.singleton Token { tByteOffset :: Int
tByteOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sByteOffset,
tCharOffset :: Int
tCharOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharOffset,
tLine :: Int
tLine = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLine,
tLineChar :: Int
tLineChar = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLineChar,
tCode :: Code
tCode = Code
Unparsed,
tText :: String
tText = forall a b. (a -> b) -> [a] -> [b]
map forall a b. (a, b) -> b
snd forall a b. (a -> b) -> a -> b
$ State
stateforall record value. record -> (record -> value) -> value
^.State -> [(Int, Char)]
sInput }
else DList Token
tokens'
commitBugs :: Reply result -> D.DList Token
commitBugs :: forall result. Reply result -> DList Token
commitBugs Reply result
reply =
let tokens :: DList Token
tokens = Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> DList Token
rTokens
state :: State
state = Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> State
rState
in case Reply result
replyforall record value. record -> (record -> value) -> value
^.forall result. Reply result -> Maybe Decision
rCommit of
Maybe Decision
Nothing -> DList Token
tokens
Just Decision
commit -> forall a. DList a -> DList a -> DList a
D.append DList Token
tokens forall a b. (a -> b) -> a -> b
$ forall a. a -> DList a
D.singleton Token { tByteOffset :: Int
tByteOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sByteOffset,
tCharOffset :: Int
tCharOffset = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sCharOffset,
tLine :: Int
tLine = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLine,
tLineChar :: Int
tLineChar = State
stateforall record value. record -> (record -> value) -> value
^.State -> Int
sLineChar,
tCode :: Code
tCode = Code
Error,
tText :: String
tText = String
"Commit to " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show Decision
commit forall a. [a] -> [a] -> [a]
++ String
" was made outside it" }
tokenize :: BLC.ByteString -> Bool -> [Token]
tokenize :: Tokenizer
tokenize = Pattern -> Tokenizer
patternTokenizer Pattern
l_yaml_stream
bom :: Match match1 result1 => match1 -> Parser ()
bom :: forall match result. Match match result => match -> Pattern
bom match1
code = match1
code
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& (forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state -> let text :: String
text = case State
stateforall record value. record -> (record -> value) -> value
^.State -> Encoding
sEncoding of
Encoding
UTF8 -> String
"TF-8"
Encoding
UTF16LE -> String
"TF-16LE"
Encoding
UTF16BE -> String
"TF-16BE"
Encoding
UTF32LE -> String
"TF-32LE"
Encoding
UTF32BE -> String
"TF-32BE"
in forall result. Parser result -> State -> Reply result
applyParser (Code -> String -> Pattern
fake Code
Bom String
text) State
state)
na :: Int
na :: Int
na = forall a. HasCallStack => String -> a
error String
"Accessing non-applicable indentation"
asInteger :: Parser Int
asInteger :: Parser Int
asInteger = forall result. (State -> Reply result) -> Parser result
Parser forall a b. (a -> b) -> a -> b
$ \ State
state -> forall result. State -> result -> Reply result
returnReply State
state forall a b. (a -> b) -> a -> b
$ Char -> Int
ord (State
stateforall record value. record -> (record -> value) -> value
^.State -> Char
sLast) Int -> Int -> Int
.- Int
48
result :: result -> Parser result
result :: forall a. a -> Parser a
result = forall (m :: * -> *) a. Monad m => a -> m a
return
c_printable :: Pattern
c_printable = Char
'\x9' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'\xA' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'\xD' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ (Char
'\x20', Char
'\x7E')
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'\x85' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ (Char
'\xA0', Char
'\xD7FF') forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ (Char
'\xE000', Char
'\xFFFD')
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ (Char
'\x10000', Char
'\x10FFFF')
nb_json :: Pattern
nb_json = Char
'\x9' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ (Char
'\x20', Char
'\x10FFFF')
c_byte_order_mark :: Pattern
c_byte_order_mark = forall match result. Match match result => match -> Pattern
bom Char
'\xFEFF'
c_sequence_entry :: Pattern
c_sequence_entry = forall match result. Match match result => match -> Pattern
indicator Char
'-'
c_mapping_key :: Pattern
c_mapping_key = forall match result. Match match result => match -> Pattern
indicator Char
'?'
c_mapping_value :: Pattern
c_mapping_value = forall match result. Match match result => match -> Pattern
indicator Char
':'
c_collect_entry :: Pattern
c_collect_entry = forall match result. Match match result => match -> Pattern
indicator Char
','
c_sequence_start :: Pattern
c_sequence_start = forall match result. Match match result => match -> Pattern
indicator Char
'['
c_sequence_end :: Pattern
c_sequence_end = forall match result. Match match result => match -> Pattern
indicator Char
']'
c_mapping_start :: Pattern
c_mapping_start = forall match result. Match match result => match -> Pattern
indicator Char
'{'
c_mapping_end :: Pattern
c_mapping_end = forall match result. Match match result => match -> Pattern
indicator Char
'}'
= forall match result. Match match result => match -> Pattern
indicator Char
'#'
c_anchor :: Pattern
c_anchor = forall match result. Match match result => match -> Pattern
indicator Char
'&'
c_alias :: Pattern
c_alias = forall match result. Match match result => match -> Pattern
indicator Char
'*'
c_tag :: Pattern
c_tag = forall match result. Match match result => match -> Pattern
indicator Char
'!'
c_literal :: Pattern
c_literal = forall match result. Match match result => match -> Pattern
indicator Char
'|'
c_folded :: Pattern
c_folded = forall match result. Match match result => match -> Pattern
indicator Char
'>'
c_single_quote :: Pattern
c_single_quote = forall match result. Match match result => match -> Pattern
indicator Char
'\''
c_double_quote :: Pattern
c_double_quote = forall match result. Match match result => match -> Pattern
indicator Char
'"'
c_directive :: Pattern
c_directive = forall match result. Match match result => match -> Pattern
indicator Char
'%'
c_reserved :: Pattern
c_reserved = forall match result. Match match result => match -> Pattern
indicator ( Char
'@' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'`' )
c_indicator :: Pattern
c_indicator = Pattern
c_sequence_entry forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_mapping_key forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_mapping_value forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_collect_entry
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_sequence_start forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_sequence_end forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_mapping_start forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_mapping_end
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_comment forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_anchor forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_alias forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_tag
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_literal forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_folded forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_single_quote forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_double_quote
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_directive forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_reserved
c_flow_indicator :: Pattern
c_flow_indicator = Pattern
c_collect_entry forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_sequence_start forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_sequence_end forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_mapping_start forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_mapping_end
b_line_feed :: Char
b_line_feed = Char
'\xA'
b_carriage_return :: Char
b_carriage_return = Char
'\xD'
b_char :: Pattern
b_char = Char
b_line_feed forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
b_carriage_return
nb_char :: Pattern
nb_char = Pattern
c_printable forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
b_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
c_byte_order_mark
b_break :: Pattern
b_break = ( Char
b_carriage_return forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Char
b_line_feed
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
b_carriage_return
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
b_line_feed )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
nextLine
b_as_line_feed :: Pattern
b_as_line_feed = forall match result. Match match result => Code -> match -> Pattern
token Code
LineFeed Pattern
b_break
b_non_content :: Pattern
b_non_content = forall match result. Match match result => Code -> match -> Pattern
token Code
Break Pattern
b_break
s_space :: Char
s_space = Char
'\x20'
s_tab :: Char
s_tab = Char
'\x9'
s_white :: Pattern
s_white = Char
s_space forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
s_tab
ns_char :: Pattern
ns_char = Pattern
nb_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
s_white
ns_dec_digit :: (Char, Char)
ns_dec_digit = (Char
'\x30', Char
'\x39')
ns_hex_digit :: Pattern
ns_hex_digit = (Char, Char)
ns_dec_digit
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ (Char
'\x41', Char
'\x46') forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ (Char
'\x61', Char
'\x66')
ns_ascii_letter :: Pattern
ns_ascii_letter = (Char
'\x41', Char
'\x5A') forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ (Char
'\x61', Char
'\x7A')
ns_word_char :: Pattern
ns_word_char = (Char, Char)
ns_dec_digit forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_ascii_letter forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'-'
ns_uri_char :: Pattern
ns_uri_char = Decision
DeEscape
forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Char
'%' forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeEscape forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_hex_digit forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_hex_digit forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_word_char forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'#'
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
';' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'/' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'?' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
':' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'@' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'&' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'=' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'+' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'$' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
','
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'_' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'.' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'!' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'~' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'*' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'\'' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'(' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
')' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'[' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
']' )
ns_tag_char :: Pattern
ns_tag_char = Pattern
ns_uri_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
c_tag forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
c_flow_indicator
c_escape :: Pattern
c_escape = forall match result. Match match result => match -> Pattern
indicator Char
'\\'
ns_esc_null :: Pattern
ns_esc_null = forall match result. Match match result => match -> Pattern
meta Char
'0'
ns_esc_bell :: Pattern
ns_esc_bell = forall match result. Match match result => match -> Pattern
meta Char
'a'
ns_esc_backspace :: Pattern
ns_esc_backspace = forall match result. Match match result => match -> Pattern
meta Char
'b'
ns_esc_horizontal_tab :: Pattern
ns_esc_horizontal_tab = forall match result. Match match result => match -> Pattern
meta ( Char
't' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'\x9' )
ns_esc_line_feed :: Pattern
ns_esc_line_feed = forall match result. Match match result => match -> Pattern
meta Char
'n'
ns_esc_vertical_tab :: Pattern
ns_esc_vertical_tab = forall match result. Match match result => match -> Pattern
meta Char
'v'
ns_esc_form_feed :: Pattern
ns_esc_form_feed = forall match result. Match match result => match -> Pattern
meta Char
'f'
ns_esc_carriage_return :: Pattern
ns_esc_carriage_return = forall match result. Match match result => match -> Pattern
meta Char
'r'
ns_esc_escape :: Pattern
ns_esc_escape = forall match result. Match match result => match -> Pattern
meta Char
'e'
ns_esc_space :: Pattern
ns_esc_space = forall match result. Match match result => match -> Pattern
meta Char
'\x20'
ns_esc_double_quote :: Pattern
ns_esc_double_quote = forall match result. Match match result => match -> Pattern
meta Char
'"'
ns_esc_slash :: Pattern
ns_esc_slash = forall match result. Match match result => match -> Pattern
meta Char
'/'
ns_esc_backslash :: Pattern
ns_esc_backslash = forall match result. Match match result => match -> Pattern
meta Char
'\\'
ns_esc_next_line :: Pattern
ns_esc_next_line = forall match result. Match match result => match -> Pattern
meta Char
'N'
ns_esc_non_breaking_space :: Pattern
ns_esc_non_breaking_space = forall match result. Match match result => match -> Pattern
meta Char
'_'
ns_esc_line_separator :: Pattern
ns_esc_line_separator = forall match result. Match match result => match -> Pattern
meta Char
'L'
ns_esc_paragraph_separator :: Pattern
ns_esc_paragraph_separator = forall match result. Match match result => match -> Pattern
meta Char
'P'
ns_esc_8_bit :: Pattern
ns_esc_8_bit = forall match result. Match match result => match -> Pattern
indicator Char
'x' forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeEscaped forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_hex_digit forall match result. Match match result => match -> Int -> Pattern
% Int
2 )
ns_esc_16_bit :: Pattern
ns_esc_16_bit = forall match result. Match match result => match -> Pattern
indicator Char
'u' forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeEscaped forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_hex_digit forall match result. Match match result => match -> Int -> Pattern
% Int
4 )
ns_esc_32_bit :: Pattern
ns_esc_32_bit = forall match result. Match match result => match -> Pattern
indicator Char
'U' forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeEscaped forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_hex_digit forall match result. Match match result => match -> Int -> Pattern
% Int
8 )
c_ns_esc_char :: Pattern
c_ns_esc_char = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginEscape Code
EndEscape
forall a b. (a -> b) -> a -> b
$ Pattern
c_escape forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeEscape
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Decision
DeEscaped
forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Pattern
ns_esc_null forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_bell forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_backspace
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_horizontal_tab forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_line_feed
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_vertical_tab forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_form_feed
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_carriage_return forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_escape forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_space
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_double_quote forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_slash forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_backslash
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_next_line forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_non_breaking_space
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_line_separator forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_paragraph_separator
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_8_bit forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_16_bit forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_esc_32_bit )
s_indent :: Int -> Pattern
s_indent Int
n = forall match result. Match match result => Code -> match -> Pattern
token Code
Indent ( Char
s_space forall match result. Match match result => match -> Int -> Pattern
% Int
n )
s_indent_lt :: Int -> Pattern
s_indent_lt Int
n = forall match result. Match match result => Code -> match -> Pattern
token Code
Indent ( Char
s_space forall match result. Match match result => match -> Int -> Pattern
<% Int
n )
s_indent_le :: Int -> Pattern
s_indent_le Int
n = forall match result. Match match result => Code -> match -> Pattern
token Code
Indent ( Char
s_space forall match result. Match match result => match -> Int -> Pattern
<% (Int
n Int -> Int -> Int
.+ Int
1) )
s_separate_in_line :: Pattern
s_separate_in_line = forall match result. Match match result => Code -> match -> Pattern
token Code
White ( Pattern
s_white +) forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
sol
s_line_prefix :: Int -> Context -> Pattern
s_line_prefix Int
n Context
c = case Context
c of
Context
BlockOut -> Int -> Pattern
s_block_line_prefix Int
n
Context
BlockIn -> Int -> Pattern
s_block_line_prefix Int
n
Context
FlowOut -> Int -> Pattern
s_flow_line_prefix Int
n
Context
FlowIn -> Int -> Pattern
s_flow_line_prefix Int
n
Context
_ -> forall a. HasCallStack => String -> a
error String
"unexpected node style pattern in s_line_prefix"
s_block_line_prefix :: Int -> Pattern
s_block_line_prefix Int
n = Int -> Pattern
s_indent Int
n
s_flow_line_prefix :: Int -> Pattern
s_flow_line_prefix Int
n = Int -> Pattern
s_indent Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
s_separate_in_line ?)
l_empty :: Int -> Context -> Pattern
l_empty Int
n Context
c = ( Int -> Context -> Pattern
s_line_prefix Int
n Context
c forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Pattern
s_indent_lt Int
n )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
b_as_line_feed
b_l_trimmed :: Int -> Context -> Pattern
b_l_trimmed Int
n Context
c = Pattern
b_non_content forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
l_empty Int
n Context
c +)
b_as_space :: Pattern
b_as_space = forall match result. Match match result => Code -> match -> Pattern
token Code
LineFold Pattern
b_break
b_l_folded :: Int -> Context -> Pattern
b_l_folded Int
n Context
c = Int -> Context -> Pattern
b_l_trimmed Int
n Context
c forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
b_as_space
s_flow_folded :: Int -> Pattern
s_flow_folded Int
n = ( Pattern
s_separate_in_line ?) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
b_l_folded Int
n Context
FlowIn
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
s_flow_line_prefix Int
n
= Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginComment Code
EndComment
forall a b. (a -> b) -> a -> b
$ Pattern
c_comment forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
meta ( Pattern
nb_char *)
= Pattern
b_non_content forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
eof
= ( Pattern
s_separate_in_line forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
c_nb_comment_text ?) ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
b_comment
= Pattern
s_separate_in_line forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
c_nb_comment_text ?) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
b_comment
= ( Pattern
s_b_comment forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
sol )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty Pattern
l_comment *)
s_separate :: Int -> Context -> Pattern
s_separate Int
n Context
c = case Context
c of
Context
BlockOut -> Int -> Pattern
s_separate_lines Int
n
Context
BlockIn -> Int -> Pattern
s_separate_lines Int
n
Context
FlowOut -> Int -> Pattern
s_separate_lines Int
n
Context
FlowIn -> Int -> Pattern
s_separate_lines Int
n
Context
BlockKey -> Pattern
s_separate_in_line
Context
FlowKey -> Pattern
s_separate_in_line
s_separate_lines :: Int -> Pattern
s_separate_lines Int
n = Pattern
s_l_comments forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
s_flow_line_prefix Int
n
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
s_separate_in_line
l_directive :: Pattern
l_directive = ( Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginDirective Code
EndDirective
forall a b. (a -> b) -> a -> b
$ Pattern
c_directive forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeDoc
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Decision
DeDirective
forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Pattern
ns_yaml_directive
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_tag_directive
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_reserved_directive ) )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
s_l_comments
ns_reserved_directive :: Pattern
ns_reserved_directive = Pattern
ns_directive_name
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
s_separate_in_line forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_directive_parameter *)
ns_directive_name :: Pattern
ns_directive_name = forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_char +)
ns_directive_parameter :: Pattern
ns_directive_parameter = forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_char +)
ns_yaml_directive :: Pattern
ns_yaml_directive = forall match result. Match match result => match -> Pattern
meta [ Char
'Y', Char
'A', Char
'M', Char
'L' ] forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeDirective
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
s_separate_in_line forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_yaml_version
ns_yaml_version :: Pattern
ns_yaml_version = forall match result. Match match result => match -> Pattern
meta ( ( (Char, Char)
ns_dec_digit +) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Char
'.' forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( (Char, Char)
ns_dec_digit +) )
ns_tag_directive :: Pattern
ns_tag_directive = forall match result. Match match result => match -> Pattern
meta [ Char
'T', Char
'A', Char
'G' ] forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeDirective
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
s_separate_in_line forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_tag_handle
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
s_separate_in_line forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_tag_prefix
c_tag_handle :: Pattern
c_tag_handle = Pattern
c_named_tag_handle
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_secondary_tag_handle
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_primary_tag_handle
c_primary_tag_handle :: Pattern
c_primary_tag_handle = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginHandle Code
EndHandle
forall a b. (a -> b) -> a -> b
$ Pattern
c_tag
c_secondary_tag_handle :: Pattern
c_secondary_tag_handle = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginHandle Code
EndHandle
forall a b. (a -> b) -> a -> b
$ Pattern
c_tag forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_tag
c_named_tag_handle :: Pattern
c_named_tag_handle = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginHandle Code
EndHandle
forall a b. (a -> b) -> a -> b
$ Pattern
c_tag forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_word_char +) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_tag
ns_tag_prefix :: Pattern
ns_tag_prefix = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginTag Code
EndTag
forall a b. (a -> b) -> a -> b
$ ( Pattern
c_ns_local_tag_prefix forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
ns_global_tag_prefix )
c_ns_local_tag_prefix :: Pattern
c_ns_local_tag_prefix = Pattern
c_tag forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_uri_char *)
ns_global_tag_prefix :: Pattern
ns_global_tag_prefix = forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_tag_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
ns_uri_char *) )
c_ns_properties :: Int -> Context -> Pattern
c_ns_properties Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginProperties Code
EndProperties
forall a b. (a -> b) -> a -> b
$ ( Pattern
c_ns_tag_property
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
s_separate Int
n Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_ns_anchor_property ?) )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
c_ns_anchor_property
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
s_separate Int
n Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_ns_tag_property ?) )
c_ns_tag_property :: Pattern
c_ns_tag_property = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginTag Code
EndTag
forall a b. (a -> b) -> a -> b
$ Pattern
c_verbatim_tag
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_ns_shorthand_tag
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_non_specific_tag
c_verbatim_tag :: Pattern
c_verbatim_tag = Pattern
c_tag forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
indicator Char
'<' forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_uri_char +) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
indicator Char
'>'
c_ns_shorthand_tag :: Pattern
c_ns_shorthand_tag = Pattern
c_tag_handle forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_tag_char +)
c_non_specific_tag :: Pattern
c_non_specific_tag = Pattern
c_tag
c_ns_anchor_property :: Pattern
c_ns_anchor_property = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginAnchor Code
EndAnchor
forall a b. (a -> b) -> a -> b
$ Pattern
c_anchor forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_anchor_name
ns_anchor_char :: Pattern
ns_anchor_char = Pattern
ns_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
c_flow_indicator
ns_anchor_name :: Pattern
ns_anchor_name = forall match result. Match match result => match -> Pattern
meta ( Pattern
ns_anchor_char +)
c_ns_alias_node :: Pattern
c_ns_alias_node = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginAlias Code
EndAlias
forall a b. (a -> b) -> a -> b
$ Pattern
c_alias forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_anchor_name
e_scalar :: Pattern
e_scalar = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginScalar Code
EndScalar Pattern
empty
e_node :: Pattern
e_node = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginNode Code
EndNode Pattern
e_scalar
nb_double_char :: Pattern
nb_double_char = Decision
DeEscape forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Pattern
c_ns_esc_char forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
nb_json forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
c_escape forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
c_double_quote ) )
ns_double_char :: Pattern
ns_double_char = Pattern
nb_double_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
s_white
c_double_quoted :: Int -> Context -> Pattern
c_double_quoted Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginScalar Code
EndScalar
forall a b. (a -> b) -> a -> b
$ Pattern
c_double_quote forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
text ( Int -> Context -> Pattern
nb_double_text Int
n Context
c ) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_double_quote
nb_double_text :: Int -> Context -> Pattern
nb_double_text Int
n Context
c = case Context
c of
Context
FlowOut -> Int -> Pattern
nb_double_multi_line Int
n
Context
FlowIn -> Int -> Pattern
nb_double_multi_line Int
n
Context
BlockKey -> Pattern
nb_double_one_line
Context
FlowKey -> Pattern
nb_double_one_line
Context
_ -> forall a. HasCallStack => String -> a
error String
"unexpected node style pattern in nb_double_text"
nb_double_one_line :: Pattern
nb_double_one_line = ( Pattern
nb_double_char *)
s_double_escaped :: Int -> Pattern
s_double_escaped Int
n = ( Pattern
s_white *)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginEscape Code
EndEscape ( Pattern
c_escape forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeEscape forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
b_non_content )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
l_empty Int
n Context
FlowIn *)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
s_flow_line_prefix Int
n
s_double_break :: Int -> Pattern
s_double_break Int
n = Decision
DeEscape forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Int -> Pattern
s_double_escaped Int
n forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Pattern
s_flow_folded Int
n )
nb_ns_double_in_line :: Pattern
nb_ns_double_in_line = ( ( Pattern
s_white *) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_double_char *)
s_double_next_line :: Int -> Pattern
s_double_next_line Int
n = Int -> Pattern
s_double_break Int
n
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
ns_double_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
nb_ns_double_in_line
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
s_double_next_line Int
n forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
s_white *) ) ?)
nb_double_multi_line :: Int -> Pattern
nb_double_multi_line Int
n = Pattern
nb_ns_double_in_line
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
s_double_next_line Int
n forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
s_white *) )
c_quoted_quote :: Pattern
c_quoted_quote = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginEscape Code
EndEscape
forall a b. (a -> b) -> a -> b
$ Pattern
c_single_quote forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeEscape forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
meta Char
'\''
nb_single_char :: Pattern
nb_single_char = Decision
DeEscape forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Pattern
c_quoted_quote forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
nb_json forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
c_single_quote ) )
ns_single_char :: Pattern
ns_single_char = Pattern
nb_single_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
s_white
c_single_quoted :: Int -> Context -> Pattern
c_single_quoted Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginScalar Code
EndScalar
forall a b. (a -> b) -> a -> b
$ Pattern
c_single_quote forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall match result. Match match result => match -> Pattern
text ( Int -> Context -> Pattern
nb_single_text Int
n Context
c ) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_single_quote
nb_single_text :: Int -> Context -> Pattern
nb_single_text Int
n Context
c = case Context
c of
Context
FlowOut -> Int -> Pattern
nb_single_multi_line Int
n
Context
FlowIn -> Int -> Pattern
nb_single_multi_line Int
n
Context
BlockKey -> Pattern
nb_single_one_line
Context
FlowKey -> Pattern
nb_single_one_line
Context
_ -> forall a. HasCallStack => String -> a
error String
"unexpected node style pattern in nb_single_text"
nb_single_one_line :: Pattern
nb_single_one_line = ( Pattern
nb_single_char *)
nb_ns_single_in_line :: Pattern
nb_ns_single_in_line = ( ( Pattern
s_white *) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_single_char *)
s_single_next_line :: Int -> Pattern
s_single_next_line Int
n = Int -> Pattern
s_flow_folded Int
n
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
ns_single_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
nb_ns_single_in_line
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
s_single_next_line Int
n forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
s_white *) ) ?)
nb_single_multi_line :: Int -> Pattern
nb_single_multi_line Int
n = Pattern
nb_ns_single_in_line
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
s_single_next_line Int
n forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
s_white *) )
ns_plain_first :: Context -> Pattern
ns_plain_first Context
_c = Pattern
ns_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
c_indicator
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Char
':' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'?' forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
'-' ) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( (Context -> Pattern
ns_plain_safe Context
_c) >?)
ns_plain_safe :: Context -> Pattern
ns_plain_safe Context
c = case Context
c of
Context
FlowOut -> Pattern
ns_plain_safe_out
Context
FlowIn -> Pattern
ns_plain_safe_in
Context
BlockKey -> Pattern
ns_plain_safe_out
Context
FlowKey -> Pattern
ns_plain_safe_in
Context
_ -> forall a. HasCallStack => String -> a
error String
"unexpected node style pattern in ns_plain_safe"
ns_plain_safe_out :: Pattern
ns_plain_safe_out = Pattern
ns_char
ns_plain_safe_in :: Pattern
ns_plain_safe_in = Pattern
ns_char forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Pattern
c_flow_indicator
ns_plain_char :: Context -> Pattern
ns_plain_char Context
c = Context -> Pattern
ns_plain_safe Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Char
':' forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Char
'#'
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
ns_char <?) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Char
'#'
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Char
':' forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( (Context -> Pattern
ns_plain_safe Context
c) >?)
ns_plain :: Int -> Context -> Pattern
ns_plain Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginScalar Code
EndScalar
forall a b. (a -> b) -> a -> b
$ forall match result. Match match result => match -> Pattern
text (case Context
c of
Context
FlowOut -> Int -> Context -> Pattern
ns_plain_multi_line Int
n Context
c
Context
FlowIn -> Int -> Context -> Pattern
ns_plain_multi_line Int
n Context
c
Context
BlockKey -> Context -> Pattern
ns_plain_one_line Context
c
Context
FlowKey -> Context -> Pattern
ns_plain_one_line Context
c
Context
_ -> forall a. HasCallStack => String -> a
error String
"unexpected node style pattern in ns_plain")
nb_ns_plain_in_line :: Context -> Pattern
nb_ns_plain_in_line Context
c = ( ( Pattern
s_white *) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Context -> Pattern
ns_plain_char Context
c *)
ns_plain_one_line :: Context -> Pattern
ns_plain_one_line Context
c = Context -> Pattern
ns_plain_first Context
c forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Context -> Pattern
nb_ns_plain_in_line Context
c
s_ns_plain_next_line :: Int -> Context -> Pattern
s_ns_plain_next_line Int
n Context
c = Int -> Pattern
s_flow_folded Int
n
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Context -> Pattern
ns_plain_char Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Context -> Pattern
nb_ns_plain_in_line Context
c
ns_plain_multi_line :: Int -> Context -> Pattern
ns_plain_multi_line Int
n Context
c = Context -> Pattern
ns_plain_one_line Context
c
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
s_ns_plain_next_line Int
n Context
c *)
in_flow :: Context -> Context
in_flow Context
c = case Context
c of
Context
FlowOut -> Context
FlowIn
Context
FlowIn -> Context
FlowIn
Context
BlockKey -> Context
FlowKey
Context
FlowKey -> Context
FlowKey
Context
_ -> forall a. HasCallStack => String -> a
error String
"unexpected node style pattern in in_flow"
c_flow_sequence :: Int -> Context -> Pattern
c_flow_sequence Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginSequence Code
EndSequence
forall a b. (a -> b) -> a -> b
$ Pattern
c_sequence_start forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
ns_s_flow_seq_entries Int
n (Context -> Context
in_flow Context
c) ?) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_sequence_end
ns_s_flow_seq_entries :: Int -> Context -> Pattern
ns_s_flow_seq_entries Int
n Context
c = Int -> Context -> Pattern
ns_flow_seq_entry Int
n Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
c_collect_entry forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
ns_s_flow_seq_entries Int
n Context
c ?) ?)
ns_flow_seq_entry :: Int -> Context -> Pattern
ns_flow_seq_entry Int
n Context
c = Decision
DePair forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Int -> Context -> Pattern
ns_flow_pair Int
n Context
c forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Decision
DeNode forall match result.
Match match result =>
Decision -> match -> Parser result
^ Int -> Context -> Pattern
ns_flow_node Int
n Context
c )
c_flow_mapping :: Int -> Context -> Pattern
c_flow_mapping Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginMapping Code
EndMapping
forall a b. (a -> b) -> a -> b
$ Pattern
c_mapping_start forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
ns_s_flow_map_entries Int
n (Context -> Context
in_flow Context
c) ?) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_mapping_end
ns_s_flow_map_entries :: Int -> Context -> Pattern
ns_s_flow_map_entries Int
n Context
c = Int -> Context -> Pattern
ns_flow_map_entry Int
n Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
c_collect_entry forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
ns_s_flow_map_entries Int
n Context
c ?) ?)
ns_flow_map_entry :: Int -> Context -> Pattern
ns_flow_map_entry Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginPair Code
EndPair
forall a b. (a -> b) -> a -> b
$ Decision
DeKey forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( ( Pattern
c_mapping_key forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeKey forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
s_separate Int
n Context
c
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
ns_flow_map_explicit_entry Int
n Context
c )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
ns_flow_map_implicit_entry Int
n Context
c )
ns_flow_map_explicit_entry :: Int -> Context -> Pattern
ns_flow_map_explicit_entry Int
n Context
c = Int -> Context -> Pattern
ns_flow_map_implicit_entry Int
n Context
c
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
e_node
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
e_node )
ns_flow_map_implicit_entry :: Int -> Context -> Pattern
ns_flow_map_implicit_entry Int
n Context
c = Decision
DePair
forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Int -> Context -> Pattern
c_ns_flow_map_json_key_entry Int
n Context
c
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
ns_flow_map_yaml_key_entry Int
n Context
c
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
c_ns_flow_map_empty_key_entry Int
n Context
c )
ns_flow_map_yaml_key_entry :: Int -> Context -> Pattern
ns_flow_map_yaml_key_entry Int
n Context
c = ( Decision
DeNode forall match result.
Match match result =>
Decision -> match -> Parser result
^ Int -> Context -> Pattern
ns_flow_yaml_node Int
n Context
c ) forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DePair
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( ( ( Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
c_ns_flow_map_separate_value Int
n Context
c )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
e_node )
c_ns_flow_map_empty_key_entry :: Int -> Context -> Pattern
c_ns_flow_map_empty_key_entry Int
n Context
c = Pattern
e_node
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
c_ns_flow_map_separate_value Int
n Context
c
c_ns_flow_map_separate_value :: Int -> Context -> Pattern
c_ns_flow_map_separate_value Int
n Context
c = Pattern
c_mapping_value forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( (Context -> Pattern
ns_plain_safe Context
c) >!) forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DePair
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( ( Int -> Context -> Pattern
s_separate Int
n Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
ns_flow_node Int
n Context
c )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
e_node )
c_ns_flow_map_json_key_entry :: Int -> Context -> Pattern
c_ns_flow_map_json_key_entry Int
n Context
c = ( Decision
DeNode forall match result.
Match match result =>
Decision -> match -> Parser result
^ Int -> Context -> Pattern
c_flow_json_node Int
n Context
c ) forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DePair
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( ( ( Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
c_ns_flow_map_adjacent_value Int
n Context
c )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
e_node )
c_ns_flow_map_adjacent_value :: Int -> Context -> Pattern
c_ns_flow_map_adjacent_value Int
n Context
c = Pattern
c_mapping_value forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DePair
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( ( ( Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
ns_flow_node Int
n Context
c )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
e_node )
ns_flow_pair :: Int -> Context -> Pattern
ns_flow_pair Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginMapping Code
EndMapping
forall a b. (a -> b) -> a -> b
$ Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginPair Code
EndPair
forall a b. (a -> b) -> a -> b
$ ( ( Pattern
c_mapping_key forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DePair forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
s_separate Int
n Context
c
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
ns_flow_map_explicit_entry Int
n Context
c )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
ns_flow_pair_entry Int
n Context
c )
ns_flow_pair_entry :: Int -> Context -> Pattern
ns_flow_pair_entry Int
n Context
c = ( Int -> Context -> Pattern
ns_flow_pair_yaml_key_entry Int
n Context
c
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
c_ns_flow_map_empty_key_entry Int
n Context
c
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
c_ns_flow_pair_json_key_entry Int
n Context
c )
ns_flow_pair_yaml_key_entry :: Int -> Context -> Pattern
ns_flow_pair_yaml_key_entry Int
n Context
c = Context -> Pattern
ns_s_implicit_yaml_key Context
FlowKey
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
c_ns_flow_map_separate_value Int
n Context
c
c_ns_flow_pair_json_key_entry :: Int -> Context -> Pattern
c_ns_flow_pair_json_key_entry Int
n Context
c = Context -> Pattern
c_s_implicit_json_key Context
FlowKey
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
c_ns_flow_map_adjacent_value Int
n Context
c
ns_s_implicit_yaml_key :: Context -> Pattern
ns_s_implicit_yaml_key Context
c = ( Decision
DeNode forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Int -> Context -> Pattern
ns_flow_yaml_node Int
na Context
c ) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
s_separate_in_line ?) )
forall match result.
Match match result =>
match -> Int -> Parser result
`limitedTo` Int
1024
c_s_implicit_json_key :: Context -> Pattern
c_s_implicit_json_key Context
c = ( Decision
DeNode forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Int -> Context -> Pattern
c_flow_json_node Int
na Context
c ) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
s_separate_in_line ?) )
forall match result.
Match match result =>
match -> Int -> Parser result
`limitedTo` Int
1024
ns_flow_yaml_content :: Int -> Context -> Pattern
ns_flow_yaml_content Int
n Context
c = Int -> Context -> Pattern
ns_plain Int
n Context
c
c_flow_json_content :: Int -> Context -> Pattern
c_flow_json_content Int
n Context
c = Int -> Context -> Pattern
c_flow_sequence Int
n Context
c forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
c_flow_mapping Int
n Context
c
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
c_single_quoted Int
n Context
c forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
c_double_quoted Int
n Context
c
ns_flow_content :: Int -> Context -> Pattern
ns_flow_content Int
n Context
c = Int -> Context -> Pattern
ns_flow_yaml_content Int
n Context
c forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
c_flow_json_content Int
n Context
c
ns_flow_yaml_node :: Int -> Context -> Pattern
ns_flow_yaml_node Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginNode Code
EndNode
forall a b. (a -> b) -> a -> b
$ Pattern
c_ns_alias_node
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
ns_flow_yaml_content Int
n Context
c
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Int -> Context -> Pattern
c_ns_properties Int
n Context
c
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( ( Int -> Context -> Pattern
s_separate Int
n Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
ns_flow_yaml_content Int
n Context
c )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
e_scalar ) )
c_flow_json_node :: Int -> Context -> Pattern
c_flow_json_node Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginNode Code
EndNode
forall a b. (a -> b) -> a -> b
$ ( Int -> Context -> Pattern
c_ns_properties Int
n Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
s_separate Int
n Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
c_flow_json_content Int
n Context
c
ns_flow_node :: Int -> Context -> Pattern
ns_flow_node Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginNode Code
EndNode
forall a b. (a -> b) -> a -> b
$ Pattern
c_ns_alias_node
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
ns_flow_content Int
n Context
c
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Int -> Context -> Pattern
c_ns_properties Int
n Context
c
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( ( Int -> Context -> Pattern
s_separate Int
n Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
ns_flow_content Int
n Context
c )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
e_scalar ) )
Int
n = Decision
DeHeader
forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( do Int
m <- Int -> Parser Int
c_indentation_indicator Int
n
Chomp
t <- Parser Chomp
c_chomping_indicator
( Pattern
s_white forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
b_char ) forall match result.
Match match result =>
match -> Decision -> Pattern
?! Decision
DeHeader
Pattern
s_b_comment
forall a. a -> Parser a
result (Int
m, Chomp
t)
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ do Chomp
t <- Parser Chomp
c_chomping_indicator
Int
m <- Int -> Parser Int
c_indentation_indicator Int
n
Pattern
s_b_comment
forall a. a -> Parser a
result (Int
m, Chomp
t) )
c_indentation_indicator :: Int -> Parser Int
c_indentation_indicator Int
n = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Int -> Int
fixup (forall match result. Match match result => match -> Pattern
indicator ( (Char, Char)
ns_dec_digit forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result1
- Char
'0' ) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Parser Int
asInteger)
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Parser Int
detect_scalar_indentation Int
n
where
fixup :: Int -> Int
fixup | Int
n forall a. Eq a => a -> a -> Bool
== -Int
1 = (Int -> Int -> Int
.+ Int
1)
| Bool
otherwise = forall a. a -> a
id
detect_scalar_indentation :: Int -> Parser Int
detect_scalar_indentation Int
n = forall parameter result.
Match parameter result =>
parameter -> Parser result
peek forall a b. (a -> b) -> a -> b
$ ( Pattern
nb_char *)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
b_break forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( (Char
s_space *) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
b_break *) ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Parser Int
count_spaces (-Int
n)
count_spaces :: Int -> Parser Int
count_spaces Int
n = (Char
s_space forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Parser Int
count_spaces (Int
n Int -> Int -> Int
.+ Int
1))
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ forall a. a -> Parser a
result (forall a. Ord a => a -> a -> a
max Int
1 Int
n)
c_chomping_indicator :: Parser Chomp
c_chomping_indicator = forall match result. Match match result => match -> Pattern
indicator Char
'-' forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall a. a -> Parser a
result Chomp
Strip
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ forall match result. Match match result => match -> Pattern
indicator Char
'+' forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& forall a. a -> Parser a
result Chomp
Keep
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ forall a. a -> Parser a
result Chomp
Clip
end_block_scalar :: Chomp -> Pattern
end_block_scalar Chomp
t = case Chomp
t of
Chomp
Strip -> Code -> Pattern
emptyToken Code
EndScalar
Chomp
Clip -> Code -> Pattern
emptyToken Code
EndScalar
Chomp
Keep -> Pattern
empty
b_chomped_last :: Chomp -> Pattern
b_chomped_last Chomp
t = case Chomp
t of
Chomp
Strip -> Code -> Pattern
emptyToken Code
EndScalar forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
b_non_content
Chomp
Clip -> Pattern
b_as_line_feed forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Code -> Pattern
emptyToken Code
EndScalar
Chomp
Keep -> Pattern
b_as_line_feed
l_chomped_empty :: Int -> Chomp -> Pattern
l_chomped_empty Int
n Chomp
t = case Chomp
t of
Chomp
Strip -> Int -> Pattern
l_strip_empty Int
n
Chomp
Clip -> Int -> Pattern
l_strip_empty Int
n
Chomp
Keep -> Int -> Pattern
l_keep_empty Int
n
l_strip_empty :: Int -> Pattern
l_strip_empty Int
n = ( Int -> Pattern
s_indent_le Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
b_non_content *)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
l_trail_comments Int
n ?)
l_keep_empty :: Int -> Pattern
l_keep_empty Int
n = ( Int -> Context -> Pattern
l_empty Int
n Context
BlockIn *)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Code -> Pattern
emptyToken Code
EndScalar
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
l_trail_comments Int
n ?)
Int
n = Int -> Pattern
s_indent_lt Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_nb_comment_text forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
b_comment
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty Pattern
l_comment *)
c_l__literal :: Int -> Pattern
c_l__literal Int
n = do Code -> Pattern
emptyToken Code
BeginScalar
Pattern
c_literal forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode
(Int
m, Chomp
t) <- Int -> Parser (Int, Chomp)
c_b_block_header Int
n forall match result.
Match match result =>
match -> Pattern -> Parser result
`prefixErrorWith` Code -> Pattern
emptyToken Code
EndScalar
forall match result. Match match result => match -> Pattern
text ( Int -> Chomp -> Pattern
l_literal_content (Int
n Int -> Int -> Int
.+ Int
m) Chomp
t )
l_nb_literal_text :: Int -> Pattern
l_nb_literal_text Int
n = ( Int -> Context -> Pattern
l_empty Int
n Context
BlockIn *)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
s_indent Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
nb_char +)
b_nb_literal_next :: Int -> Pattern
b_nb_literal_next Int
n = Pattern
b_as_line_feed
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
l_nb_literal_text Int
n
l_literal_content :: Int -> Chomp -> Pattern
l_literal_content Int
n Chomp
t = ( ( Int -> Pattern
l_nb_literal_text Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
b_nb_literal_next Int
n *) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Chomp -> Pattern
b_chomped_last Chomp
t )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Chomp -> Pattern
end_block_scalar Chomp
t )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Chomp -> Pattern
l_chomped_empty Int
n Chomp
t
c_l__folded :: Int -> Pattern
c_l__folded Int
n = do Code -> Pattern
emptyToken Code
BeginScalar
Pattern
c_folded forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode
(Int
m, Chomp
t) <- Int -> Parser (Int, Chomp)
c_b_block_header Int
n forall match result.
Match match result =>
match -> Pattern -> Parser result
`prefixErrorWith` Code -> Pattern
emptyToken Code
EndScalar
forall match result. Match match result => match -> Pattern
text ( Int -> Chomp -> Pattern
l_folded_content (Int
n Int -> Int -> Int
.+ Int
m) Chomp
t )
s_nb_folded_text :: Int -> Pattern
s_nb_folded_text Int
n = Int -> Pattern
s_indent Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
ns_char forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeFold forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
nb_char *)
l_nb_folded_lines :: Int -> Pattern
l_nb_folded_lines Int
n = Int -> Pattern
s_nb_folded_text Int
n
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
b_l_folded Int
n Context
BlockIn forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
s_nb_folded_text Int
n *)
s_nb_spaced_text :: Int -> Pattern
s_nb_spaced_text Int
n = Int -> Pattern
s_indent Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
s_white forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeFold forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
nb_char *)
b_l_spaced :: Int -> Pattern
b_l_spaced Int
n = Pattern
b_as_line_feed
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
l_empty Int
n Context
BlockIn *)
l_nb_spaced_lines :: Int -> Pattern
l_nb_spaced_lines Int
n = Int -> Pattern
s_nb_spaced_text Int
n
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
b_l_spaced Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
s_nb_spaced_text Int
n *)
l_nb_same_lines :: Int -> Pattern
l_nb_same_lines Int
n = ( Int -> Context -> Pattern
l_empty Int
n Context
BlockIn *)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Decision
DeFold forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Int -> Pattern
l_nb_folded_lines Int
n forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Pattern
l_nb_spaced_lines Int
n )
l_nb_diff_lines :: Int -> Pattern
l_nb_diff_lines Int
n = Int -> Pattern
l_nb_same_lines Int
n
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
b_as_line_feed forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
l_nb_same_lines Int
n *)
l_folded_content :: Int -> Chomp -> Pattern
l_folded_content Int
n Chomp
t = ( ( Int -> Pattern
l_nb_diff_lines Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Chomp -> Pattern
b_chomped_last Chomp
t )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Chomp -> Pattern
end_block_scalar Chomp
t )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Chomp -> Pattern
l_chomped_empty Int
n Chomp
t
detect_collection_indentation :: Int -> Parser Int
detect_collection_indentation Int
n = forall parameter result.
Match parameter result =>
parameter -> Parser result
peek forall a b. (a -> b) -> a -> b
$ ( forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty Pattern
l_comment* ) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Parser Int
count_spaces (-Int
n)
detect_inline_indentation :: Parser Int
detect_inline_indentation = forall parameter result.
Match parameter result =>
parameter -> Parser result
peek forall a b. (a -> b) -> a -> b
$ Int -> Parser Int
count_spaces Int
0
l__block_sequence :: Int -> Pattern
l__block_sequence Int
n = do Int
m <- Int -> Parser Int
detect_collection_indentation Int
n
Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginSequence Code
EndSequence forall a b. (a -> b) -> a -> b
$ ( Int -> Pattern
s_indent (Int
n Int -> Int -> Int
.+ Int
m) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
c_l_block_seq_entry (Int
n Int -> Int -> Int
.+ Int
m) +)
c_l_block_seq_entry :: Int -> Pattern
c_l_block_seq_entry Int
n = Pattern
c_sequence_entry forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
ns_char >!) forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
s_l__block_indented Int
n Context
BlockIn
s_l__block_indented :: Int -> Context -> Pattern
s_l__block_indented Int
n Context
c = do Int
m <- Parser Int
detect_inline_indentation
Decision
DeNode forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( ( Int -> Pattern
s_indent Int
m
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
ns_l_in_line_sequence (Int
n Int -> Int -> Int
.+ Int
1 Int -> Int -> Int
.+ Int
m)
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Pattern
ns_l_in_line_mapping (Int
n Int -> Int -> Int
.+ Int
1 Int -> Int -> Int
.+ Int
m) ) )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
s_l__block_node Int
n Context
c
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
e_node forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
s_l_comments ?) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
unparsed (Int
n Int -> Int -> Int
.+ Int
1) ) ) forall match1 result.
Match match1 result =>
match1 -> Parser result -> Parser result
`recovery` Int -> Pattern
unparsed (Int
n Int -> Int -> Int
.+ Int
1)
ns_l_in_line_sequence :: Int -> Pattern
ns_l_in_line_sequence Int
n = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginNode Code
EndNode
forall a b. (a -> b) -> a -> b
$ Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginSequence Code
EndSequence
forall a b. (a -> b) -> a -> b
$ Int -> Pattern
c_l_block_seq_entry Int
n
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
s_indent Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
c_l_block_seq_entry Int
n *)
l__block_mapping :: Int -> Pattern
l__block_mapping Int
n = do Int
m <- Int -> Parser Int
detect_collection_indentation Int
n
Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginMapping Code
EndMapping forall a b. (a -> b) -> a -> b
$ ( Int -> Pattern
s_indent (Int
n Int -> Int -> Int
.+ Int
m) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
ns_l_block_map_entry (Int
n Int -> Int -> Int
.+ Int
m) +)
ns_l_block_map_entry :: Int -> Pattern
ns_l_block_map_entry Int
n = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginPair Code
EndPair
forall a b. (a -> b) -> a -> b
$ Int -> Pattern
c_l_block_map_explicit_entry Int
n
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Pattern
ns_l_block_map_implicit_entry Int
n
c_l_block_map_explicit_entry :: Int -> Pattern
c_l_block_map_explicit_entry Int
n = Int -> Pattern
c_l_block_map_explicit_key Int
n
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
l_block_map_explicit_value Int
n
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
e_node )
c_l_block_map_explicit_key :: Int -> Pattern
c_l_block_map_explicit_key Int
n = Pattern
c_mapping_key forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
ns_char >!) forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
s_l__block_indented Int
n Context
BlockOut
l_block_map_explicit_value :: Int -> Pattern
l_block_map_explicit_value Int
n = Int -> Pattern
s_indent Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
c_mapping_value forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
s_l__block_indented Int
n Context
BlockOut
ns_l_block_map_implicit_entry :: Int -> Pattern
ns_l_block_map_implicit_entry Int
n = ( Pattern
ns_s_block_map_implicit_key
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
e_node )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
c_l_block_map_implicit_value Int
n
ns_s_block_map_implicit_key :: Pattern
ns_s_block_map_implicit_key = Context -> Pattern
c_s_implicit_json_key Context
BlockKey
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Context -> Pattern
ns_s_implicit_yaml_key Context
BlockKey
c_l_block_map_implicit_value :: Int -> Pattern
c_l_block_map_implicit_value Int
n = Pattern
c_mapping_value forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeNode
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( ( Int -> Context -> Pattern
s_l__block_node Int
n Context
BlockOut
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
e_node forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
s_l_comments ?) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
unparsed (Int
n Int -> Int -> Int
.+ Int
1) ) ) forall match1 result.
Match match1 result =>
match1 -> Parser result -> Parser result
`recovery` Int -> Pattern
unparsed (Int
n Int -> Int -> Int
.+ Int
1) )
ns_l_in_line_mapping :: Int -> Pattern
ns_l_in_line_mapping Int
n = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginNode Code
EndNode
forall a b. (a -> b) -> a -> b
$ Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginMapping Code
EndMapping
forall a b. (a -> b) -> a -> b
$ Int -> Pattern
ns_l_block_map_entry Int
n
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
s_indent Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
ns_l_block_map_entry Int
n *)
unparsed :: Int -> Pattern
unparsed Int
n = ( Pattern
sol forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
unparsed_text forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
unparsed_break )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty ( Int -> Pattern
unparsed_indent Int
n forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
unparsed_text forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
unparsed_break ) *)
unparsed_indent :: Int -> Pattern
unparsed_indent Int
n = forall match result. Match match result => Code -> match -> Pattern
token Code
Unparsed ( Char
s_space forall match result. Match match result => match -> Int -> Pattern
% Int
n )
unparsed_text :: Pattern
unparsed_text = forall match result. Match match result => Code -> match -> Pattern
token Code
Unparsed ( Pattern -> Pattern
upto ( Pattern
eof forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_forbidden forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
b_break ) )
unparsed_break :: Pattern
unparsed_break = Pattern
eof forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ forall parameter result.
Match parameter result =>
parameter -> Parser result
peek Pattern
c_forbidden forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ forall match result. Match match result => Code -> match -> Pattern
token Code
Unparsed Pattern
b_break forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
empty
s_l__block_node :: Int -> Context -> Pattern
s_l__block_node Int
n Context
c = Int -> Context -> Pattern
s_l__block_in_block Int
n Context
c forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Pattern
s_l__flow_in_block Int
n
s_l__flow_in_block :: Int -> Pattern
s_l__flow_in_block Int
n = Int -> Context -> Pattern
s_separate (Int
n Int -> Int -> Int
.+ Int
1) Context
FlowOut
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
ns_flow_node (Int
n Int -> Int -> Int
.+ Int
1) Context
FlowOut forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
s_l_comments
s_l__block_in_block :: Int -> Context -> Pattern
s_l__block_in_block Int
n Context
c = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginNode Code
EndNode
forall a b. (a -> b) -> a -> b
$ ( Int -> Context -> Pattern
s_l__block_scalar Int
n Context
c forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Context -> Pattern
s_l__block_collection Int
n Context
c )
s_l__block_scalar :: Int -> Context -> Pattern
s_l__block_scalar Int
n Context
c = Int -> Context -> Pattern
s_separate (Int
n Int -> Int -> Int
.+ Int
1) Context
c
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Context -> Pattern
c_ns_properties (Int
n Int -> Int -> Int
.+ Int
1) Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
s_separate (Int
n Int -> Int -> Int
.+ Int
1) Context
c ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
c_l__literal Int
n forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Pattern
c_l__folded Int
n )
s_l__block_collection :: Int -> Context -> Pattern
s_l__block_collection Int
n Context
c = ( Int -> Context -> Pattern
s_separate (Int
n Int -> Int -> Int
.+ Int
1) Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Context -> Pattern
c_ns_properties (Int
n Int -> Int -> Int
.+ Int
1) Context
c forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
s_l_comments >?) ?)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
s_l_comments
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Int -> Pattern
l__block_sequence (Int -> Context -> Int
seq_spaces Int
n Context
c)
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Int -> Pattern
l__block_mapping Int
n )
seq_spaces :: Int -> Context -> Int
seq_spaces Int
n Context
c = case Context
c of
Context
BlockOut -> Int
n Int -> Int -> Int
.- Int
1
Context
BlockIn -> Int
n
Context
_ -> forall a. HasCallStack => String -> a
error String
"unexpected node style pattern in seq_spaces"
l_document_prefix :: Pattern
l_document_prefix = ( Pattern
c_byte_order_mark ?) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty Pattern
l_comment *)
c_directives_end :: Pattern
c_directives_end = forall match result. Match match result => Code -> match -> Pattern
token Code
DirectivesEnd [ Char
'-', Char
'-', Char
'-' ]
c_document_end :: Pattern
c_document_end = forall match result. Match match result => Code -> match -> Pattern
token Code
DocumentEnd [ Char
'.', Char
'.', Char
'.' ]
l_document_suffix :: Pattern
l_document_suffix = Pattern
c_document_end forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
s_l_comments
c_forbidden :: Pattern
c_forbidden = Pattern
sol
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
c_directives_end forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
c_document_end )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
b_char forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
s_white forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
eof )
l_bare_document :: Pattern
l_bare_document = Decision
DeNode forall match result.
Match match result =>
Decision -> match -> Parser result
^ Int -> Context -> Pattern
s_l__block_node (-Int
1) Context
BlockIn
forall match1 result.
Match match1 result =>
match1 -> Parser result -> Parser result
`forbidding` Pattern
c_forbidden
l_explicit_document :: Pattern
l_explicit_document = ( Pattern
c_directives_end forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
b_char forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
s_white forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
eof >?)) forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeDoc
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( ( Pattern
l_bare_document
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
e_node forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
s_l_comments ?) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Int -> Pattern
unparsed Int
0 ) forall match1 result.
Match match1 result =>
match1 -> Parser result -> Parser result
`recovery` Int -> Pattern
unparsed Int
0 )
l_directives_document :: Pattern
l_directives_document = ( Pattern
l_directive +)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Pattern
l_explicit_document
l_any_document :: Pattern
l_any_document = Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginDocument Code
EndDocument
forall a b. (a -> b) -> a -> b
$ Decision
DeDoc forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Pattern
l_directives_document
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
l_explicit_document
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
l_bare_document ) forall match1 result.
Match match1 result =>
match1 -> Parser result -> Parser result
`recovery` Int -> Pattern
unparsed Int
0
l_yaml_stream :: Pattern
l_yaml_stream = ( forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty Pattern
l_document_prefix *)
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
eof forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( Pattern
c_document_end forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
b_char forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
s_white forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
eof ) >?) forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
l_any_document )
forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty ( Decision
DeMore forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( ( Pattern
l_document_suffix forall match result.
Match match result =>
match -> Decision -> Pattern
! Decision
DeMore +) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty Pattern
l_document_prefix *) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& ( Pattern
eof forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ Pattern
l_any_document )
forall match1 result match2.
(Match match1 result, Match match2 result) =>
match1 -> match2 -> Parser result
/ ( forall parameter result.
Match parameter result =>
parameter -> Parser result
nonEmpty Pattern
l_document_prefix *) forall match1 result1 match2 result2.
(Match match1 result1, Match match2 result2) =>
match1 -> match2 -> Parser result2
& Decision
DeDoc forall match result.
Match match result =>
Decision -> match -> Parser result
^ ( Code -> Code -> Pattern -> Pattern
wrapTokens Code
BeginDocument Code
EndDocument Pattern
l_explicit_document ?) ) ) *)