packages feed

hoodle-types 0.3 → 0.3.0

raw patch · 9 files changed

+775/−85 lines, 9 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Hoodle.Generic.Simple: mkSHoodle :: Hoodle -> SHoodle
- Data.Hoodle.Generic.Simple: mkSLayer :: Layer -> SLayer
- Data.Hoodle.Generic.Simple: mkSPage :: Page -> SPage
- Data.Hoodle.Generic.Simple: shoodle2Hoodle :: SHoodle -> Hoodle
- Data.Hoodle.Generic.Simple: slayer2Layer :: SLayer -> Layer
- Data.Hoodle.Generic.Simple: spage2Page :: SPage -> Page
- Data.Hoodle.Generic.Simple: type SHoodle = GHoodle [] SPage
- Data.Hoodle.Generic.Simple: type SLayer = GLayer () [] Item
- Data.Hoodle.Generic.Simple: type SPage = GPage Background [] SLayer
+ Data.Hoodle.Generic: PDFData :: ByteString -> Int -> PDFData
+ Data.Hoodle.Generic: data PDFData
+ Data.Hoodle.Generic: pdfBase64 :: PDFData -> ByteString
+ Data.Hoodle.Generic: pdfNumPages :: PDFData -> Int
+ Data.Hoodle.Hashed: Anchor :: ByteString -> ByteString -> (Double, Double) -> !Dimension -> Anchor
+ Data.Hoodle.Hashed: Background :: !ByteString -> !ByteString -> !ByteString -> Background
+ Data.Hoodle.Hashed: BackgroundEmbedPdf :: ByteString -> Int -> Background
+ Data.Hoodle.Hashed: BackgroundPdf :: ByteString -> Maybe ByteString -> Maybe ByteString -> Int -> Background
+ Data.Hoodle.Hashed: Dim :: !Double -> !Double -> Dimension
+ Data.Hoodle.Hashed: Hoodle :: ByteString -> !Title -> [Revision] -> Maybe ByteString -> Maybe Text -> ![Page] -> Hoodle
+ Data.Hoodle.Hashed: Image :: ByteString -> (Double, Double) -> !Dimension -> Image
+ Data.Hoodle.Hashed: ItemAnchor :: Anchor -> Item
+ Data.Hoodle.Hashed: ItemImage :: Image -> Item
+ Data.Hoodle.Hashed: ItemLink :: Link -> Item
+ Data.Hoodle.Hashed: ItemSVG :: SVG -> Item
+ Data.Hoodle.Hashed: ItemStroke :: Stroke -> Item
+ Data.Hoodle.Hashed: Layer :: ![Item] -> Layer
+ Data.Hoodle.Hashed: Link :: ByteString -> ByteString -> ByteString -> Maybe ByteString -> Maybe ByteString -> ByteString -> (Double, Double) -> !Dimension -> Link
+ Data.Hoodle.Hashed: LinkAnchor :: ByteString -> ByteString -> ByteString -> ByteString -> ByteString -> (Double, Double) -> !Dimension -> Link
+ Data.Hoodle.Hashed: LinkDocID :: ByteString -> ByteString -> ByteString -> Maybe ByteString -> Maybe ByteString -> ByteString -> (Double, Double) -> !Dimension -> Link
+ Data.Hoodle.Hashed: Page :: !Dimension -> !Background -> ![Layer] -> Page
+ Data.Hoodle.Hashed: Revision :: !ByteString -> !ByteString -> Revision
+ Data.Hoodle.Hashed: RevisionInk :: !ByteString -> [Stroke] -> Revision
+ Data.Hoodle.Hashed: SVG :: Maybe ByteString -> Maybe ByteString -> ByteString -> (Double, Double) -> !Dimension -> SVG
+ Data.Hoodle.Hashed: Stroke :: !ByteString -> !ByteString -> !Double -> ![Pair Double Double] -> Stroke
+ Data.Hoodle.Hashed: VWStroke :: ByteString -> ByteString -> [(Double, Double, Double)] -> Stroke
+ Data.Hoodle.Hashed: _revink :: Revision -> [Stroke]
+ Data.Hoodle.Hashed: _revmd5 :: Revision -> !ByteString
+ Data.Hoodle.Hashed: _revtxt :: Revision -> !ByteString
+ Data.Hoodle.Hashed: anchor_dim :: Anchor -> !Dimension
+ Data.Hoodle.Hashed: anchor_id :: Anchor -> ByteString
+ Data.Hoodle.Hashed: anchor_pos :: Anchor -> (Double, Double)
+ Data.Hoodle.Hashed: anchor_render :: Anchor -> ByteString
+ Data.Hoodle.Hashed: background :: Simple Lens Page Background
+ Data.Hoodle.Hashed: bkg_color :: Background -> !ByteString
+ Data.Hoodle.Hashed: bkg_domain :: Background -> Maybe ByteString
+ Data.Hoodle.Hashed: bkg_filename :: Background -> Maybe ByteString
+ Data.Hoodle.Hashed: bkg_pageno :: Background -> Int
+ Data.Hoodle.Hashed: bkg_style :: Background -> !ByteString
+ Data.Hoodle.Hashed: bkg_type :: Background -> ByteString
+ Data.Hoodle.Hashed: color :: Simple Lens Stroke ByteString
+ Data.Hoodle.Hashed: data Anchor
+ Data.Hoodle.Hashed: data Background
+ Data.Hoodle.Hashed: data Dimension
+ Data.Hoodle.Hashed: data Hoodle
+ Data.Hoodle.Hashed: data Image
+ Data.Hoodle.Hashed: data Item
+ Data.Hoodle.Hashed: data Layer
+ Data.Hoodle.Hashed: data Link
+ Data.Hoodle.Hashed: data Page
+ Data.Hoodle.Hashed: data Revision
+ Data.Hoodle.Hashed: data SVG
+ Data.Hoodle.Hashed: data Stroke
+ Data.Hoodle.Hashed: defaultBackground :: Background
+ Data.Hoodle.Hashed: defaultHoodle :: IO Hoodle
+ Data.Hoodle.Hashed: defaultPage :: Page
+ Data.Hoodle.Hashed: dim_height :: Dimension -> !Double
+ Data.Hoodle.Hashed: dim_width :: Dimension -> !Double
+ Data.Hoodle.Hashed: dimension :: Simple Lens Page Dimension
+ Data.Hoodle.Hashed: embeddedPdf :: Simple Lens Hoodle (Maybe ByteString)
+ Data.Hoodle.Hashed: embeddedText :: Simple Lens Hoodle (Maybe Text)
+ Data.Hoodle.Hashed: emptyHoodle :: IO Hoodle
+ Data.Hoodle.Hashed: emptyLayer :: Layer
+ Data.Hoodle.Hashed: emptyStroke :: Stroke
+ Data.Hoodle.Hashed: getXYtuples :: Stroke -> [(Double, Double)]
+ Data.Hoodle.Hashed: hoodleID :: Simple Lens Hoodle ByteString
+ Data.Hoodle.Hashed: hoodle_embeddedpdf :: Hoodle -> Maybe ByteString
+ Data.Hoodle.Hashed: hoodle_embeddedtext :: Hoodle -> Maybe Text
+ Data.Hoodle.Hashed: hoodle_id :: Hoodle -> ByteString
+ Data.Hoodle.Hashed: hoodle_pages :: Hoodle -> ![Page]
+ Data.Hoodle.Hashed: hoodle_revisions :: Hoodle -> [Revision]
+ Data.Hoodle.Hashed: hoodle_title :: Hoodle -> !Title
+ Data.Hoodle.Hashed: img_dim :: Image -> !Dimension
+ Data.Hoodle.Hashed: img_pos :: Image -> (Double, Double)
+ Data.Hoodle.Hashed: img_src :: Image -> ByteString
+ Data.Hoodle.Hashed: instance (Serialize a, Serialize b) => Serialize (Pair a b)
+ Data.Hoodle.Hashed: instance Eq Anchor
+ Data.Hoodle.Hashed: instance Eq Dimension
+ Data.Hoodle.Hashed: instance Eq Image
+ Data.Hoodle.Hashed: instance Eq Item
+ Data.Hoodle.Hashed: instance Eq Link
+ Data.Hoodle.Hashed: instance Eq SVG
+ Data.Hoodle.Hashed: instance Eq Stroke
+ Data.Hoodle.Hashed: instance Ord Anchor
+ Data.Hoodle.Hashed: instance Ord Dimension
+ Data.Hoodle.Hashed: instance Ord Image
+ Data.Hoodle.Hashed: instance Ord Item
+ Data.Hoodle.Hashed: instance Ord Link
+ Data.Hoodle.Hashed: instance Ord SVG
+ Data.Hoodle.Hashed: instance Ord Stroke
+ Data.Hoodle.Hashed: instance Serialize Anchor
+ Data.Hoodle.Hashed: instance Serialize Dimension
+ Data.Hoodle.Hashed: instance Serialize Image
+ Data.Hoodle.Hashed: instance Serialize Item
+ Data.Hoodle.Hashed: instance Serialize Link
+ Data.Hoodle.Hashed: instance Serialize SVG
+ Data.Hoodle.Hashed: instance Serialize Stroke
+ Data.Hoodle.Hashed: instance Show Anchor
+ Data.Hoodle.Hashed: instance Show Background
+ Data.Hoodle.Hashed: instance Show Dimension
+ Data.Hoodle.Hashed: instance Show Hoodle
+ Data.Hoodle.Hashed: instance Show Image
+ Data.Hoodle.Hashed: instance Show Item
+ Data.Hoodle.Hashed: instance Show Layer
+ Data.Hoodle.Hashed: instance Show Link
+ Data.Hoodle.Hashed: instance Show Page
+ Data.Hoodle.Hashed: instance Show Revision
+ Data.Hoodle.Hashed: instance Show SVG
+ Data.Hoodle.Hashed: instance Show Stroke
+ Data.Hoodle.Hashed: items :: Simple Lens Layer [Item]
+ Data.Hoodle.Hashed: layer_items :: Layer -> ![Item]
+ Data.Hoodle.Hashed: layers :: Simple Lens Page [Layer]
+ Data.Hoodle.Hashed: link_anchorid :: Link -> ByteString
+ Data.Hoodle.Hashed: link_command :: Link -> Maybe ByteString
+ Data.Hoodle.Hashed: link_dim :: Link -> !Dimension
+ Data.Hoodle.Hashed: link_id :: Link -> ByteString
+ Data.Hoodle.Hashed: link_linkeddocid :: Link -> ByteString
+ Data.Hoodle.Hashed: link_location :: Link -> ByteString
+ Data.Hoodle.Hashed: link_pos :: Link -> (Double, Double)
+ Data.Hoodle.Hashed: link_render :: Link -> ByteString
+ Data.Hoodle.Hashed: link_text :: Link -> Maybe ByteString
+ Data.Hoodle.Hashed: link_type :: Link -> ByteString
+ Data.Hoodle.Hashed: newPageFromOld :: Page -> Page
+ Data.Hoodle.Hashed: page_bkg :: Page -> !Background
+ Data.Hoodle.Hashed: page_dim :: Page -> !Dimension
+ Data.Hoodle.Hashed: page_layers :: Page -> ![Layer]
+ Data.Hoodle.Hashed: pages :: Simple Lens Hoodle [Page]
+ Data.Hoodle.Hashed: revisions :: Simple Lens Hoodle [Revision]
+ Data.Hoodle.Hashed: revmd5 :: Simple Lens Revision ByteString
+ Data.Hoodle.Hashed: stroke_color :: Stroke -> ByteString
+ Data.Hoodle.Hashed: stroke_data :: Stroke -> ![Pair Double Double]
+ Data.Hoodle.Hashed: stroke_tool :: Stroke -> ByteString
+ Data.Hoodle.Hashed: stroke_vwdata :: Stroke -> [(Double, Double, Double)]
+ Data.Hoodle.Hashed: stroke_width :: Stroke -> !Double
+ Data.Hoodle.Hashed: svg_command :: SVG -> Maybe ByteString
+ Data.Hoodle.Hashed: svg_dim :: SVG -> !Dimension
+ Data.Hoodle.Hashed: svg_pos :: SVG -> (Double, Double)
+ Data.Hoodle.Hashed: svg_render :: SVG -> ByteString
+ Data.Hoodle.Hashed: svg_text :: SVG -> Maybe ByteString
+ Data.Hoodle.Hashed: title :: Simple Lens Hoodle Title
+ Data.Hoodle.Hashed: tool :: Simple Lens Stroke ByteString
+ Data.Hoodle.Hashed: type Title = ByteString
+ Data.Hoodle.Simple.V0_3: Anchor :: ByteString -> ByteString -> (Double, Double) -> !Dimension -> Anchor
+ Data.Hoodle.Simple.V0_3: Background :: !ByteString -> !ByteString -> !ByteString -> Background
+ Data.Hoodle.Simple.V0_3: BackgroundEmbedPdf :: ByteString -> Int -> Background
+ Data.Hoodle.Simple.V0_3: BackgroundPdf :: ByteString -> Maybe ByteString -> Maybe ByteString -> Int -> Background
+ Data.Hoodle.Simple.V0_3: Dim :: !Double -> !Double -> Dimension
+ Data.Hoodle.Simple.V0_3: Hoodle :: ByteString -> !Title -> [Revision] -> Maybe ByteString -> Maybe Text -> ![Page] -> Hoodle
+ Data.Hoodle.Simple.V0_3: Image :: ByteString -> (Double, Double) -> !Dimension -> Image
+ Data.Hoodle.Simple.V0_3: ItemAnchor :: Anchor -> Item
+ Data.Hoodle.Simple.V0_3: ItemImage :: Image -> Item
+ Data.Hoodle.Simple.V0_3: ItemLink :: Link -> Item
+ Data.Hoodle.Simple.V0_3: ItemSVG :: SVG -> Item
+ Data.Hoodle.Simple.V0_3: ItemStroke :: Stroke -> Item
+ Data.Hoodle.Simple.V0_3: Layer :: ![Item] -> Layer
+ Data.Hoodle.Simple.V0_3: Link :: ByteString -> ByteString -> ByteString -> Maybe ByteString -> Maybe ByteString -> ByteString -> (Double, Double) -> !Dimension -> Link
+ Data.Hoodle.Simple.V0_3: LinkAnchor :: ByteString -> ByteString -> ByteString -> ByteString -> ByteString -> (Double, Double) -> !Dimension -> Link
+ Data.Hoodle.Simple.V0_3: LinkDocID :: ByteString -> ByteString -> ByteString -> Maybe ByteString -> Maybe ByteString -> ByteString -> (Double, Double) -> !Dimension -> Link
+ Data.Hoodle.Simple.V0_3: Page :: !Dimension -> !Background -> ![Layer] -> Page
+ Data.Hoodle.Simple.V0_3: Revision :: !ByteString -> !ByteString -> Revision
+ Data.Hoodle.Simple.V0_3: RevisionInk :: !ByteString -> [Stroke] -> Revision
+ Data.Hoodle.Simple.V0_3: SVG :: Maybe ByteString -> Maybe ByteString -> ByteString -> (Double, Double) -> !Dimension -> SVG
+ Data.Hoodle.Simple.V0_3: Stroke :: !ByteString -> !ByteString -> !Double -> ![Pair Double Double] -> Stroke
+ Data.Hoodle.Simple.V0_3: VWStroke :: ByteString -> ByteString -> [(Double, Double, Double)] -> Stroke
+ Data.Hoodle.Simple.V0_3: _revink :: Revision -> [Stroke]
+ Data.Hoodle.Simple.V0_3: _revmd5 :: Revision -> !ByteString
+ Data.Hoodle.Simple.V0_3: _revtxt :: Revision -> !ByteString
+ Data.Hoodle.Simple.V0_3: anchor_dim :: Anchor -> !Dimension
+ Data.Hoodle.Simple.V0_3: anchor_id :: Anchor -> ByteString
+ Data.Hoodle.Simple.V0_3: anchor_pos :: Anchor -> (Double, Double)
+ Data.Hoodle.Simple.V0_3: anchor_render :: Anchor -> ByteString
+ Data.Hoodle.Simple.V0_3: background :: Simple Lens Page Background
+ Data.Hoodle.Simple.V0_3: bkg_color :: Background -> !ByteString
+ Data.Hoodle.Simple.V0_3: bkg_domain :: Background -> Maybe ByteString
+ Data.Hoodle.Simple.V0_3: bkg_filename :: Background -> Maybe ByteString
+ Data.Hoodle.Simple.V0_3: bkg_pageno :: Background -> Int
+ Data.Hoodle.Simple.V0_3: bkg_style :: Background -> !ByteString
+ Data.Hoodle.Simple.V0_3: bkg_type :: Background -> ByteString
+ Data.Hoodle.Simple.V0_3: color :: Simple Lens Stroke ByteString
+ Data.Hoodle.Simple.V0_3: data Anchor
+ Data.Hoodle.Simple.V0_3: data Background
+ Data.Hoodle.Simple.V0_3: data Dimension
+ Data.Hoodle.Simple.V0_3: data Hoodle
+ Data.Hoodle.Simple.V0_3: data Image
+ Data.Hoodle.Simple.V0_3: data Item
+ Data.Hoodle.Simple.V0_3: data Layer
+ Data.Hoodle.Simple.V0_3: data Link
+ Data.Hoodle.Simple.V0_3: data Page
+ Data.Hoodle.Simple.V0_3: data Revision
+ Data.Hoodle.Simple.V0_3: data SVG
+ Data.Hoodle.Simple.V0_3: data Stroke
+ Data.Hoodle.Simple.V0_3: defaultBackground :: Background
+ Data.Hoodle.Simple.V0_3: defaultHoodle :: IO Hoodle
+ Data.Hoodle.Simple.V0_3: defaultPage :: Page
+ Data.Hoodle.Simple.V0_3: dim_height :: Dimension -> !Double
+ Data.Hoodle.Simple.V0_3: dim_width :: Dimension -> !Double
+ Data.Hoodle.Simple.V0_3: dimension :: Simple Lens Page Dimension
+ Data.Hoodle.Simple.V0_3: embeddedPdf :: Simple Lens Hoodle (Maybe ByteString)
+ Data.Hoodle.Simple.V0_3: embeddedText :: Simple Lens Hoodle (Maybe Text)
+ Data.Hoodle.Simple.V0_3: emptyHoodle :: IO Hoodle
+ Data.Hoodle.Simple.V0_3: emptyLayer :: Layer
+ Data.Hoodle.Simple.V0_3: emptyStroke :: Stroke
+ Data.Hoodle.Simple.V0_3: getXYtuples :: Stroke -> [(Double, Double)]
+ Data.Hoodle.Simple.V0_3: hoodleID :: Simple Lens Hoodle ByteString
+ Data.Hoodle.Simple.V0_3: hoodle_embeddedpdf :: Hoodle -> Maybe ByteString
+ Data.Hoodle.Simple.V0_3: hoodle_embeddedtext :: Hoodle -> Maybe Text
+ Data.Hoodle.Simple.V0_3: hoodle_id :: Hoodle -> ByteString
+ Data.Hoodle.Simple.V0_3: hoodle_pages :: Hoodle -> ![Page]
+ Data.Hoodle.Simple.V0_3: hoodle_revisions :: Hoodle -> [Revision]
+ Data.Hoodle.Simple.V0_3: hoodle_title :: Hoodle -> !Title
+ Data.Hoodle.Simple.V0_3: img_dim :: Image -> !Dimension
+ Data.Hoodle.Simple.V0_3: img_pos :: Image -> (Double, Double)
+ Data.Hoodle.Simple.V0_3: img_src :: Image -> ByteString
+ Data.Hoodle.Simple.V0_3: instance (Serialize a, Serialize b) => Serialize (Pair a b)
+ Data.Hoodle.Simple.V0_3: instance Eq Anchor
+ Data.Hoodle.Simple.V0_3: instance Eq Dimension
+ Data.Hoodle.Simple.V0_3: instance Eq Image
+ Data.Hoodle.Simple.V0_3: instance Eq Item
+ Data.Hoodle.Simple.V0_3: instance Eq Link
+ Data.Hoodle.Simple.V0_3: instance Eq SVG
+ Data.Hoodle.Simple.V0_3: instance Eq Stroke
+ Data.Hoodle.Simple.V0_3: instance Ord Anchor
+ Data.Hoodle.Simple.V0_3: instance Ord Dimension
+ Data.Hoodle.Simple.V0_3: instance Ord Image
+ Data.Hoodle.Simple.V0_3: instance Ord Item
+ Data.Hoodle.Simple.V0_3: instance Ord Link
+ Data.Hoodle.Simple.V0_3: instance Ord SVG
+ Data.Hoodle.Simple.V0_3: instance Ord Stroke
+ Data.Hoodle.Simple.V0_3: instance Serialize Anchor
+ Data.Hoodle.Simple.V0_3: instance Serialize Dimension
+ Data.Hoodle.Simple.V0_3: instance Serialize Image
+ Data.Hoodle.Simple.V0_3: instance Serialize Item
+ Data.Hoodle.Simple.V0_3: instance Serialize Link
+ Data.Hoodle.Simple.V0_3: instance Serialize SVG
+ Data.Hoodle.Simple.V0_3: instance Serialize Stroke
+ Data.Hoodle.Simple.V0_3: instance Show Anchor
+ Data.Hoodle.Simple.V0_3: instance Show Background
+ Data.Hoodle.Simple.V0_3: instance Show Dimension
+ Data.Hoodle.Simple.V0_3: instance Show Hoodle
+ Data.Hoodle.Simple.V0_3: instance Show Image
+ Data.Hoodle.Simple.V0_3: instance Show Item
+ Data.Hoodle.Simple.V0_3: instance Show Layer
+ Data.Hoodle.Simple.V0_3: instance Show Link
+ Data.Hoodle.Simple.V0_3: instance Show Page
+ Data.Hoodle.Simple.V0_3: instance Show Revision
+ Data.Hoodle.Simple.V0_3: instance Show SVG
+ Data.Hoodle.Simple.V0_3: instance Show Stroke
+ Data.Hoodle.Simple.V0_3: items :: Simple Lens Layer [Item]
+ Data.Hoodle.Simple.V0_3: layer_items :: Layer -> ![Item]
+ Data.Hoodle.Simple.V0_3: layers :: Simple Lens Page [Layer]
+ Data.Hoodle.Simple.V0_3: link_anchorid :: Link -> ByteString
+ Data.Hoodle.Simple.V0_3: link_command :: Link -> Maybe ByteString
+ Data.Hoodle.Simple.V0_3: link_dim :: Link -> !Dimension
+ Data.Hoodle.Simple.V0_3: link_id :: Link -> ByteString
+ Data.Hoodle.Simple.V0_3: link_linkeddocid :: Link -> ByteString
+ Data.Hoodle.Simple.V0_3: link_location :: Link -> ByteString
+ Data.Hoodle.Simple.V0_3: link_pos :: Link -> (Double, Double)
+ Data.Hoodle.Simple.V0_3: link_render :: Link -> ByteString
+ Data.Hoodle.Simple.V0_3: link_text :: Link -> Maybe ByteString
+ Data.Hoodle.Simple.V0_3: link_type :: Link -> ByteString
+ Data.Hoodle.Simple.V0_3: newPageFromOld :: Page -> Page
+ Data.Hoodle.Simple.V0_3: page_bkg :: Page -> !Background
+ Data.Hoodle.Simple.V0_3: page_dim :: Page -> !Dimension
+ Data.Hoodle.Simple.V0_3: page_layers :: Page -> ![Layer]
+ Data.Hoodle.Simple.V0_3: pages :: Simple Lens Hoodle [Page]
+ Data.Hoodle.Simple.V0_3: revisions :: Simple Lens Hoodle [Revision]
+ Data.Hoodle.Simple.V0_3: revmd5 :: Simple Lens Revision ByteString
+ Data.Hoodle.Simple.V0_3: stroke_color :: Stroke -> ByteString
+ Data.Hoodle.Simple.V0_3: stroke_data :: Stroke -> ![Pair Double Double]
+ Data.Hoodle.Simple.V0_3: stroke_tool :: Stroke -> ByteString
+ Data.Hoodle.Simple.V0_3: stroke_vwdata :: Stroke -> [(Double, Double, Double)]
+ Data.Hoodle.Simple.V0_3: stroke_width :: Stroke -> !Double
+ Data.Hoodle.Simple.V0_3: svg_command :: SVG -> Maybe ByteString
+ Data.Hoodle.Simple.V0_3: svg_dim :: SVG -> !Dimension
+ Data.Hoodle.Simple.V0_3: svg_pos :: SVG -> (Double, Double)
+ Data.Hoodle.Simple.V0_3: svg_render :: SVG -> ByteString
+ Data.Hoodle.Simple.V0_3: svg_text :: SVG -> Maybe ByteString
+ Data.Hoodle.Simple.V0_3: title :: Simple Lens Hoodle Title
+ Data.Hoodle.Simple.V0_3: tool :: Simple Lens Stroke ByteString
+ Data.Hoodle.Simple.V0_3: type Title = ByteString
- Data.Hoodle.Generic: GHoodle :: ByteString -> ByteString -> [Revision] -> Maybe ByteString -> Maybe Text -> cntnr pg -> GHoodle cntnr pg
+ Data.Hoodle.Generic: GHoodle :: ByteString -> ByteString -> [Revision] -> Maybe PDFData -> Maybe Text -> cntnr pg -> GHoodle cntnr pg
- Data.Hoodle.Generic: gembeddedpdf :: Simple Lens (GHoodle cntnr pg) (Maybe ByteString)
+ Data.Hoodle.Generic: gembeddedpdf :: Simple Lens (GHoodle cntnr pg) (Maybe PDFData)
- Data.Hoodle.Generic: ghoodle_embeddedpdf :: GHoodle cntnr pg -> Maybe ByteString
+ Data.Hoodle.Generic: ghoodle_embeddedpdf :: GHoodle cntnr pg -> Maybe PDFData
- Data.Hoodle.Select: GSelect :: ByteString -> ByteString -> [Revision] -> Maybe ByteString -> Maybe Text -> a -> b -> GSelect a b
+ Data.Hoodle.Select: GSelect :: ByteString -> ByteString -> [Revision] -> Maybe PDFData -> Maybe Text -> a -> b -> GSelect a b
- Data.Hoodle.Select: gselEmbeddedPdf :: Simple Lens (GSelect a b) (Maybe ByteString)
+ Data.Hoodle.Select: gselEmbeddedPdf :: Simple Lens (GSelect a b) (Maybe PDFData)
- Data.Hoodle.Select: gselect_embeddedpdf :: GSelect a b -> Maybe ByteString
+ Data.Hoodle.Select: gselect_embeddedpdf :: GSelect a b -> Maybe PDFData

Files

− CHANGES
@@ -1,9 +0,0 @@-0.1: 18 Dec 2011-   * First public release -0.2: 25 Dec 2011-   * double buffer support-0.3: 15 Jan 2012 -   * ZipperSelect support -0.4: 12 Feb 2012 -   * Variable width stroke support- 
hoodle-types.cabal view
@@ -1,5 +1,5 @@ Name:		hoodle-types-Version:	0.3+Version:	0.3.0 Synopsis:	Data types for programs for hoodle file format Description: 	Hoodle file format data type including generic interface License: 	BSD3@@ -9,7 +9,7 @@ Category:       Data Build-Type: 	Simple Cabal-Version:  >= 1.8-data-files:     CHANGES+data-files:      Source-repository head   type: git   location: https://www.github.com/wavewave/hoodle-types@@ -32,13 +32,14 @@   Exposed-Modules:                     Data.Hoodle.BBox                    Data.Hoodle.Generic-                   Data.Hoodle.Generic.Simple+                   Data.Hoodle.Hashed                    Data.Hoodle.Predefined                     Data.Hoodle.Primitive                     Data.Hoodle.Select                    Data.Hoodle.Simple                    Data.Hoodle.Simple.V0_1_1                    Data.Hoodle.Simple.V0_2_2+                   Data.Hoodle.Simple.V0_3                    Data.Hoodle.Util                    Data.Hoodle.Zipper  
src/Data/Hoodle/Generic.hs view
@@ -32,12 +32,16 @@ --  import Prelude hiding ((.),id) +data PDFData = PDFData { pdfBase64 :: ByteString +                       , pdfNumPages :: Int } ++ -- | Generic Hoodle data having generic pages data GHoodle cntnr pg = GHoodle                          { ghoodle_id :: ByteString                          , ghoodle_ttl :: ByteString                          , ghoodle_revisions :: [Revision]-                        , ghoodle_embeddedpdf :: Maybe ByteString +                        , ghoodle_embeddedpdf :: Maybe PDFData                         , ghoodle_embeddedtext :: Maybe T.Text                         , ghoodle_pgs :: cntnr pg }   @@ -83,7 +87,7 @@ grevisions = lens ghoodle_revisions (\f a -> f { ghoodle_revisions = a } )  -- | -gembeddedpdf :: Simple Lens (GHoodle cntnr pg) (Maybe ByteString)+gembeddedpdf :: Simple Lens (GHoodle cntnr pg) (Maybe PDFData) gembeddedpdf = lens ghoodle_embeddedpdf (\f a -> f { ghoodle_embeddedpdf = a } )  -- | 
− src/Data/Hoodle/Generic/Simple.hs
@@ -1,66 +0,0 @@-{-# LANGUAGE TypeFamilies, TypeOperators, MultiParamTypeClasses #-}---------------------------------------------------------------------------------- |--- Module      : Data.Hoodle.Generic.Simple --- Copyright   : (c) 2011, 2012, 2014 Ian-Woo Kim------ License     : BSD3--- Maintainer  : Ian-Woo Kim <ianwookim@gmail.com>--- Stability   : experimental--- Portability : GHC------ Simple Hoodle Type in Generic parameterized type--- --------------------------------------------------------------------------------module Data.Hoodle.Generic.Simple where--import Control.Applicative-import Control.Lens --- from this package-import Data.Hoodle.Generic-import Data.Hoodle.Simple---- | -type SLayer = GLayer () [] Item  -- Strokes ---- | -type SPage = GPage Background [] SLayer ---- |-type SHoodle = GHoodle [] SPage ---- | smart constructor for SLayer -mkSLayer :: Layer -> SLayer-mkSLayer = GLayer () <$> view items -- strokes ---- | smart constructor for SPage-mkSPage :: Page -> SPage -mkSPage = GPage -          <$> view dimension -          <*> view background -          <*> map mkSLayer . view layers  ---- | smart constructor for SHoodle -mkSHoodle :: Hoodle -> SHoodle -mkSHoodle = GHoodle -            <$> view hoodleID-            <*> view title -            <*> view revisions-            <*> view embeddedPdf -            <*> view embeddedText-            <*> map mkSPage . view pages---- | -slayer2Layer :: SLayer -> Layer -slayer2Layer (GLayer _ itms) = Layer itms ---- | -spage2Page :: SPage -> Page -spage2Page (GPage dim bkg lyrs) = Page dim bkg (map slayer2Layer lyrs)---- | -shoodle2Hoodle :: SHoodle -> Hoodle-shoodle2Hoodle (GHoodle hid ttl revs pdf txt pgs) = Hoodle hid ttl revs pdf txt (map spage2Page pgs)-
+ src/Data/Hoodle/Hashed.hs view
@@ -0,0 +1,378 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}++-----------------------------------------------------------------------------+-- |+-- Module      : Data.Hoodle.Hashed+-- Copyright   : (c) 2011-2014 Ian-Woo Kim+--+-- License     : BSD3+-- Maintainer  : Ian-Woo Kim <ianwookim@gmail.com>+-- Stability   : experimental+-- Portability : GHC+--+----------------------------------------------------------------------------- ++module Data.Hoodle.Hashed where++-- from other packages+import           Control.Applicative +import           Control.Lens +import           Data.ByteString.Char8 hiding (map)+import           Data.UUID.V4 +import qualified Data.Serialize as SE+import           Data.Strict.Tuple+import qualified Data.Text as T+-- from this package+import           Data.Hoodle.Util+-- +import Prelude hiding (putStrLn,fst,snd,curry,uncurry)++-- | +type Title = ByteString++-- | wrapper of object embeddable in Layer+data Item = ItemStroke Stroke+          | ItemImage Image+          | ItemSVG SVG+          | ItemLink Link+          | ItemAnchor Anchor+          deriving (Show,Eq,Ord)+++-- | Pen stroke item +data Stroke = Stroke { stroke_tool  :: !ByteString+                     , stroke_color :: !ByteString+                     , stroke_width :: !Double+                     , stroke_data  :: ![Pair Double Double]+                     }+            | VWStroke { stroke_tool :: ByteString +                       , stroke_color :: ByteString +                       , stroke_vwdata :: [(Double,Double,Double)] +                       }+            deriving (Show,Eq,Ord)++-- | Image item +data Image = Image { img_src :: ByteString+                   , img_pos :: (Double,Double)+                   , img_dim :: !Dimension+                   } +             deriving (Show,Eq,Ord)++data SVG = SVG { svg_text :: Maybe ByteString+               , svg_command :: Maybe ByteString +               , svg_render :: ByteString+               , svg_pos :: (Double,Double)+               , svg_dim :: !Dimension }  +           deriving (Show,Eq,Ord)+                    ++data Link = Link { link_id :: ByteString +                 , link_type :: ByteString +                 , link_location :: ByteString+                 , link_text :: Maybe ByteString+                 , link_command :: Maybe ByteString +                 , link_render :: ByteString+                 , link_pos :: (Double,Double)+                 , link_dim :: !Dimension }  +          | LinkDocID { link_id :: ByteString+                      , link_linkeddocid :: ByteString +                      , link_location :: ByteString +                      , link_text :: Maybe ByteString+                      , link_command :: Maybe ByteString +                      , link_render :: ByteString+                      , link_pos :: (Double,Double)+                      , link_dim :: !Dimension }  +          | LinkAnchor { link_id :: ByteString +                       , link_linkeddocid :: ByteString+                       , link_location :: ByteString+                       , link_anchorid :: ByteString+                       , link_render :: ByteString+                       , link_pos :: (Double,Double)+                       , link_dim :: !Dimension+                       }++           deriving (Show,Eq,Ord)                    ++data Anchor = Anchor { anchor_id :: ByteString +                     , anchor_render :: ByteString+                     , anchor_pos :: (Double, Double)+                     , anchor_dim :: !Dimension+                     } +            deriving (Show,Eq,Ord)+                    +-- | +instance SE.Serialize Stroke where+    put Stroke{..} = SE.putWord8 0 +                     >> SE.put stroke_tool +                     >> SE.put stroke_color+                     >> SE.put stroke_width+                     >> SE.put stroke_data+    put VWStroke{..} = SE.putWord8 1 +                       >> SE.put stroke_tool +                       >> SE.put stroke_color+                       >> SE.put stroke_vwdata+    get = do tag <- SE.getWord8  +             case tag of +               0 -> Stroke <$> SE.get <*> SE.get <*> SE.get <*> SE.get+               1 -> VWStroke <$> SE.get <*> SE.get <*> SE.get+               _ -> fail "err in Stroke parsing"+++-- | +instance SE.Serialize Image where+    put Image {..} = SE.put img_src+                     >> SE.put img_pos+                     >> SE.put img_dim+    get = Image <$> SE.get <*> SE.get <*> SE.get++-- | +instance SE.Serialize SVG where+    put SVG {..} = SE.put svg_text+                   >> SE.put svg_command +                   >> SE.put svg_render+                   >> SE.put svg_pos+                   >> SE.put svg_dim+    get = SVG <$> SE.get <*> SE.get <*> SE.get <*> SE.get <*> SE.get+    +    ++-- | +instance SE.Serialize Link where+    put Link {..}       = SE.putWord8 0 +                          >> SE.put link_id+                          >> SE.put link_type+                          >> SE.put link_location+                          >> SE.put link_text+                          >> SE.put link_command +                          >> SE.put link_render+                          >> SE.put link_pos+                          >> SE.put link_dim+    put LinkDocID {..}  = SE.putWord8 1 +                          >> SE.put link_id+                          >> SE.put link_linkeddocid +                          >> SE.put link_location+                          >> SE.put link_text+                          >> SE.put link_command +                          >> SE.put link_render+                          >> SE.put link_pos+                          >> SE.put link_dim+    put LinkAnchor {..} = SE.putWord8 2+                          >> SE.put link_id+                          >> SE.put link_linkeddocid+                          >> SE.put link_location+                          >> SE.put link_anchorid+                          >> SE.put link_render+                          >> SE.put link_pos+                          >> SE.put link_dim+    get = do tag <- SE.getWord8 +             case tag of +               0 -> Link       <$> SE.get <*> SE.get <*> SE.get <*> SE.get +                               <*> SE.get <*> SE.get <*> SE.get <*> SE.get+               1 -> LinkDocID  <$> SE.get <*> SE.get <*> SE.get <*> SE.get +                               <*> SE.get <*> SE.get <*> SE.get <*> SE.get+               2 -> LinkAnchor <$> SE.get <*> SE.get <*> SE.get <*> SE.get+                               <*> SE.get <*> SE.get <*> SE.get+               _ -> fail "err in Link parsing"++++instance SE.Serialize Anchor where+    put Anchor {..} = SE.put anchor_id+                      >> SE.put anchor_render+                      >> SE.put anchor_pos+                      >> SE.put anchor_dim+    get = Anchor <$> SE.get <*> SE.get <*> SE.get <*> SE.get+++-- | +instance SE.Serialize Item where+    put (ItemStroke str) = SE.putWord8 0 +                           >> SE.put str +    put (ItemImage img) = SE.putWord8 1 +                          >> SE.put img+    put (ItemSVG svg) = SE.putWord8 2+                        >> SE.put svg +    put (ItemLink lnk) = SE.putWord8 3+                         >> SE.put lnk                         +    put (ItemAnchor anc) = SE.putWord8 4+                           >> SE.put anc                         +    get = do tag <- SE.getWord8 +             case tag of +               0 -> ItemStroke <$> SE.get+               1 -> ItemImage <$> SE.get+               2 -> ItemSVG <$> SE.get+               3 -> ItemLink <$> SE.get+               4 -> ItemAnchor <$> SE.get+               _ -> fail "err in Item parsing"++-- |    +instance (SE.Serialize a, SE.Serialize b) => SE.Serialize (Pair a b) where+    put (x :!: y) = SE.put x+                    >> SE.put y+    get = (:!:) <$> SE.get <*> SE.get++    +-- | +data Dimension = Dim { dim_width :: !Double, dim_height :: !Double }+               deriving (Show,Eq,Ord)++-- | +instance SE.Serialize Dimension where +  put (Dim w h) = SE.put w >> SE.put h +  get = Dim <$> SE.get <*> SE.get++-- | +data Background = Background { bkg_type :: !ByteString +                             , bkg_color :: !ByteString +                             , bkg_style :: !ByteString +                             }+                | BackgroundPdf { bkg_type :: ByteString +                                , bkg_domain :: Maybe ByteString+                                , bkg_filename :: Maybe ByteString+                                , bkg_pageno :: Int+                                }+                | BackgroundEmbedPdf { bkg_type :: ByteString+                                     , bkg_pageno :: Int } +                deriving Show +-- | +data Revision = Revision { _revmd5 :: !ByteString +                         , _revtxt :: !ByteString +                         }  +              | RevisionInk { _revmd5 :: !ByteString+                            , _revink :: [Stroke] } +              deriving Show ++-- | +data Hoodle = Hoodle { hoodle_id :: ByteString+                     , hoodle_title :: !Title+                     , hoodle_revisions :: [Revision]+                     , hoodle_embeddedpdf :: Maybe ByteString+                     , hoodle_embeddedtext :: Maybe T.Text+                     , hoodle_pages :: ![Page] }+             deriving Show ++-- | +data Page = Page { page_dim :: !Dimension+                 , page_bkg :: !Background +                 , page_layers :: ![Layer] }+          deriving Show ++-- | +data Layer = Layer { layer_items :: ![Item] } +           deriving Show ++-- | +getXYtuples :: Stroke -> [(Double,Double)]+getXYtuples (Stroke _t _c _w d) = map (\(x :!: y) -> (x,y)) d+getXYtuples (VWStroke _t _c d) = map ((,)<$>fst3<*>snd3) d +++----------------------------+-- Lenses+----------------------------++-- | +tool :: Simple Lens Stroke ByteString+tool = lens stroke_tool (\f a -> f { stroke_tool = a })  ++-- | +color :: Simple Lens Stroke ByteString +color = lens stroke_color (\f a -> f { stroke_color = a } )++-- |+hoodleID :: Simple Lens Hoodle ByteString +hoodleID = lens hoodle_id (\f a -> f { hoodle_id = a } )++-- | +title :: Simple Lens Hoodle Title+title = lens hoodle_title (\f a -> f { hoodle_title = a } )++-- | +revisions :: Simple Lens Hoodle [Revision]+revisions = lens hoodle_revisions (\f a -> f { hoodle_revisions = a } )++-- | +revmd5 :: Simple Lens Revision ByteString+revmd5 = lens _revmd5 (\f a -> f { _revmd5 = a } )++-- | +embeddedPdf :: Simple Lens Hoodle (Maybe ByteString)+embeddedPdf = lens hoodle_embeddedpdf (\f a -> f { hoodle_embeddedpdf = a} )++-- | +embeddedText :: Simple Lens Hoodle (Maybe T.Text)+embeddedText = lens hoodle_embeddedtext (\f a -> f { hoodle_embeddedtext = a} )++-- | +pages :: Simple Lens Hoodle [Page]+pages = lens hoodle_pages (\f a -> f { hoodle_pages = a } )+++-- | +dimension :: Simple Lens Page Dimension +dimension = lens page_dim (\f a -> f { page_dim = a } )++-- | +background :: Simple Lens Page Background +background = lens page_bkg (\f a -> f { page_bkg = a } )++-- | +layers :: Simple Lens Page [Layer] +layers = lens page_layers (\f a -> f { page_layers = a } )++-- | +items :: Simple Lens Layer [Item]+items = lens layer_items (\f a -> f { layer_items = a } )+++--------------------------+-- empty objects+--------------------------++-- | +emptyHoodle :: IO Hoodle+emptyHoodle = do+  uuid <- nextRandom+  return $ Hoodle ((pack.show) uuid) "" [] Nothing Nothing [] ++-- | +emptyLayer :: Layer +emptyLayer = Layer { layer_items = [] } ++-- | +emptyStroke :: Stroke +emptyStroke = Stroke "pen" "black" 1.4 []++-- | +defaultBackground :: Background+defaultBackground = Background { bkg_type = "solid"+                               , bkg_color = "white"+                               , bkg_style = "lined" +                               }++-- | +defaultPage :: Page+defaultPage = Page { page_dim = Dim  612.0 792.0 +                   , page_bkg = defaultBackground+                   , page_layers = [ emptyLayer ] +                   } ++-- | +defaultHoodle :: IO Hoodle +defaultHoodle = +    (set title "untitled".set embeddedPdf Nothing . set pages [defaultPage])+    <$> emptyHoodle ++-- | +newPageFromOld :: Page -> Page+newPageFromOld page = +  Page { page_dim = page_dim page +       , page_bkg = page_bkg page +       , page_layers = [emptyLayer] } +                   +
src/Data/Hoodle/Select.hs view
@@ -27,7 +27,7 @@ data GSelect a b = GSelect { gselect_id :: ByteString                             , gselect_ttl :: ByteString                             , gselect_revisions :: [Revision]-                           , gselect_embeddedpdf :: Maybe ByteString+                           , gselect_embeddedpdf :: Maybe PDFData -- Maybe ByteString                            , gselect_embeddedtext :: Maybe T.Text                            , gselect_all :: a                             , gselect_selected :: b@@ -45,7 +45,7 @@ gselRevisions = lens gselect_revisions (\f a -> f {gselect_revisions = a } )  -- |-gselEmbeddedPdf :: Simple Lens (GSelect a b) (Maybe ByteString)+gselEmbeddedPdf :: Simple Lens (GSelect a b) (Maybe PDFData) gselEmbeddedPdf = lens gselect_embeddedpdf (\f a -> f {gselect_embeddedpdf = a})  -- |
src/Data/Hoodle/Simple.hs view
@@ -4,7 +4,7 @@ ----------------------------------------------------------------------------- -- | -- Module      : Data.Hoodle.Simple --- Copyright   : (c) 2011-2014 Ian-Woo Kim+-- Copyright   : (c) 2011-2015 Ian-Woo Kim -- -- License     : BSD3 -- Maintainer  : Ian-Woo Kim <ianwookim@gmail.com>
+ src/Data/Hoodle/Simple/V0_3.hs view
@@ -0,0 +1,378 @@+{-# LANGUAGE BangPatterns #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TypeFamilies #-}+{-# LANGUAGE TypeOperators #-}++-----------------------------------------------------------------------------+-- |+-- Module      : Data.Hoodle.Simple.V0_3+-- Copyright   : (c) 2011-2014 Ian-Woo Kim+--+-- License     : BSD3+-- Maintainer  : Ian-Woo Kim <ianwookim@gmail.com>+-- Stability   : experimental+-- Portability : GHC+--+----------------------------------------------------------------------------- ++module Data.Hoodle.Simple.V0_3 where++-- from other packages+import           Control.Applicative +import           Control.Lens +import           Data.ByteString.Char8 hiding (map)+import           Data.UUID.V4 +import qualified Data.Serialize as SE+import           Data.Strict.Tuple+import qualified Data.Text as T+-- from this package+import           Data.Hoodle.Util+-- +import Prelude hiding (putStrLn,fst,snd,curry,uncurry)++-- | +type Title = ByteString++-- | wrapper of object embeddable in Layer+data Item = ItemStroke Stroke+          | ItemImage Image+          | ItemSVG SVG+          | ItemLink Link+          | ItemAnchor Anchor+          deriving (Show,Eq,Ord)+++-- | Pen stroke item +data Stroke = Stroke { stroke_tool  :: !ByteString+                     , stroke_color :: !ByteString+                     , stroke_width :: !Double+                     , stroke_data  :: ![Pair Double Double]+                     }+            | VWStroke { stroke_tool :: ByteString +                       , stroke_color :: ByteString +                       , stroke_vwdata :: [(Double,Double,Double)] +                       }+            deriving (Show,Eq,Ord)++-- | Image item +data Image = Image { img_src :: ByteString+                   , img_pos :: (Double,Double)+                   , img_dim :: !Dimension+                   } +             deriving (Show,Eq,Ord)++data SVG = SVG { svg_text :: Maybe ByteString+               , svg_command :: Maybe ByteString +               , svg_render :: ByteString+               , svg_pos :: (Double,Double)+               , svg_dim :: !Dimension }  +           deriving (Show,Eq,Ord)+                    ++data Link = Link { link_id :: ByteString +                 , link_type :: ByteString +                 , link_location :: ByteString+                 , link_text :: Maybe ByteString+                 , link_command :: Maybe ByteString +                 , link_render :: ByteString+                 , link_pos :: (Double,Double)+                 , link_dim :: !Dimension }  +          | LinkDocID { link_id :: ByteString+                      , link_linkeddocid :: ByteString +                      , link_location :: ByteString +                      , link_text :: Maybe ByteString+                      , link_command :: Maybe ByteString +                      , link_render :: ByteString+                      , link_pos :: (Double,Double)+                      , link_dim :: !Dimension }  +          | LinkAnchor { link_id :: ByteString +                       , link_linkeddocid :: ByteString+                       , link_location :: ByteString+                       , link_anchorid :: ByteString+                       , link_render :: ByteString+                       , link_pos :: (Double,Double)+                       , link_dim :: !Dimension+                       }++           deriving (Show,Eq,Ord)                    ++data Anchor = Anchor { anchor_id :: ByteString +                     , anchor_render :: ByteString+                     , anchor_pos :: (Double, Double)+                     , anchor_dim :: !Dimension+                     } +            deriving (Show,Eq,Ord)+                    +-- | +instance SE.Serialize Stroke where+    put Stroke{..} = SE.putWord8 0 +                     >> SE.put stroke_tool +                     >> SE.put stroke_color+                     >> SE.put stroke_width+                     >> SE.put stroke_data+    put VWStroke{..} = SE.putWord8 1 +                       >> SE.put stroke_tool +                       >> SE.put stroke_color+                       >> SE.put stroke_vwdata+    get = do tag <- SE.getWord8  +             case tag of +               0 -> Stroke <$> SE.get <*> SE.get <*> SE.get <*> SE.get+               1 -> VWStroke <$> SE.get <*> SE.get <*> SE.get+               _ -> fail "err in Stroke parsing"+++-- | +instance SE.Serialize Image where+    put Image {..} = SE.put img_src+                     >> SE.put img_pos+                     >> SE.put img_dim+    get = Image <$> SE.get <*> SE.get <*> SE.get++-- | +instance SE.Serialize SVG where+    put SVG {..} = SE.put svg_text+                   >> SE.put svg_command +                   >> SE.put svg_render+                   >> SE.put svg_pos+                   >> SE.put svg_dim+    get = SVG <$> SE.get <*> SE.get <*> SE.get <*> SE.get <*> SE.get+    +    ++-- | +instance SE.Serialize Link where+    put Link {..}       = SE.putWord8 0 +                          >> SE.put link_id+                          >> SE.put link_type+                          >> SE.put link_location+                          >> SE.put link_text+                          >> SE.put link_command +                          >> SE.put link_render+                          >> SE.put link_pos+                          >> SE.put link_dim+    put LinkDocID {..}  = SE.putWord8 1 +                          >> SE.put link_id+                          >> SE.put link_linkeddocid +                          >> SE.put link_location+                          >> SE.put link_text+                          >> SE.put link_command +                          >> SE.put link_render+                          >> SE.put link_pos+                          >> SE.put link_dim+    put LinkAnchor {..} = SE.putWord8 2+                          >> SE.put link_id+                          >> SE.put link_linkeddocid+                          >> SE.put link_location+                          >> SE.put link_anchorid+                          >> SE.put link_render+                          >> SE.put link_pos+                          >> SE.put link_dim+    get = do tag <- SE.getWord8 +             case tag of +               0 -> Link       <$> SE.get <*> SE.get <*> SE.get <*> SE.get +                               <*> SE.get <*> SE.get <*> SE.get <*> SE.get+               1 -> LinkDocID  <$> SE.get <*> SE.get <*> SE.get <*> SE.get +                               <*> SE.get <*> SE.get <*> SE.get <*> SE.get+               2 -> LinkAnchor <$> SE.get <*> SE.get <*> SE.get <*> SE.get+                               <*> SE.get <*> SE.get <*> SE.get+               _ -> fail "err in Link parsing"++++instance SE.Serialize Anchor where+    put Anchor {..} = SE.put anchor_id+                      >> SE.put anchor_render+                      >> SE.put anchor_pos+                      >> SE.put anchor_dim+    get = Anchor <$> SE.get <*> SE.get <*> SE.get <*> SE.get+++-- | +instance SE.Serialize Item where+    put (ItemStroke str) = SE.putWord8 0 +                           >> SE.put str +    put (ItemImage img) = SE.putWord8 1 +                          >> SE.put img+    put (ItemSVG svg) = SE.putWord8 2+                        >> SE.put svg +    put (ItemLink lnk) = SE.putWord8 3+                         >> SE.put lnk                         +    put (ItemAnchor anc) = SE.putWord8 4+                           >> SE.put anc                         +    get = do tag <- SE.getWord8 +             case tag of +               0 -> ItemStroke <$> SE.get+               1 -> ItemImage <$> SE.get+               2 -> ItemSVG <$> SE.get+               3 -> ItemLink <$> SE.get+               4 -> ItemAnchor <$> SE.get+               _ -> fail "err in Item parsing"++-- |    +instance (SE.Serialize a, SE.Serialize b) => SE.Serialize (Pair a b) where+    put (x :!: y) = SE.put x+                    >> SE.put y+    get = (:!:) <$> SE.get <*> SE.get++    +-- | +data Dimension = Dim { dim_width :: !Double, dim_height :: !Double }+               deriving (Show,Eq,Ord)++-- | +instance SE.Serialize Dimension where +  put (Dim w h) = SE.put w >> SE.put h +  get = Dim <$> SE.get <*> SE.get++-- | +data Background = Background { bkg_type :: !ByteString +                             , bkg_color :: !ByteString +                             , bkg_style :: !ByteString +                             }+                | BackgroundPdf { bkg_type :: ByteString +                                , bkg_domain :: Maybe ByteString+                                , bkg_filename :: Maybe ByteString+                                , bkg_pageno :: Int+                                }+                | BackgroundEmbedPdf { bkg_type :: ByteString+                                     , bkg_pageno :: Int } +                deriving Show +-- | +data Revision = Revision { _revmd5 :: !ByteString +                         , _revtxt :: !ByteString +                         }  +              | RevisionInk { _revmd5 :: !ByteString+                            , _revink :: [Stroke] } +              deriving Show ++-- | +data Hoodle = Hoodle { hoodle_id :: ByteString+                     , hoodle_title :: !Title+                     , hoodle_revisions :: [Revision]+                     , hoodle_embeddedpdf :: Maybe ByteString+                     , hoodle_embeddedtext :: Maybe T.Text+                     , hoodle_pages :: ![Page] }+             deriving Show ++-- | +data Page = Page { page_dim :: !Dimension+                 , page_bkg :: !Background +                 , page_layers :: ![Layer] }+          deriving Show ++-- | +data Layer = Layer { layer_items :: ![Item] } +           deriving Show ++-- | +getXYtuples :: Stroke -> [(Double,Double)]+getXYtuples (Stroke _t _c _w d) = map (\(x :!: y) -> (x,y)) d+getXYtuples (VWStroke _t _c d) = map ((,)<$>fst3<*>snd3) d +++----------------------------+-- Lenses+----------------------------++-- | +tool :: Simple Lens Stroke ByteString+tool = lens stroke_tool (\f a -> f { stroke_tool = a })  ++-- | +color :: Simple Lens Stroke ByteString +color = lens stroke_color (\f a -> f { stroke_color = a } )++-- |+hoodleID :: Simple Lens Hoodle ByteString +hoodleID = lens hoodle_id (\f a -> f { hoodle_id = a } )++-- | +title :: Simple Lens Hoodle Title+title = lens hoodle_title (\f a -> f { hoodle_title = a } )++-- | +revisions :: Simple Lens Hoodle [Revision]+revisions = lens hoodle_revisions (\f a -> f { hoodle_revisions = a } )++-- | +revmd5 :: Simple Lens Revision ByteString+revmd5 = lens _revmd5 (\f a -> f { _revmd5 = a } )++-- | +embeddedPdf :: Simple Lens Hoodle (Maybe ByteString)+embeddedPdf = lens hoodle_embeddedpdf (\f a -> f { hoodle_embeddedpdf = a} )++-- | +embeddedText :: Simple Lens Hoodle (Maybe T.Text)+embeddedText = lens hoodle_embeddedtext (\f a -> f { hoodle_embeddedtext = a} )++-- | +pages :: Simple Lens Hoodle [Page]+pages = lens hoodle_pages (\f a -> f { hoodle_pages = a } )+++-- | +dimension :: Simple Lens Page Dimension +dimension = lens page_dim (\f a -> f { page_dim = a } )++-- | +background :: Simple Lens Page Background +background = lens page_bkg (\f a -> f { page_bkg = a } )++-- | +layers :: Simple Lens Page [Layer] +layers = lens page_layers (\f a -> f { page_layers = a } )++-- | +items :: Simple Lens Layer [Item]+items = lens layer_items (\f a -> f { layer_items = a } )+++--------------------------+-- empty objects+--------------------------++-- | +emptyHoodle :: IO Hoodle+emptyHoodle = do+  uuid <- nextRandom+  return $ Hoodle ((pack.show) uuid) "" [] Nothing Nothing [] ++-- | +emptyLayer :: Layer +emptyLayer = Layer { layer_items = [] } ++-- | +emptyStroke :: Stroke +emptyStroke = Stroke "pen" "black" 1.4 []++-- | +defaultBackground :: Background+defaultBackground = Background { bkg_type = "solid"+                               , bkg_color = "white"+                               , bkg_style = "lined" +                               }++-- | +defaultPage :: Page+defaultPage = Page { page_dim = Dim  612.0 792.0 +                   , page_bkg = defaultBackground+                   , page_layers = [ emptyLayer ] +                   } ++-- | +defaultHoodle :: IO Hoodle +defaultHoodle = +    (set title "untitled".set embeddedPdf Nothing . set pages [defaultPage])+    <$> emptyHoodle ++-- | +newPageFromOld :: Page -> Page+newPageFromOld page = +  Page { page_dim = page_dim page +       , page_bkg = page_bkg page +       , page_layers = [emptyLayer] } +                   +
src/Data/Hoodle/Zipper.hs view
@@ -5,7 +5,7 @@ ----------------------------------------------------------------------------- -- | -- Module      : Data.Hoodle.Zipper --- Copyright   : (c) 2011-2013 Ian-Woo Kim+-- Copyright   : (c) 2011-2013,2015 Ian-Woo Kim -- -- License     : BSD3 -- Maintainer  : Ian-Woo Kim <ianwookim@gmail.com>@@ -39,7 +39,11 @@ deriving instance Functor SeqZipper  -- |-deriving instance Foldable SeqZipper +-- deriving instance Foldable SeqZipper ++instance Foldable SeqZipper where+  foldr f acc (SZ (x,(y1s,y2s))) = Data.Foldable.foldr f acc (y1s <> singleton x <> y2s)+  -- | instance Applicative SeqZipper where