{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}

-- | Parse and serialize between FDF files and `Map [Text] Text`.

module Text.FDF (FDF (FDF, body), Field (Field, name, value, kids),
                 mapWithKey, mapFieldWithKey,
                 foldMapWithKey, foldMapFieldWithKey,
                 traverseWithKey, traverseFieldWithKey,
                 parse, serialize) where

import Control.Applicative ((<*), (<*>), (<|>), many, some, optional)
import Data.Bifunctor (bimap)
import Data.ByteString (ByteString)
import Data.ByteString qualified as ByteString
import Data.Char (chr, digitToInt, isAscii, isSpace, ord)
import Data.Monoid.Instances.ByteString.UTF8 (ByteStringUTF8 (ByteStringUTF8))
import Data.Monoid.Textual (singleton, toString, toText)
import Data.Text (Text)
import Data.Text qualified as Text
import Data.Text.Encoding (decodeUtf16BE, encodeUtf8, encodeUtf16BE)
import Numeric (showOct)
import Rank2 qualified
import Text.Grampa
import Text.Grampa.Combinators
import Text.Parser.Char (octDigit)
import Text.Parser.Combinators (manyTill)
import Text.Grampa.PEG.Backtrack qualified as PEG

type Parser = PEG.Parser (Rank2.Only FDF)

-- | Parsed FDF data structure
data FDF = FDF {
  FDF -> ByteString
header :: ByteString,
  FDF -> Field
body :: Field,
  FDF -> ByteString
trailer :: ByteString}
  deriving (Int -> FDF -> ShowS
[FDF] -> ShowS
FDF -> String
(Int -> FDF -> ShowS)
-> (FDF -> String) -> ([FDF] -> ShowS) -> Show FDF
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> FDF -> ShowS
showsPrec :: Int -> FDF -> ShowS
$cshow :: FDF -> String
show :: FDF -> String
$cshowList :: [FDF] -> ShowS
showList :: [FDF] -> ShowS
Show)

-- | The body of FDF is a tree of nestable 'Field's.
data Field = Field {
  Field -> Text
name :: Text,
  Field -> Maybe Text
value :: Maybe Text,
  Field -> [Field]
kids :: [Field]}
  deriving (Int -> Field -> ShowS
[Field] -> ShowS
Field -> String
(Int -> Field -> ShowS)
-> (Field -> String) -> ([Field] -> ShowS) -> Show Field
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Field -> ShowS
showsPrec :: Int -> Field -> ShowS
$cshow :: Field -> String
show :: Field -> String
$cshowList :: [Field] -> ShowS
showList :: [Field] -> ShowS
Show)

mapWithKey :: ([Text] -> Text -> Text) -> FDF -> FDF
mapWithKey :: ([Text] -> Text -> Text) -> FDF -> FDF
mapWithKey [Text] -> Text -> Text
f x :: FDF
x@FDF{Field
body :: FDF -> Field
body :: Field
body} = FDF
x{body = mapFieldWithKey f body}

mapFieldWithKey :: ([Text] -> Text -> Text) -> Field -> Field
mapFieldWithKey :: ([Text] -> Text -> Text) -> Field -> Field
mapFieldWithKey [Text] -> Text -> Text
f x :: Field
x@Field{Text
name :: Field -> Text
name :: Text
name, Maybe Text
value :: Field -> Maybe Text
value :: Maybe Text
value, [Field]
kids :: Field -> [Field]
kids :: [Field]
kids} =
  Field
x{value = f [name] <$> value,
    kids = mapFieldWithKey (f . (name:)) <$> kids}

foldMapWithKey :: Monoid a => ([Text] -> Text -> a) -> FDF -> a
foldMapWithKey :: forall a. Monoid a => ([Text] -> Text -> a) -> FDF -> a
foldMapWithKey [Text] -> Text -> a
f x :: FDF
x@FDF{Field
body :: FDF -> Field
body :: Field
body} = ([Text] -> Text -> a) -> Field -> a
forall a. Monoid a => ([Text] -> Text -> a) -> Field -> a
foldMapFieldWithKey [Text] -> Text -> a
f Field
body

foldMapFieldWithKey :: Monoid a => ([Text] -> Text -> a) -> Field -> a
foldMapFieldWithKey :: forall a. Monoid a => ([Text] -> Text -> a) -> Field -> a
foldMapFieldWithKey [Text] -> Text -> a
f x :: Field
x@Field{Text
name :: Field -> Text
name :: Text
name, Maybe Text
value :: Field -> Maybe Text
value :: Maybe Text
value, [Field]
kids :: Field -> [Field]
kids :: [Field]
kids} =
  (Text -> a) -> Maybe Text -> a
forall m a. Monoid m => (a -> m) -> Maybe a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap ([Text] -> Text -> a
f [Text
name]) Maybe Text
value a -> a -> a
forall a. Semigroup a => a -> a -> a
<> (Field -> a) -> [Field] -> a
forall m a. Monoid m => (a -> m) -> [a] -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (([Text] -> Text -> a) -> Field -> a
forall a. Monoid a => ([Text] -> Text -> a) -> Field -> a
foldMapFieldWithKey (([Text] -> Text -> a) -> Field -> a)
-> ([Text] -> Text -> a) -> Field -> a
forall a b. (a -> b) -> a -> b
$ [Text] -> Text -> a
f ([Text] -> Text -> a) -> ([Text] -> [Text]) -> [Text] -> Text -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text
nameText -> [Text] -> [Text]
forall a. a -> [a] -> [a]
:)) [Field]
kids

traverseWithKey :: Applicative f => ([Text] -> Text -> f Text) -> FDF -> f FDF
traverseWithKey :: forall (f :: * -> *).
Applicative f =>
([Text] -> Text -> f Text) -> FDF -> f FDF
traverseWithKey [Text] -> Text -> f Text
f x :: FDF
x@FDF{Field
body :: FDF -> Field
body :: Field
body} = (\Field
body'-> FDF
x{body = body'}) (Field -> FDF) -> f Field -> f FDF
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ([Text] -> Text -> f Text) -> Field -> f Field
forall (f :: * -> *).
Applicative f =>
([Text] -> Text -> f Text) -> Field -> f Field
traverseFieldWithKey [Text] -> Text -> f Text
f Field
body

traverseFieldWithKey :: Applicative f => ([Text] -> Text -> f Text) -> Field -> f Field
traverseFieldWithKey :: forall (f :: * -> *).
Applicative f =>
([Text] -> Text -> f Text) -> Field -> f Field
traverseFieldWithKey [Text] -> Text -> f Text
f x :: Field
x@Field{Text
name :: Field -> Text
name :: Text
name, Maybe Text
value :: Field -> Maybe Text
value :: Maybe Text
value, [Field]
kids :: Field -> [Field]
kids :: [Field]
kids} =
  Text -> Maybe Text -> [Field] -> Field
Field Text
name (Maybe Text -> [Field] -> Field)
-> f (Maybe Text) -> f ([Field] -> Field)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Text -> f Text) -> Maybe Text -> f (Maybe Text)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Maybe a -> f (Maybe b)
traverse ([Text] -> Text -> f Text
f [Text
name]) Maybe Text
value f ([Field] -> Field) -> f [Field] -> f Field
forall a b. f (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Field -> f Field) -> [Field] -> f [Field]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> [a] -> f [b]
traverse (([Text] -> Text -> f Text) -> Field -> f Field
forall (f :: * -> *).
Applicative f =>
([Text] -> Text -> f Text) -> Field -> f Field
traverseFieldWithKey (([Text] -> Text -> f Text) -> Field -> f Field)
-> ([Text] -> Text -> f Text) -> Field -> f Field
forall a b. (a -> b) -> a -> b
$ [Text] -> Text -> f Text
f ([Text] -> Text -> f Text)
-> ([Text] -> [Text]) -> [Text] -> Text -> f Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Text
nameText -> [Text] -> [Text]
forall a. a -> [a] -> [a]
:)) [Field]
kids

serialize :: FDF -> ByteString
serialize :: FDF -> ByteString
serialize FDF{ByteString
header :: FDF -> ByteString
header :: ByteString
header, Field
body :: FDF -> Field
body :: Field
body, ByteString
trailer :: FDF -> ByteString
trailer :: ByteString
trailer} =
  ByteString
