hgeometry-0.5.0.0: Geometric Algorithms, Data structures, and Data types.

Safe HaskellNone
LanguageHaskell2010

Data.Geometry.Ipe.Reader

Contents

Synopsis

Reading ipe Files

readRawIpeFile :: Coordinate r => FilePath -> IO (Either ConversionError (IpeFile r)) Source

Given a file path, tries to read an ipe file

readIpeFile :: Coordinate r => FilePath -> IO (Either ConversionError (IpeFile r)) Source

Given a file path, tries to read an ipe file. This function applies all matrices to objects.

readSinglePageFile :: Coordinate r => FilePath -> IO (Either ConversionError (IpePage r)) Source

Since most Ipe file contain only one page, we provide a shortcut for that as well. This function applies all matrices.

Reading XML directly

fromIpeXML :: (Coordinate r, IpeRead (t r)) => ByteString -> Either ConversionError (t r) Source

Given a Bytestring, try to parse the bytestring into anything that is IpeReadable, i.e. any of the Ipe elements.

readXML :: ByteString -> Either ConversionError (Node Text Text) Source

Reads the data from a Bytestring into a proper Node

Read classes

class IpeReadAttr t where Source

Basically IpeReadText for attributes. This class is not really meant to be implemented directly. Just define an IpeReadText instance for the type (Apply f at), then the generic instance below takes care of looking up the name of the attribute, and calling the right ipeReadText value. This class is just so that reifyConstraint in ipeReadRec can select the right typeclass when building the rec.

Instances

IpeReadText (Apply * k f at) => IpeReadAttr (Attr k f at) Source 

Some low level implementation functions

ipeReadObject :: (IpeRead (i r), f ~ AttrMapSym1 r, ats ~ AttributesOf i, RecApplicative ats, RecAll (Attr f) ats IpeReadAttr, AllSatisfy IpeAttrName ats) => Proxy i -> proxy r -> Node Text Text -> Either ConversionError (i r :+ IpeAttributes i r) Source

If we can ipeRead an ipe element, and we can ipeReadAttrs its attributes we can properly read an ipe object using ipeReadObject

ipeReadAttrs :: forall proxy proxy' i r f ats. (f ~ AttrMapSym1 r, ats ~ AttributesOf i, RecApplicative ats, RecAll (Attr f) ats IpeReadAttr, AllSatisfy IpeAttrName ats) => proxy i -> proxy' r -> Node Text Text -> Either ConversionError (IpeAttributes i r) Source

Reader for records. Given a proxy of some ipe type i, and a proxy of an coordinate type r, read the IpeAttributes for i from the xml node.

ipeReadRec :: forall f ats. (RecApplicative ats, RecAll (Attr f) ats IpeReadAttr, AllSatisfy IpeAttrName ats) => Proxy f -> Proxy ats -> Node Text Text -> Either ConversionError (Rec (Attr f) ats) Source

Reading the Attributes into a Rec (Attr f), all based on the types of f (the type family mapping labels to types), and a list of labels (ats).