{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) The 'GI.Pango.Structs.AttrList.AttrList' structure represents a list of attributes that apply to a section of text. The attributes are, in general, allowed to overlap in an arbitrary fashion, however, if the attributes are manipulated only through 'GI.Pango.Structs.AttrList.attrListChange', the overlap between properties will meet stricter criteria. Since the 'GI.Pango.Structs.AttrList.AttrList' structure is stored as a linear list, it is not suitable for storing attributes for large amounts of text. In general, you should not use a single 'GI.Pango.Structs.AttrList.AttrList' for more than one paragraph of text. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Pango.Structs.AttrList ( -- * Exported types AttrList(..) , noAttrList , -- * Methods -- ** change #method:change# #if ENABLE_OVERLOADING AttrListChangeMethodInfo , #endif attrListChange , -- ** copy #method:copy# #if ENABLE_OVERLOADING AttrListCopyMethodInfo , #endif attrListCopy , -- ** filter #method:filter# #if ENABLE_OVERLOADING AttrListFilterMethodInfo , #endif attrListFilter , -- ** insert #method:insert# #if ENABLE_OVERLOADING AttrListInsertMethodInfo , #endif attrListInsert , -- ** insertBefore #method:insertBefore# #if ENABLE_OVERLOADING AttrListInsertBeforeMethodInfo , #endif attrListInsertBefore , -- ** new #method:new# attrListNew , -- ** ref #method:ref# #if ENABLE_OVERLOADING AttrListRefMethodInfo , #endif attrListRef , -- ** splice #method:splice# #if ENABLE_OVERLOADING AttrListSpliceMethodInfo , #endif attrListSplice , -- ** unref #method:unref# #if ENABLE_OVERLOADING AttrListUnrefMethodInfo , #endif attrListUnref , ) 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.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties 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 qualified GHC.OverloadedLabels as OL import qualified GI.Pango.Callbacks as Pango.Callbacks import {-# SOURCE #-} qualified GI.Pango.Structs.Attribute as Pango.Attribute -- | Memory-managed wrapper type. newtype AttrList = AttrList (ManagedPtr AttrList) foreign import ccall "pango_attr_list_get_type" c_pango_attr_list_get_type :: IO GType instance BoxedObject AttrList where boxedType _ = c_pango_attr_list_get_type -- | A convenience alias for `Nothing` :: `Maybe` `AttrList`. noAttrList :: Maybe AttrList noAttrList = Nothing #if ENABLE_OVERLOADING instance O.HasAttributeList AttrList type instance O.AttributeList AttrList = AttrListAttributeList type AttrListAttributeList = ('[ ] :: [(Symbol, *)]) #endif -- method AttrList::new -- method type : Constructor -- Args : [] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Pango", name = "AttrList"})) -- throws : False -- Skip return : False foreign import ccall "pango_attr_list_new" pango_attr_list_new :: IO (Ptr AttrList) {- | Create a new empty attribute list with a reference count of one. -} attrListNew :: (B.CallStack.HasCallStack, MonadIO m) => m AttrList {- ^ __Returns:__ the newly allocated 'GI.Pango.Structs.AttrList.AttrList', which should be freed with 'GI.Pango.Structs.AttrList.attrListUnref'. -} attrListNew = liftIO $ do result <- pango_attr_list_new checkUnexpectedReturnNULL "attrListNew" result result' <- (wrapBoxed AttrList) result return result' #if ENABLE_OVERLOADING #endif -- method AttrList::change -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Pango", name = "AttrList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoAttrList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "attr", argType = TInterface (Name {namespace = "Pango", name = "Attribute"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the attribute to insert. Ownership of this\n value is assumed by the list.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_attr_list_change" pango_attr_list_change :: Ptr AttrList -> -- list : TInterface (Name {namespace = "Pango", name = "AttrList"}) Ptr Pango.Attribute.Attribute -> -- attr : TInterface (Name {namespace = "Pango", name = "Attribute"}) IO () {- | Insert the given attribute into the 'GI.Pango.Structs.AttrList.AttrList'. It will replace any attributes of the same type on that segment and be merged with any adjoining attributes that are identical. This function is slower than 'GI.Pango.Structs.AttrList.attrListInsert' for creating a attribute list in order (potentially much slower for large lists). However, 'GI.Pango.Structs.AttrList.attrListInsert' is not suitable for continually changing a set of attributes since it never removes or combines existing attributes. -} attrListChange :: (B.CallStack.HasCallStack, MonadIO m) => AttrList {- ^ /@list@/: a 'GI.Pango.Structs.AttrList.AttrList' -} -> Pango.Attribute.Attribute {- ^ /@attr@/: the attribute to insert. Ownership of this value is assumed by the list. -} -> m () attrListChange list attr = liftIO $ do list' <- unsafeManagedPtrGetPtr list attr' <- unsafeManagedPtrGetPtr attr pango_attr_list_change list' attr' touchManagedPtr list touchManagedPtr attr return () #if ENABLE_OVERLOADING data AttrListChangeMethodInfo instance (signature ~ (Pango.Attribute.Attribute -> m ()), MonadIO m) => O.MethodInfo AttrListChangeMethodInfo AttrList signature where overloadedMethod _ = attrListChange #endif -- method AttrList::copy -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Pango", name = "AttrList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoAttrList, may be %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Pango", name = "AttrList"})) -- throws : False -- Skip return : False foreign import ccall "pango_attr_list_copy" pango_attr_list_copy :: Ptr AttrList -> -- list : TInterface (Name {namespace = "Pango", name = "AttrList"}) IO (Ptr AttrList) {- | Copy /@list@/ and return an identical new list. -} attrListCopy :: (B.CallStack.HasCallStack, MonadIO m) => AttrList {- ^ /@list@/: a 'GI.Pango.Structs.AttrList.AttrList', may be 'Nothing' -} -> m (Maybe AttrList) {- ^ __Returns:__ the newly allocated 'GI.Pango.Structs.AttrList.AttrList', with a reference count of one, which should be freed with 'GI.Pango.Structs.AttrList.attrListUnref'. Returns 'Nothing' if /@list@/ was 'Nothing'. -} attrListCopy list = liftIO $ do list' <- unsafeManagedPtrGetPtr list result <- pango_attr_list_copy list' maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapBoxed AttrList) result' return result'' touchManagedPtr list return maybeResult #if ENABLE_OVERLOADING data AttrListCopyMethodInfo instance (signature ~ (m (Maybe AttrList)), MonadIO m) => O.MethodInfo AttrListCopyMethodInfo AttrList signature where overloadedMethod _ = attrListCopy #endif -- method AttrList::filter -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Pango", name = "AttrList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoAttrList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "func", argType = TInterface (Name {namespace = "Pango", name = "AttrFilterFunc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "callback function; returns %TRUE\n if an attribute should be filtered out.", sinceVersion = Nothing}, argScope = ScopeTypeCall, argClosure = 2, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Data to be passed to @func", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Pango", name = "AttrList"})) -- throws : False -- Skip return : False foreign import ccall "pango_attr_list_filter" pango_attr_list_filter :: Ptr AttrList -> -- list : TInterface (Name {namespace = "Pango", name = "AttrList"}) FunPtr Pango.Callbacks.C_AttrFilterFunc -> -- func : TInterface (Name {namespace = "Pango", name = "AttrFilterFunc"}) Ptr () -> -- data : TBasicType TPtr IO (Ptr AttrList) {- | Given a 'GI.Pango.Structs.AttrList.AttrList' and callback function, removes any elements of /@list@/ for which /@func@/ returns 'True' and inserts them into a new list. /Since: 1.2/ -} attrListFilter :: (B.CallStack.HasCallStack, MonadIO m) => AttrList {- ^ /@list@/: a 'GI.Pango.Structs.AttrList.AttrList' -} -> Pango.Callbacks.AttrFilterFunc {- ^ /@func@/: callback function; returns 'True' if an attribute should be filtered out. -} -> m (Maybe AttrList) {- ^ __Returns:__ the new 'GI.Pango.Structs.AttrList.AttrList' or 'Nothing' if no attributes of the given types were found. -} attrListFilter list func = liftIO $ do list' <- unsafeManagedPtrGetPtr list func' <- Pango.Callbacks.mk_AttrFilterFunc (Pango.Callbacks.wrap_AttrFilterFunc Nothing (Pango.Callbacks.drop_closures_AttrFilterFunc func)) let data_ = nullPtr result <- pango_attr_list_filter list' func' data_ maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapBoxed AttrList) result' return result'' safeFreeFunPtr $ castFunPtrToPtr func' touchManagedPtr list return maybeResult #if ENABLE_OVERLOADING data AttrListFilterMethodInfo instance (signature ~ (Pango.Callbacks.AttrFilterFunc -> m (Maybe AttrList)), MonadIO m) => O.MethodInfo AttrListFilterMethodInfo AttrList signature where overloadedMethod _ = attrListFilter #endif -- method AttrList::insert -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Pango", name = "AttrList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoAttrList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "attr", argType = TInterface (Name {namespace = "Pango", name = "Attribute"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the attribute to insert. Ownership of this\n value is assumed by the list.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_attr_list_insert" pango_attr_list_insert :: Ptr AttrList -> -- list : TInterface (Name {namespace = "Pango", name = "AttrList"}) Ptr Pango.Attribute.Attribute -> -- attr : TInterface (Name {namespace = "Pango", name = "Attribute"}) IO () {- | Insert the given attribute into the 'GI.Pango.Structs.AttrList.AttrList'. It will be inserted after all other attributes with a matching /@startIndex@/. -} attrListInsert :: (B.CallStack.HasCallStack, MonadIO m) => AttrList {- ^ /@list@/: a 'GI.Pango.Structs.AttrList.AttrList' -} -> Pango.Attribute.Attribute {- ^ /@attr@/: the attribute to insert. Ownership of this value is assumed by the list. -} -> m () attrListInsert list attr = liftIO $ do list' <- unsafeManagedPtrGetPtr list attr' <- unsafeManagedPtrGetPtr attr pango_attr_list_insert list' attr' touchManagedPtr list touchManagedPtr attr return () #if ENABLE_OVERLOADING data AttrListInsertMethodInfo instance (signature ~ (Pango.Attribute.Attribute -> m ()), MonadIO m) => O.MethodInfo AttrListInsertMethodInfo AttrList signature where overloadedMethod _ = attrListInsert #endif -- method AttrList::insert_before -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Pango", name = "AttrList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoAttrList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "attr", argType = TInterface (Name {namespace = "Pango", name = "Attribute"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the attribute to insert. Ownership of this\n value is assumed by the list.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_attr_list_insert_before" pango_attr_list_insert_before :: Ptr AttrList -> -- list : TInterface (Name {namespace = "Pango", name = "AttrList"}) Ptr Pango.Attribute.Attribute -> -- attr : TInterface (Name {namespace = "Pango", name = "Attribute"}) IO () {- | Insert the given attribute into the 'GI.Pango.Structs.AttrList.AttrList'. It will be inserted before all other attributes with a matching /@startIndex@/. -} attrListInsertBefore :: (B.CallStack.HasCallStack, MonadIO m) => AttrList {- ^ /@list@/: a 'GI.Pango.Structs.AttrList.AttrList' -} -> Pango.Attribute.Attribute {- ^ /@attr@/: the attribute to insert. Ownership of this value is assumed by the list. -} -> m () attrListInsertBefore list attr = liftIO $ do list' <- unsafeManagedPtrGetPtr list attr' <- unsafeManagedPtrGetPtr attr pango_attr_list_insert_before list' attr' touchManagedPtr list touchManagedPtr attr return () #if ENABLE_OVERLOADING data AttrListInsertBeforeMethodInfo instance (signature ~ (Pango.Attribute.Attribute -> m ()), MonadIO m) => O.MethodInfo AttrListInsertBeforeMethodInfo AttrList signature where overloadedMethod _ = attrListInsertBefore #endif -- method AttrList::ref -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Pango", name = "AttrList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoAttrList, may be %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Pango", name = "AttrList"})) -- throws : False -- Skip return : False foreign import ccall "pango_attr_list_ref" pango_attr_list_ref :: Ptr AttrList -> -- list : TInterface (Name {namespace = "Pango", name = "AttrList"}) IO (Ptr AttrList) {- | Increase the reference count of the given attribute list by one. /Since: 1.10/ -} attrListRef :: (B.CallStack.HasCallStack, MonadIO m) => AttrList {- ^ /@list@/: a 'GI.Pango.Structs.AttrList.AttrList', may be 'Nothing' -} -> m AttrList {- ^ __Returns:__ The attribute list passed in -} attrListRef list = liftIO $ do list' <- unsafeManagedPtrGetPtr list result <- pango_attr_list_ref list' checkUnexpectedReturnNULL "attrListRef" result result' <- (wrapBoxed AttrList) result touchManagedPtr list return result' #if ENABLE_OVERLOADING data AttrListRefMethodInfo instance (signature ~ (m AttrList), MonadIO m) => O.MethodInfo AttrListRefMethodInfo AttrList signature where overloadedMethod _ = attrListRef #endif -- method AttrList::splice -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Pango", name = "AttrList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoAttrList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "other", argType = TInterface (Name {namespace = "Pango", name = "AttrList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "another #PangoAttrList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "pos", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the position in @list at which to insert @other", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "len", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the length of the spliced segment. (Note that this\n must be specified since the attributes in @other\n may only be present at some subsection of this range)", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_attr_list_splice" pango_attr_list_splice :: Ptr AttrList -> -- list : TInterface (Name {namespace = "Pango", name = "AttrList"}) Ptr AttrList -> -- other : TInterface (Name {namespace = "Pango", name = "AttrList"}) Int32 -> -- pos : TBasicType TInt Int32 -> -- len : TBasicType TInt IO () {- | This function opens up a hole in /@list@/, fills it in with attributes from the left, and then merges /@other@/ on top of the hole. This operation is equivalent to stretching every attribute that applies at position /@pos@/ in /@list@/ by an amount /@len@/, and then calling 'GI.Pango.Structs.AttrList.attrListChange' with a copy of each attribute in /@other@/ in sequence (offset in position by /@pos@/). This operation proves useful for, for instance, inserting a pre-edit string in the middle of an edit buffer. -} attrListSplice :: (B.CallStack.HasCallStack, MonadIO m) => AttrList {- ^ /@list@/: a 'GI.Pango.Structs.AttrList.AttrList' -} -> AttrList {- ^ /@other@/: another 'GI.Pango.Structs.AttrList.AttrList' -} -> Int32 {- ^ /@pos@/: the position in /@list@/ at which to insert /@other@/ -} -> Int32 {- ^ /@len@/: the length of the spliced segment. (Note that this must be specified since the attributes in /@other@/ may only be present at some subsection of this range) -} -> m () attrListSplice list other pos len = liftIO $ do list' <- unsafeManagedPtrGetPtr list other' <- unsafeManagedPtrGetPtr other pango_attr_list_splice list' other' pos len touchManagedPtr list touchManagedPtr other return () #if ENABLE_OVERLOADING data AttrListSpliceMethodInfo instance (signature ~ (AttrList -> Int32 -> Int32 -> m ()), MonadIO m) => O.MethodInfo AttrListSpliceMethodInfo AttrList signature where overloadedMethod _ = attrListSplice #endif -- method AttrList::unref -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Pango", name = "AttrList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoAttrList, may be %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "pango_attr_list_unref" pango_attr_list_unref :: Ptr AttrList -> -- list : TInterface (Name {namespace = "Pango", name = "AttrList"}) IO () {- | Decrease the reference count of the given attribute list by one. If the result is zero, free the attribute list and the attributes it contains. -} attrListUnref :: (B.CallStack.HasCallStack, MonadIO m) => AttrList {- ^ /@list@/: a 'GI.Pango.Structs.AttrList.AttrList', may be 'Nothing' -} -> m () attrListUnref list = liftIO $ do list' <- unsafeManagedPtrGetPtr list pango_attr_list_unref list' touchManagedPtr list return () #if ENABLE_OVERLOADING data AttrListUnrefMethodInfo instance (signature ~ (m ()), MonadIO m) => O.MethodInfo AttrListUnrefMethodInfo AttrList signature where overloadedMethod _ = attrListUnref #endif #if ENABLE_OVERLOADING type family ResolveAttrListMethod (t :: Symbol) (o :: *) :: * where ResolveAttrListMethod "change" o = AttrListChangeMethodInfo ResolveAttrListMethod "copy" o = AttrListCopyMethodInfo ResolveAttrListMethod "filter" o = AttrListFilterMethodInfo ResolveAttrListMethod "insert" o = AttrListInsertMethodInfo ResolveAttrListMethod "insertBefore" o = AttrListInsertBeforeMethodInfo ResolveAttrListMethod "ref" o = AttrListRefMethodInfo ResolveAttrListMethod "splice" o = AttrListSpliceMethodInfo ResolveAttrListMethod "unref" o = AttrListUnrefMethodInfo ResolveAttrListMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveAttrListMethod t AttrList, O.MethodInfo info AttrList p) => OL.IsLabel t (AttrList -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif