{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) -} module GI.Poppler.Structs.StructureElementIter ( -- * Exported types StructureElementIter(..) , noStructureElementIter , -- * Methods -- ** copy #method:copy# StructureElementIterCopyMethodInfo , structureElementIterCopy , -- ** free #method:free# StructureElementIterFreeMethodInfo , structureElementIterFree , -- ** getChild #method:getChild# StructureElementIterGetChildMethodInfo , structureElementIterGetChild , -- ** getElement #method:getElement# StructureElementIterGetElementMethodInfo, structureElementIterGetElement , -- ** new #method:new# structureElementIterNew , -- ** next #method:next# StructureElementIterNextMethodInfo , structureElementIterNext , ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import {-# SOURCE #-} qualified GI.Poppler.Objects.Document as Poppler.Document import {-# SOURCE #-} qualified GI.Poppler.Objects.StructureElement as Poppler.StructureElement newtype StructureElementIter = StructureElementIter (ManagedPtr StructureElementIter) foreign import ccall "poppler_structure_element_iter_get_type" c_poppler_structure_element_iter_get_type :: IO GType instance BoxedObject StructureElementIter where boxedType _ = c_poppler_structure_element_iter_get_type noStructureElementIter :: Maybe StructureElementIter noStructureElementIter = Nothing instance O.HasAttributeList StructureElementIter type instance O.AttributeList StructureElementIter = StructureElementIterAttributeList type StructureElementIterAttributeList = ('[ ] :: [(Symbol, *)]) -- method StructureElementIter::new -- method type : Constructor -- Args : [Arg {argCName = "poppler_document", argType = TInterface (Name {namespace = "Poppler", name = "Document"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerDocument.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Poppler", name = "StructureElementIter"})) -- throws : False -- Skip return : False foreign import ccall "poppler_structure_element_iter_new" poppler_structure_element_iter_new :: Ptr Poppler.Document.Document -> -- poppler_document : TInterface (Name {namespace = "Poppler", name = "Document"}) IO (Ptr StructureElementIter) {- | Returns the root 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' for /@document@/, or 'Nothing'. The returned value must be freed with 'GI.Poppler.Structs.StructureElementIter.structureElementIterFree'. Documents may have an associated structure tree &mdashmostly, Tagged-PDF compliant documents— which can be used to obtain information about the document structure and its contents. Each node in the tree contains a 'GI.Poppler.Objects.StructureElement.StructureElement'. Here is a simple example that walks the whole tree: \<informalexample>\<programlisting> static void walk_structure (PopplerStructureElementIter *iter) { do { \/\<!-- -->* Get the element and do something with it *\<!-- -->\/ PopplerStructureElementIter *child = poppler_structure_element_iter_get_child (iter); if (child) walk_structure (child); poppler_structure_element_iter_free (child); } while (poppler_structure_element_iter_next (iter)); } ... { iter = poppler_structure_element_iter_new (document); walk_structure (iter); poppler_structure_element_iter_free (iter); } \<\/programlisting>\<\/informalexample> @since 0.26 -} structureElementIterNew :: (B.CallStack.HasCallStack, MonadIO m, Poppler.Document.IsDocument a) => a {- ^ /@popplerDocument@/: a 'GI.Poppler.Objects.Document.Document'. -} -> m StructureElementIter {- ^ __Returns:__ a new 'GI.Poppler.Structs.StructureElementIter.StructureElementIter', or 'Nothing' if document doesn\'t have structure tree. -} structureElementIterNew popplerDocument = liftIO $ do popplerDocument' <- unsafeManagedPtrCastPtr popplerDocument result <- poppler_structure_element_iter_new popplerDocument' checkUnexpectedReturnNULL "structureElementIterNew" result result' <- (wrapBoxed StructureElementIter) result touchManagedPtr popplerDocument return result' -- method StructureElementIter::copy -- method type : OrdinaryMethod -- Args : [Arg {argCName = "iter", argType = TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerStructureElementIter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Poppler", name = "StructureElementIter"})) -- throws : False -- Skip return : False foreign import ccall "poppler_structure_element_iter_copy" poppler_structure_element_iter_copy :: Ptr StructureElementIter -> -- iter : TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}) IO (Ptr StructureElementIter) {- | Creates a new 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' as a copy of /@iter@/. The returned value must be freed with 'GI.Poppler.Structs.StructureElementIter.structureElementIterFree'. @since 0.26 -} structureElementIterCopy :: (B.CallStack.HasCallStack, MonadIO m) => StructureElementIter {- ^ /@iter@/: a 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' -} -> m StructureElementIter {- ^ __Returns:__ a new 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' -} structureElementIterCopy iter = liftIO $ do iter' <- unsafeManagedPtrGetPtr iter result <- poppler_structure_element_iter_copy iter' checkUnexpectedReturnNULL "structureElementIterCopy" result result' <- (wrapBoxed StructureElementIter) result touchManagedPtr iter return result' data StructureElementIterCopyMethodInfo instance (signature ~ (m StructureElementIter), MonadIO m) => O.MethodInfo StructureElementIterCopyMethodInfo StructureElementIter signature where overloadedMethod _ = structureElementIterCopy -- method StructureElementIter::free -- method type : OrdinaryMethod -- Args : [Arg {argCName = "iter", argType = TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerStructureElementIter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "poppler_structure_element_iter_free" poppler_structure_element_iter_free :: Ptr StructureElementIter -> -- iter : TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}) IO () {- | Frees /@iter@/. @since 0.26 -} structureElementIterFree :: (B.CallStack.HasCallStack, MonadIO m) => StructureElementIter {- ^ /@iter@/: a 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' -} -> m () structureElementIterFree iter = liftIO $ do iter' <- unsafeManagedPtrGetPtr iter poppler_structure_element_iter_free iter' touchManagedPtr iter return () data StructureElementIterFreeMethodInfo instance (signature ~ (m ()), MonadIO m) => O.MethodInfo StructureElementIterFreeMethodInfo StructureElementIter signature where overloadedMethod _ = structureElementIterFree -- method StructureElementIter::get_child -- method type : OrdinaryMethod -- Args : [Arg {argCName = "parent", argType = TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerStructureElementIter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Poppler", name = "StructureElementIter"})) -- throws : False -- Skip return : False foreign import ccall "poppler_structure_element_iter_get_child" poppler_structure_element_iter_get_child :: Ptr StructureElementIter -> -- parent : TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}) IO (Ptr StructureElementIter) {- | Returns a new iterator to the children elements of the 'GI.Poppler.Objects.StructureElement.StructureElement' associated with /@iter@/. The returned value must be freed with 'GI.Poppler.Structs.StructureElementIter.structureElementIterFree'. @since 0.26 -} structureElementIterGetChild :: (B.CallStack.HasCallStack, MonadIO m) => StructureElementIter {- ^ /@parent@/: a 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' -} -> m StructureElementIter {- ^ __Returns:__ a new 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' -} structureElementIterGetChild parent = liftIO $ do parent' <- unsafeManagedPtrGetPtr parent result <- poppler_structure_element_iter_get_child parent' checkUnexpectedReturnNULL "structureElementIterGetChild" result result' <- (wrapBoxed StructureElementIter) result touchManagedPtr parent return result' data StructureElementIterGetChildMethodInfo instance (signature ~ (m StructureElementIter), MonadIO m) => O.MethodInfo StructureElementIterGetChildMethodInfo StructureElementIter signature where overloadedMethod _ = structureElementIterGetChild -- method StructureElementIter::get_element -- method type : OrdinaryMethod -- Args : [Arg {argCName = "iter", argType = TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerStructureElementIter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Poppler", name = "StructureElement"})) -- throws : False -- Skip return : False foreign import ccall "poppler_structure_element_iter_get_element" poppler_structure_element_iter_get_element :: Ptr StructureElementIter -> -- iter : TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}) IO (Ptr Poppler.StructureElement.StructureElement) {- | Returns the 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' associated with /@iter@/. @since 0.26 -} structureElementIterGetElement :: (B.CallStack.HasCallStack, MonadIO m) => StructureElementIter {- ^ /@iter@/: a 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' -} -> m Poppler.StructureElement.StructureElement {- ^ __Returns:__ a new 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' -} structureElementIterGetElement iter = liftIO $ do iter' <- unsafeManagedPtrGetPtr iter result <- poppler_structure_element_iter_get_element iter' checkUnexpectedReturnNULL "structureElementIterGetElement" result result' <- (wrapObject Poppler.StructureElement.StructureElement) result touchManagedPtr iter return result' data StructureElementIterGetElementMethodInfo instance (signature ~ (m Poppler.StructureElement.StructureElement), MonadIO m) => O.MethodInfo StructureElementIterGetElementMethodInfo StructureElementIter signature where overloadedMethod _ = structureElementIterGetElement -- method StructureElementIter::next -- method type : OrdinaryMethod -- Args : [Arg {argCName = "iter", argType = TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PopplerStructureElementIter", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "poppler_structure_element_iter_next" poppler_structure_element_iter_next :: Ptr StructureElementIter -> -- iter : TInterface (Name {namespace = "Poppler", name = "StructureElementIter"}) IO CInt {- | Sets /@iter@/ to point to the next structure element at the current level of the tree, if valid. See 'GI.Poppler.Structs.StructureElementIter.structureElementIterNew' for more information. @since 0.26 -} structureElementIterNext :: (B.CallStack.HasCallStack, MonadIO m) => StructureElementIter {- ^ /@iter@/: a 'GI.Poppler.Structs.StructureElementIter.StructureElementIter' -} -> m Bool {- ^ __Returns:__ 'True', if /@iter@/ was set to the next structure element -} structureElementIterNext iter = liftIO $ do iter' <- unsafeManagedPtrGetPtr iter result <- poppler_structure_element_iter_next iter' let result' = (/= 0) result touchManagedPtr iter return result' data StructureElementIterNextMethodInfo instance (signature ~ (m Bool), MonadIO m) => O.MethodInfo StructureElementIterNextMethodInfo StructureElementIter signature where overloadedMethod _ = structureElementIterNext type family ResolveStructureElementIterMethod (t :: Symbol) (o :: *) :: * where ResolveStructureElementIterMethod "copy" o = StructureElementIterCopyMethodInfo ResolveStructureElementIterMethod "free" o = StructureElementIterFreeMethodInfo ResolveStructureElementIterMethod "next" o = StructureElementIterNextMethodInfo ResolveStructureElementIterMethod "getChild" o = StructureElementIterGetChildMethodInfo ResolveStructureElementIterMethod "getElement" o = StructureElementIterGetElementMethodInfo ResolveStructureElementIterMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveStructureElementIterMethod t StructureElementIter, O.MethodInfo info StructureElementIter p) => O.IsLabelProxy t (StructureElementIter -> p) where fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveStructureElementIterMethod t StructureElementIter, O.MethodInfo info StructureElementIter p) => O.IsLabel t (StructureElementIter -> p) where fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif