Safe Haskell | None |
---|
This module contains parsers for pdf objects
- parseObject :: Parser (Object ())
- parseDict :: Parser Dict
- parseArray :: Parser Array
- parseName :: Parser Name
- parseStr :: Parser Str
- parseHexStr :: Parser Str
- parseRef :: Parser Ref
- parseNumber :: Parser Number
- parseBoolean :: Parser Boolean
- parseTillStreamData :: Parser ()
- parseIndirectObject :: Parser (Ref, Object ())
- isRegularChar :: Char -> Bool
Parse any object
parseObject :: Parser (Object ())Source
Parse object of specific type
parseDict :: Parser DictSource
>>>
parseOnly parseDict "<</Key1(some string)/Key2 123>>"
Right (Dict [(Name "Key1",OStr (Str "some string")),(Name "Key2",ONumber (NumInt 123))])
parseArray :: Parser ArraySource
>>>
parseOnly parseArray "[1 (string) /Name []]"
Right (Array [ONumber (NumInt 1),OStr (Str "string"),OName (Name "Name"),OArray (Array [])])
parseHexStr :: Parser StrSource
>>>
parseOnly parseHexStr "<68656C6C6F>"
Right (Str "hello")
parseNumber :: Parser NumberSource
>>>
parseOnly parseNumber "123"
Right (NumInt 123)>>>
parseOnly parseNumber "12.3"
Right (NumReal 12.3)>>>
parseOnly parseNumber ".01"
Right (NumReal 1.0e-2)
parseBoolean :: Parser BooleanSource
>>>
parseOnly parseBoolean "true"
Right (Boolean True)>>>
parseOnly parseBoolean "false"
Right (Boolean False)
Other
parseTillStreamData :: Parser ()Source
Consumes input till stream's data
Use parseDict
then parseTillStreamData
to determine whether the object is dictionary or stream.
If parseTillStreamData
fails, then it is a dictionary.
Otherwise it is stream, and current position in input data
will point to stream's data start
>>>
parse (parseDict >>= \dict -> parseTillStreamData >> return dict) "<</Key 123>>\nstream\n1234\nendstream"
Done "1234\nendstream" Dict [(Name "Key",ONumber (NumInt 123))]
parseIndirectObject :: Parser (Ref, Object ())Source
Parse object. Input position should point to offset defined in XRef
>>>
parseOnly parseIndirectObject "1 2 obj\n12"
Right (Ref 1 2,ONumber (NumInt 12))
isRegularChar :: Char -> BoolSource
Whether the character can appear in Name