module Pdf.Core.Parsers.Util
( endOfLine
, skipSpace
)
where
import Data.Attoparsec.ByteString (Parser)
import qualified Data.Attoparsec.ByteString.Char8 as P
import Control.Applicative (many)
endOfLine :: Parser ()
endOfLine :: Parser ()
endOfLine = do
[Char]
_ <- Parser ByteString Char -> Parser ByteString [Char]
forall a. Parser ByteString a -> Parser ByteString [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Parser ByteString Char -> Parser ByteString [Char])
-> Parser ByteString Char -> Parser ByteString [Char]
forall a b. (a -> b) -> a -> b
$ Char -> Parser ByteString Char
P.char Char
' '
[Parser ()] -> Parser ()
forall (f :: * -> *) a. Alternative f => [f a] -> f a
P.choice [
Parser ()
P.endOfLine,
Char -> Parser ByteString Char
P.char Char
'\r' Parser ByteString Char -> (Char -> Parser ()) -> Parser ()
forall a b.
Parser ByteString a
-> (a -> Parser ByteString b) -> Parser ByteString b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Parser () -> Char -> Parser ()
forall a b. a -> b -> a
const (() -> Parser ()
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ())
]
skipSpace :: Parser ()
skipSpace :: Parser ()
skipSpace = do
Parser ()
P.skipSpace
[()]
_ <- Parser () -> Parser ByteString [()]
forall a. Parser ByteString a -> Parser ByteString [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
many (Parser ()
skipComment Parser () -> Parser () -> Parser ()
forall a b.
Parser ByteString a -> Parser ByteString b -> Parser ByteString b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Parser ()
P.skipSpace)
() -> Parser ()
forall a. a -> Parser ByteString a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
skipComment :: Parser ()
= do
Char
_ <- Char -> Parser ByteString Char
P.char Char
'%'
(Char -> Bool) -> Parser ()
P.skipWhile (Char -> [Char] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char]
"\r\n")