"%FDF-1.2\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
header
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
"<<\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
"/FDF\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
"<<\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
"/Fields [\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> Field -> ByteString
serializeField Field
body ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
"\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
"]\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
">>\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
">>\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
trailer
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
"%%EOF\n"

serializeField :: Field -> ByteString
serializeField :: Field -> ByteString
serializeField Field{Text
name :: Field -> Text
name :: Text
name, Maybe Text
value :: Field -> Maybe Text
value :: Maybe Text
value, [Field]
kids :: Field -> [Field]
kids :: [Field]
kids} =
  ByteString
"<<\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
"/T (" ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> Text -> ByteString
encodeUtf8 Text
name ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
")\n"
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> (Text -> ByteString) -> Maybe Text -> ByteString
forall m a. Monoid m => (a -> m) -> Maybe a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (\Text
v-> ByteString
"/V (" ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> Text -> ByteString
serializeValue Text
v ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
")\n") Maybe Text
value
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> (if [Field] -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [Field]
kids then ByteString
"" else ByteString
"/Kids [\n" ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString -> [ByteString] -> ByteString
ByteString.intercalate ByteString
"\n" (Field -> ByteString
serializeField (Field -> ByteString) -> [Field] -> [ByteString]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Field]
kids) ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
"]\n")
  ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
">>"

serializeValue :: Text -> ByteString
serializeValue :: Text -> ByteString
serializeValue Text
t
  | Text -> Bool
Text.isAscii Text
t = Text -> ByteString
encodeUtf8 (Text
plain Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
escaped)
  | Bool
otherwise = ByteString
utf16beBOM ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> Text -> ByteString
encodeUtf16BE Text
t
  where (Text
plain, Text
special) = (Char -> Bool) -> Text -> (Text, Text)
Text.span (\Char
c -> Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
>= Char
' ' Bool -> Bool -> Bool
&& Char
c Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char
'(', Char
')', Char
'\\']) Text
t
        escaped :: Text
escaped = (Char -> Text) -> Text -> Text
Text.concatMap Char -> Text
escape Text
special
        escape :: Char -> Text
escape Char
'(' = String -> Text
Text.pack String
"\\("
        escape Char
')' = Text
"\\)"
        escape Char
'\\' = Text
"\\\\"
        escape Char
'\n' = Text
"\\n"
        escape Char
'\r' = Text
"\\r"
        escape Char
'\t' = Text
"\\t"
        escape Char
'\b' = Text
"\\b"
        escape Char
c
          | Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
< Char
' ' = Text
"\\" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Int -> Char -> Text -> Text
Text.justifyRight Int
3 Char
'0' (String -> Text
Text.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ Int -> ShowS
forall a. Integral a => a -> ShowS
showOct (Char -> Int
ord Char
c) String
"")
          | Bool
otherwise = Char -> Text
Text.singleton Char
c

parse :: ByteString -> Either String FDF
parse :: ByteString -> Either String FDF
parse ByteString
input =
  (ParseFailure Pos ByteStringUTF8 -> String)
-> (FDF -> FDF)
-> Either (ParseFailure Pos ByteStringUTF8) FDF
-> Either String FDF
forall a b c d. (a -> b) -> (c -> d) -> Either a c -> Either b d
forall (p :: * -> * -> *) a b c d.
Bifunctor p =>
(a -> b) -> (c -> d) -> p a c -> p b d
bimap (\ParseFailure Pos ByteStringUTF8
failure-> (ByteStringUTF8 -> String) -> ByteStringUTF8 -> String
forall t. TextualMonoid t => (t -> String) -> t -> String
toString (String -> ByteStringUTF8 -> String
forall a b. a -> b -> a
const String
"<?>") (ByteStringUTF8 -> String) -> ByteStringUTF8 -> String
forall a b. (a -> b) -> a -> b
$ ByteStringUTF8
-> ParseFailure Pos ByteStringUTF8 -> Int -> ByteStringUTF8
forall s pos.
(Ord s, TextualMonoid s, Position pos) =>
s -> ParseFailure pos s -> Int -> s
failureDescription ByteStringUTF8
s ParseFailure Pos ByteStringUTF8
failure Int
4) FDF -> FDF
forall a. a -> a
id (Either (ParseFailure Pos ByteStringUTF8) FDF -> Either String FDF)
-> Either (ParseFailure Pos ByteStringUTF8) FDF
-> Either String FDF
forall a b. (a -> b) -> a -> b
$ (Only FDF (Parser (Only FDF) ByteStringUTF8)
 -> ByteStringUTF8
 -> Only FDF (Either (ParseFailure Pos ByteStringUTF8)))
