packages feed

HPDF 1.4.7 → 1.4.8

raw patch · 7 files changed

+133/−6 lines, 7 filesdep +base64-bytestringdep ~basedep ~mtlPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: base64-bytestring

Dependency ranges changed: base, mtl

API changes (from Hackage documentation)

- 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: 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: 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: 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.Image: readJpegDataURL :: String -> Either String JpegFile
+ 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.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.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/Documentation.hs view
@@ -302,6 +302,12 @@ Right jpg <- 'readJpegFile' \"logo.jpg\"   @ +Alternatively, jpegs can be compiled into your code. After converting a jpeg to a data URL, a 'JpegFile' can be created with:++@+let Right jpg = readJpegDataURL "data:image/jpeg;base64,........."+@+ The haskell code is just extracting the size of the image from the file. The image is not decoded.  -}
Graphics/PDF/Draw.hs view
@@ -104,6 +104,9 @@ import Graphics.PDF.LowLevel.Serializer import Graphics.PDF.Resources import Graphics.PDF.Data.PDFTree(PDFTree)+#if __GLASGOW_HASKELL__ < 710+import Control.Applicative+#endif  data AnnotationStyle = AnnotationStyle !(Maybe Color) 
Graphics/PDF/Image.hs view
@@ -26,6 +26,7 @@    , readJpegFile    , jpegBounds    , createPDFRawImage+   , readJpegDataURL  ) where       import Graphics.PDF.LowLevel.Types@@ -42,12 +43,21 @@ #endif import Data.Char(ord) import Data.Bits+#if __GLASGOW_HASKELL__ >= 710 import qualified Control.Monad.Except as EXC+#else+import qualified Control.Monad.Error as EXC+#endif import Graphics.PDF.Coordinates-import Data.Binary.Builder(Builder,fromLazyByteString)+import Data.Binary.Builder(Builder,fromLazyByteString,fromByteString) import Control.Exception as E import qualified Data.Vector.Unboxed as U import Data.Word+import qualified Data.ByteString.Char8 as C8 (ByteString, pack, index, length)+import Data.ByteString.Base64(decode)+#if __GLASGOW_HASKELL__ < 710+import Control.Applicative+#endif  m_sof0 :: Int m_sof0 = 0xc0 @@ -160,7 +170,11 @@ io = FA . liftIO  -- | File analyzer monad+#if __GLASGOW_HASKELL__ >= 710 newtype FA a = FA { unFA :: EXC.ExceptT String IO a}+#else+newtype FA a = FA { unFA :: EXC.ErrorT String IO a}+#endif #ifndef __HADDOCK__   deriving(Monad,Applicative,EXC.MonadError String,Functor) #else@@ -171,7 +185,11 @@ #endif      runFA :: FA a -> IO (Either String a)+#if __GLASGOW_HASKELL__ >= 710 runFA = EXC.runExceptT . unFA+#else+runFA = EXC.runErrorT . unFA+#endif  readWord16 :: Handle -> FA Int readWord16 h = io $ do@@ -335,7 +353,91 @@                                                    , (PDFName "Interpolate", AnyPdfObject interpolate)                                                    ]                                              }-                tell . fromLazyByteString . B.pack . addPixel . U.toList $ stream       +                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)+  then Nothing+  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++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)++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++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"++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++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) ++-- | 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     -- | A Jpeg file    data JpegFile = JpegFile !Int !PDFFloat !PDFFloat !Int !Builder
Graphics/PDF/Text.hs view
@@ -62,6 +62,9 @@ #else import Data.ByteString.Base(w2c,c2w) #endif+#if __GLASGOW_HASKELL__ < 710+import Control.Applicative+#endif  foreign import ccall "ctext.h c_getLeading" cgetLeading :: Int -> Int foreign import ccall "ctext.h c_getAdvance" cgetAdvance :: Int -> Int -> Int
Graphics/PDF/Typesetting.hs view
@@ -109,6 +109,9 @@ import Graphics.PDF.Hyphenate import Data.List(unfoldr,intersperse) import Data.Char(isSpace,isAlpha)+#if __GLASGOW_HASKELL__ < 710+import Control.Applicative+#endif  -- | Display a formatted text in a given bounding rectangle with a given default paragraph style, a given default text style. No clipping -- is taking place. Drawing stop when the last line is crossing the bounding rectangle in vertical direction
HPDF.cabal view
@@ -1,14 +1,14 @@ Name: HPDF-Version: 1.4.7+Version: 1.4.8 cabal-version: >=1.6 License: BSD3 License-file:LICENSE-Copyright: Copyright (c) 2007-2013, alpheccar.org+Copyright: Copyright (c) 2007-2015, alpheccar.org category: Graphics synopsis: Generation of PDF documents maintainer: misc@NOSPAMalpheccar.org build-type: Simple-tested-with: GHC==7.6.1+tested-with: GHC==7.8.4,GHC==7.10.2 homepage: http://www.alpheccar.org description: A PDF library with support for several pages, page transitions, outlines, annotations, compression, colors, shapes, patterns, jpegs, fonts, typesetting ... Have a look at the "Graphics.PDF.Documentation" module to see how to use it. Or, download the package and look at the test.hs file in the Test folder. That file is giving an example of each feature. extra-source-files:@@ -23,7 +23,12 @@   README.txt   NEWS.txt   TODO.txt+  changelog.md +source-repository head+  type:     git+  location: https://github.com/alpheccar/HPDF.git+   library   build-depends:        base >= 4 && < 5, @@ -34,7 +39,8 @@       zlib >= 0.5,        binary >= 0.4,        mtl,-      vector >=0.10+      vector >=0.10,+      base64-bytestring >= 0.1      ghc-options: -Wall -fno-warn-tabs -funbox-strict-fields  -O2 
+ changelog.md view
@@ -0,0 +1,4 @@+HPDF 1.4.8 (released 2015-09-04)+	* Building on GHC 7.10 and GHC 7.8.4 +    * Parsing of JPEG data URLs by Scott Sedgwick+