    {-# LANGUAGE TypeApplications #-}

    -- | Copyright  : Will Thompson and Iñaki García Etxebarria
    -- License    : LGPL-2.1
    -- Maintainer : Iñaki García Etxebarria
    --
    -- A @PangoGlyphString@ is used to store strings of glyphs with geometry
    -- and visual attribute information.
    --
    -- The storage for the glyph information is owned by the structure
    -- which simplifies memory management.

    #if !defined(__HADDOCK_VERSION__)
    #define ENABLE_OVERLOADING
    #endif

    module GI.Pango.Structs.GlyphString
        (

    -- * Exported types
        GlyphString(..)                         ,
        newZeroGlyphString                      ,

     -- * Methods
    -- |
    --
    --  === __Click to display all available methods, including inherited ones__
    -- ==== Methods
    -- [copy]("GI.Pango.Structs.GlyphString#g:method:copy"), [extents]("GI.Pango.Structs.GlyphString#g:method:extents"), [extentsRange]("GI.Pango.Structs.GlyphString#g:method:extentsRange"), [free]("GI.Pango.Structs.GlyphString#g:method:free"), [indexToX]("GI.Pango.Structs.GlyphString#g:method:indexToX"), [indexToXFull]("GI.Pango.Structs.GlyphString#g:method:indexToXFull"), [xToIndex]("GI.Pango.Structs.GlyphString#g:method:xToIndex").
    --
    -- ==== Getters
    -- [getLogicalWidths]("GI.Pango.Structs.GlyphString#g:method:getLogicalWidths"), [getWidth]("GI.Pango.Structs.GlyphString#g:method:getWidth").
    --
    -- ==== Setters
    -- [setSize]("GI.Pango.Structs.GlyphString#g:method:setSize").

    #if defined(ENABLE_OVERLOADING)
        ResolveGlyphStringMethod                ,
    #endif

    -- ** copy #method:copy#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringCopyMethodInfo               ,
    #endif
        glyphStringCopy                         ,

    -- ** extents #method:extents#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringExtentsMethodInfo            ,
    #endif
        glyphStringExtents                      ,

    -- ** extentsRange #method:extentsRange#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringExtentsRangeMethodInfo       ,
    #endif
        glyphStringExtentsRange                 ,

    -- ** free #method:free#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringFreeMethodInfo               ,
    #endif
        glyphStringFree                         ,

    -- ** getLogicalWidths #method:getLogicalWidths#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringGetLogicalWidthsMethodInfo   ,
    #endif
        glyphStringGetLogicalWidths             ,

    -- ** getWidth #method:getWidth#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringGetWidthMethodInfo           ,
    #endif
        glyphStringGetWidth                     ,

    -- ** indexToX #method:indexToX#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringIndexToXMethodInfo           ,
    #endif
        glyphStringIndexToX                     ,

    -- ** indexToXFull #method:indexToXFull#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringIndexToXFullMethodInfo       ,
    #endif
        glyphStringIndexToXFull                 ,

    -- ** new #method:new#

        glyphStringNew                          ,

    -- ** setSize #method:setSize#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringSetSizeMethodInfo            ,
    #endif
        glyphStringSetSize                      ,

    -- ** xToIndex #method:xToIndex#

    #if defined(ENABLE_OVERLOADING)
        GlyphStringXToIndexMethodInfo           ,
    #endif
        glyphStringXToIndex                     ,

     -- * Properties

    -- ** logClusters #attr:logClusters#
    -- | logical cluster info, indexed by the byte index
    --   within the text corresponding to the glyph string

        getGlyphStringLogClusters               ,
    #if defined(ENABLE_OVERLOADING)
        glyphString_logClusters                 ,
    #endif
        setGlyphStringLogClusters               ,

    -- ** numGlyphs #attr:numGlyphs#
    -- | number of glyphs in this glyph string

        getGlyphStringNumGlyphs                 ,
    #if defined(ENABLE_OVERLOADING)
        glyphString_numGlyphs                   ,
    #endif
        setGlyphStringNumGlyphs                 ,

        ) 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.BasicTypes as B.Types
    import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
    import qualified Data.GI.Base.GArray as B.GArray
    import qualified Data.GI.Base.GClosure as B.GClosure
    import qualified Data.GI.Base.GError as B.GError
    import qualified Data.GI.Base.GHashTable as B.GHT
    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.GI.Base.Signals as B.Signals
    import qualified Control.Monad.IO.Class as MIO
    import qualified Data.Coerce as Coerce
    import qualified Data.Text as T
    import qualified Data.Kind as DK
    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 GHC.Records as R
    import qualified Data.Word as DW
    import qualified Data.Int as DI
    import qualified System.Posix.Types as SPT
    import qualified Foreign.C.Types as FCT

    -- Workaround for https://gitlab.haskell.org/ghc/ghc/-/issues/23392
    #if MIN_VERSION_base(4,18,0)
    import qualified GI.GLib.Structs.Bytes as GLib.Bytes
    import qualified GI.GObject.Objects.Object as GObject.Object
    import qualified GI.Gio.Interfaces.ListModel as Gio.ListModel
    import qualified GI.HarfBuzz.Structs.FeatureT as HarfBuzz.FeatureT
    import qualified GI.Pango.Callbacks as Pango.Callbacks
    import {-# SOURCE #-} qualified GI.Pango.Enums as Pango.Enums
    import {-# SOURCE #-} qualified GI.Pango.Flags as Pango.Flags
    import {-# SOURCE #-} qualified GI.Pango.Objects.Context as Pango.Context
    import {-# SOURCE #-} qualified GI.Pango.Objects.Coverage as Pango.Coverage
    import {-# SOURCE #-} qualified GI.Pango.Objects.Font as Pango.Font
    import {-# SOURCE #-} qualified GI.Pango.Objects.FontFace as Pango.FontFace
    import {-# SOURCE #-} qualified GI.Pango.Objects.FontFamily as Pango.FontFamily
    import {-# SOURCE #-} qualified GI.Pango.Objects.FontMap as Pango.FontMap
    import {-# SOURCE #-} qualified GI.Pango.Objects.Fontset as Pango.Fontset
    import {-# SOURCE #-} qualified GI.Pango.Structs.Analysis as Pango.Analysis
    import {-# SOURCE #-} qualified GI.Pango.Structs.FontDescription as Pango.FontDescription
    import {-# SOURCE #-} qualified GI.Pango.Structs.FontMetrics as Pango.FontMetrics
    import {-# SOURCE #-} qualified GI.Pango.Structs.Language as Pango.Language
    import {-# SOURCE #-} qualified GI.Pango.Structs.LogAttr as Pango.LogAttr
    import {-# SOURCE #-} qualified GI.Pango.Structs.Matrix as Pango.Matrix
    import {-# SOURCE #-} qualified GI.Pango.Structs.Rectangle as Pango.Rectangle

    #else
    import {-# SOURCE #-} qualified GI.Pango.Objects.Font as Pango.Font
    import {-# SOURCE #-} qualified GI.Pango.Structs.Analysis as Pango.Analysis
    import {-# SOURCE #-} qualified GI.Pango.Structs.LogAttr as Pango.LogAttr
    import {-# SOURCE #-} qualified GI.Pango.Structs.Rectangle as Pango.Rectangle

    #endif

    -- | Memory-managed wrapper type.
    newtype GlyphString = GlyphString (SP.ManagedPtr GlyphString)
        deriving (GlyphString -> GlyphString -> Bool
    (GlyphString -> GlyphString -> Bool)
    -> (GlyphString -> GlyphString -> Bool) -> Eq GlyphString
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: GlyphString -> GlyphString -> Bool
    == :: GlyphString -> GlyphString -> Bool
    $c/= :: GlyphString -> GlyphString -> Bool
    /= :: GlyphString -> GlyphString -> Bool
    Eq)

    instance SP.ManagedPtrNewtype GlyphString where
        toManagedPtr :: GlyphString -> ManagedPtr GlyphString
    toManagedPtr (GlyphString ManagedPtr GlyphString
    p) = ManagedPtr GlyphString
    p

    foreign import ccall "pango_glyph_string_get_type" c_pango_glyph_string_get_type ::
        IO GType

    type instance O.ParentTypes GlyphString = '[]
    instance O.HasParentTypes GlyphString

    instance B.Types.TypedObject GlyphString where
        glibType :: IO GType
    glibType = IO GType
    c_pango_glyph_string_get_type

    instance B.Types.GBoxed GlyphString

    -- | Convert 'GlyphString' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
    instance B.GValue.IsGValue (Maybe GlyphString) where
        gvalueGType_ :: IO GType
    gvalueGType_ = IO GType
    c_pango_glyph_string_get_type
        gvalueSet_ :: Ptr GValue -> Maybe GlyphString -> IO ()
    gvalueSet_ Ptr GValue
    gv Maybe GlyphString
    P.Nothing = Ptr GValue -> Ptr GlyphString -> IO ()
    forall a. Ptr GValue -> Ptr a -> IO ()
    B.GValue.set_boxed Ptr GValue
    gv (Ptr GlyphString
    forall a. Ptr a
    FP.nullPtr :: FP.Ptr GlyphString)
        gvalueSet_ Ptr GValue
    gv (P.Just GlyphString
    obj) = GlyphString -> (Ptr GlyphString -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    B.ManagedPtr.withManagedPtr GlyphString
    obj (Ptr GValue -> Ptr GlyphString -> IO ()
    forall a. Ptr GValue -> Ptr a -> IO ()
    B.GValue.set_boxed Ptr GValue
    gv)
        gvalueGet_ :: Ptr GValue -> IO (Maybe GlyphString)
    gvalueGet_ Ptr GValue
    gv = do
            Ptr GlyphString
    ptr <- Ptr GValue -> IO (Ptr GlyphString)
    forall b. Ptr GValue -> IO (Ptr b)
    B.GValue.get_boxed Ptr GValue
    gv :: IO (Ptr GlyphString)
            if Ptr GlyphString
    ptr Ptr GlyphString -> Ptr GlyphString -> Bool
    forall a. Eq a => a -> a -> Bool
    /= Ptr GlyphString
    forall a. Ptr a
    FP.nullPtr
            then GlyphString -> Maybe GlyphString
    forall a. a -> Maybe a
    P.Just (GlyphString -> Maybe GlyphString)
    -> IO GlyphString -> IO (Maybe GlyphString)
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$> (ManagedPtr GlyphString -> GlyphString)
    -> Ptr GlyphString -> IO GlyphString
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    B.ManagedPtr.newBoxed ManagedPtr GlyphString -> GlyphString
    GlyphString Ptr GlyphString
    ptr
            else Maybe GlyphString -> IO (Maybe GlyphString)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Maybe GlyphString
    forall a. Maybe a
    P.Nothing

    -- | Construct a `GlyphString` struct initialized to zero.
    newZeroGlyphString :: MonadIO m => m GlyphString
    newZeroGlyphString :: forall (m :: * -> *). MonadIO m => m GlyphString
    newZeroGlyphString = IO GlyphString -> m GlyphString
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO GlyphString -> m GlyphString)
    -> IO GlyphString -> m GlyphString
    forall a b. (a -> b) -> a -> b
    $ Int -> IO (Ptr GlyphString)
    forall a. GBoxed a => Int -> IO (Ptr a)
    callocBoxedBytes Int
    32 IO (Ptr GlyphString)
    -> (Ptr GlyphString -> IO GlyphString) -> IO GlyphString
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= (ManagedPtr GlyphString -> GlyphString)
    -> Ptr GlyphString -> IO GlyphString
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr GlyphString -> GlyphString
    GlyphString

    instance tag ~ 'AttrSet => Constructible GlyphString tag where
        new :: forall (m :: * -> *).
    MonadIO m =>
    (ManagedPtr GlyphString -> GlyphString)
    -> [AttrOp GlyphString tag] -> m GlyphString
    new ManagedPtr GlyphString -> GlyphString
    _ [AttrOp GlyphString tag]
    attrs = do
            GlyphString
    o <- m GlyphString
    forall (m :: * -> *). MonadIO m => m GlyphString
    newZeroGlyphString
            GlyphString -> [AttrOp GlyphString 'AttrSet] -> m ()
    forall o (m :: * -> *).
    MonadIO m =>
    o -> [AttrOp o 'AttrSet] -> m ()
    GI.Attributes.set GlyphString
    o [AttrOp GlyphString tag]
    [AttrOp GlyphString 'AttrSet]
    attrs
            GlyphString -> m GlyphString
    forall a. a -> m a
    forall (m :: * -> *) a. Monad m => a -> m a
    return GlyphString
    o

    -- | Get the value of the “@num_glyphs@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.get' glyphString #numGlyphs
    -- @
    getGlyphStringNumGlyphs :: MonadIO m => GlyphString -> m Int32
    getGlyphStringNumGlyphs :: forall (m :: * -> *). MonadIO m => GlyphString -> m Int32
    getGlyphStringNumGlyphs GlyphString
    s = IO Int32 -> m Int32
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Int32 -> m Int32) -> IO Int32 -> m Int32
    forall a b. (a -> b) -> a -> b
    $ GlyphString -> (Ptr GlyphString -> IO Int32) -> IO Int32
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr GlyphString
    s ((Ptr GlyphString -> IO Int32) -> IO Int32)
    -> (Ptr GlyphString -> IO Int32) -> IO Int32
    forall a b. (a -> b) -> a -> b
    $ \Ptr GlyphString
    ptr -> do
        Int32
    val <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek (Ptr GlyphString
    ptr Ptr GlyphString -> Int -> Ptr Int32
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    0) :: IO Int32
        Int32 -> IO Int32
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    val

    -- | Set the value of the “@num_glyphs@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.set' glyphString [ #numGlyphs 'Data.GI.Base.Attributes.:=' value ]
    -- @
    setGlyphStringNumGlyphs :: MonadIO m => GlyphString -> Int32 -> m ()
    setGlyphStringNumGlyphs :: forall (m :: * -> *). MonadIO m => GlyphString -> Int32 -> m ()
    setGlyphStringNumGlyphs GlyphString
    s Int32
    val = IO () -> m ()
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ GlyphString -> (Ptr GlyphString -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr GlyphString
    s ((Ptr GlyphString -> IO ()) -> IO ())
    -> (Ptr GlyphString -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr GlyphString
    ptr -> do
        Ptr Int32 -> Int32 -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke (Ptr GlyphString
    ptr Ptr GlyphString -> Int -> Ptr Int32
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    0) (Int32
    val :: Int32)

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringNumGlyphsFieldInfo
    instance AttrInfo GlyphStringNumGlyphsFieldInfo where
        type AttrBaseTypeConstraint GlyphStringNumGlyphsFieldInfo = (~) GlyphString
        type AttrAllowedOps GlyphStringNumGlyphsFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint GlyphStringNumGlyphsFieldInfo = (~) Int32
        type AttrTransferTypeConstraint GlyphStringNumGlyphsFieldInfo = (~)Int32
        type AttrTransferType GlyphStringNumGlyphsFieldInfo = Int32
        type AttrGetType GlyphStringNumGlyphsFieldInfo = Int32
        type AttrLabel GlyphStringNumGlyphsFieldInfo = "num_glyphs"
        type AttrOrigin GlyphStringNumGlyphsFieldInfo = GlyphString
        attrGet = getGlyphStringNumGlyphs
        attrSet = setGlyphStringNumGlyphs
        attrConstruct = undefined
        attrClear = undefined
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.numGlyphs"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#g:attr:numGlyphs"
            })

    glyphString_numGlyphs :: AttrLabelProxy "numGlyphs"
    glyphString_numGlyphs = AttrLabelProxy

    #endif

    -- XXX Skipped attribute for "GlyphString:glyphs"
    -- Not implemented: Don't know how to unpack C array of type TCArray False (-1) 0 (TInterface (Name {namespace = "Pango", name = "GlyphInfo"}))
    -- | Get the value of the “@log_clusters@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.get' glyphString #logClusters
    -- @
    getGlyphStringLogClusters :: MonadIO m => GlyphString -> m Int32
    getGlyphStringLogClusters :: forall (m :: * -> *). MonadIO m => GlyphString -> m Int32
    getGlyphStringLogClusters GlyphString
    s = IO Int32 -> m Int32
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Int32 -> m Int32) -> IO Int32 -> m Int32
    forall a b. (a -> b) -> a -> b
    $ GlyphString -> (Ptr GlyphString -> IO Int32) -> IO Int32
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr GlyphString
    s ((Ptr GlyphString -> IO Int32) -> IO Int32)
    -> (Ptr GlyphString -> IO Int32) -> IO Int32
    forall a b. (a -> b) -> a -> b
    $ \Ptr GlyphString
    ptr -> do
        Int32
    val <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek (Ptr GlyphString
    ptr Ptr GlyphString -> Int -> Ptr Int32
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    16) :: IO Int32
        Int32 -> IO Int32
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    val

    -- | Set the value of the “@log_clusters@” field.
    -- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
    --
    -- @
    -- 'Data.GI.Base.Attributes.set' glyphString [ #logClusters 'Data.GI.Base.Attributes.:=' value ]
    -- @
    setGlyphStringLogClusters :: MonadIO m => GlyphString -> Int32 -> m ()
    setGlyphStringLogClusters :: forall (m :: * -> *). MonadIO m => GlyphString -> Int32 -> m ()
    setGlyphStringLogClusters GlyphString
    s Int32
    val = IO () -> m ()
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ GlyphString -> (Ptr GlyphString -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr GlyphString
    s ((Ptr GlyphString -> IO ()) -> IO ())
    -> (Ptr GlyphString -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr GlyphString
    ptr -> do
        Ptr Int32 -> Int32 -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke (Ptr GlyphString
    ptr Ptr GlyphString -> Int -> Ptr Int32
    forall a b. Ptr a -> Int -> Ptr b
    `plusPtr` Int
    16) (Int32
    val :: Int32)

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringLogClustersFieldInfo
    instance AttrInfo GlyphStringLogClustersFieldInfo where
        type AttrBaseTypeConstraint GlyphStringLogClustersFieldInfo = (~) GlyphString
        type AttrAllowedOps GlyphStringLogClustersFieldInfo = '[ 'AttrSet, 'AttrGet]
        type AttrSetTypeConstraint GlyphStringLogClustersFieldInfo = (~) Int32
        type AttrTransferTypeConstraint GlyphStringLogClustersFieldInfo = (~)Int32
        type AttrTransferType GlyphStringLogClustersFieldInfo = Int32
        type AttrGetType GlyphStringLogClustersFieldInfo = Int32
        type AttrLabel GlyphStringLogClustersFieldInfo = "log_clusters"
        type AttrOrigin GlyphStringLogClustersFieldInfo = GlyphString
        attrGet = getGlyphStringLogClusters
        attrSet = setGlyphStringLogClusters
        attrConstruct = undefined
        attrClear = undefined
        attrTransfer _ v = do
            return v
        dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.logClusters"
            , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#g:attr:logClusters"
            })

    glyphString_logClusters :: AttrLabelProxy "logClusters"
    glyphString_logClusters = AttrLabelProxy

    #endif

    #if defined(ENABLE_OVERLOADING)
    instance O.HasAttributeList GlyphString
    type instance O.AttributeList GlyphString = GlyphStringAttributeList
    type GlyphStringAttributeList = ('[ '("numGlyphs", GlyphStringNumGlyphsFieldInfo), '("logClusters", GlyphStringLogClustersFieldInfo)] :: [(Symbol, DK.Type)])
    #endif

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

    foreign import ccall "pango_glyph_string_new" pango_glyph_string_new ::
        IO (Ptr GlyphString)

    -- | Create a new @PangoGlyphString@.
    glyphStringNew ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m GlyphString
        -- ^ __Returns:__ the newly allocated @PangoGlyphString@, which
        --   should be freed with 'GI.Pango.Structs.GlyphString.glyphStringFree'.
    glyphStringNew :: forall (m :: * -> *). (HasCallStack, MonadIO m) => m GlyphString
    glyphStringNew  = IO GlyphString -> m GlyphString
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO GlyphString -> m GlyphString)
    -> IO GlyphString -> m GlyphString
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    result <- IO (Ptr GlyphString)
    pango_glyph_string_new
        Text -> Ptr GlyphString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL Text
    "glyphStringNew" Ptr GlyphString
    result
        GlyphString
    result' <- ((ManagedPtr GlyphString -> GlyphString)
    -> Ptr GlyphString -> IO GlyphString
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr GlyphString -> GlyphString
    GlyphString) Ptr GlyphString
    result
        GlyphString -> IO GlyphString
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return GlyphString
    result'

    #if defined(ENABLE_OVERLOADING)
    #endif

    -- method GlyphString::copy
    -- method type : OrdinaryMethod
    -- Args: [ Arg
    --           { argCName = "string"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "GlyphString" }
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a `PangoGlyphString`"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "Pango" , name = "GlyphString" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_glyph_string_copy" pango_glyph_string_copy ::
        Ptr GlyphString ->                      -- string : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        IO (Ptr GlyphString)

    -- | Copy a glyph string and associated storage.
    glyphStringCopy ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Maybe (GlyphString)
        -- ^ /@string@/: a @PangoGlyphString@
        -> m (Maybe GlyphString)
        -- ^ __Returns:__ the newly allocated @PangoGlyphString@
    glyphStringCopy :: forall (m :: * -> *).
    (HasCallStack, MonadIO m) =>
    Maybe GlyphString -> m (Maybe GlyphString)
    glyphStringCopy Maybe GlyphString
    string = IO (Maybe GlyphString) -> m (Maybe GlyphString)
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Maybe GlyphString) -> m (Maybe GlyphString))
    -> IO (Maybe GlyphString) -> m (Maybe GlyphString)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    maybeString <- case Maybe GlyphString
    string of
            Maybe GlyphString
    Nothing -> Ptr GlyphString -> IO (Ptr GlyphString)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr GlyphString
    forall a. Ptr a
    FP.nullPtr
            Just GlyphString
    jString -> do
                Ptr GlyphString
    jString' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    jString
                Ptr GlyphString -> IO (Ptr GlyphString)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr GlyphString
    jString'
        Ptr GlyphString
    result <- Ptr GlyphString -> IO (Ptr GlyphString)
    pango_glyph_string_copy Ptr GlyphString
    maybeString
        Maybe GlyphString
    maybeResult <- Ptr GlyphString
    -> (Ptr GlyphString -> IO GlyphString) -> IO (Maybe GlyphString)
    forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
    convertIfNonNull Ptr GlyphString
    result ((Ptr GlyphString -> IO GlyphString) -> IO (Maybe GlyphString))
    -> (Ptr GlyphString -> IO GlyphString) -> IO (Maybe GlyphString)
    forall a b. (a -> b) -> a -> b
    $ \Ptr GlyphString
    result' -> do
            GlyphString
    result'' <- ((ManagedPtr GlyphString -> GlyphString)
    -> Ptr GlyphString -> IO GlyphString
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr GlyphString -> GlyphString
    GlyphString) Ptr GlyphString
    result'
            GlyphString -> IO GlyphString
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return GlyphString
    result''
        Maybe GlyphString -> (GlyphString -> IO ()) -> IO ()
    forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
    whenJust Maybe GlyphString
    string GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr
        Maybe GlyphString -> IO (Maybe GlyphString)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Maybe GlyphString
    maybeResult

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringCopyMethodInfo
    instance (signature ~ (m (Maybe GlyphString)), MonadIO m) => O.OverloadedMethod GlyphStringCopyMethodInfo GlyphString signature where
        overloadedMethod i = glyphStringCopy (Just i)

    instance O.OverloadedMethodInfo GlyphStringCopyMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringCopy",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringCopy"
            })

    #endif

    -- method GlyphString::extents
    -- method type : OrdinaryMethod
    -- Args: [ Arg
    --           { argCName = "glyphs"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "GlyphString" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a `PangoGlyphString`"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "font"
    --           , argType = TInterface Name { namespace = "Pango" , name = "Font" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a `PangoFont`" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "ink_rect"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "Rectangle" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "rectangle used to store the extents of the glyph string as drawn"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "logical_rect"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "Rectangle" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "rectangle used to store the logical extents of the glyph string"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_glyph_string_extents" pango_glyph_string_extents ::
        Ptr GlyphString ->                      -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        Ptr Pango.Font.Font ->                  -- font : TInterface (Name {namespace = "Pango", name = "Font"})
        Ptr Pango.Rectangle.Rectangle ->        -- ink_rect : TInterface (Name {namespace = "Pango", name = "Rectangle"})
        Ptr Pango.Rectangle.Rectangle ->        -- logical_rect : TInterface (Name {namespace = "Pango", name = "Rectangle"})
        IO ()

    -- | Compute the logical and ink extents of a glyph string.
    --
    -- See the documentation for 'GI.Pango.Objects.Font.fontGetGlyphExtents' for details
    -- about the interpretation of the rectangles.
    --
    -- Examples of logical (red) and ink (green) rects:
    --
    -- <<http://developer.gnome.org/pango/stable/rects1.png>> <<http://developer.gnome.org/pango/stable/rects2.png>>
    glyphStringExtents ::
        (B.CallStack.HasCallStack, MonadIO m, Pango.Font.IsFont a) =>
        GlyphString
        -- ^ /@glyphs@/: a @PangoGlyphString@
        -> a
        -- ^ /@font@/: a @PangoFont@
        -> m ((Pango.Rectangle.Rectangle, Pango.Rectangle.Rectangle))
    glyphStringExtents :: forall (m :: * -> *) a.
    (HasCallStack, MonadIO m, IsFont a) =>
    GlyphString -> a -> m (Rectangle, Rectangle)
    glyphStringExtents GlyphString
    glyphs a
    font = IO (Rectangle, Rectangle) -> m (Rectangle, Rectangle)
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Rectangle, Rectangle) -> m (Rectangle, Rectangle))
    -> IO (Rectangle, Rectangle) -> m (Rectangle, Rectangle)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    glyphs' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    glyphs
        Ptr Font
    font' <- a -> IO (Ptr Font)
    forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
    unsafeManagedPtrCastPtr a
    font
        Ptr Rectangle
    inkRect <- Int -> IO (Ptr Rectangle)
    forall a. Int -> IO (Ptr a)
    SP.callocBytes Int
    16 :: IO (Ptr Pango.Rectangle.Rectangle)
        Ptr Rectangle
    logicalRect <- Int -> IO (Ptr Rectangle)
    forall a. Int -> IO (Ptr a)
    SP.callocBytes Int
    16 :: IO (Ptr Pango.Rectangle.Rectangle)
        Ptr GlyphString
    -> Ptr Font -> Ptr Rectangle -> Ptr Rectangle -> IO ()
    pango_glyph_string_extents Ptr GlyphString
    glyphs' Ptr Font
    font' Ptr Rectangle
    inkRect Ptr Rectangle
    logicalRect
        Rectangle
    inkRect' <- ((ManagedPtr Rectangle -> Rectangle)
    -> Ptr Rectangle -> IO Rectangle
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr Rectangle -> Rectangle
    Pango.Rectangle.Rectangle) Ptr Rectangle
    inkRect
        Rectangle
    logicalRect' <- ((ManagedPtr Rectangle -> Rectangle)
    -> Ptr Rectangle -> IO Rectangle
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr Rectangle -> Rectangle
    Pango.Rectangle.Rectangle) Ptr Rectangle
    logicalRect
        GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr GlyphString
    glyphs
        a -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr a
    font
        (Rectangle, Rectangle) -> IO (Rectangle, Rectangle)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Rectangle
    inkRect', Rectangle
    logicalRect')

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringExtentsMethodInfo
    instance (signature ~ (a -> m ((Pango.Rectangle.Rectangle, Pango.Rectangle.Rectangle))), MonadIO m, Pango.Font.IsFont a) => O.OverloadedMethod GlyphStringExtentsMethodInfo GlyphString signature where
        overloadedMethod = glyphStringExtents

    instance O.OverloadedMethodInfo GlyphStringExtentsMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringExtents",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringExtents"
            })

    #endif

    -- method GlyphString::extents_range
    -- method type : OrdinaryMethod
    -- Args: [ Arg
    --           { argCName = "glyphs"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "GlyphString" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a `PangoGlyphString`"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "start index" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "end"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "end index (the range is the set of bytes with\n  indices such that start <= index < end)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "font"
    --           , argType = TInterface Name { namespace = "Pango" , name = "Font" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a `PangoFont`" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "ink_rect"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "Rectangle" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "rectangle used to\n  store the extents of the glyph string range as drawn"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "logical_rect"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "Rectangle" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "rectangle used to\n  store the logical extents of the glyph string range"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_glyph_string_extents_range" pango_glyph_string_extents_range ::
        Ptr GlyphString ->                      -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        Int32 ->                                -- start : TBasicType TInt
        Int32 ->                                -- end : TBasicType TInt
        Ptr Pango.Font.Font ->                  -- font : TInterface (Name {namespace = "Pango", name = "Font"})
        Ptr Pango.Rectangle.Rectangle ->        -- ink_rect : TInterface (Name {namespace = "Pango", name = "Rectangle"})
        Ptr Pango.Rectangle.Rectangle ->        -- logical_rect : TInterface (Name {namespace = "Pango", name = "Rectangle"})
        IO ()

    -- | Computes the extents of a sub-portion of a glyph string.
    --
    -- The extents are relative to the start of the glyph string range
    -- (the origin of their coordinate system is at the start of the range,
    -- not at the start of the entire glyph string).
    glyphStringExtentsRange ::
        (B.CallStack.HasCallStack, MonadIO m, Pango.Font.IsFont a) =>
        GlyphString
        -- ^ /@glyphs@/: a @PangoGlyphString@
        -> Int32
        -- ^ /@start@/: start index
        -> Int32
        -- ^ /@end@/: end index (the range is the set of bytes with
        --   indices such that start \<= index \< end)
        -> a
        -- ^ /@font@/: a @PangoFont@
        -> m ((Pango.Rectangle.Rectangle, Pango.Rectangle.Rectangle))
    glyphStringExtentsRange :: forall (m :: * -> *) a.
    (HasCallStack, MonadIO m, IsFont a) =>
    GlyphString -> Int32 -> Int32 -> a -> m (Rectangle, Rectangle)
    glyphStringExtentsRange GlyphString
    glyphs Int32
    start Int32
    end a
    font = IO (Rectangle, Rectangle) -> m (Rectangle, Rectangle)
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Rectangle, Rectangle) -> m (Rectangle, Rectangle))
    -> IO (Rectangle, Rectangle) -> m (Rectangle, Rectangle)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    glyphs' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    glyphs
        Ptr Font
    font' <- a -> IO (Ptr Font)
    forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
    unsafeManagedPtrCastPtr a
    font
        Ptr Rectangle
    inkRect <- Int -> IO (Ptr Rectangle)
    forall a. Int -> IO (Ptr a)
    SP.callocBytes Int
    16 :: IO (Ptr Pango.Rectangle.Rectangle)
        Ptr Rectangle
    logicalRect <- Int -> IO (Ptr Rectangle)
    forall a. Int -> IO (Ptr a)
    SP.callocBytes Int
    16 :: IO (Ptr Pango.Rectangle.Rectangle)
        Ptr GlyphString
    -> Int32
    -> Int32
    -> Ptr Font
    -> Ptr Rectangle
    -> Ptr Rectangle
    -> IO ()
    pango_glyph_string_extents_range Ptr GlyphString
    glyphs' Int32
    start Int32
    end Ptr Font
    font' Ptr Rectangle
    inkRect Ptr Rectangle
    logicalRect
        Rectangle
    inkRect' <- ((ManagedPtr Rectangle -> Rectangle)
    -> Ptr Rectangle -> IO Rectangle
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr Rectangle -> Rectangle
    Pango.Rectangle.Rectangle) Ptr Rectangle
    inkRect
        Rectangle
    logicalRect' <- ((ManagedPtr Rectangle -> Rectangle)
    -> Ptr Rectangle -> IO Rectangle
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr Rectangle -> Rectangle
    Pango.Rectangle.Rectangle) Ptr Rectangle
    logicalRect
        GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr GlyphString
    glyphs
        a -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr a
    font
        (Rectangle, Rectangle) -> IO (Rectangle, Rectangle)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Rectangle
    inkRect', Rectangle
    logicalRect')

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringExtentsRangeMethodInfo
    instance (signature ~ (Int32 -> Int32 -> a -> m ((Pango.Rectangle.Rectangle, Pango.Rectangle.Rectangle))), MonadIO m, Pango.Font.IsFont a) => O.OverloadedMethod GlyphStringExtentsRangeMethodInfo GlyphString signature where
        overloadedMethod = glyphStringExtentsRange

    instance O.OverloadedMethodInfo GlyphStringExtentsRangeMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringExtentsRange",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringExtentsRange"
            })

    #endif

    -- method GlyphString::free
    -- method type : OrdinaryMethod
    -- Args: [ Arg
    --           { argCName = "string"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "GlyphString" }
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a `PangoGlyphString`, may be %NULL"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_glyph_string_free" pango_glyph_string_free ::
        Ptr GlyphString ->                      -- string : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        IO ()

    -- | Free a glyph string and associated storage.
    glyphStringFree ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Maybe (GlyphString)
        -- ^ /@string@/: a @PangoGlyphString@, may be 'P.Nothing'
        -> m ()
    glyphStringFree :: forall (m :: * -> *).
    (HasCallStack, MonadIO m) =>
    Maybe GlyphString -> m ()
    glyphStringFree Maybe GlyphString
    string = IO () -> m ()
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    maybeString <- case Maybe GlyphString
    string of
            Maybe GlyphString
    Nothing -> Ptr GlyphString -> IO (Ptr GlyphString)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr GlyphString
    forall a. Ptr a
    FP.nullPtr
            Just GlyphString
    jString -> do
                Ptr GlyphString
    jString' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    jString
                Ptr GlyphString -> IO (Ptr GlyphString)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr GlyphString
    jString'
        Ptr GlyphString -> IO ()
    pango_glyph_string_free Ptr GlyphString
    maybeString
        Maybe GlyphString -> (GlyphString -> IO ()) -> IO ()
    forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
    whenJust Maybe GlyphString
    string GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr
        () -> IO ()
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringFreeMethodInfo
    instance (signature ~ (m ()), MonadIO m) => O.OverloadedMethod GlyphStringFreeMethodInfo GlyphString signature where
        overloadedMethod i = glyphStringFree (Just i)

    instance O.OverloadedMethodInfo GlyphStringFreeMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringFree",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringFree"
            })

    #endif

    -- method GlyphString::get_logical_widths
    -- method type : OrdinaryMethod
    -- Args: [ Arg
    --           { argCName = "glyphs"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "GlyphString" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a `PangoGlyphString`"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the text corresponding to the glyphs"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the length of @text, in bytes"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "embedding_level"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the embedding level of the string"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "logical_widths"
    --           , argType = TCArray False (-1) (-1) (TBasicType TInt)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "an array whose length is the number of\n  characters in text (equal to `g_utf8_strlen (text, length)` unless\n  text has `NUL` bytes) to be filled in with the resulting character widths."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_glyph_string_get_logical_widths" pango_glyph_string_get_logical_widths ::
        Ptr GlyphString ->                      -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        CString ->                              -- text : TBasicType TUTF8
        Int32 ->                                -- length : TBasicType TInt
        Int32 ->                                -- embedding_level : TBasicType TInt
        Ptr Int32 ->                            -- logical_widths : TCArray False (-1) (-1) (TBasicType TInt)
        IO ()

    -- | Given a @PangoGlyphString@ and corresponding text, determine the width
    -- corresponding to each character.
    --
    -- When multiple characters compose a single cluster, the width of the
    -- entire cluster is divided equally among the characters.
    --
    -- See also 'GI.Pango.Structs.GlyphItem.glyphItemGetLogicalWidths'.
    glyphStringGetLogicalWidths ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        GlyphString
        -- ^ /@glyphs@/: a @PangoGlyphString@
        -> T.Text
        -- ^ /@text@/: the text corresponding to the glyphs
        -> Int32
        -- ^ /@length@/: the length of /@text@/, in bytes
        -> Int32
        -- ^ /@embeddingLevel@/: the embedding level of the string
        -> [Int32]
        -- ^ /@logicalWidths@/: an array whose length is the number of
        --   characters in text (equal to @g_utf8_strlen (text, length)@ unless
        --   text has @NUL@ bytes) to be filled in with the resulting character widths.
        -> m ()
    glyphStringGetLogicalWidths :: forall (m :: * -> *).
    (HasCallStack, MonadIO m) =>
    GlyphString -> Text -> Int32 -> Int32 -> [Int32] -> m ()
    glyphStringGetLogicalWidths GlyphString
    glyphs Text
    text Int32
    length_ Int32
    embeddingLevel [Int32]
    logicalWidths = IO () -> m ()
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    glyphs' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    glyphs
        CString
    text' <- Text -> IO CString
    textToCString Text
    text
        Ptr Int32
    logicalWidths' <- [Int32] -> IO (Ptr Int32)
    forall a. Storable a => [a] -> IO (Ptr a)
    packStorableArray [Int32]
    logicalWidths
        Ptr GlyphString -> CString -> Int32 -> Int32 -> Ptr Int32 -> IO ()
    pango_glyph_string_get_logical_widths Ptr GlyphString
    glyphs' CString
    text' Int32
    length_ Int32
    embeddingLevel Ptr Int32
    logicalWidths'
        GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr GlyphString
    glyphs
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    text'
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    logicalWidths'
        () -> IO ()
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringGetLogicalWidthsMethodInfo
    instance (signature ~ (T.Text -> Int32 -> Int32 -> [Int32] -> m ()), MonadIO m) => O.OverloadedMethod GlyphStringGetLogicalWidthsMethodInfo GlyphString signature where
        overloadedMethod = glyphStringGetLogicalWidths

    instance O.OverloadedMethodInfo GlyphStringGetLogicalWidthsMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringGetLogicalWidths",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringGetLogicalWidths"
            })

    #endif

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

    foreign import ccall "pango_glyph_string_get_width" pango_glyph_string_get_width ::
        Ptr GlyphString ->                      -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        IO Int32

    -- | Computes the logical width of the glyph string.
    --
    -- This can also be computed using 'GI.Pango.Structs.GlyphString.glyphStringExtents'.
    -- However, since this only computes the width, it\'s much faster. This
    -- is in fact only a convenience function that computes the sum of
    -- /@geometry@/.width for each glyph in the /@glyphs@/.
    --
    -- /Since: 1.14/
    glyphStringGetWidth ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        GlyphString
        -- ^ /@glyphs@/: a @PangoGlyphString@
        -> m Int32
        -- ^ __Returns:__ the logical width of the glyph string.
    glyphStringGetWidth :: forall (m :: * -> *).
    (HasCallStack, MonadIO m) =>
    GlyphString -> m Int32
    glyphStringGetWidth GlyphString
    glyphs = IO Int32 -> m Int32
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Int32 -> m Int32) -> IO Int32 -> m Int32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    glyphs' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    glyphs
        Int32
    result <- Ptr GlyphString -> IO Int32
    pango_glyph_string_get_width Ptr GlyphString
    glyphs'
        GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr GlyphString
    glyphs
        Int32 -> IO Int32
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringGetWidthMethodInfo
    instance (signature ~ (m Int32), MonadIO m) => O.OverloadedMethod GlyphStringGetWidthMethodInfo GlyphString signature where
        overloadedMethod = glyphStringGetWidth

    instance O.OverloadedMethodInfo GlyphStringGetWidthMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringGetWidth",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringGetWidth"
            })

    #endif

    -- method GlyphString::index_to_x
    -- method type : OrdinaryMethod
    -- Args: [ Arg
    --           { argCName = "glyphs"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "GlyphString" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the glyphs return from [func@shape]"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the text for the run"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the number of bytes (not characters) in @text."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "analysis"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "Analysis" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the analysis information return from [func@itemize]"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "index_"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the byte index within @text"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "trailing"
    --           , argType = TBasicType TBoolean
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "whether we should compute the result for the beginning (%FALSE)\n  or end (%TRUE) of the character."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x_pos"
    --           , argType = TBasicType TInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "location to store result"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_glyph_string_index_to_x" pango_glyph_string_index_to_x ::
        Ptr GlyphString ->                      -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        CString ->                              -- text : TBasicType TUTF8
        Int32 ->                                -- length : TBasicType TInt
        Ptr Pango.Analysis.Analysis ->          -- analysis : TInterface (Name {namespace = "Pango", name = "Analysis"})
        Int32 ->                                -- index_ : TBasicType TInt
        CInt ->                                 -- trailing : TBasicType TBoolean
        Ptr Int32 ->                            -- x_pos : TBasicType TInt
        IO ()

    -- | Converts from character position to x position.
    --
    -- The X position is measured from the left edge of the run.
    -- Character positions are obtained using font metrics for ligatures
    -- where available, and computed by dividing up each cluster
    -- into equal portions, otherwise.
    --
    -- \<picture>
    --   \<source srcset=\"glyphstring-positions-dark.png\" media=\"(prefers-color-scheme: dark)\">
    --   \<img alt=\"Glyph positions\" src=\"glyphstring-positions-light.png\">
    -- \<\/picture>
    glyphStringIndexToX ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        GlyphString
        -- ^ /@glyphs@/: the glyphs return from [func/@shape@/]
        -> T.Text
        -- ^ /@text@/: the text for the run
        -> Int32
        -- ^ /@length@/: the number of bytes (not characters) in /@text@/.
        -> Pango.Analysis.Analysis
        -- ^ /@analysis@/: the analysis information return from [func/@itemize@/]
        -> Int32
        -- ^ /@index_@/: the byte index within /@text@/
        -> Bool
        -- ^ /@trailing@/: whether we should compute the result for the beginning ('P.False')
        --   or end ('P.True') of the character.
        -> m (Int32)
    glyphStringIndexToX :: forall (m :: * -> *).
    (HasCallStack, MonadIO m) =>
    GlyphString
    -> Text -> Int32 -> Analysis -> Int32 -> Bool -> m Int32
    glyphStringIndexToX GlyphString
    glyphs Text
    text Int32
    length_ Analysis
    analysis Int32
    index_ Bool
    trailing = IO Int32 -> m Int32
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Int32 -> m Int32) -> IO Int32 -> m Int32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    glyphs' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    glyphs
        CString
    text' <- Text -> IO CString
    textToCString Text
    text
        Ptr Analysis
    analysis' <- Analysis -> IO (Ptr Analysis)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr Analysis
    analysis
        let trailing' :: CInt
    trailing' = (Int -> CInt
    forall a b. (Integral a, Num b) => a -> b
    P.fromIntegral (Int -> CInt) -> (Bool -> Int) -> Bool -> CInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Bool -> Int
    forall a. Enum a => a -> Int
    P.fromEnum) Bool
    trailing
        Ptr Int32
    xPos <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr GlyphString
    -> CString
    -> Int32
    -> Ptr Analysis
    -> Int32
    -> CInt
    -> Ptr Int32
    -> IO ()
    pango_glyph_string_index_to_x Ptr GlyphString
    glyphs' CString
    text' Int32
    length_ Ptr Analysis
    analysis' Int32
    index_ CInt
    trailing' Ptr Int32
    xPos
        Int32
    xPos' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    xPos
        GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr GlyphString
    glyphs
        Analysis -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr Analysis
    analysis
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    text'
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    xPos
        Int32 -> IO Int32
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    xPos'

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringIndexToXMethodInfo
    instance (signature ~ (T.Text -> Int32 -> Pango.Analysis.Analysis -> Int32 -> Bool -> m (Int32)), MonadIO m) => O.OverloadedMethod GlyphStringIndexToXMethodInfo GlyphString signature where
        overloadedMethod = glyphStringIndexToX

    instance O.OverloadedMethodInfo GlyphStringIndexToXMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringIndexToX",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringIndexToX"
            })

    #endif

    -- method GlyphString::index_to_x_full
    -- method type : OrdinaryMethod
    -- Args: [ Arg
    --           { argCName = "glyphs"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "GlyphString" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the glyphs return from [func@shape]"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the text for the run"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the number of bytes (not characters) in @text."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "analysis"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "Analysis" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the analysis information return from [func@itemize]"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "attrs"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "LogAttr" }
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "`PangoLogAttr` array for @text"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "index_"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the byte index within @text"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "trailing"
    --           , argType = TBasicType TBoolean
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "whether we should compute the result for the beginning (%FALSE)\n  or end (%TRUE) of the character."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x_pos"
    --           , argType = TBasicType TInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "location to store result"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_glyph_string_index_to_x_full" pango_glyph_string_index_to_x_full ::
        Ptr GlyphString ->                      -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        CString ->                              -- text : TBasicType TUTF8
        Int32 ->                                -- length : TBasicType TInt
        Ptr Pango.Analysis.Analysis ->          -- analysis : TInterface (Name {namespace = "Pango", name = "Analysis"})
        Ptr Pango.LogAttr.LogAttr ->            -- attrs : TInterface (Name {namespace = "Pango", name = "LogAttr"})
        Int32 ->                                -- index_ : TBasicType TInt
        CInt ->                                 -- trailing : TBasicType TBoolean
        Ptr Int32 ->                            -- x_pos : TBasicType TInt
        IO ()

    -- | Converts from character position to x position.
    --
    -- This variant of 'GI.Pango.Structs.GlyphString.glyphStringIndexToX' additionally
    -- accepts a @PangoLogAttr@ array. The grapheme boundary information
    -- in it can be used to disambiguate positioning inside some complex
    -- clusters.
    --
    -- /Since: 1.50/
    glyphStringIndexToXFull ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        GlyphString
        -- ^ /@glyphs@/: the glyphs return from [func/@shape@/]
        -> T.Text
        -- ^ /@text@/: the text for the run
        -> Int32
        -- ^ /@length@/: the number of bytes (not characters) in /@text@/.
        -> Pango.Analysis.Analysis
        -- ^ /@analysis@/: the analysis information return from [func/@itemize@/]
        -> Maybe (Pango.LogAttr.LogAttr)
        -- ^ /@attrs@/: @PangoLogAttr@ array for /@text@/
        -> Int32
        -- ^ /@index_@/: the byte index within /@text@/
        -> Bool
        -- ^ /@trailing@/: whether we should compute the result for the beginning ('P.False')
        --   or end ('P.True') of the character.
        -> m (Int32)
    glyphStringIndexToXFull :: forall (m :: * -> *).
    (HasCallStack, MonadIO m) =>
    GlyphString
    -> Text
    -> Int32
    -> Analysis
    -> Maybe LogAttr
    -> Int32
    -> Bool
    -> m Int32
    glyphStringIndexToXFull GlyphString
    glyphs Text
    text Int32
    length_ Analysis
    analysis Maybe LogAttr
    attrs Int32
    index_ Bool
    trailing = IO Int32 -> m Int32
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Int32 -> m Int32) -> IO Int32 -> m Int32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    glyphs' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    glyphs
        CString
    text' <- Text -> IO CString
    textToCString Text
    text
        Ptr Analysis
    analysis' <- Analysis -> IO (Ptr Analysis)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr Analysis
    analysis
        Ptr LogAttr
    maybeAttrs <- case Maybe LogAttr
    attrs of
            Maybe LogAttr
    Nothing -> Ptr LogAttr -> IO (Ptr LogAttr)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr LogAttr
    forall a. Ptr a
    FP.nullPtr
            Just LogAttr
    jAttrs -> do
                Ptr LogAttr
    jAttrs' <- LogAttr -> IO (Ptr LogAttr)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr LogAttr
    jAttrs
                Ptr LogAttr -> IO (Ptr LogAttr)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr LogAttr
    jAttrs'
        let trailing' :: CInt
    trailing' = (Int -> CInt
    forall a b. (Integral a, Num b) => a -> b
    P.fromIntegral (Int -> CInt) -> (Bool -> Int) -> Bool -> CInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Bool -> Int
    forall a. Enum a => a -> Int
    P.fromEnum) Bool
    trailing
        Ptr Int32
    xPos <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr GlyphString
    -> CString
    -> Int32
    -> Ptr Analysis
    -> Ptr LogAttr
    -> Int32
    -> CInt
    -> Ptr Int32
    -> IO ()
    pango_glyph_string_index_to_x_full Ptr GlyphString
    glyphs' CString
    text' Int32
    length_ Ptr Analysis
    analysis' Ptr LogAttr
    maybeAttrs Int32
    index_ CInt
    trailing' Ptr Int32
    xPos
        Int32
    xPos' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    xPos
        GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr GlyphString
    glyphs
        Analysis -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr Analysis
    analysis
        Maybe LogAttr -> (LogAttr -> IO ()) -> IO ()
    forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
    whenJust Maybe LogAttr
    attrs LogAttr -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    text'
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    xPos
        Int32 -> IO Int32
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    xPos'

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringIndexToXFullMethodInfo
    instance (signature ~ (T.Text -> Int32 -> Pango.Analysis.Analysis -> Maybe (Pango.LogAttr.LogAttr) -> Int32 -> Bool -> m (Int32)), MonadIO m) => O.OverloadedMethod GlyphStringIndexToXFullMethodInfo GlyphString signature where
        overloadedMethod = glyphStringIndexToXFull

    instance O.OverloadedMethodInfo GlyphStringIndexToXFullMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringIndexToXFull",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringIndexToXFull"
            })

    #endif

    -- method GlyphString::set_size
    -- method type : OrdinaryMethod
    -- Args: [ Arg
    --           { argCName = "string"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "GlyphString" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a `PangoGlyphString`."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "new_len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the new length of the string"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_glyph_string_set_size" pango_glyph_string_set_size ::
        Ptr GlyphString ->                      -- string : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        Int32 ->                                -- new_len : TBasicType TInt
        IO ()

    -- | Resize a glyph string to the given length.
    glyphStringSetSize ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        GlyphString
        -- ^ /@string@/: a @PangoGlyphString@.
        -> Int32
        -- ^ /@newLen@/: the new length of the string
        -> m ()
    glyphStringSetSize :: forall (m :: * -> *).
    (HasCallStack, MonadIO m) =>
    GlyphString -> Int32 -> m ()
    glyphStringSetSize GlyphString
    string Int32
    newLen = IO () -> m ()
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    string' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    string
        Ptr GlyphString -> Int32 -> IO ()
    pango_glyph_string_set_size Ptr GlyphString
    string' Int32
    newLen
        GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr GlyphString
    string
        () -> IO ()
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringSetSizeMethodInfo
    instance (signature ~ (Int32 -> m ()), MonadIO m) => O.OverloadedMethod GlyphStringSetSizeMethodInfo GlyphString signature where
        overloadedMethod = glyphStringSetSize

    instance O.OverloadedMethodInfo GlyphStringSetSizeMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringSetSize",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringSetSize"
            })

    #endif

    -- method GlyphString::x_to_index
    -- method type : OrdinaryMethod
    -- Args: [ Arg
    --           { argCName = "glyphs"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "GlyphString" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the glyphs returned from [func@shape]"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the text for the run"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the number of bytes (not characters) in text."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "analysis"
    --           , argType =
    --               TInterface Name { namespace = "Pango" , name = "Analysis" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the analysis information return from [func@itemize]"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x_pos"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the x offset (in Pango units)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "index_"
    --           , argType = TBasicType TInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "location to store calculated byte index within @text"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "trailing"
    --           , argType = TBasicType TInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "location to store a boolean indicating whether the\n  user clicked on the leading or trailing edge of the character"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , argCallbackUserData = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "pango_glyph_string_x_to_index" pango_glyph_string_x_to_index ::
        Ptr GlyphString ->                      -- glyphs : TInterface (Name {namespace = "Pango", name = "GlyphString"})
        CString ->                              -- text : TBasicType TUTF8
        Int32 ->                                -- length : TBasicType TInt
        Ptr Pango.Analysis.Analysis ->          -- analysis : TInterface (Name {namespace = "Pango", name = "Analysis"})
        Int32 ->                                -- x_pos : TBasicType TInt
        Ptr Int32 ->                            -- index_ : TBasicType TInt
        Ptr Int32 ->                            -- trailing : TBasicType TInt
        IO ()

    -- | Convert from x offset to character position.
    --
    -- Character positions are computed by dividing up each cluster into
    -- equal portions. In scripts where positioning within a cluster is
    -- not allowed (such as Thai), the returned value may not be a valid
    -- cursor position; the caller must combine the result with the logical
    -- attributes for the text to compute the valid cursor position.
    glyphStringXToIndex ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        GlyphString
        -- ^ /@glyphs@/: the glyphs returned from [func/@shape@/]
        -> T.Text
        -- ^ /@text@/: the text for the run
        -> Int32
        -- ^ /@length@/: the number of bytes (not characters) in text.
        -> Pango.Analysis.Analysis
        -- ^ /@analysis@/: the analysis information return from [func/@itemize@/]
        -> Int32
        -- ^ /@xPos@/: the x offset (in Pango units)
        -> m ((Int32, Int32))
    glyphStringXToIndex :: forall (m :: * -> *).
    (HasCallStack, MonadIO m) =>
    GlyphString
    -> Text -> Int32 -> Analysis -> Int32 -> m (Int32, Int32)
    glyphStringXToIndex GlyphString
    glyphs Text
    text Int32
    length_ Analysis
    analysis Int32
    xPos = IO (Int32, Int32) -> m (Int32, Int32)
    forall a. IO a -> m a
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Int32) -> m (Int32, Int32))
    -> IO (Int32, Int32) -> m (Int32, Int32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphString
    glyphs' <- GlyphString -> IO (Ptr GlyphString)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphString
    glyphs
        CString
    text' <- Text -> IO CString
    textToCString Text
    text
        Ptr Analysis
    analysis' <- Analysis -> IO (Ptr Analysis)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr Analysis
    analysis
        Ptr Int32
    index_ <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    trailing <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr GlyphString
    -> CString
    -> Int32
    -> Ptr Analysis
    -> Int32
    -> Ptr Int32
    -> Ptr Int32
    -> IO ()
    pango_glyph_string_x_to_index Ptr GlyphString
    glyphs' CString
    text' Int32
    length_ Ptr Analysis
    analysis' Int32
    xPos Ptr Int32
    index_ Ptr Int32
    trailing
        Int32
    index_' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    index_
        Int32
    trailing' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    trailing
        GlyphString -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr GlyphString
    glyphs
        Analysis -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr Analysis
    analysis
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    text'
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    index_
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    trailing
        (Int32, Int32) -> IO (Int32, Int32)
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    index_', Int32
    trailing')

    #if defined(ENABLE_OVERLOADING)
    data GlyphStringXToIndexMethodInfo
    instance (signature ~ (T.Text -> Int32 -> Pango.Analysis.Analysis -> Int32 -> m ((Int32, Int32))), MonadIO m) => O.OverloadedMethod GlyphStringXToIndexMethodInfo GlyphString signature where
        overloadedMethod = glyphStringXToIndex

    instance O.OverloadedMethodInfo GlyphStringXToIndexMethodInfo GlyphString where
        overloadedMethodInfo = P.Just (O.ResolvedSymbolInfo {
            O.resolvedSymbolName = "GI.Pango.Structs.GlyphString.glyphStringXToIndex",
            O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-pango-1.0.30/docs/GI-Pango-Structs-GlyphString.html#v:glyphStringXToIndex"
            })

    #endif

    #if defined(ENABLE_OVERLOADING)
    type family ResolveGlyphStringMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
        ResolveGlyphStringMethod "copy" o = GlyphStringCopyMethodInfo
        ResolveGlyphStringMethod "extents" o = GlyphStringExtentsMethodInfo
        ResolveGlyphStringMethod "extentsRange" o = GlyphStringExtentsRangeMethodInfo
        ResolveGlyphStringMethod "free" o = GlyphStringFreeMethodInfo
        ResolveGlyphStringMethod "indexToX" o = GlyphStringIndexToXMethodInfo
        ResolveGlyphStringMethod "indexToXFull" o = GlyphStringIndexToXFullMethodInfo
        ResolveGlyphStringMethod "xToIndex" o = GlyphStringXToIndexMethodInfo
        ResolveGlyphStringMethod "getLogicalWidths" o = GlyphStringGetLogicalWidthsMethodInfo
        ResolveGlyphStringMethod "getWidth" o = GlyphStringGetWidthMethodInfo
        ResolveGlyphStringMethod "setSize" o = GlyphStringSetSizeMethodInfo
        ResolveGlyphStringMethod l o = O.MethodResolutionFailed l o

    instance (info ~ ResolveGlyphStringMethod t GlyphString, O.OverloadedMethod info GlyphString p) => OL.IsLabel t (GlyphString -> p) where
    #if MIN_VERSION_base(4,10,0)
        fromLabel = O.overloadedMethod @info
    #else
        fromLabel _ = O.overloadedMethod @info
    #endif

    #if MIN_VERSION_base(4,13,0)
    instance (info ~ ResolveGlyphStringMethod t GlyphString, O.OverloadedMethod info GlyphString p, R.HasField t GlyphString p) => R.HasField t GlyphString p where
        getField = O.overloadedMethod @info

    #endif

    instance (info ~ ResolveGlyphStringMethod t GlyphString, O.OverloadedMethodInfo info GlyphString) => OL.IsLabel t (O.MethodProxy info GlyphString) where
    #if MIN_VERSION_base(4,10,0)
        fromLabel = O.MethodProxy
    #else
        fromLabel _ = O.MethodProxy
    #endif

    #endif