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 +4/−6
- Graphics/PDF/Action.hs +1/−1
- Graphics/PDF/Annotation.hs +1/−1
- Graphics/PDF/Colors.hs +1/−1
- Graphics/PDF/Coordinates.hs +1/−1
- Graphics/PDF/Data/Trie.hs +1/−1
- Graphics/PDF/Document.hs +1/−1
- Graphics/PDF/Draw.hs +1/−1
- Graphics/PDF/Hyphenate.hs +1/−1
- Graphics/PDF/Hyphenate/English.hs +1/−1
- Graphics/PDF/Hyphenate/LowLevel.hs +1/−1
- Graphics/PDF/Image.hs +110/−79
- Graphics/PDF/LowLevel/Serializer.hs +1/−1
- Graphics/PDF/LowLevel/Types.hs +1/−1
- Graphics/PDF/Navigation.hs +1/−1
- Graphics/PDF/Pages.hs +1/−1
- Graphics/PDF/Pattern.hs +1/−1
- Graphics/PDF/Resources.hs +1/−1
- Graphics/PDF/Shading.hs +1/−1
- Graphics/PDF/Shapes.hs +1/−1
- Graphics/PDF/Text.hs +1/−1
- Graphics/PDF/Typesetting.hs +1/−1
- Graphics/PDF/Typesetting/Box.hs +1/−1
- Graphics/PDF/Typesetting/Breaking.hs +1/−1
- Graphics/PDF/Typesetting/Horizontal.hs +1/−1
- Graphics/PDF/Typesetting/Layout.hs +1/−1
- Graphics/PDF/Typesetting/StandardStyle.hs +1/−1
- Graphics/PDF/Typesetting/Vertical.hs +1/−1
- HPDF.cabal +15/−4
- LICENSE +1/−1
- NEWS.txt +1/−14
- TODO.txt +1/−14
- Test/HPDF-tests.hs +27/−0
- Test/test.hs +1/−1
- changelog.md +1/−1
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
@@ -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