packages feed

HPDF 1.4.8 → 1.4.9

raw patch · 35 files changed

+187/−146 lines, 35 filesdep +HPDFdep +HTFdep +errorsdep ~basedep ~bytestringdep ~randomPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: HPDF, HTF, errors

Dependency ranges changed: base, bytestring, random

API changes (from Hackage documentation)

- Graphics.PDF: instance PdfLengthInfo PDFTrailer
- Graphics.PDF: instance PdfObject PDFTrailer
- Graphics.PDF.Action: instance Action GoToURL
- Graphics.PDF.Action: instance PdfLengthInfo GoToURL
- Graphics.PDF.Action: instance PdfObject GoToURL
- Graphics.PDF.Annotation: instance AnnotationObject PDFLink
- Graphics.PDF.Annotation: instance AnnotationObject TextAnnotation
- Graphics.PDF.Annotation: instance AnnotationObject URLLink
- Graphics.PDF.Annotation: instance Eq TextIcon
- Graphics.PDF.Annotation: instance PdfLengthInfo PDFLink
- Graphics.PDF.Annotation: instance PdfLengthInfo TextAnnotation
- Graphics.PDF.Annotation: instance PdfLengthInfo URLLink
- Graphics.PDF.Annotation: instance PdfObject PDFLink
- Graphics.PDF.Annotation: instance PdfObject TextAnnotation
- Graphics.PDF.Annotation: instance PdfObject URLLink
- Graphics.PDF.Annotation: instance Show TextIcon
- Graphics.PDF.Coordinates: instance Eq Matrix
- Graphics.PDF.Coordinates: instance Num Matrix
- Graphics.PDF.Coordinates: instance Show Matrix
- Graphics.PDF.Document: author :: PDFDocumentInfo -> PDFString
- Graphics.PDF.Document: centerWindow :: PDFViewerPreferences -> Bool
- Graphics.PDF.Document: compressed :: PDFDocumentInfo -> Bool
- Graphics.PDF.Document: displayDoctitle :: PDFViewerPreferences -> Bool
- Graphics.PDF.Document: fitWindow :: PDFViewerPreferences -> Bool
- Graphics.PDF.Document: hideMenuBar :: PDFViewerPreferences -> Bool
- Graphics.PDF.Document: hideToolbar :: PDFViewerPreferences -> Bool
- Graphics.PDF.Document: hideWindowUI :: PDFViewerPreferences -> Bool
- Graphics.PDF.Document: nonFullScreenPageMode :: PDFViewerPreferences -> PDFDocumentPageMode
- Graphics.PDF.Document: pageLayout :: PDFDocumentInfo -> PDFDocumentPageLayout
- Graphics.PDF.Document: pageMode :: PDFDocumentInfo -> PDFDocumentPageMode
- Graphics.PDF.Document: subject :: PDFDocumentInfo -> PDFString
- Graphics.PDF.Document: viewerPreferences :: PDFDocumentInfo -> PDFViewerPreferences
- Graphics.PDF.Image: createPDFRawImage :: Double -> Double -> Bool -> Vector Word32 -> PDF (PDFReference RawImage)
- Graphics.PDF.Image: instance Applicative FA
- Graphics.PDF.Image: instance Functor FA
- Graphics.PDF.Image: instance Monad FA
- Graphics.PDF.Image: instance MonadError String FA
- Graphics.PDF.Image: instance PDFXObject PDFJpeg
- Graphics.PDF.Image: instance PDFXObject RawImage
- Graphics.PDF.Image: instance PdfLengthInfo PDFJpeg
- Graphics.PDF.Image: instance PdfLengthInfo RawImage
- Graphics.PDF.Image: instance PdfObject PDFJpeg
- Graphics.PDF.Image: instance PdfObject RawImage
- Graphics.PDF.Image: instance PdfResourceObject (PDFReference PDFJpeg)
- Graphics.PDF.Image: instance PdfResourceObject (PDFReference RawImage)
- Graphics.PDF.Pattern: instance Enum PaintType
- Graphics.PDF.Pattern: instance Enum TilingType
- Graphics.PDF.Pattern: instance Eq PaintType
- Graphics.PDF.Pattern: instance Eq TilingType
- Graphics.PDF.Shapes: instance Enum CapStyle
- Graphics.PDF.Shapes: instance Enum JoinStyle
- Graphics.PDF.Shapes: instance Eq Arc
- Graphics.PDF.Shapes: instance Eq CapStyle
- Graphics.PDF.Shapes: instance Eq Circle
- Graphics.PDF.Shapes: instance Eq DashPattern
- Graphics.PDF.Shapes: instance Eq Ellipse
- Graphics.PDF.Shapes: instance Eq JoinStyle
- Graphics.PDF.Shapes: instance Eq Line
- Graphics.PDF.Shapes: instance Eq Rectangle
- Graphics.PDF.Shapes: instance Eq RoundRectangle
- Graphics.PDF.Shapes: instance Shape Arc
- Graphics.PDF.Shapes: instance Shape Circle
- Graphics.PDF.Shapes: instance Shape Ellipse
- Graphics.PDF.Shapes: instance Shape Line
- Graphics.PDF.Shapes: instance Shape Polygon
- Graphics.PDF.Shapes: instance Shape Rectangle
- Graphics.PDF.Shapes: instance Shape RoundRectangle
- Graphics.PDF.Text: instance Applicative PDFText
- Graphics.PDF.Text: instance Enum TextMode
- Graphics.PDF.Text: instance Eq TextMode
- Graphics.PDF.Text: instance Functor PDFText
- Graphics.PDF.Text: instance Monad PDFText
- Graphics.PDF.Text: instance MonadPath PDFText
- Graphics.PDF.Text: instance MonadState TextParameter PDFText
- Graphics.PDF.Text: instance MonadWriter Builder PDFText
- Graphics.PDF.Text: instance Ord TextMode
- Graphics.PDF.Typesetting: baselineskip :: VerState s -> !(PDFFloat, PDFFloat, PDFFloat)
- Graphics.PDF.Typesetting: currentParagraphStyle :: VerState s -> !s
- Graphics.PDF.Typesetting: instance Applicative (Para s)
- Graphics.PDF.Typesetting: instance Applicative (TM ps s)
- Graphics.PDF.Typesetting: instance Eq Orientation
- Graphics.PDF.Typesetting: instance Functor (Para s)
- Graphics.PDF.Typesetting: instance Functor (TM ps s)
- Graphics.PDF.Typesetting: instance Monad (Para s)
- Graphics.PDF.Typesetting: instance Monad (TM ps s)
- Graphics.PDF.Typesetting: instance MonadReader BRState (Para s)
- Graphics.PDF.Typesetting: instance MonadState (TMState ps s) (TM ps s)
- Graphics.PDF.Typesetting: instance MonadState s (Para s)
- Graphics.PDF.Typesetting: instance MonadWriter [Letter s] (Para s)
- Graphics.PDF.Typesetting: instance MonadWriter [VBox ps s] (TM ps s)
- Graphics.PDF.Typesetting: instance Show Orientation
- Graphics.PDF.Typesetting: instance Style s => MonadStyle s (Para s)
- Graphics.PDF.Typesetting: instance Style s => MonadStyle s (TM ps s)
- Graphics.PDF.Typesetting: lineskip :: VerState s -> !(PDFFloat, PDFFloat, PDFFloat)
- Graphics.PDF.Typesetting: lineskiplimit :: VerState s -> !PDFFloat
- Graphics.PDF.Typesetting: penWidth :: TextStyle -> !PDFFloat
- Graphics.PDF.Typesetting: scaleCompression :: TextStyle -> !PDFFloat
- Graphics.PDF.Typesetting: scaleDilatation :: TextStyle -> !PDFFloat
- Graphics.PDF.Typesetting: scaleSpace :: TextStyle -> !PDFFloat
- Graphics.PDF.Typesetting: textFillColor :: TextStyle -> !Color
- Graphics.PDF.Typesetting: textFont :: TextStyle -> !PDFFont
- Graphics.PDF.Typesetting: textMode :: TextStyle -> !TextMode
- Graphics.PDF.Typesetting: textStrokeColor :: TextStyle -> !Color
+ Graphics.PDF: instance Graphics.PDF.LowLevel.Types.PdfLengthInfo Graphics.PDF.PDFTrailer
+ Graphics.PDF: instance Graphics.PDF.LowLevel.Types.PdfObject Graphics.PDF.PDFTrailer
+ Graphics.PDF.Action: instance Graphics.PDF.Action.Action Graphics.PDF.Action.GoToURL
+ Graphics.PDF.Action: instance Graphics.PDF.LowLevel.Types.PdfLengthInfo Graphics.PDF.Action.GoToURL
+ Graphics.PDF.Action: instance Graphics.PDF.LowLevel.Types.PdfObject Graphics.PDF.Action.GoToURL
+ Graphics.PDF.Annotation: instance GHC.Classes.Eq Graphics.PDF.Annotation.TextIcon
+ Graphics.PDF.Annotation: instance GHC.Show.Show Graphics.PDF.Annotation.TextIcon
+ Graphics.PDF.Annotation: instance Graphics.PDF.Draw.AnnotationObject Graphics.PDF.Annotation.PDFLink
+ Graphics.PDF.Annotation: instance Graphics.PDF.Draw.AnnotationObject Graphics.PDF.Annotation.TextAnnotation
+ Graphics.PDF.Annotation: instance Graphics.PDF.Draw.AnnotationObject Graphics.PDF.Annotation.URLLink
+ Graphics.PDF.Annotation: instance Graphics.PDF.LowLevel.Types.PdfLengthInfo Graphics.PDF.Annotation.PDFLink
+ Graphics.PDF.Annotation: instance Graphics.PDF.LowLevel.Types.PdfLengthInfo Graphics.PDF.Annotation.TextAnnotation
+ Graphics.PDF.Annotation: instance Graphics.PDF.LowLevel.Types.PdfLengthInfo Graphics.PDF.Annotation.URLLink
+ Graphics.PDF.Annotation: instance Graphics.PDF.LowLevel.Types.PdfObject Graphics.PDF.Annotation.PDFLink
+ Graphics.PDF.Annotation: instance Graphics.PDF.LowLevel.Types.PdfObject Graphics.PDF.Annotation.TextAnnotation
+ Graphics.PDF.Annotation: instance Graphics.PDF.LowLevel.Types.PdfObject Graphics.PDF.Annotation.URLLink
+ Graphics.PDF.Coordinates: instance GHC.Classes.Eq Graphics.PDF.Coordinates.Matrix
+ Graphics.PDF.Coordinates: instance GHC.Num.Num Graphics.PDF.Coordinates.Matrix
+ Graphics.PDF.Coordinates: instance GHC.Show.Show Graphics.PDF.Coordinates.Matrix
+ Graphics.PDF.Document: [author] :: PDFDocumentInfo -> PDFString
+ Graphics.PDF.Document: [centerWindow] :: PDFViewerPreferences -> Bool
+ Graphics.PDF.Document: [compressed] :: PDFDocumentInfo -> Bool
+ Graphics.PDF.Document: [displayDoctitle] :: PDFViewerPreferences -> Bool
+ Graphics.PDF.Document: [fitWindow] :: PDFViewerPreferences -> Bool
+ Graphics.PDF.Document: [hideMenuBar] :: PDFViewerPreferences -> Bool
+ Graphics.PDF.Document: [hideToolbar] :: PDFViewerPreferences -> Bool
+ Graphics.PDF.Document: [hideWindowUI] :: PDFViewerPreferences -> Bool
+ Graphics.PDF.Document: [nonFullScreenPageMode] :: PDFViewerPreferences -> PDFDocumentPageMode
+ Graphics.PDF.Document: [pageLayout] :: PDFDocumentInfo -> PDFDocumentPageLayout
+ Graphics.PDF.Document: [pageMode] :: PDFDocumentInfo -> PDFDocumentPageMode
+ Graphics.PDF.Document: [subject] :: PDFDocumentInfo -> PDFString
+ Graphics.PDF.Document: [viewerPreferences] :: PDFDocumentInfo -> PDFViewerPreferences
+ Graphics.PDF.Image: ASCII85Decode :: PDFFilter
+ Graphics.PDF.Image: ASCIIHexDecode :: PDFFilter
+ Graphics.PDF.Image: CCITTFaxDecode :: PDFFilter
+ Graphics.PDF.Image: DCTDecode :: PDFFilter
+ Graphics.PDF.Image: FlateDecode :: PDFFilter
+ Graphics.PDF.Image: LZWDecode :: PDFFilter
+ Graphics.PDF.Image: NoFilter :: PDFFilter
+ Graphics.PDF.Image: RunLengthDecode :: PDFFilter
+ Graphics.PDF.Image: createPDFRawImageFromARGB :: Int -> Int -> Bool -> Vector Word32 -> PDF (PDFReference RawImage)
+ Graphics.PDF.Image: createPDFRawImageFromByteString :: Int -> Int -> Bool -> PDFFilter -> ByteString -> PDF (PDFReference RawImage)
+ Graphics.PDF.Image: data PDFFilter
+ Graphics.PDF.Image: instance Control.Monad.Error.Class.MonadError GHC.Base.String Graphics.PDF.Image.FA
+ Graphics.PDF.Image: instance GHC.Base.Applicative Graphics.PDF.Image.FA
+ Graphics.PDF.Image: instance GHC.Base.Functor Graphics.PDF.Image.FA
+ Graphics.PDF.Image: instance GHC.Base.Monad Graphics.PDF.Image.FA
+ Graphics.PDF.Image: instance Graphics.PDF.Draw.PDFXObject Graphics.PDF.Image.PDFJpeg
+ Graphics.PDF.Image: instance Graphics.PDF.Draw.PDFXObject Graphics.PDF.Image.RawImage
+ Graphics.PDF.Image: instance Graphics.PDF.LowLevel.Types.PdfLengthInfo Graphics.PDF.Image.PDFJpeg
+ Graphics.PDF.Image: instance Graphics.PDF.LowLevel.Types.PdfLengthInfo Graphics.PDF.Image.RawImage
+ Graphics.PDF.Image: instance Graphics.PDF.LowLevel.Types.PdfObject Graphics.PDF.Image.PDFJpeg
+ Graphics.PDF.Image: instance Graphics.PDF.LowLevel.Types.PdfObject Graphics.PDF.Image.RawImage
+ Graphics.PDF.Image: instance Graphics.PDF.Resources.PdfResourceObject (Graphics.PDF.LowLevel.Types.PDFReference Graphics.PDF.Image.PDFJpeg)
+ Graphics.PDF.Image: instance Graphics.PDF.Resources.PdfResourceObject (Graphics.PDF.LowLevel.Types.PDFReference Graphics.PDF.Image.RawImage)
+ Graphics.PDF.Pattern: instance GHC.Classes.Eq Graphics.PDF.Pattern.PaintType
+ Graphics.PDF.Pattern: instance GHC.Classes.Eq Graphics.PDF.Pattern.TilingType
+ Graphics.PDF.Pattern: instance GHC.Enum.Enum Graphics.PDF.Pattern.PaintType
+ Graphics.PDF.Pattern: instance GHC.Enum.Enum Graphics.PDF.Pattern.TilingType
+ Graphics.PDF.Shapes: instance GHC.Classes.Eq Graphics.PDF.Shapes.Arc
+ Graphics.PDF.Shapes: instance GHC.Classes.Eq Graphics.PDF.Shapes.CapStyle
+ Graphics.PDF.Shapes: instance GHC.Classes.Eq Graphics.PDF.Shapes.Circle
+ Graphics.PDF.Shapes: instance GHC.Classes.Eq Graphics.PDF.Shapes.DashPattern
+ Graphics.PDF.Shapes: instance GHC.Classes.Eq Graphics.PDF.Shapes.Ellipse
+ Graphics.PDF.Shapes: instance GHC.Classes.Eq Graphics.PDF.Shapes.JoinStyle
+ Graphics.PDF.Shapes: instance GHC.Classes.Eq Graphics.PDF.Shapes.Line
+ Graphics.PDF.Shapes: instance GHC.Classes.Eq Graphics.PDF.Shapes.Rectangle
+ Graphics.PDF.Shapes: instance GHC.Classes.Eq Graphics.PDF.Shapes.RoundRectangle
+ Graphics.PDF.Shapes: instance GHC.Enum.Enum Graphics.PDF.Shapes.CapStyle
+ Graphics.PDF.Shapes: instance GHC.Enum.Enum Graphics.PDF.Shapes.JoinStyle
+ Graphics.PDF.Shapes: instance Graphics.PDF.Shapes.Shape Graphics.PDF.Shapes.Arc
+ Graphics.PDF.Shapes: instance Graphics.PDF.Shapes.Shape Graphics.PDF.Shapes.Circle
+ Graphics.PDF.Shapes: instance Graphics.PDF.Shapes.Shape Graphics.PDF.Shapes.Ellipse
+ Graphics.PDF.Shapes: instance Graphics.PDF.Shapes.Shape Graphics.PDF.Shapes.Line
+ Graphics.PDF.Shapes: instance Graphics.PDF.Shapes.Shape Graphics.PDF.Shapes.Polygon
+ Graphics.PDF.Shapes: instance Graphics.PDF.Shapes.Shape Graphics.PDF.Shapes.Rectangle
+ Graphics.PDF.Shapes: instance Graphics.PDF.Shapes.Shape Graphics.PDF.Shapes.RoundRectangle
+ Graphics.PDF.Text: instance Control.Monad.State.Class.MonadState Graphics.PDF.Text.TextParameter Graphics.PDF.Text.PDFText
+ Graphics.PDF.Text: instance Control.Monad.Writer.Class.MonadWriter Data.Binary.Builder.Base.Builder Graphics.PDF.Text.PDFText
+ Graphics.PDF.Text: instance GHC.Base.Applicative Graphics.PDF.Text.PDFText
+ Graphics.PDF.Text: instance GHC.Base.Functor Graphics.PDF.Text.PDFText
+ Graphics.PDF.Text: instance GHC.Base.Monad Graphics.PDF.Text.PDFText
+ Graphics.PDF.Text: instance GHC.Classes.Eq Graphics.PDF.Text.TextMode
+ Graphics.PDF.Text: instance GHC.Classes.Ord Graphics.PDF.Text.TextMode
+ Graphics.PDF.Text: instance GHC.Enum.Enum Graphics.PDF.Text.TextMode
+ Graphics.PDF.Text: instance Graphics.PDF.LowLevel.Types.MonadPath Graphics.PDF.Text.PDFText
+ Graphics.PDF.Typesetting: [baselineskip] :: VerState s -> !(PDFFloat, PDFFloat, PDFFloat)
+ Graphics.PDF.Typesetting: [currentParagraphStyle] :: VerState s -> !s
+ Graphics.PDF.Typesetting: [lineskip] :: VerState s -> !(PDFFloat, PDFFloat, PDFFloat)
+ Graphics.PDF.Typesetting: [lineskiplimit] :: VerState s -> !PDFFloat
+ Graphics.PDF.Typesetting: [penWidth] :: TextStyle -> !PDFFloat
+ Graphics.PDF.Typesetting: [scaleCompression] :: TextStyle -> !PDFFloat
+ Graphics.PDF.Typesetting: [scaleDilatation] :: TextStyle -> !PDFFloat
+ Graphics.PDF.Typesetting: [scaleSpace] :: TextStyle -> !PDFFloat
+ Graphics.PDF.Typesetting: [textFillColor] :: TextStyle -> !Color
+ Graphics.PDF.Typesetting: [textFont] :: TextStyle -> !PDFFont
+ Graphics.PDF.Typesetting: [textMode] :: TextStyle -> !TextMode
+ Graphics.PDF.Typesetting: [textStrokeColor] :: TextStyle -> !Color
+ Graphics.PDF.Typesetting: instance Control.Monad.Reader.Class.MonadReader Graphics.PDF.Typesetting.Breaking.BRState (Graphics.PDF.Typesetting.Para s)
+ Graphics.PDF.Typesetting: instance Control.Monad.State.Class.MonadState (Graphics.PDF.Typesetting.TMState ps s) (Graphics.PDF.Typesetting.TM ps s)
+ Graphics.PDF.Typesetting: instance Control.Monad.State.Class.MonadState s (Graphics.PDF.Typesetting.Para s)
+ Graphics.PDF.Typesetting: instance Control.Monad.Writer.Class.MonadWriter [Graphics.PDF.Typesetting.Breaking.Letter s] (Graphics.PDF.Typesetting.Para s)
+ Graphics.PDF.Typesetting: instance Control.Monad.Writer.Class.MonadWriter [Graphics.PDF.Typesetting.Layout.VBox ps s] (Graphics.PDF.Typesetting.TM ps s)
+ Graphics.PDF.Typesetting: instance GHC.Base.Applicative (Graphics.PDF.Typesetting.Para s)
+ Graphics.PDF.Typesetting: instance GHC.Base.Applicative (Graphics.PDF.Typesetting.TM ps s)
+ Graphics.PDF.Typesetting: instance GHC.Base.Functor (Graphics.PDF.Typesetting.Para s)
+ Graphics.PDF.Typesetting: instance GHC.Base.Functor (Graphics.PDF.Typesetting.TM ps s)
+ Graphics.PDF.Typesetting: instance GHC.Base.Monad (Graphics.PDF.Typesetting.Para s)
+ Graphics.PDF.Typesetting: instance GHC.Base.Monad (Graphics.PDF.Typesetting.TM ps s)
+ Graphics.PDF.Typesetting: instance GHC.Classes.Eq Graphics.PDF.Typesetting.Orientation
+ Graphics.PDF.Typesetting: instance GHC.Show.Show Graphics.PDF.Typesetting.Orientation
+ Graphics.PDF.Typesetting: instance Graphics.PDF.Typesetting.Box.Style s => Graphics.PDF.Typesetting.MonadStyle s (Graphics.PDF.Typesetting.Para s)
+ Graphics.PDF.Typesetting: instance Graphics.PDF.Typesetting.Box.Style s => Graphics.PDF.Typesetting.MonadStyle s (Graphics.PDF.Typesetting.TM ps s)
- Graphics.PDF: pdfByteString :: PDFDocumentInfo -> PDFRect -> PDF a -> IO (ByteString)
+ Graphics.PDF: pdfByteString :: PDFDocumentInfo -> PDFRect -> PDF a -> ByteString
- Graphics.PDF.Coordinates: dot :: RealFloat t => Complex t -> Complex t -> t
+ Graphics.PDF.Coordinates: dot :: (RealFloat t) => Complex t -> Complex t -> t
- Graphics.PDF.Coordinates: project :: RealFloat t => Complex t -> Complex t -> Complex t
+ Graphics.PDF.Coordinates: project :: (RealFloat t) => Complex t -> Complex t -> Complex t
- Graphics.PDF.Coordinates: projectX :: RealFloat t => Complex t -> Complex t
+ Graphics.PDF.Coordinates: projectX :: (RealFloat t) => Complex t -> Complex t
- Graphics.PDF.Coordinates: projectY :: RealFloat t => Complex t -> Complex t
+ Graphics.PDF.Coordinates: projectY :: (RealFloat t) => Complex t -> Complex t
- Graphics.PDF.Coordinates: scalePt :: RealFloat t => t -> Complex t -> Complex t
+ Graphics.PDF.Coordinates: scalePt :: (RealFloat t) => t -> Complex t -> Complex t
- Graphics.PDF.Image: jpegBounds :: JpegFile -> (PDFFloat, PDFFloat)
+ Graphics.PDF.Image: jpegBounds :: JpegFile -> (Int, Int)
- Graphics.PDF.Typesetting: displayFormattedText :: ParagraphStyle ps s => Rectangle -> ps -> s -> TM ps s a -> Draw a
+ Graphics.PDF.Typesetting: displayFormattedText :: (ParagraphStyle ps s) => Rectangle -> ps -> s -> TM ps s a -> Draw a
- Graphics.PDF.Typesetting: getBoxes :: ParagraphStyle ps s => ps -> s -> TM ps s a -> [VBox ps s]
+ Graphics.PDF.Typesetting: getBoxes :: (ParagraphStyle ps s) => ps -> s -> TM ps s a -> [VBox ps s]