-> Parser (Only FDF) ByteStringUTF8 FDF
-> ByteStringUTF8
-> Either (ParseFailure Pos ByteStringUTF8) FDF
forall r (p :: ((* -> *) -> *) -> * -> * -> *) s (f :: * -> *).
(Only r (p (Only r) s) -> s -> Only r f)
-> p (Only r) s r -> s -> f r
simply Only FDF (Parser (Only FDF) ByteStringUTF8)
-> ByteStringUTF8
-> Only FDF (Either (ParseFailure Pos ByteStringUTF8))
Only FDF (Parser (Only FDF) ByteStringUTF8)
-> ByteStringUTF8
-> Only FDF (ResultFunctor (Parser (Only FDF) ByteStringUTF8))
forall s (g :: (* -> *) -> *).
(ParserInput (Parser (Only FDF) ByteStringUTF8) ~ s,
 GrammarConstraint (Parser (Only FDF) ByteStringUTF8) g, Eq s,
 FactorialMonoid s) =>
g (Parser (Only FDF) ByteStringUTF8)
-> s -> g (ResultFunctor (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *) s (g :: (* -> *) -> *).
(MultiParsing m, ParserInput m ~ s, GrammarConstraint m g, Eq s,
 FactorialMonoid s) =>
g m -> s -> g (ResultFunctor m)
parseComplete Parser (Only FDF) ByteStringUTF8 FDF
parser ByteStringUTF8
s
  where s :: ByteStringUTF8
s = ByteString -> ByteStringUTF8
ByteStringUTF8 ByteString
input

parser :: Parser ByteStringUTF8 FDF
parser :: Parser (Only FDF) ByteStringUTF8 FDF
parser = ByteString -> Field -> ByteString -> FDF
FDF
  (ByteString -> Field -> ByteString -> FDF)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ByteString -> Field -> ByteString -> FDF)
forall a b.
a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ (ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"%FDF-1.2" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"first line")
  Parser
  (Only FDF)
  ByteStringUTF8
  (ByteString -> Field -> ByteString -> FDF)
-> Parser (Only FDF) ByteStringUTF8 ByteString
-> Parser (Only FDF) ByteStringUTF8 (Field -> ByteString -> FDF)
forall a b.
Parser (Only FDF) ByteStringUTF8 (a -> b)
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteString
extract (((ParserInput (Parser (Only FDF) ByteStringUTF8) -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
(ParserInput m -> Bool) -> m (ParserInput m)
takeWhile1 (ParserInput (Parser (Only FDF) ByteStringUTF8)
-> [ParserInput (Parser (Only FDF) ByteStringUTF8)] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [ByteStringUTF8
"\r", ByteStringUTF8
"\n"]) Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"bytes")
               Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. Semigroup a => a -> a -> a
<> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. Semigroup a => a -> a -> a
<> ([ByteStringUTF8] -> ByteStringUTF8
forall a. Monoid a => [a] -> a
mconcat ([ByteStringUTF8] -> ByteStringUTF8)
-> Parser (Only FDF) ByteStringUTF8 [ByteStringUTF8]
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 [ByteStringUTF8]
forall (m :: * -> *) a end. Alternative m => m a -> m end -> m [a]
manyTill Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
line Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
begin) Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"header")
  Parser (Only FDF) ByteStringUTF8 (Field -> ByteString -> FDF)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 (Field -> ByteString -> FDF)
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"/FDF" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (Char -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputCharParsing m =>
(Char -> Bool) -> m (ParserInput m)
takeCharsWhile (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
' ') Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"end header")
  Parser (Only FDF) ByteStringUTF8 (Field -> ByteString -> FDF)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 (Field -> ByteString -> FDF)
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
begin
  Parser (Only FDF) ByteStringUTF8 (Field -> ByteString -> FDF)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 (Field -> ByteString -> FDF)
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"/Fields [" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (Char -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputCharParsing m =>
(Char -> Bool) -> m (ParserInput m)
takeCharsWhile (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
' ') Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"fields")
  Parser (Only FDF) ByteStringUTF8 (Field -> ByteString -> FDF)
-> Parser (Only FDF) ByteStringUTF8 Field
-> Parser (Only FDF) ByteStringUTF8 (ByteString -> FDF)
forall a b.
Parser (Only FDF) ByteStringUTF8 (a -> b)
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Only FDF) ByteStringUTF8 Field
field
  Parser (Only FDF) ByteStringUTF8 (ByteString -> FDF)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 (ByteString -> FDF)
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"]" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (Char -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputCharParsing m =>
(Char -> Bool) -> m (ParserInput m)
takeCharsWhile (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
' ') Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"end the fields")
  Parser (Only FDF) ByteStringUTF8 (ByteString -> FDF)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 (ByteString -> FDF)
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
end Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"end the body")
  Parser (Only FDF) ByteStringUTF8 (ByteString -> FDF)
