    {- |
    Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
    License    : LGPL-2.1
    Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)

    The 'GI.Pango.Structs.FontDescription.FontDescription' structure represents the description
    of an ideal font. These structures are used both to list
    what fonts are available on the system and also for specifying
    the characteristics of a font to load.
    -}

    #define ENABLE_OVERLOADING \
           (!defined(__HADDOCK_VERSION__))

    module GI.Pango.Structs.FontDescription
        (

    -- * Exported types
        FontDescription(..)                     ,
        noFontDescription                       ,

     -- * Methods
    -- ** betterMatch #method:betterMatch#

    #if ENABLE_OVERLOADING
        FontDescriptionBetterMatchMethodInfo    ,
    #endif
        fontDescriptionBetterMatch              ,

    -- ** copy #method:copy#

    #if ENABLE_OVERLOADING
        FontDescriptionCopyMethodInfo           ,
    #endif
        fontDescriptionCopy                     ,

    -- ** copyStatic #method:copyStatic#

    #if ENABLE_OVERLOADING
        FontDescriptionCopyStaticMethodInfo     ,
    #endif
        fontDescriptionCopyStatic               ,

    -- ** equal #method:equal#

    #if ENABLE_OVERLOADING
        FontDescriptionEqualMethodInfo          ,
    #endif
        fontDescriptionEqual                    ,

    -- ** free #method:free#

    #if ENABLE_OVERLOADING
        FontDescriptionFreeMethodInfo           ,
    #endif
        fontDescriptionFree                     ,

    -- ** fromString #method:fromString#

        fontDescriptionFromString               ,

    -- ** getFamily #method:getFamily#

    #if ENABLE_OVERLOADING
        FontDescriptionGetFamilyMethodInfo      ,
    #endif
        fontDescriptionGetFamily                ,

    -- ** getGravity #method:getGravity#

    #if ENABLE_OVERLOADING
        FontDescriptionGetGravityMethodInfo     ,
    #endif
        fontDescriptionGetGravity               ,

    -- ** getSetFields #method:getSetFields#

    #if ENABLE_OVERLOADING
        FontDescriptionGetSetFieldsMethodInfo   ,
    #endif
        fontDescriptionGetSetFields             ,

    -- ** getSize #method:getSize#

    #if ENABLE_OVERLOADING
        FontDescriptionGetSizeMethodInfo        ,
    #endif
        fontDescriptionGetSize                  ,

    -- ** getSizeIsAbsolute #method:getSizeIsAbsolute#

    #if ENABLE_OVERLOADING
        FontDescriptionGetSizeIsAbsoluteMethodInfo,
    #endif
        fontDescriptionGetSizeIsAbsolute        ,

    -- ** getStretch #method:getStretch#

    #if ENABLE_OVERLOADING
        FontDescriptionGetStretchMethodInfo     ,
    #endif
        fontDescriptionGetStretch               ,

    -- ** getStyle #method:getStyle#

    #if ENABLE_OVERLOADING
        FontDescriptionGetStyleMethodInfo       ,
    #endif
        fontDescriptionGetStyle                 ,

    -- ** getVariant #method:getVariant#

    #if ENABLE_OVERLOADING
        FontDescriptionGetVariantMethodInfo     ,
    #endif
        fontDescriptionGetVariant               ,

    -- ** getVariations #method:getVariations#

    #if ENABLE_OVERLOADING
        FontDescriptionGetVariationsMethodInfo  ,
    #endif
        fontDescriptionGetVariations            ,

    -- ** getWeight #method:getWeight#

    #if ENABLE_OVERLOADING
        FontDescriptionGetWeightMethodInfo      ,
    #endif
        fontDescriptionGetWeight                ,

    -- ** hash #method:hash#

    #if ENABLE_OVERLOADING
        FontDescriptionHashMethodInfo           ,
    #endif
        fontDescriptionHash                     ,

    -- ** merge #method:merge#

    #if ENABLE_OVERLOADING
        FontDescriptionMergeMethodInfo          ,
    #endif
        fontDescriptionMerge                    ,

    -- ** mergeStatic #method:mergeStatic#

    #if ENABLE_OVERLOADING
        FontDescriptionMergeStaticMethodInfo    ,
    #endif
        fontDescriptionMergeStatic              ,

    -- ** new #method:new#

        fontDescriptionNew                      ,

    -- ** setAbsoluteSize #method:setAbsoluteSize#

    #if ENABLE_OVERLOADING
        FontDescriptionSetAbsoluteSizeMethodInfo,
    #endif
        fontDescriptionSetAbsoluteSize          ,

    -- ** setFamily #method:setFamily#

    #if ENABLE_OVERLOADING
        FontDescriptionSetFamilyMethodInfo      ,
    #endif
        fontDescriptionSetFamily                ,

    -- ** setFamilyStatic #method:setFamilyStatic#

    #if ENABLE_OVERLOADING
        FontDescriptionSetFamilyStaticMethodInfo,
    #endif
        fontDescriptionSetFamilyStatic          ,

    -- ** setGravity #method:setGravity#

    #if ENABLE_OVERLOADING
        FontDescriptionSetGravityMethodInfo     ,
    #endif
        fontDescriptionSetGravity               ,

    -- ** setSize #method:setSize#

    #if ENABLE_OVERLOADING
        FontDescriptionSetSizeMethodInfo        ,
    #endif
        fontDescriptionSetSize                  ,

    -- ** setStretch #method:setStretch#

    #if ENABLE_OVERLOADING
        FontDescriptionSetStretchMethodInfo     ,
    #endif
        fontDescriptionSetStretch               ,

    -- ** setStyle #method:setStyle#

    #if ENABLE_OVERLOADING
        FontDescriptionSetStyleMethodInfo       ,
    #endif
        fontDescriptionSetStyle                 ,

    -- ** setVariant #method:setVariant#

    #if ENABLE_OVERLOADING
        FontDescriptionSetVariantMethodInfo     ,
    #endif
        fontDescriptionSetVariant               ,

    -- ** setVariations #method:setVariations#

    #if ENABLE_OVERLOADING
        FontDescriptionSetVariationsMethodInfo  ,
    #endif
        fontDescriptionSetVariations            ,

    -- ** setVariationsStatic #method:setVariationsStatic#

    #if ENABLE_OVERLOADING
        FontDescriptionSetVariationsStaticMethodInfo,
    #endif
        fontDescriptionSetVariationsStatic      ,

    -- ** setWeight #method:setWeight#

    #if ENABLE_OVERLOADING
        FontDescriptionSetWeightMethodInfo      ,
    #endif
        fontDescriptionSetWeight                ,

    -- ** toFilename #method:toFilename#

    #if ENABLE_OVERLOADING
        FontDescriptionToFilenameMethodInfo     ,
    #endif
        fontDescriptionToFilename               ,

    -- ** toString #method:toString#

    #if ENABLE_OVERLOADING
        FontDescriptionToStringMethodInfo       ,
    #endif
        fontDescriptionToString                 ,

    -- ** unsetFields #method:unsetFields#

    #if ENABLE_OVERLOADING
        FontDescriptionUnsetFieldsMethodInfo    ,
    #endif
        fontDescriptionUnsetFields              ,

        ) 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.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.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.Pango.Enums as Pango.Enums
    import {-# SOURCE #-} qualified GI.Pango.Flags as Pango.Flags

    -- | Memory-managed wrapper type.
    newtype FontDescription = FontDescription (ManagedPtr FontDescription)
    foreign import ccall "pango_font_description_get_type" c_pango_font_description_get_type ::
        IO GType

    instance BoxedObject FontDescription where
        boxedType _ = c_pango_font_description_get_type

    -- | A convenience alias for `Nothing` :: `Maybe` `FontDescription`.
    noFontDescription :: Maybe FontDescription
    noFontDescription = Nothing

    #if ENABLE_OVERLOADING
    instance O.HasAttributeList FontDescription
    type instance O.AttributeList FontDescription = FontDescriptionAttributeList
    type FontDescriptionAttributeList = ('[ ] :: [(Symbol, *)])
    #endif

    -- method FontDescription::new
    -- method type : Constructor
    -- Args : []
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "FontDescription"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_new" pango_font_description_new ::
        IO (Ptr FontDescription)

    {- |
    Creates a new font description structure with all fields unset.
    -}
    fontDescriptionNew ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m FontDescription
        {- ^ __Returns:__ the newly allocated 'GI.Pango.Structs.FontDescription.FontDescription', which
                  should be freed using 'GI.Pango.Structs.FontDescription.fontDescriptionFree'. -}
    fontDescriptionNew  = liftIO $ do
        result <- pango_font_description_new
        checkUnexpectedReturnNULL "fontDescriptionNew" result
        result' <- (wrapBoxed FontDescription) result
        return result'

    #if ENABLE_OVERLOADING
    #endif

    -- method FontDescription::better_match
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "old_match", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "new_match", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", 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 "pango_font_description_better_match" pango_font_description_better_match ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        Ptr FontDescription ->                  -- old_match : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        Ptr FontDescription ->                  -- new_match : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CInt

    {- |
    Determines if the style attributes of /@newMatch@/ are a closer match
    for /@desc@/ than those of /@oldMatch@/ are, or if /@oldMatch@/ is 'Nothing',
    determines if /@newMatch@/ is a match at all.
    Approximate matching is done for
    weight and style; other style attributes must match exactly.
    Style attributes are all attributes other than family and size-related
    attributes.  Approximate matching for style considers PANGO_STYLE_OBLIQUE
    and PANGO_STYLE_ITALIC as matches, but not as good a match as when the
    styles are equal.

    Note that /@oldMatch@/ must match /@desc@/.
    -}
    fontDescriptionBetterMatch ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> Maybe (FontDescription)
        {- ^ /@oldMatch@/: a 'GI.Pango.Structs.FontDescription.FontDescription', or 'Nothing' -}
        -> FontDescription
        {- ^ /@newMatch@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m Bool
        {- ^ __Returns:__ 'True' if /@newMatch@/ is a better match -}
    fontDescriptionBetterMatch desc oldMatch newMatch = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        maybeOldMatch <- case oldMatch of
            Nothing -> return nullPtr
            Just jOldMatch -> do
                jOldMatch' <- unsafeManagedPtrGetPtr jOldMatch
                return jOldMatch'
        newMatch' <- unsafeManagedPtrGetPtr newMatch
        result <- pango_font_description_better_match desc' maybeOldMatch newMatch'
        let result' = (/= 0) result
        touchManagedPtr desc
        whenJust oldMatch touchManagedPtr
        touchManagedPtr newMatch
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionBetterMatchMethodInfo
    instance (signature ~ (Maybe (FontDescription) -> FontDescription -> m Bool), MonadIO m) => O.MethodInfo FontDescriptionBetterMatchMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionBetterMatch

    #endif

    -- method FontDescription::copy
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription, may be %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "FontDescription"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_copy" pango_font_description_copy ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO (Ptr FontDescription)

    {- |
    Make a copy of a 'GI.Pango.Structs.FontDescription.FontDescription'.
    -}
    fontDescriptionCopy ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription', may be 'Nothing' -}
        -> m (Maybe FontDescription)
        {- ^ __Returns:__ the newly allocated
                  'GI.Pango.Structs.FontDescription.FontDescription', which should be freed with
                  'GI.Pango.Structs.FontDescription.fontDescriptionFree', or 'Nothing' if /@desc@/ was
                  'Nothing'. -}
    fontDescriptionCopy desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_copy desc'
        maybeResult <- convertIfNonNull result $ \result' -> do
            result'' <- (wrapBoxed FontDescription) result'
            return result''
        touchManagedPtr desc
        return maybeResult

    #if ENABLE_OVERLOADING
    data FontDescriptionCopyMethodInfo
    instance (signature ~ (m (Maybe FontDescription)), MonadIO m) => O.MethodInfo FontDescriptionCopyMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionCopy

    #endif

    -- method FontDescription::copy_static
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription, may be %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "FontDescription"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_copy_static" pango_font_description_copy_static ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO (Ptr FontDescription)

    {- |
    Like 'GI.Pango.Structs.FontDescription.fontDescriptionCopy', but only a shallow copy is made
    of the family name and other allocated fields. The result can only
    be used until /@desc@/ is modified or freed. This is meant to be used
    when the copy is only needed temporarily.
    -}
    fontDescriptionCopyStatic ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription', may be 'Nothing' -}
        -> m (Maybe FontDescription)
        {- ^ __Returns:__ the newly allocated
                  'GI.Pango.Structs.FontDescription.FontDescription', which should be freed with
                  'GI.Pango.Structs.FontDescription.fontDescriptionFree', or 'Nothing' if /@desc@/ was
                  'Nothing'. -}
    fontDescriptionCopyStatic desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_copy_static desc'
        maybeResult <- convertIfNonNull result $ \result' -> do
            result'' <- (wrapBoxed FontDescription) result'
            return result''
        touchManagedPtr desc
        return maybeResult

    #if ENABLE_OVERLOADING
    data FontDescriptionCopyStaticMethodInfo
    instance (signature ~ (m (Maybe FontDescription)), MonadIO m) => O.MethodInfo FontDescriptionCopyStaticMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionCopyStatic

    #endif

    -- method FontDescription::equal
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc1", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "desc2", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "another #PangoFontDescription", 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 "pango_font_description_equal" pango_font_description_equal ::
        Ptr FontDescription ->                  -- desc1 : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        Ptr FontDescription ->                  -- desc2 : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CInt

    {- |
    Compares two font descriptions for equality. Two font descriptions
    are considered equal if the fonts they describe are provably identical.
    This means that their masks do not have to match, as long as other fields
    are all the same. (Two font descriptions may result in identical fonts
    being loaded, but still compare 'False'.)
    -}
    fontDescriptionEqual ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc1@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> FontDescription
        {- ^ /@desc2@/: another 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m Bool
        {- ^ __Returns:__ 'True' if the two font descriptions are identical,
    	 'False' otherwise. -}
    fontDescriptionEqual desc1 desc2 = liftIO $ do
        desc1' <- unsafeManagedPtrGetPtr desc1
        desc2' <- unsafeManagedPtrGetPtr desc2
        result <- pango_font_description_equal desc1' desc2'
        let result' = (/= 0) result
        touchManagedPtr desc1
        touchManagedPtr desc2
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionEqualMethodInfo
    instance (signature ~ (FontDescription -> m Bool), MonadIO m) => O.MethodInfo FontDescriptionEqualMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionEqual

    #endif

    -- method FontDescription::free
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription, 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_font_description_free" pango_font_description_free ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO ()

    {- |
    Frees a font description.
    -}
    fontDescriptionFree ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription', may be 'Nothing' -}
        -> m ()
    fontDescriptionFree desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        pango_font_description_free desc'
        touchManagedPtr desc
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionFreeMethodInfo
    instance (signature ~ (m ()), MonadIO m) => O.MethodInfo FontDescriptionFreeMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionFree

    #endif

    -- method FontDescription::get_family
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_get_family" pango_font_description_get_family ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CString

    {- |
    Gets the family name field of a font description. See
    'GI.Pango.Structs.FontDescription.fontDescriptionSetFamily'.
    -}
    fontDescriptionGetFamily ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription'. -}
        -> m (Maybe T.Text)
        {- ^ __Returns:__ the family name field for the font
                  description, or 'Nothing' if not previously set.  This
                  has the same life-time as the font description itself
                  and should not be freed. -}
    fontDescriptionGetFamily desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_family desc'
        maybeResult <- convertIfNonNull result $ \result' -> do
            result'' <- cstringToText result'
            return result''
        touchManagedPtr desc
        return maybeResult

    #if ENABLE_OVERLOADING
    data FontDescriptionGetFamilyMethodInfo
    instance (signature ~ (m (Maybe T.Text)), MonadIO m) => O.MethodInfo FontDescriptionGetFamilyMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetFamily

    #endif

    -- method FontDescription::get_gravity
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "Gravity"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_get_gravity" pango_font_description_get_gravity ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CUInt

    {- |
    Gets the gravity field of a font description. See
    'GI.Pango.Structs.FontDescription.fontDescriptionSetGravity'.

    /Since: 1.16/
    -}
    fontDescriptionGetGravity ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m Pango.Enums.Gravity
        {- ^ __Returns:__ the gravity field for the font description. Use
      'GI.Pango.Structs.FontDescription.fontDescriptionGetSetFields' to find out if
      the field was explicitly set or not. -}
    fontDescriptionGetGravity desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_gravity desc'
        let result' = (toEnum . fromIntegral) result
        touchManagedPtr desc
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionGetGravityMethodInfo
    instance (signature ~ (m Pango.Enums.Gravity), MonadIO m) => O.MethodInfo FontDescriptionGetGravityMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetGravity

    #endif

    -- method FontDescription::get_set_fields
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "FontMask"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_get_set_fields" pango_font_description_get_set_fields ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CUInt

    {- |
    Determines which fields in a font description have been set.
    -}
    fontDescriptionGetSetFields ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m [Pango.Flags.FontMask]
        {- ^ __Returns:__ a bitmask with bits set corresponding to the
      fields in /@desc@/ that have been set. -}
    fontDescriptionGetSetFields desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_set_fields desc'
        let result' = wordToGFlags result
        touchManagedPtr desc
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionGetSetFieldsMethodInfo
    instance (signature ~ (m [Pango.Flags.FontMask]), MonadIO m) => O.MethodInfo FontDescriptionGetSetFieldsMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetSetFields

    #endif

    -- method FontDescription::get_size
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_get_size" pango_font_description_get_size ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO Int32

    {- |
    Gets the size field of a font description.
    See 'GI.Pango.Structs.FontDescription.fontDescriptionSetSize'.
    -}
    fontDescriptionGetSize ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m Int32
        {- ^ __Returns:__ the size field for the font description in points or device units.
      You must call 'GI.Pango.Structs.FontDescription.fontDescriptionGetSizeIsAbsolute'
      to find out which is the case. Returns 0 if the size field has not
      previously been set or it has been set to 0 explicitly.
      Use 'GI.Pango.Structs.FontDescription.fontDescriptionGetSetFields' to
      find out if the field was explicitly set or not. -}
    fontDescriptionGetSize desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_size desc'
        touchManagedPtr desc
        return result

    #if ENABLE_OVERLOADING
    data FontDescriptionGetSizeMethodInfo
    instance (signature ~ (m Int32), MonadIO m) => O.MethodInfo FontDescriptionGetSizeMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetSize

    #endif

    -- method FontDescription::get_size_is_absolute
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", 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 "pango_font_description_get_size_is_absolute" pango_font_description_get_size_is_absolute ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CInt

    {- |
    Determines whether the size of the font is in points (not absolute) or device units (absolute).
    See 'GI.Pango.Structs.FontDescription.fontDescriptionSetSize' and 'GI.Pango.Structs.FontDescription.fontDescriptionSetAbsoluteSize'.

    /Since: 1.8/
    -}
    fontDescriptionGetSizeIsAbsolute ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m Bool
        {- ^ __Returns:__ whether the size for the font description is in
      points or device units.  Use 'GI.Pango.Structs.FontDescription.fontDescriptionGetSetFields' to
      find out if the size field of the font description was explicitly set or not. -}
    fontDescriptionGetSizeIsAbsolute desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_size_is_absolute desc'
        let result' = (/= 0) result
        touchManagedPtr desc
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionGetSizeIsAbsoluteMethodInfo
    instance (signature ~ (m Bool), MonadIO m) => O.MethodInfo FontDescriptionGetSizeIsAbsoluteMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetSizeIsAbsolute

    #endif

    -- method FontDescription::get_stretch
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "Stretch"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_get_stretch" pango_font_description_get_stretch ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CUInt

    {- |
    Gets the stretch field of a font description.
    See 'GI.Pango.Structs.FontDescription.fontDescriptionSetStretch'.
    -}
    fontDescriptionGetStretch ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription'. -}
        -> m Pango.Enums.Stretch
        {- ^ __Returns:__ the stretch field for the font description. Use
      'GI.Pango.Structs.FontDescription.fontDescriptionGetSetFields' to find out if
      the field was explicitly set or not. -}
    fontDescriptionGetStretch desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_stretch desc'
        let result' = (toEnum . fromIntegral) result
        touchManagedPtr desc
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionGetStretchMethodInfo
    instance (signature ~ (m Pango.Enums.Stretch), MonadIO m) => O.MethodInfo FontDescriptionGetStretchMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetStretch

    #endif

    -- method FontDescription::get_style
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "Style"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_get_style" pango_font_description_get_style ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CUInt

    {- |
    Gets the style field of a 'GI.Pango.Structs.FontDescription.FontDescription'. See
    'GI.Pango.Structs.FontDescription.fontDescriptionSetStyle'.
    -}
    fontDescriptionGetStyle ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m Pango.Enums.Style
        {- ^ __Returns:__ the style field for the font description.
      Use 'GI.Pango.Structs.FontDescription.fontDescriptionGetSetFields' to find out if
      the field was explicitly set or not. -}
    fontDescriptionGetStyle desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_style desc'
        let result' = (toEnum . fromIntegral) result
        touchManagedPtr desc
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionGetStyleMethodInfo
    instance (signature ~ (m Pango.Enums.Style), MonadIO m) => O.MethodInfo FontDescriptionGetStyleMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetStyle

    #endif

    -- method FontDescription::get_variant
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "Variant"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_get_variant" pango_font_description_get_variant ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CUInt

    {- |
    Gets the variant field of a 'GI.Pango.Structs.FontDescription.FontDescription'. See
    'GI.Pango.Structs.FontDescription.fontDescriptionSetVariant'.
    -}
    fontDescriptionGetVariant ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription'. -}
        -> m Pango.Enums.Variant
        {- ^ __Returns:__ the variant field for the font description. Use
      'GI.Pango.Structs.FontDescription.fontDescriptionGetSetFields' to find out if
      the field was explicitly set or not. -}
    fontDescriptionGetVariant desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_variant desc'
        let result' = (toEnum . fromIntegral) result
        touchManagedPtr desc
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionGetVariantMethodInfo
    instance (signature ~ (m Pango.Enums.Variant), MonadIO m) => O.MethodInfo FontDescriptionGetVariantMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetVariant

    #endif

    -- method FontDescription::get_variations
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_get_variations" pango_font_description_get_variations ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CString

    {- |
    Gets the variations field of a font description. See
    'GI.Pango.Structs.FontDescription.fontDescriptionSetVariations'.

    /Since: 1.42/
    -}
    fontDescriptionGetVariations ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m (Maybe T.Text)
        {- ^ __Returns:__ the varitions field for the font
                  description, or 'Nothing' if not previously set.  This
                  has the same life-time as the font description itself
                  and should not be freed. -}
    fontDescriptionGetVariations desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_variations desc'
        maybeResult <- convertIfNonNull result $ \result' -> do
            result'' <- cstringToText result'
            return result''
        touchManagedPtr desc
        return maybeResult

    #if ENABLE_OVERLOADING
    data FontDescriptionGetVariationsMethodInfo
    instance (signature ~ (m (Maybe T.Text)), MonadIO m) => O.MethodInfo FontDescriptionGetVariationsMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetVariations

    #endif

    -- method FontDescription::get_weight
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "Weight"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_get_weight" pango_font_description_get_weight ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CUInt

    {- |
    Gets the weight field of a font description. See
    'GI.Pango.Structs.FontDescription.fontDescriptionSetWeight'.
    -}
    fontDescriptionGetWeight ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m Pango.Enums.Weight
        {- ^ __Returns:__ the weight field for the font description. Use
      'GI.Pango.Structs.FontDescription.fontDescriptionGetSetFields' to find out if
      the field was explicitly set or not. -}
    fontDescriptionGetWeight desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_get_weight desc'
        let result' = (toEnum . fromIntegral) result
        touchManagedPtr desc
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionGetWeightMethodInfo
    instance (signature ~ (m Pango.Enums.Weight), MonadIO m) => O.MethodInfo FontDescriptionGetWeightMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionGetWeight

    #endif

    -- method FontDescription::hash
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_hash" pango_font_description_hash ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO Word32

    {- |
    Computes a hash of a 'GI.Pango.Structs.FontDescription.FontDescription' structure suitable
    to be used, for example, as an argument to @/g_hash_table_new()/@.
    The hash value is independent of /@desc@/->mask.
    -}
    fontDescriptionHash ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m Word32
        {- ^ __Returns:__ the hash value. -}
    fontDescriptionHash desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_hash desc'
        touchManagedPtr desc
        return result

    #if ENABLE_OVERLOADING
    data FontDescriptionHashMethodInfo
    instance (signature ~ (m Word32), MonadIO m) => O.MethodInfo FontDescriptionHashMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionHash

    #endif

    -- method FontDescription::merge
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "desc_to_merge", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "the #PangoFontDescription to merge from, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "replace_existing", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "if %TRUE, replace fields in @desc with the\n  corresponding values from @desc_to_merge, even if they\n  are already exist.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_merge" pango_font_description_merge ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        Ptr FontDescription ->                  -- desc_to_merge : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CInt ->                                 -- replace_existing : TBasicType TBoolean
        IO ()

    {- |
    Merges the fields that are set in /@descToMerge@/ into the fields in
    /@desc@/.  If /@replaceExisting@/ is 'False', only fields in /@desc@/ that
    are not already set are affected. If 'True', then fields that are
    already set will be replaced as well.

    If /@descToMerge@/ is 'Nothing', this function performs nothing.
    -}
    fontDescriptionMerge ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> Maybe (FontDescription)
        {- ^ /@descToMerge@/: the 'GI.Pango.Structs.FontDescription.FontDescription' to merge from, or 'Nothing' -}
        -> Bool
        {- ^ /@replaceExisting@/: if 'True', replace fields in /@desc@/ with the
      corresponding values from /@descToMerge@/, even if they
      are already exist. -}
        -> m ()
    fontDescriptionMerge desc descToMerge replaceExisting = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        maybeDescToMerge <- case descToMerge of
            Nothing -> return nullPtr
            Just jDescToMerge -> do
                jDescToMerge' <- unsafeManagedPtrGetPtr jDescToMerge
                return jDescToMerge'
        let replaceExisting' = (fromIntegral . fromEnum) replaceExisting
        pango_font_description_merge desc' maybeDescToMerge replaceExisting'
        touchManagedPtr desc
        whenJust descToMerge touchManagedPtr
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionMergeMethodInfo
    instance (signature ~ (Maybe (FontDescription) -> Bool -> m ()), MonadIO m) => O.MethodInfo FontDescriptionMergeMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionMerge

    #endif

    -- method FontDescription::merge_static
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "desc_to_merge", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the #PangoFontDescription to merge from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "replace_existing", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "if %TRUE, replace fields in @desc with the\n  corresponding values from @desc_to_merge, even if they\n  are already exist.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_merge_static" pango_font_description_merge_static ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        Ptr FontDescription ->                  -- desc_to_merge : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CInt ->                                 -- replace_existing : TBasicType TBoolean
        IO ()

    {- |
    Like 'GI.Pango.Structs.FontDescription.fontDescriptionMerge', but only a shallow copy is made
    of the family name and other allocated fields. /@desc@/ can only be
    used until /@descToMerge@/ is modified or freed. This is meant
    to be used when the merged font description is only needed temporarily.
    -}
    fontDescriptionMergeStatic ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> FontDescription
        {- ^ /@descToMerge@/: the 'GI.Pango.Structs.FontDescription.FontDescription' to merge from -}
        -> Bool
        {- ^ /@replaceExisting@/: if 'True', replace fields in /@desc@/ with the
      corresponding values from /@descToMerge@/, even if they
      are already exist. -}
        -> m ()
    fontDescriptionMergeStatic desc descToMerge replaceExisting = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        descToMerge' <- unsafeManagedPtrGetPtr descToMerge
        let replaceExisting' = (fromIntegral . fromEnum) replaceExisting
        pango_font_description_merge_static desc' descToMerge' replaceExisting'
        touchManagedPtr desc
        touchManagedPtr descToMerge
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionMergeStaticMethodInfo
    instance (signature ~ (FontDescription -> Bool -> m ()), MonadIO m) => O.MethodInfo FontDescriptionMergeStaticMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionMergeStatic

    #endif

    -- method FontDescription::set_absolute_size
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TDouble, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the new size, in Pango units. There are %PANGO_SCALE Pango units in one\n  device unit. For an output backend where a device unit is a pixel, a @size\n  value of 10 * PANGO_SCALE gives a 10 pixel font.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_absolute_size" pango_font_description_set_absolute_size ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CDouble ->                              -- size : TBasicType TDouble
        IO ()

    {- |
    Sets the size field of a font description, in device units. This is mutually
    exclusive with 'GI.Pango.Structs.FontDescription.fontDescriptionSetSize' which sets the font size
    in points.

    /Since: 1.8/
    -}
    fontDescriptionSetAbsoluteSize ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> Double
        {- ^ /@size@/: the new size, in Pango units. There are 'GI.Pango.Constants.SCALE' Pango units in one
      device unit. For an output backend where a device unit is a pixel, a /@size@/
      value of 10 * PANGO_SCALE gives a 10 pixel font. -}
        -> m ()
    fontDescriptionSetAbsoluteSize desc size = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        let size' = realToFrac size
        pango_font_description_set_absolute_size desc' size'
        touchManagedPtr desc
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetAbsoluteSizeMethodInfo
    instance (signature ~ (Double -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetAbsoluteSizeMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetAbsoluteSize

    #endif

    -- method FontDescription::set_family
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "family", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a string representing the family name.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_family" pango_font_description_set_family ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CString ->                              -- family : TBasicType TUTF8
        IO ()

    {- |
    Sets the family name field of a font description. The family
    name represents a family of related font styles, and will
    resolve to a particular 'GI.Pango.Objects.FontFamily.FontFamily'. In some uses of
    'GI.Pango.Structs.FontDescription.FontDescription', it is also possible to use a comma
    separated list of family names for this field.
    -}
    fontDescriptionSetFamily ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription'. -}
        -> T.Text
        {- ^ /@family@/: a string representing the family name. -}
        -> m ()
    fontDescriptionSetFamily desc family = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        family' <- textToCString family
        pango_font_description_set_family desc' family'
        touchManagedPtr desc
        freeMem family'
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetFamilyMethodInfo
    instance (signature ~ (T.Text -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetFamilyMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetFamily

    #endif

    -- method FontDescription::set_family_static
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "family", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a string representing the family name.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_family_static" pango_font_description_set_family_static ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CString ->                              -- family : TBasicType TUTF8
        IO ()

    {- |
    Like 'GI.Pango.Structs.FontDescription.fontDescriptionSetFamily', except that no
    copy of /@family@/ is made. The caller must make sure that the
    string passed in stays around until /@desc@/ has been freed
    or the name is set again. This function can be used if
    /@family@/ is a static string such as a C string literal, or
    if /@desc@/ is only needed temporarily.
    -}
    fontDescriptionSetFamilyStatic ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> T.Text
        {- ^ /@family@/: a string representing the family name. -}
        -> m ()
    fontDescriptionSetFamilyStatic desc family = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        family' <- textToCString family
        pango_font_description_set_family_static desc' family'
        touchManagedPtr desc
        freeMem family'
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetFamilyStaticMethodInfo
    instance (signature ~ (T.Text -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetFamilyStaticMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetFamilyStatic

    #endif

    -- method FontDescription::set_gravity
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "gravity", argType = TInterface (Name {namespace = "Pango", name = "Gravity"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the gravity for the font description.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_gravity" pango_font_description_set_gravity ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CUInt ->                                -- gravity : TInterface (Name {namespace = "Pango", name = "Gravity"})
        IO ()

    {- |
    Sets the gravity field of a font description. The gravity field
    specifies how the glyphs should be rotated.  If /@gravity@/ is
    'GI.Pango.Enums.GravityAuto', this actually unsets the gravity mask on
    the font description.

    This function is seldom useful to the user.  Gravity should normally
    be set on a 'GI.Pango.Objects.Context.Context'.

    /Since: 1.16/
    -}
    fontDescriptionSetGravity ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> Pango.Enums.Gravity
        {- ^ /@gravity@/: the gravity for the font description. -}
        -> m ()
    fontDescriptionSetGravity desc gravity = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        let gravity' = (fromIntegral . fromEnum) gravity
        pango_font_description_set_gravity desc' gravity'
        touchManagedPtr desc
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetGravityMethodInfo
    instance (signature ~ (Pango.Enums.Gravity -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetGravityMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetGravity

    #endif

    -- method FontDescription::set_size
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "size", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the size of the font in points, scaled by PANGO_SCALE. (That is,\n       a @size value of 10 * PANGO_SCALE is a 10 point font. The conversion\n       factor between points and device units depends on system configuration\n       and the output device. For screen display, a logical DPI of 96 is\n       common, in which case a 10 point font corresponds to a 10 * (96 / 72) = 13.3\n       pixel font. Use pango_font_description_set_absolute_size() if you need\n       a particular size in device units.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_size" pango_font_description_set_size ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        Int32 ->                                -- size : TBasicType TInt
        IO ()

    {- |
    Sets the size field of a font description in fractional points. This is mutually
    exclusive with 'GI.Pango.Structs.FontDescription.fontDescriptionSetAbsoluteSize'.
    -}
    fontDescriptionSetSize ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> Int32
        {- ^ /@size@/: the size of the font in points, scaled by PANGO_SCALE. (That is,
           a /@size@/ value of 10 * PANGO_SCALE is a 10 point font. The conversion
           factor between points and device units depends on system configuration
           and the output device. For screen display, a logical DPI of 96 is
           common, in which case a 10 point font corresponds to a 10 * (96 \/ 72) = 13.3
           pixel font. Use 'GI.Pango.Structs.FontDescription.fontDescriptionSetAbsoluteSize' if you need
           a particular size in device units. -}
        -> m ()
    fontDescriptionSetSize desc size = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        pango_font_description_set_size desc' size
        touchManagedPtr desc
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetSizeMethodInfo
    instance (signature ~ (Int32 -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetSizeMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetSize

    #endif

    -- method FontDescription::set_stretch
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "stretch", argType = TInterface (Name {namespace = "Pango", name = "Stretch"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the stretch for the font description", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_stretch" pango_font_description_set_stretch ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CUInt ->                                -- stretch : TInterface (Name {namespace = "Pango", name = "Stretch"})
        IO ()

    {- |
    Sets the stretch field of a font description. The stretch field
    specifies how narrow or wide the font should be.
    -}
    fontDescriptionSetStretch ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> Pango.Enums.Stretch
        {- ^ /@stretch@/: the stretch for the font description -}
        -> m ()
    fontDescriptionSetStretch desc stretch = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        let stretch' = (fromIntegral . fromEnum) stretch
        pango_font_description_set_stretch desc' stretch'
        touchManagedPtr desc
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetStretchMethodInfo
    instance (signature ~ (Pango.Enums.Stretch -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetStretchMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetStretch

    #endif

    -- method FontDescription::set_style
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "style", argType = TInterface (Name {namespace = "Pango", name = "Style"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the style for the font description", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_style" pango_font_description_set_style ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CUInt ->                                -- style : TInterface (Name {namespace = "Pango", name = "Style"})
        IO ()

    {- |
    Sets the style field of a 'GI.Pango.Structs.FontDescription.FontDescription'. The
    'GI.Pango.Enums.Style' enumeration describes whether the font is slanted and
    the manner in which it is slanted; it can be either
    @/PANGO_STYLE_NORMAL/@, @/PANGO_STYLE_ITALIC/@, or @/PANGO_STYLE_OBLIQUE/@.
    Most fonts will either have a italic style or an oblique
    style, but not both, and font matching in Pango will
    match italic specifications with oblique fonts and vice-versa
    if an exact match is not found.
    -}
    fontDescriptionSetStyle ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> Pango.Enums.Style
        {- ^ /@style@/: the style for the font description -}
        -> m ()
    fontDescriptionSetStyle desc style = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        let style' = (fromIntegral . fromEnum) style
        pango_font_description_set_style desc' style'
        touchManagedPtr desc
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetStyleMethodInfo
    instance (signature ~ (Pango.Enums.Style -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetStyleMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetStyle

    #endif

    -- method FontDescription::set_variant
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "variant", argType = TInterface (Name {namespace = "Pango", name = "Variant"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the variant type for the font description.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_variant" pango_font_description_set_variant ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CUInt ->                                -- variant : TInterface (Name {namespace = "Pango", name = "Variant"})
        IO ()

    {- |
    Sets the variant field of a font description. The 'GI.Pango.Enums.Variant'
    can either be 'GI.Pango.Enums.VariantNormal' or 'GI.Pango.Enums.VariantSmallCaps'.
    -}
    fontDescriptionSetVariant ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> Pango.Enums.Variant
        {- ^ /@variant@/: the variant type for the font description. -}
        -> m ()
    fontDescriptionSetVariant desc variant = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        let variant' = (fromIntegral . fromEnum) variant
        pango_font_description_set_variant desc' variant'
        touchManagedPtr desc
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetVariantMethodInfo
    instance (signature ~ (Pango.Enums.Variant -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetVariantMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetVariant

    #endif

    -- method FontDescription::set_variations
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "settings", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_variations" pango_font_description_set_variations ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CString ->                              -- settings : TBasicType TUTF8
        IO ()

    {- |
    Sets the variations field of a font description. OpenType
    font variations allow to select a font instance by specifying
    values for a number of axes, such as width or weight.

    The format of the variations string is AXIS1=VALUE,AXIS2=VALUE...,
    with each AXIS a 4 character tag that identifies a font axis,
    and each VALUE a floating point number. Unknown axes are ignored,
    and values are clamped to their allowed range.

    Pango does not currently have a way to find supported axes of
    a font. Both harfbuzz or freetype have API for this.

    /Since: 1.42/
    -}
    fontDescriptionSetVariations ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription'. -}
        -> T.Text
        -> m ()
    fontDescriptionSetVariations desc settings = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        settings' <- textToCString settings
        pango_font_description_set_variations desc' settings'
        touchManagedPtr desc
        freeMem settings'
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetVariationsMethodInfo
    instance (signature ~ (T.Text -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetVariationsMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetVariations

    #endif

    -- method FontDescription::set_variations_static
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "settings", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_variations_static" pango_font_description_set_variations_static ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CString ->                              -- settings : TBasicType TUTF8
        IO ()

    {- |
    Like 'GI.Pango.Structs.FontDescription.fontDescriptionSetVariations', except that no
    copy of /@variations@/ is made. The caller must make sure that the
    string passed in stays around until /@desc@/ has been freed
    or the name is set again. This function can be used if
    /@variations@/ is a static string such as a C string literal, or
    if /@desc@/ is only needed temporarily.

    /Since: 1.42/
    -}
    fontDescriptionSetVariationsStatic ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> T.Text
        -> m ()
    fontDescriptionSetVariationsStatic desc settings = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        settings' <- textToCString settings
        pango_font_description_set_variations_static desc' settings'
        touchManagedPtr desc
        freeMem settings'
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetVariationsStaticMethodInfo
    instance (signature ~ (T.Text -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetVariationsStaticMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetVariationsStatic

    #endif

    -- method FontDescription::set_weight
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "weight", argType = TInterface (Name {namespace = "Pango", name = "Weight"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the weight for the font description.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_set_weight" pango_font_description_set_weight ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CUInt ->                                -- weight : TInterface (Name {namespace = "Pango", name = "Weight"})
        IO ()

    {- |
    Sets the weight field of a font description. The weight field
    specifies how bold or light the font should be. In addition
    to the values of the 'GI.Pango.Enums.Weight' enumeration, other intermediate
    numeric values are possible.
    -}
    fontDescriptionSetWeight ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> Pango.Enums.Weight
        {- ^ /@weight@/: the weight for the font description. -}
        -> m ()
    fontDescriptionSetWeight desc weight = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        let weight' = (fromIntegral . fromEnum) weight
        pango_font_description_set_weight desc' weight'
        touchManagedPtr desc
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionSetWeightMethodInfo
    instance (signature ~ (Pango.Enums.Weight -> m ()), MonadIO m) => O.MethodInfo FontDescriptionSetWeightMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionSetWeight

    #endif

    -- method FontDescription::to_filename
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_to_filename" pango_font_description_to_filename ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CString

    {- |
    Creates a filename representation of a font description. The
    filename is identical to the result from calling
    'GI.Pango.Structs.FontDescription.fontDescriptionToString', but with underscores instead of
    characters that are untypical in filenames, and in lower case only.
    -}
    fontDescriptionToFilename ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m T.Text
        {- ^ __Returns:__ a new string that must be freed with 'GI.GLib.Functions.free'. -}
    fontDescriptionToFilename desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_to_filename desc'
        checkUnexpectedReturnNULL "fontDescriptionToFilename" result
        result' <- cstringToText result
        freeMem result
        touchManagedPtr desc
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionToFilenameMethodInfo
    instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo FontDescriptionToFilenameMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionToFilename

    #endif

    -- method FontDescription::to_string
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_to_string" pango_font_description_to_string ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        IO CString

    {- |
    Creates a string representation of a font description. See
    'GI.Pango.Functions.fontDescriptionFromString' for a description of the
    format of the string representation. The family list in the
    string description will only have a terminating comma if the
    last word of the list is a valid style option.
    -}
    fontDescriptionToString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> m T.Text
        {- ^ __Returns:__ a new string that must be freed with 'GI.GLib.Functions.free'. -}
    fontDescriptionToString desc = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        result <- pango_font_description_to_string desc'
        checkUnexpectedReturnNULL "fontDescriptionToString" result
        result' <- cstringToText result
        freeMem result
        touchManagedPtr desc
        return result'

    #if ENABLE_OVERLOADING
    data FontDescriptionToStringMethodInfo
    instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo FontDescriptionToStringMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionToString

    #endif

    -- method FontDescription::unset_fields
    -- method type : OrdinaryMethod
    -- Args : [Arg {argCName = "desc", argType = TInterface (Name {namespace = "Pango", name = "FontDescription"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #PangoFontDescription", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "to_unset", argType = TInterface (Name {namespace = "Pango", name = "FontMask"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "bitmask of fields in the @desc to unset.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_unset_fields" pango_font_description_unset_fields ::
        Ptr FontDescription ->                  -- desc : TInterface (Name {namespace = "Pango", name = "FontDescription"})
        CUInt ->                                -- to_unset : TInterface (Name {namespace = "Pango", name = "FontMask"})
        IO ()

    {- |
    Unsets some of the fields in a 'GI.Pango.Structs.FontDescription.FontDescription'.  The unset
    fields will get back to their default values.
    -}
    fontDescriptionUnsetFields ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        FontDescription
        {- ^ /@desc@/: a 'GI.Pango.Structs.FontDescription.FontDescription' -}
        -> [Pango.Flags.FontMask]
        {- ^ /@toUnset@/: bitmask of fields in the /@desc@/ to unset. -}
        -> m ()
    fontDescriptionUnsetFields desc toUnset = liftIO $ do
        desc' <- unsafeManagedPtrGetPtr desc
        let toUnset' = gflagsToWord toUnset
        pango_font_description_unset_fields desc' toUnset'
        touchManagedPtr desc
        return ()

    #if ENABLE_OVERLOADING
    data FontDescriptionUnsetFieldsMethodInfo
    instance (signature ~ ([Pango.Flags.FontMask] -> m ()), MonadIO m) => O.MethodInfo FontDescriptionUnsetFieldsMethodInfo FontDescription signature where
        overloadedMethod _ = fontDescriptionUnsetFields

    #endif

    -- method FontDescription::from_string
    -- method type : MemberFunction
    -- Args : [Arg {argCName = "str", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "string representation of a font description.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
    -- Lengths : []
    -- returnType : Just (TInterface (Name {namespace = "Pango", name = "FontDescription"}))
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_font_description_from_string" pango_font_description_from_string ::
        CString ->                              -- str : TBasicType TUTF8
        IO (Ptr FontDescription)

    {- |
    Creates a new font description from a string representation in the
    form \"[FAMILY-LIST] [STYLE-OPTIONS] [SIZE]\", where FAMILY-LIST is a
    comma separated list of families optionally terminated by a comma,
    STYLE_OPTIONS is a whitespace separated list of words where each word
    describes one of style, variant, weight, stretch, or gravity, and SIZE
    is a decimal number (size in points) or optionally followed by the
    unit modifier \"px\" for absolute size. Any one of the options may
    be absent.  If FAMILY-LIST is absent, then the family_name field of
    the resulting font description will be initialized to 'Nothing'.  If
    STYLE-OPTIONS is missing, then all style options will be set to the
    default values. If SIZE is missing, the size in the resulting font
    description will be set to 0.
    -}
    fontDescriptionFromString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        T.Text
        {- ^ /@str@/: string representation of a font description. -}
        -> m FontDescription
        {- ^ __Returns:__ a new 'GI.Pango.Structs.FontDescription.FontDescription'. -}
    fontDescriptionFromString str = liftIO $ do
        str' <- textToCString str
        result <- pango_font_description_from_string str'
        checkUnexpectedReturnNULL "fontDescriptionFromString" result
        result' <- (wrapBoxed FontDescription) result
        freeMem str'
        return result'

    #if ENABLE_OVERLOADING
    #endif

    #if ENABLE_OVERLOADING
    type family ResolveFontDescriptionMethod (t :: Symbol) (o :: *) :: * where
        ResolveFontDescriptionMethod "betterMatch" o = FontDescriptionBetterMatchMethodInfo
        ResolveFontDescriptionMethod "copy" o = FontDescriptionCopyMethodInfo
        ResolveFontDescriptionMethod "copyStatic" o = FontDescriptionCopyStaticMethodInfo
        ResolveFontDescriptionMethod "equal" o = FontDescriptionEqualMethodInfo
        ResolveFontDescriptionMethod "free" o = FontDescriptionFreeMethodInfo
        ResolveFontDescriptionMethod "hash" o = FontDescriptionHashMethodInfo
        ResolveFontDescriptionMethod "merge" o = FontDescriptionMergeMethodInfo
        ResolveFontDescriptionMethod "mergeStatic" o = FontDescriptionMergeStaticMethodInfo
        ResolveFontDescriptionMethod "toFilename" o = FontDescriptionToFilenameMethodInfo
        ResolveFontDescriptionMethod "toString" o = FontDescriptionToStringMethodInfo
        ResolveFontDescriptionMethod "unsetFields" o = FontDescriptionUnsetFieldsMethodInfo
        ResolveFontDescriptionMethod "getFamily" o = FontDescriptionGetFamilyMethodInfo
        ResolveFontDescriptionMethod "getGravity" o = FontDescriptionGetGravityMethodInfo
        ResolveFontDescriptionMethod "getSetFields" o = FontDescriptionGetSetFieldsMethodInfo
        ResolveFontDescriptionMethod "getSize" o = FontDescriptionGetSizeMethodInfo
        ResolveFontDescriptionMethod "getSizeIsAbsolute" o = FontDescriptionGetSizeIsAbsoluteMethodInfo
        ResolveFontDescriptionMethod "getStretch" o = FontDescriptionGetStretchMethodInfo
        ResolveFontDescriptionMethod "getStyle" o = FontDescriptionGetStyleMethodInfo
        ResolveFontDescriptionMethod "getVariant" o = FontDescriptionGetVariantMethodInfo
        ResolveFontDescriptionMethod "getVariations" o = FontDescriptionGetVariationsMethodInfo
        ResolveFontDescriptionMethod "getWeight" o = FontDescriptionGetWeightMethodInfo
        ResolveFontDescriptionMethod "setAbsoluteSize" o = FontDescriptionSetAbsoluteSizeMethodInfo
        ResolveFontDescriptionMethod "setFamily" o = FontDescriptionSetFamilyMethodInfo
        ResolveFontDescriptionMethod "setFamilyStatic" o = FontDescriptionSetFamilyStaticMethodInfo
        ResolveFontDescriptionMethod "setGravity" o = FontDescriptionSetGravityMethodInfo
        ResolveFontDescriptionMethod "setSize" o = FontDescriptionSetSizeMethodInfo
        ResolveFontDescriptionMethod "setStretch" o = FontDescriptionSetStretchMethodInfo
        ResolveFontDescriptionMethod "setStyle" o = FontDescriptionSetStyleMethodInfo
        ResolveFontDescriptionMethod "setVariant" o = FontDescriptionSetVariantMethodInfo
        ResolveFontDescriptionMethod "setVariations" o = FontDescriptionSetVariationsMethodInfo
        ResolveFontDescriptionMethod "setVariationsStatic" o = FontDescriptionSetVariationsStaticMethodInfo
        ResolveFontDescriptionMethod "setWeight" o = FontDescriptionSetWeightMethodInfo
        ResolveFontDescriptionMethod l o = O.MethodResolutionFailed l o

    instance (info ~ ResolveFontDescriptionMethod t FontDescription, O.MethodInfo info FontDescription p) => O.IsLabelProxy t (FontDescription -> p) where
        fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

    #if MIN_VERSION_base(4,9,0)
    instance (info ~ ResolveFontDescriptionMethod t FontDescription, O.MethodInfo info FontDescription p) => O.IsLabel t (FontDescription -> 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

    #endif