Files

Graphics/PDF.hs view
@@ -2,7 +2,7 @@ {-# LANGUAGE BangPatterns #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org@@ -293,10 +293,8 @@ pdfByteString :: PDFDocumentInfo               -> PDFRect -- ^ Default size for a page               -> PDF a  -- ^ PDF action -              -> IO (B.ByteString) -pdfByteString infos rect m = do -    let content = createObjectByteStrings (defaultPdfSettings {defaultRect = rect, docInfo = infos} ) m-    return content+              -> B.ByteString+pdfByteString infos rect m = createObjectByteStrings (defaultPdfSettings {defaultRect = rect, docInfo = infos} ) m  -- | Generates a PDF document runPdf :: String -- ^ Name of the PDF document@@ -305,7 +303,7 @@        -> PDF a  -- ^ PDF action         -> IO () runPdf filename infos rect m = do-  bytestring <- pdfByteString infos rect m +  let bytestring = pdfByteString infos rect m    B.writeFile filename bytestring  
Graphics/PDF/Action.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Annotation.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Colors.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Coordinates.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Data/Trie.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE CPP #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Document.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Draw.hs view
@@ -7,7 +7,7 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Hyphenate.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Hyphenate/English.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Hyphenate/LowLevel.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Image.hs view
@@ -5,7 +5,7 @@ {-# LANGUAGE ScopedTypeVariables #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org@@ -21,12 +21,14 @@      PDFJpeg    , JpegFile    , RawImage+   , PDFFilter(..)    -- ** Functions    , createPDFJpeg    , readJpegFile    , jpegBounds-   , createPDFRawImage    , readJpegDataURL+   , createPDFRawImageFromARGB+   , createPDFRawImageFromByteString  ) where       import Graphics.PDF.LowLevel.Types@@ -58,7 +60,20 @@ #if __GLASGOW_HASKELL__ < 710 import Control.Applicative #endif+import Control.Error.Util (note) +-- | A Jpeg file   +data JpegFile = JpegFile !Int !Int !Int !Int !Builder++data PDFFilter = ASCIIHexDecode+               | ASCII85Decode+               | LZWDecode+               | FlateDecode+               | RunLengthDecode+               | CCITTFaxDecode+               | DCTDecode +               | NoFilter+ m_sof0 :: Int m_sof0 = 0xc0  m_sof1 :: Int @@ -245,7 +260,7 @@                io $ hSeek h RelativeSeek (fromIntegral (l-2))                parseJpegContent h -analyzeJpeg :: Handle -> FA (Int,PDFFloat,PDFFloat,Int)+analyzeJpeg :: Handle -> FA (Int,Int,Int,Int) analyzeJpeg h = do     -- Get Length     io $ hSeek h SeekFromEnd 0@@ -269,7 +284,7 @@     --io $ print color_space     --io $ hClose h     unless (color_space `elem` [1,3,4]) $ EXC.throwError "Color space not supported"-    return (bits_per_component,(fromIntegral height),(fromIntegral width),color_space)+    return (bits_per_component,height,width,color_space)      --test = analyzePng "Test/logo.png"     @@ -292,7 +307,7 @@          Left s -> return $ Left s) `E.catch` (\(err :: IOException) -> return $ Left (show err))   -- | Get the JPEG bounds-jpegBounds :: JpegFile -> (PDFFloat,PDFFloat)+jpegBounds :: JpegFile -> (Int,Int) jpegBounds (JpegFile _ w h _ _) = (w,h)  -- | Use an abstract description of a Jpeg to return a PDFReference that can be used to manipulate the Jpeg in the context@@ -301,7 +316,7 @@               -> PDF (PDFReference PDFJpeg) createPDFJpeg (JpegFile bits_per_component width height color_space img) = do         PDFReference s <- createContent a' Nothing  -        recordBound s width height+        recordBound s (fromIntegral width) (fromIntegral height)         return (PDFReference s)      where        color c = case c of@@ -315,8 +330,8 @@                  do modifyStrict $ \s -> s  {otherRsrcs = PDFDictionary. M.fromList $                                                     [ (PDFName "Type",AnyPdfObject . PDFName $ "XObject")                                                    , (PDFName "Subtype",AnyPdfObject . PDFName $ "Image")-                                                   , (PDFName "Width",AnyPdfObject . PDFInteger $ round width)-                                                   , (PDFName "Height",AnyPdfObject . PDFInteger $ round height)+                                                   , (PDFName "Width",AnyPdfObject . PDFInteger $ width)+                                                   , (PDFName "Height",AnyPdfObject . PDFInteger $ height)                                                    , (PDFName "BitsPerComponent",AnyPdfObject . PDFInteger $ bits_per_component)                                                    , (PDFName "Interpolate", AnyPdfObject True)                                                    , (PDFName "Filter",AnyPdfObject . PDFName $ "DCTDecode")@@ -324,15 +339,49 @@                                              }                     tell img                 -createPDFRawImage :: Double -- ^ Width-                  -> Double -- ^ Height-                  -> Bool -- ^ Interpolation-                  -> U.Vector Word32 -- ^ RGBA pixels (A component not used y the PDF document)-                  -> PDF (PDFReference RawImage)  -createPDFRawImage width height interpolate stream =  do+createPDFRawImageFromByteString :: Int -- ^ Width+                                -> Int -- ^ Height+                                -> Bool -- ^ Interpolation+                                -> PDFFilter -- ^ Decompression filter to be sued by the PDF reader to render the picture+                                -> B.ByteString -- ^ RGB pixels+                                -> PDF (PDFReference RawImage)  +createPDFRawImageFromByteString width height interpolate pdfFilter stream =  do         PDFReference s <- createContent a' Nothing  -        recordBound s width height+        recordBound s (fromIntegral width) (fromIntegral height)         return (PDFReference s) +    where     +        getFilter = case pdfFilter of +                    NoFilter -> []+                    ASCIIHexDecode -> [(PDFName "Filter",AnyPdfObject . PDFName $ "ASCIIHexDecode")]+                    ASCII85Decode -> [(PDFName "Filter",AnyPdfObject . PDFName $ "ASCII85Decode")]+                    LZWDecode -> [(PDFName "Filter",AnyPdfObject . PDFName $ "LZWDecode")]+                    FlateDecode -> [(PDFName "Filter",AnyPdfObject . PDFName $ "FlateDecode")]+                    RunLengthDecode -> [(PDFName "Filter",AnyPdfObject . PDFName $ "RunLengthDecode")]+                    CCITTFaxDecode -> [(PDFName "Filter",AnyPdfObject . PDFName $ "CCITTFaxDecode")]+                    DCTDecode -> [(PDFName "Filter",AnyPdfObject . PDFName $ "DCTDecode")]++        a' =  do +                modifyStrict $ \s -> s  {otherRsrcs = PDFDictionary. M.fromList $ +                                                   [ (PDFName "Type",AnyPdfObject . PDFName $ "XObject")+                                                   , (PDFName "Subtype",AnyPdfObject . PDFName $ "Image")+                                                   , (PDFName "Width",AnyPdfObject . PDFInteger $ width)+                                                   , (PDFName "Height",AnyPdfObject . PDFInteger $ height)+                                                   , (PDFName "BitsPerComponent",AnyPdfObject . PDFInteger $ 8)+                                                   , (PDFName "ColorSpace",AnyPdfObject $ PDFName "DeviceRGB")+                                                   , (PDFName "Interpolate", AnyPdfObject interpolate)+                                                   ] ++ getFilter+                                             }+                tell . fromLazyByteString $ stream++createPDFRawImageFromARGB :: Int -- ^ Width+                          -> Int -- ^ Height+                          -> Bool -- ^ Interpolation+                          -> U.Vector Word32 -- ^ ARGB pixels (A component not used y the PDF document)+                          -> PDF (PDFReference RawImage)  +createPDFRawImageFromARGB width height interpolate stream =  do+        PDFReference s <- createContent a' Nothing  +        recordBound s (fromIntegral width) (fromIntegral height)+        return (PDFReference s)      where         addPixel (a:t) =              let xa = fromIntegral $ (a `shiftR` 16) .&. 0x0FF@@ -346,8 +395,8 @@                 modifyStrict $ \s -> s  {otherRsrcs = PDFDictionary. M.fromList $                                                     [ (PDFName "Type",AnyPdfObject . PDFName $ "XObject")                                                    , (PDFName "Subtype",AnyPdfObject . PDFName $ "Image")-                                                   , (PDFName "Width",AnyPdfObject . PDFInteger $ round width)-                                                   , (PDFName "Height",AnyPdfObject . PDFInteger $ round height)+                                                   , (PDFName "Width",AnyPdfObject . PDFInteger $  width)+                                                   , (PDFName "Height",AnyPdfObject . PDFInteger $  height)                                                    , (PDFName "BitsPerComponent",AnyPdfObject . PDFInteger $ 8)                                                    , (PDFName "ColorSpace",AnyPdfObject $ PDFName "DeviceRGB")                                                    , (PDFName "Interpolate", AnyPdfObject interpolate)@@ -356,8 +405,6 @@                 tell . fromLazyByteString . B.pack . addPixel . U.toList $ stream    -- Read Jpeg from ByteString--- These two functions bother me.  They could throw an exception if the incoming data is invalid...- sIndex :: C8.ByteString -> Int -> Maybe Char sIndex bs idx =    if (idx < 0) || (idx > C8.length bs)@@ -365,82 +412,66 @@   else Just $ bs `C8.index` idx  sReadWord8 :: C8.ByteString -> Int -> Maybe Int-sReadWord8 bs idx = -  case mlo of-    Nothing -> Nothing-    Just lo -> Just (fromEnum . ord $ lo)-  where mlo = bs `sIndex` idx+sReadWord8 bs idx = (fromEnum . ord) <$> (bs `sIndex` idx)  sReadWord16 :: C8.ByteString -> Int -> Maybe Int-sReadWord16 bs idx = -  case (sequence [mhi,mlo]) of-    Nothing -> Nothing-    Just [hi,lo] -> Just $ ((fromEnum hi) `shiftL` 8) .|. (fromEnum . ord $ lo)-    Just _ -> Nothing-  where mhi = bs `sIndex` idx-        mlo = bs `sIndex` (idx + 1)+sReadWord16 bs idx = do+  hi <- sReadWord8 bs idx+  lo <- sReadWord8 bs (idx + 1)+  return $ (hi `shiftL` 8) .|. lo  parseJpegDetailData :: C8.ByteString -> Int -> Maybe (Int,Int,Int,Int)-parseJpegDetailData bs offset = -  let m_bits_per_component = sReadWord8 bs (offset + 4)-      m_height = sReadWord16 bs (offset + 5)-      m_width = sReadWord16 bs (offset + 7)-      m_color_space = sReadWord8 bs (offset + 9)-  in case (sequence [m_bits_per_component, m_height, m_width, m_color_space]) of-    Nothing -> Nothing-    Just [bits_per_component, height, width, color_space] -> Just (bits_per_component, height, width, color_space)-    Just _ -> Nothing+parseJpegDetailData bs offset = do+  bpc <- sReadWord8  bs (offset + 4)+  hgt <- sReadWord16 bs (offset + 5)+  wdt <- sReadWord16 bs (offset + 7)+  cls <- sReadWord8  bs (offset + 9)+  return (bpc, hgt, wdt, cls) +(?|) :: Maybe b -> a -> Either a b+(?|) = flip note+ parseJpegContentData :: C8.ByteString -> Int -> Either String (Int,Int,Int,Int)-parseJpegContentData bs offset = -  let msof = sReadWord8 bs (offset + 1)-      ml = sReadWord16 bs (offset + 2)-  in case (sequence [msof, ml]) of-    Nothing -> Left "Corrupt JPEG data URL"-    Just [sof, l] -> case sof of-                       a | a `elem` [m_sof5,m_sof6,m_sof7,m_sof9,m_sof10,m_sof11,m_sof13,m_sof14,m_sof15] -> Left "Unuspported compression mode"-                         | a `elem` [m_sof0,m_sof1,m_sof3] -> case (parseJpegDetailData bs offset) of-                                                                Nothing -> Left "Corrupt JPEG data URL"-                                                                Just d -> Right d-                         | a `elem` [m_soi,m_eoi,m_tem,m_rst0,m_rst1,m_rst2,m_rst3,m_rst4,m_rst5,m_rst6,m_rst7] -> parseJpegContentData bs (offset + 2)-                         | otherwise -> parseJpegContentData bs (offset + l + 2)-    Just _ -> Left "Corrupt JPEG data URL"+parseJpegContentData bs offset = do+  r <- sReadWord8 bs offset ?| "Corrupt JPEG data URL - no marker found"+  guard (r == 0x0FF) ?| "Corrupt JPEG data URL - no marker found"+  sof <- (sReadWord8 bs (offset + 1)) ?| "Corrupt JPEG data URL - no start of file offset found"+  case sof of+    a | a `elem` [m_sof5,m_sof6,m_sof7,m_sof9,m_sof10,m_sof11,m_sof13,m_sof14,m_sof15] -> Left "Unsupported compression mode"+      | a `elem` [m_sof0,m_sof1,m_sof3] -> (parseJpegDetailData bs offset) ?| "Corrupt JPEG data URL - insufficient data in URL"+      | a `elem` [m_soi,m_eoi,m_tem,m_rst0,m_rst1,m_rst2,m_rst3,m_rst4,m_rst5,m_rst6,m_rst7] -> parseJpegContentData bs (offset + 2)+      | otherwise -> do +          l <- (sReadWord16 bs (offset + 2)) ?| "Corrupt JPEG data URL - insufficient data in URL"+          parseJpegContentData bs (offset + l + 2) -analyzeJpegData :: C8.ByteString -> Either String (Int,PDFFloat,PDFFloat,Int)-analyzeJpegData bs =-  let mheader = sReadWord16 bs 0-  in case mheader of-    Nothing -> Left "Not a JPEG data URL"-    Just header -> if (header /= 0x0FFD8) -                   then Left "Not a JPEG data URL"-                   else let jpegData = parseJpegContentData bs 0-                        in case jpegData of-                          Right (bits_per_component,height,width,color_space) -> if (color_space `elem` [1,3,4])-                                                                                 then Right (bits_per_component,(fromIntegral height),(fromIntegral width),color_space)-                                                                                 else Left "Color space not supported"-                          Left err -> Left err+checkColorSpace :: (Int,Int,Int,Int) -> Either String (Int,Int,Int,Int)+checkColorSpace hdrData@(_,_,_,color_space) = do+  guard (color_space `elem` [1,3,4]) ?| ("Color space [" ++ show color_space ++ "] not supported")+  return hdrData +analyzeJpegData :: C8.ByteString -> Either String (Int,Int,Int,Int)+analyzeJpegData bs = do+  header <- sReadWord16 bs 0 ?| "Not a JPEG data URL - no marker found"+  guard (header == 0x0FFD8) ?| "Not a JPEG data URL - invalid JPEG marker" +  hdrData <- parseJpegContentData bs 0+  checkColorSpace hdrData+ readJpegData :: String -> Either String JpegFile-readJpegData dataString = -  case (decode $ C8.pack dataString) of-    Left err -> Left err-    Right bs -> -      let jpegData = analyzeJpegData bs-      in case jpegData of-           Left err -> Left err-           Right (bits_per_component,height,width,color_space) -> Right $ JpegFile bits_per_component width height color_space (fromByteString bs) +readJpegData dataString = do+  bs <- decode $ C8.pack dataString+  (bits_per_component,height,width,color_space) <- analyzeJpegData bs+  return $ JpegFile bits_per_component width height color_space (fromByteString bs)   -- | Reads a data URL string, and returns a JpegFile. -- The incoming string must be a correctly formatted data URL for a JPEG. -- You can convert jpeg files to data URLs at the following web site: -- http://dataurl.net/#dataurlmaker readJpegDataURL :: String -> Either String JpegFile-readJpegDataURL dataurl = if (take 23 dataurl /= "data:image/jpeg;base64,")-                          then Left "Data URL does not start with a valid JPEG header"-                          else readJpegData $ drop 23 dataurl   +readJpegDataURL dataurl = do+  guard (take 23 dataurl == "data:image/jpeg;base64,") ?| "Data URL does not start with a valid JPEG header"+  readJpegData $ drop 23 dataurl    --- | A Jpeg file   -data JpegFile = JpegFile !Int !PDFFloat !PDFFloat !Int !Builder+       -- | A Jpeg PDF object data PDFJpeg
Graphics/PDF/LowLevel/Serializer.hs view
@@ -5,7 +5,7 @@ {-# LANGUAGE FlexibleInstances #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/LowLevel/Types.hs view
@@ -6,7 +6,7 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Navigation.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Pages.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Pattern.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Resources.hs view
@@ -2,7 +2,7 @@ {-# LANGUAGE FlexibleInstances #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Shading.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Shapes.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Text.hs view
@@ -4,7 +4,7 @@ {-# LANGUAGE DeriveFunctor #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Typesetting.hs view
@@ -6,7 +6,7 @@ {-# LANGUAGE DeriveFunctor #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Typesetting/Box.hs view
@@ -3,7 +3,7 @@ {-# LANGUAGE FlexibleInstances #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Typesetting/Breaking.hs view
@@ -3,7 +3,7 @@ {-# LANGUAGE FlexibleInstances #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Typesetting/Horizontal.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Typesetting/Layout.hs view
@@ -2,7 +2,7 @@ {-# LANGUAGE FunctionalDependencies #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Typesetting/StandardStyle.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE MultiParamTypeClasses #-} --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
Graphics/PDF/Typesetting/Vertical.hs view
@@ -1,6 +1,6 @@ --------------------------------------------------------- -- |--- Copyright   : (c) 2006-2012, alpheccar.org+-- Copyright   : (c) 2006-2016, alpheccar.org -- License     : BSD-style -- -- Maintainer  : misc@NOSPAMalpheccar.org
HPDF.cabal view
@@ -1,9 +1,9 @@ Name: HPDF-Version: 1.4.8-cabal-version: >=1.6+Version: 1.4.9+cabal-version: >=1.10 License: BSD3 License-file:LICENSE-Copyright: Copyright (c) 2007-2015, alpheccar.org+Copyright: Copyright (c) 2007-2016, alpheccar.org category: Graphics synopsis: Generation of PDF documents maintainer: misc@NOSPAMalpheccar.org@@ -28,6 +28,15 @@ source-repository head   type:     git   location: https://github.com/alpheccar/HPDF.git++Test-Suite HPDF-Tests+  Type:              exitcode-stdio-1.0+  Main-is:           HPDF-tests.hs+  hs-source-dirs:    Test+  Build-depends:     base >= 4, +                     HTF >= 0.10,+                     HPDF+  Default-language:  Haskell2010    library   build-depends: @@ -40,8 +49,10 @@       binary >= 0.4,        mtl,       vector >=0.10,+      errors,       base64-bytestring >= 0.1-  +  Default-language:  Haskell2010+   ghc-options: -Wall -fno-warn-tabs -funbox-strict-fields  -O2    C-Sources:  
LICENSE view
@@ -1,4 +1,4 @@-* Copyright (c) 2006-2013, alpheccar.org+* Copyright (c) 2006-2016, alpheccar.org * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met:
NEWS.txt view
@@ -1,14 +1,1 @@-WHAT'S NEW IN HPDF 1.4-======================-Lot's of contributions from Leon Smith ! Thank you. Here is a summary:--A - Changes by Leon-===================-1 - Huge speed improvement of the draw monad ;-2 - New implementation of shapes (Rectangle, curveto, arcto, point datatype) ;-3 - Cleaning of the API (coordinates, shapes) ;--B - Changes by alpheccar-=========================-1 - Lots of bug corrections for typesetting ;-2 - An API to draw text boxes +Added travis and stack.
TODO.txt view
@@ -1,14 +1,1 @@-BUGS TO CORRECT-===============--* Line formatting sometimes broken when there is a break on an hyphen in all modes except the fully justified one ;-* Break on - will generate two hyphens (end of line and start of next line) ;-* Wrong metric for ( and ) ;--FEATURES TO ADD-===============-* Constraint programming ;-* Combinator interface to specify the layout of complex documents ;-* Support for other fonts an encoding ;-* Support for PNG ;-* Support for inclusion of other PDF files ;+The MAIN missing feature is the support for unicode and the bidirectionnal layout algorithm that will then be required.
+ Test/HPDF-tests.hs view
@@ -0,0 +1,27 @@+{-# OPTIONS_GHC -F -pgmF htfpp #-}+{-# LANGUAGE OverloadedStrings #-}+module Main where++import Test.Framework+import Data.Either (isRight)++import Graphics.PDF.Image(JpegFile, readJpegDataURL, jpegBounds)++main = htfMain htf_thisModulesTests++raw_jpeg :: String+raw_jpeg = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4RDcRXhpZgAATU0AKgAAAAgABAE7AAIAAAAGAAAISodpAAQAAAABAAAIUJydAAEAAAAMAAAQyOocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNjb3R0AAAFkAMAAgAAABQAABCekAQAAgAAABQAABCykpEAAgAAAAMwNwAAkpIAAgAAAAMwNwAA6hwABwAACAwAAAiSAAAAABzqAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAxNDoxMjowNiAwOTo0Mzo1MQAyMDE0OjEyOjA2IDA5OjQzOjUxAAAAUwBjAG8AdAB0AAAA/+ELGGh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4NCjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPjxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLz48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+PHhtcDpDcmVhdGVEYXRlPjIwMTQtMTItMDZUMDk6NDM6NTEuMDcyPC94bXA6Q3JlYXRlRGF0ZT48L3JkZjpEZXNjcmlwdGlvbj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+PGRjOmNyZWF0b3I+PHJkZjpTZXEgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOmxpPlNjb3R0PC9yZGY6bGk+PC9yZGY6U2VxPg0KCQkJPC9kYzpjcmVhdG9yPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0ndyc/Pv/bAEMABwUFBgUEBwYFBggHBwgKEQsKCQkKFQ8QDBEYFRoZGBUYFxseJyEbHSUdFxgiLiIlKCkrLCsaIC8zLyoyJyorKv/bAEMBBwgICgkKFAsLFCocGBwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKv/AABEIABMAEwMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APoH+3tJOvf2INRtjqnlecbMSDzAn97b1xXB/Er4rN4ev4fC3g62Gr+Lb0hIbZBuW2z/ABSe+OcenJwOvi3xBk8W+G/2l9SufCVrO+qaioWzxCX8xXhVSy54O0g89AV56V7d8J/hVD4FspNT1iX+0PE2oAveXrtvKZOSik84z1PVj+ApRXPFSe3X/L/Njk+WTS36f5v9Ed7pS3q6PZrqzRvfiBBctEPlMm0biPbOaKtUVTd3clKysIVBYMQMjocdKWiikMKKKKAP/9k="+raw_jpeg_bounds :: (Double, Double)+raw_jpeg_bounds = (19, 19)++jpg :: JpegFile+jpg = jpegFile+    where Right jpegFile = readJpegDataURL raw_jpeg++test_decodeTick :: IO()+test_decodeTick = case (readJpegDataURL raw_jpeg) of+                    Right _ -> assertBool True +                    Left msg -> assertEqual "Error:" msg++test_bounds :: IO()+test_bounds =  assertEqual raw_jpeg_bounds (jpegBounds jpg)
Test/test.hs view
@@ -144,7 +144,7 @@                    | i < 2*nb*(3*nb) = 0x0000FF00                    | otherwise = 0x000000FF         pixels = U.generate (9*nb*nb) getPixel-    jpg <- createPDFRawImage (fromIntegral $ 3*nb) (fromIntegral $ 3*nb) True pixels+    jpg <- createPDFRawImageFromARGB (fromIntegral $ 3*nb) (fromIntegral $ 3*nb) True pixels     drawWithPage page $ do       withNewContext $ do           setFillAlpha 0.4
changelog.md view
@@ -1,4 +1,4 @@ HPDF 1.4.8 (released 2015-09-04)-	* Building on GHC 7.10 and GHC 7.8.4 +    * Building on GHC 7.10 and GHC 7.8.4      * Parsing of JPEG data URLs by Scott Sedgwick