-> Parser (Only FDF) ByteStringUTF8 ByteString
-> Parser (Only FDF) ByteStringUTF8 FDF
forall a b.
Parser (Only FDF) ByteStringUTF8 (a -> b)
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteString
extract ((Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
end Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"end the object")
               Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. Semigroup a => a -> a -> a
<> ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"endobj" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. Semigroup a => a -> a -> a
<> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd
               Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. Semigroup a => a -> a -> a
<> (Char -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputCharParsing m =>
(Char -> Bool) -> m (ParserInput m)
takeCharsWhile Char -> Bool
isSpace
               Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. Semigroup a => a -> a -> a
<> ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"trailer" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. Semigroup a => a -> a -> a
<> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd
               Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. Semigroup a => a -> a -> a
<> ([ByteStringUTF8] -> ByteStringUTF8
forall a. Monoid a => [a] -> a
mconcat ([ByteStringUTF8] -> ByteStringUTF8)
-> Parser (Only FDF) ByteStringUTF8 [ByteStringUTF8]
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 [ByteStringUTF8]
forall (m :: * -> *) a end. Alternative m => m a -> m end -> m [a]
manyTill Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
line (ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"%%EOF" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"last line"))
               Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"trailer")
  Parser (Only FDF) ByteStringUTF8 FDF
-> Parser (Only FDF) ByteStringUTF8 (Maybe ByteStringUTF8)
-> Parser (Only FDF) ByteStringUTF8 FDF
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 (Maybe ByteStringUTF8)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd

field :: Parser ByteStringUTF8 Field
field :: Parser (Only FDF) ByteStringUTF8 Field
field = Text -> Maybe Text -> [Field] -> Field
Field (Text -> Maybe Text -> [Field] -> Field)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser
     (Only FDF) ByteStringUTF8 (Text -> Maybe Text -> [Field] -> Field)
forall a b.
a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
begin
  Parser
  (Only FDF) ByteStringUTF8 (Text -> Maybe Text -> [Field] -> Field)
-> Parser (Only FDF) ByteStringUTF8 Text
-> Parser
     (Only FDF) ByteStringUTF8 (Maybe Text -> [Field] -> Field)
forall a b.
Parser (Only FDF) ByteStringUTF8 (a -> b)
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 Text
strictText (ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"/T (" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Char -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputCharParsing m =>
(Char -> Bool) -> m (ParserInput m)
takeCharsWhile (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char
')', Char
'\r', Char
'\n']) Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
")" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"name")
  Parser (Only FDF) ByteStringUTF8 (Maybe Text -> [Field] -> Field)
-> Parser (Only FDF) ByteStringUTF8 (Maybe Text)
-> Parser (Only FDF) ByteStringUTF8 ([Field] -> Field)
forall a b.
Parser (Only FDF) ByteStringUTF8 (a -> b)
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (Only FDF) ByteStringUTF8 Text
-> Parser (Only FDF) ByteStringUTF8 (Maybe Text)
forall (f :: * -> *) a. Alternative f => f a -> f (Maybe a)
optional (Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 Text
strictText (Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
 -> Parser (Only FDF) ByteStringUTF8 Text)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 Text
forall a b. (a -> b) -> a -> b
$
                Parser
  (Only FDF)
  ByteStringUTF8
  (CommittedResults
     (Parser (Only FDF) ByteStringUTF8) ByteStringUTF8)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser
  (Only FDF)
  ByteStringUTF8
  (CommittedResults (Parser (Only FDF) ByteStringUTF8) a)
-> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a.
CommittedParsing m =>
m (CommittedResults m a) -> m a
admit (ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"/V ("
                       Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) ByteStringUTF8)
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser
     (Only FDF)
     ByteStringUTF8
     (CommittedResults
        (Parser (Only FDF) ByteStringUTF8) ByteStringUTF8)
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser
     (Only FDF)
     ByteStringUTF8
     (CommittedResults (Parser (Only FDF) ByteStringUTF8) a)
forall (m :: * -> *) a.
CommittedParsing m =>
m a -> m (CommittedResults m a)
commit ((ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string (ByteString -> ByteStringUTF8
ByteStringUTF8 ByteString
utf16beBOM) Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (ByteStringUTF8 -> ByteStringUTF8
utf8from16 (ByteStringUTF8 -> ByteStringUTF8)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ParserInput (Parser (Only FDF) ByteStringUTF8) -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
(ParserInput m -> Bool) -> m (ParserInput m)
Text.Grampa.takeWhile (ByteStringUTF8 -> ByteStringUTF8 -> Bool
forall a. Eq a => a -> a -> Bool
/= ByteStringUTF8
")"))
                                   Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall (p :: * -> *) a. (Alternative p, Monoid a) => p a -> p a
concatMany ((Char -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputCharParsing m =>
(Char -> Bool) -> m (ParserInput m)
takeCharsWhile1 (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char
')', Char
'\r', Char
'\n', Char
'\\']) Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
escape))
                                  Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
")" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd)
                       Parser
  (Only FDF)
  ByteStringUTF8
  (Either (ParseFailure Pos ByteStringUTF8) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) ByteStringUTF8)
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"/V /" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) ByteStringUTF8)
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser
     (Only FDF)
     ByteStringUTF8
     (CommittedResults
        (Parser (Only FDF) ByteStringUTF8) ByteStringUTF8)
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser
     (Only FDF)
     ByteStringUTF8
     (CommittedResults (Parser (Only FDF) ByteStringUTF8) a)
forall (m :: * -> *) a.
CommittedParsing m =>
m a -> m (CommittedResults m a)
commit ((Char -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputCharParsing m =>
(Char -> Bool) -> m (ParserInput m)
takeCharsWhile (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char
'\r', Char
'\n']) Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd)
                       Parser
  (Only FDF)
  ByteStringUTF8
  (Either (ParseFailure Pos ByteStringUTF8) ByteStringUTF8)
-> String
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) ByteStringUTF8)
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"value"))
  Parser (Only FDF) ByteStringUTF8 ([Field] -> Field)
-> Parser (Only FDF) ByteStringUTF8 [Field]
-> Parser (Only FDF) ByteStringUTF8 Field
forall a b.
Parser (Only FDF) ByteStringUTF8 (a -> b)
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser
  (Only FDF)
  ByteStringUTF8
  (CommittedResults (Parser (Only FDF) ByteStringUTF8) [Field])
-> Parser (Only FDF) ByteStringUTF8 [Field]
forall a.
Parser
  (Only FDF)
  ByteStringUTF8
  (CommittedResults (Parser (Only FDF) ByteStringUTF8) a)
-> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a.
CommittedParsing m =>
m (CommittedResults m a) -> m a
admit (ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"/Kids [" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) [Field])
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) [Field])
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser (Only FDF) ByteStringUTF8 [Field]
-> Parser
     (Only FDF)
     ByteStringUTF8
     (CommittedResults (Parser (Only FDF) ByteStringUTF8) [Field])
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser
     (Only FDF)
     ByteStringUTF8
     (CommittedResults (Parser (Only FDF) ByteStringUTF8) a)
forall (m :: * -> *) a.
CommittedParsing m =>
m a -> m (CommittedResults m a)
commit (Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 [Field]
-> Parser (Only FDF) ByteStringUTF8 [Field]
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser (Only FDF) ByteStringUTF8 Field
-> Parser (Only FDF) ByteStringUTF8 [Field]
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 [a]
forall (m :: * -> *) a. DeterministicParsing m => m a -> m [a]
takeSome Parser (Only FDF) ByteStringUTF8 Field
field Parser (Only FDF) ByteStringUTF8 [Field]
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 [Field]
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"]" Parser (Only FDF) ByteStringUTF8 [Field]
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 [Field]
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 [Field]
-> String -> Parser (Only FDF) ByteStringUTF8 [Field]
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"kids")
             Parser
  (Only FDF)
  ByteStringUTF8
  (Either (ParseFailure Pos ByteStringUTF8) [Field])
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) [Field])
-> Parser
     (Only FDF)
     ByteStringUTF8
     (Either (ParseFailure Pos ByteStringUTF8) [Field])
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser (Only FDF) ByteStringUTF8 [Field]
-> Parser
     (Only FDF)
     ByteStringUTF8
     (CommittedResults (Parser (Only FDF) ByteStringUTF8) [Field])
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser
     (Only FDF)
     ByteStringUTF8
     (CommittedResults (Parser (Only FDF) ByteStringUTF8) a)
forall (m :: * -> *) a.
CommittedParsing m =>
m a -> m (CommittedResults m a)
commit Parser (Only FDF) ByteStringUTF8 [Field]
forall a. Monoid a => a
mempty)
  Parser (Only FDF) ByteStringUTF8 Field
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 Field
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
end
  where escape :: Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
escape = Char -> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => Char -> m Char
char Char
'\\'
                 Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Char -> ByteStringUTF8
forall t. TextualMonoid t => Char -> t
singleton (Char -> ByteStringUTF8)
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Char -> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => Char -> m Char
char Char
'n' Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall a. a -> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Char
'\n'
                                    Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => Char -> m Char
char Char
'r' Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall a. a -> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Char
'\r'
                                    Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => Char -> m Char
char Char
't' Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall a. a -> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Char
'\t'
                                    Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => Char -> m Char
char Char
'b' Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall a. a -> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Char
'\b'
                                    Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => Char -> m Char
char Char
'f' Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall a. a -> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Char
'\f'
                                    Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => Char -> m Char
char Char
'(' Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall a. a -> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Char
'('
                                    Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => Char -> m Char
char Char
')' Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall a. a -> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Char
')'
                                    Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => Char -> m Char
char Char
'\\' Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> Parser (Only FDF) ByteStringUTF8 Char
forall a. a -> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Char
'\\'
                                    Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Char
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Int -> Char
chr (Int -> Char) -> ([Int] -> Int) -> [Int] -> Char
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Int] -> Int
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([Int] -> Char)
-> Parser (Only FDF) ByteStringUTF8 [Int]
-> Parser (Only FDF) ByteStringUTF8 Char
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Parser (Only FDF) ByteStringUTF8 Int]
-> Parser (Only FDF) ByteStringUTF8 [Int]
forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
forall (f :: * -> *) a. Applicative f => [f a] -> f [a]
sequenceA [(Int
64 Int -> Int -> Int
forall a. Num a => a -> a -> a
*) (Int -> Int)
-> Parser (Only FDF) ByteStringUTF8 Int
-> Parser (Only FDF) ByteStringUTF8 Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Only FDF) ByteStringUTF8 Int
octalDigit, (Int
8 Int -> Int -> Int
forall a. Num a => a -> a -> a
*) (Int -> Int)
-> Parser (Only FDF) ByteStringUTF8 Int
-> Parser (Only FDF) ByteStringUTF8 Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Only FDF) ByteStringUTF8 Int
octalDigit, Parser (Only FDF) ByteStringUTF8 Int
octalDigit]))
        octalDigit :: Parser (Only FDF) ByteStringUTF8 Int
octalDigit = Char -> Int
digitToInt (Char -> Int)
-> Parser (Only FDF) ByteStringUTF8 Char
-> Parser (Only FDF) ByteStringUTF8 Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (Only FDF) ByteStringUTF8 Char
forall (m :: * -> *). CharParsing m => m Char
octDigit
        utf8from16 :: ByteStringUTF8 -> ByteStringUTF8
utf8from16 (ByteStringUTF8 ByteString
bs) = ByteString -> ByteStringUTF8
ByteStringUTF8 (Text -> ByteString
encodeUtf8 (Text -> ByteString) -> Text -> ByteString
forall a b. (a -> b) -> a -> b
$ ByteString -> Text
decodeUtf16BE ByteString
bs)

begin :: Parser ByteStringUTF8 ByteStringUTF8
begin :: Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
begin = ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"<<" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"<<"

end :: Parser ByteStringUTF8 ByteStringUTF8
end :: Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
end = ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
">>" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> (Char -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputCharParsing m =>
(Char -> Bool) -> m (ParserInput m)
takeCharsWhile (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
' ') Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall (p :: * -> *) a. (Alternative p, Monoid a) => p a -> p a
moptional Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a b.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ByteStringUTF8 -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. a -> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ByteStringUTF8
forall a. Monoid a => a
mempty Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
">>"

line :: Parser ByteStringUTF8 ByteStringUTF8
line :: Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
line = (Char -> Bool)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputCharParsing m =>
(Char -> Bool) -> m (ParserInput m)
takeCharsWhile (Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char
'\r', Char
'\n']) Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a. Semigroup a => a -> a -> a
<> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> String -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> String -> Parser (Only FDF) ByteStringUTF8 a
forall (m :: * -> *) a. Parsing m => m a -> String -> m a
<?> String
"line"

lineEnd :: Parser ByteStringUTF8 ByteStringUTF8
lineEnd :: Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
lineEnd = ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"\r\n" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"\r" Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
forall a.
Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ParserInput (Parser (Only FDF) ByteStringUTF8)
-> Parser
     (Only FDF)
     ByteStringUTF8
     (ParserInput (Parser (Only FDF) ByteStringUTF8))
forall (m :: * -> *).
InputParsing m =>
ParserInput m -> m (ParserInput m)
string ParserInput (Parser (Only FDF) ByteStringUTF8)
ByteStringUTF8
"\n"

strictText :: Parser ByteStringUTF8 ByteStringUTF8 -> Parser ByteStringUTF8 Text
strictText :: Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 Text
strictText = (ByteStringUTF8 -> Text)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 Text
forall a b.
(a -> b)
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((ByteStringUTF8 -> Text)
 -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
 -> Parser (Only FDF) ByteStringUTF8 Text)
-> (ByteStringUTF8 -> Text)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 Text
forall a b. (a -> b) -> a -> b
$ (ByteStringUTF8 -> Text) -> ByteStringUTF8 -> Text
forall t. TextualMonoid t => (t -> Text) -> t -> Text
toText (String -> Text
forall a. HasCallStack => String -> a
error (String -> Text)
-> (ByteStringUTF8 -> String) -> ByteStringUTF8 -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String
"Invalid UTF-8 sequence: " String -> ShowS
forall a. [a] -> [a] -> [a]
++) ShowS -> (ByteStringUTF8 -> String) -> ByteStringUTF8 -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteStringUTF8 -> String
forall a. Show a => a -> String
show)

extract :: Parser ByteStringUTF8 ByteStringUTF8 -> Parser ByteStringUTF8 ByteString
extract :: Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteString
extract = (ByteStringUTF8 -> ByteString)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteString
forall a b.
(a -> b)
-> Parser (Only FDF) ByteStringUTF8 a
-> Parser (Only FDF) ByteStringUTF8 b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((ByteStringUTF8 -> ByteString)
 -> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
 -> Parser (Only FDF) ByteStringUTF8 ByteString)
-> (ByteStringUTF8 -> ByteString)
-> Parser (Only FDF) ByteStringUTF8 ByteStringUTF8
-> Parser (Only FDF) ByteStringUTF8 ByteString
forall a b. (a -> b) -> a -> b
$ \(ByteStringUTF8 ByteString
bs) -> ByteString
bs

utf16beBOM :: ByteString
utf16beBOM :: ByteString
utf16beBOM = ByteString
"\xFE\xFF"