    -- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
    -- License    : LGPL-2.1
    -- Maintainer : Iñaki García Etxebarria

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

    module GI.HarfBuzz.Functions
        (

     -- * Methods
    -- ** blobCopyWritableOrFail #method:blobCopyWritableOrFail#

        blobCopyWritableOrFail                  ,

    -- ** blobCreateFromFile #method:blobCreateFromFile#

        blobCreateFromFile                      ,

    -- ** blobCreateSubBlob #method:blobCreateSubBlob#

        blobCreateSubBlob                       ,

    -- ** blobGetData #method:blobGetData#

        blobGetData                             ,

    -- ** blobGetDataWritable #method:blobGetDataWritable#

        blobGetDataWritable                     ,

    -- ** blobGetEmpty #method:blobGetEmpty#

        blobGetEmpty                            ,

    -- ** blobGetLength #method:blobGetLength#

        blobGetLength                           ,

    -- ** blobIsImmutable #method:blobIsImmutable#

        blobIsImmutable                         ,

    -- ** blobMakeImmutable #method:blobMakeImmutable#

        blobMakeImmutable                       ,

    -- ** bufferAdd #method:bufferAdd#

        bufferAdd                               ,

    -- ** bufferAddCodepoints #method:bufferAddCodepoints#

        bufferAddCodepoints                     ,

    -- ** bufferAddLatin1 #method:bufferAddLatin1#

        bufferAddLatin1                         ,

    -- ** bufferAddUtf16 #method:bufferAddUtf16#

        bufferAddUtf16                          ,

    -- ** bufferAddUtf32 #method:bufferAddUtf32#

        bufferAddUtf32                          ,

    -- ** bufferAddUtf8 #method:bufferAddUtf8#

        bufferAddUtf8                           ,

    -- ** bufferAllocationSuccessful #method:bufferAllocationSuccessful#

        bufferAllocationSuccessful              ,

    -- ** bufferAppend #method:bufferAppend#

        bufferAppend                            ,

    -- ** bufferClearContents #method:bufferClearContents#

        bufferClearContents                     ,

    -- ** bufferCreate #method:bufferCreate#

        bufferCreate                            ,

    -- ** bufferDeserializeGlyphs #method:bufferDeserializeGlyphs#

        bufferDeserializeGlyphs                 ,

    -- ** bufferDiff #method:bufferDiff#

        bufferDiff                              ,

    -- ** bufferGetClusterLevel #method:bufferGetClusterLevel#

        bufferGetClusterLevel                   ,

    -- ** bufferGetContentType #method:bufferGetContentType#

        bufferGetContentType                    ,

    -- ** bufferGetDirection #method:bufferGetDirection#

        bufferGetDirection                      ,

    -- ** bufferGetEmpty #method:bufferGetEmpty#

        bufferGetEmpty                          ,

    -- ** bufferGetFlags #method:bufferGetFlags#

        bufferGetFlags                          ,

    -- ** bufferGetGlyphInfos #method:bufferGetGlyphInfos#

        bufferGetGlyphInfos                     ,

    -- ** bufferGetGlyphPositions #method:bufferGetGlyphPositions#

        bufferGetGlyphPositions                 ,

    -- ** bufferGetInvisibleGlyph #method:bufferGetInvisibleGlyph#

        bufferGetInvisibleGlyph                 ,

    -- ** bufferGetLanguage #method:bufferGetLanguage#

        bufferGetLanguage                       ,

    -- ** bufferGetLength #method:bufferGetLength#

        bufferGetLength                         ,

    -- ** bufferGetReplacementCodepoint #method:bufferGetReplacementCodepoint#

        bufferGetReplacementCodepoint           ,

    -- ** bufferGetScript #method:bufferGetScript#

        bufferGetScript                         ,

    -- ** bufferGetSegmentProperties #method:bufferGetSegmentProperties#

        bufferGetSegmentProperties              ,

    -- ** bufferGetUnicodeFuncs #method:bufferGetUnicodeFuncs#

        bufferGetUnicodeFuncs                   ,

    -- ** bufferGuessSegmentProperties #method:bufferGuessSegmentProperties#

        bufferGuessSegmentProperties            ,

    -- ** bufferNormalizeGlyphs #method:bufferNormalizeGlyphs#

        bufferNormalizeGlyphs                   ,

    -- ** bufferPreAllocate #method:bufferPreAllocate#

        bufferPreAllocate                       ,

    -- ** bufferReset #method:bufferReset#

        bufferReset                             ,

    -- ** bufferReverse #method:bufferReverse#

        bufferReverse                           ,

    -- ** bufferReverseClusters #method:bufferReverseClusters#

        bufferReverseClusters                   ,

    -- ** bufferReverseRange #method:bufferReverseRange#

        bufferReverseRange                      ,

    -- ** bufferSerializeFormatFromString #method:bufferSerializeFormatFromString#

        bufferSerializeFormatFromString         ,

    -- ** bufferSerializeFormatToString #method:bufferSerializeFormatToString#

        bufferSerializeFormatToString           ,

    -- ** bufferSerializeGlyphs #method:bufferSerializeGlyphs#

        bufferSerializeGlyphs                   ,

    -- ** bufferSerializeListFormats #method:bufferSerializeListFormats#

        bufferSerializeListFormats              ,

    -- ** bufferSetClusterLevel #method:bufferSetClusterLevel#

        bufferSetClusterLevel                   ,

    -- ** bufferSetContentType #method:bufferSetContentType#

        bufferSetContentType                    ,

    -- ** bufferSetDirection #method:bufferSetDirection#

        bufferSetDirection                      ,

    -- ** bufferSetFlags #method:bufferSetFlags#

        bufferSetFlags                          ,

    -- ** bufferSetInvisibleGlyph #method:bufferSetInvisibleGlyph#

        bufferSetInvisibleGlyph                 ,

    -- ** bufferSetLanguage #method:bufferSetLanguage#

        bufferSetLanguage                       ,

    -- ** bufferSetLength #method:bufferSetLength#

        bufferSetLength                         ,

    -- ** bufferSetMessageFunc #method:bufferSetMessageFunc#

        bufferSetMessageFunc                    ,

    -- ** bufferSetReplacementCodepoint #method:bufferSetReplacementCodepoint#

        bufferSetReplacementCodepoint           ,

    -- ** bufferSetScript #method:bufferSetScript#

        bufferSetScript                         ,

    -- ** bufferSetSegmentProperties #method:bufferSetSegmentProperties#

        bufferSetSegmentProperties              ,

    -- ** bufferSetUnicodeFuncs #method:bufferSetUnicodeFuncs#

        bufferSetUnicodeFuncs                   ,

    -- ** colorGetAlpha #method:colorGetAlpha#

        colorGetAlpha                           ,

    -- ** colorGetBlue #method:colorGetBlue#

        colorGetBlue                            ,

    -- ** colorGetGreen #method:colorGetGreen#

        colorGetGreen                           ,

    -- ** colorGetRed #method:colorGetRed#

        colorGetRed                             ,

    -- ** directionFromString #method:directionFromString#

        directionFromString                     ,

    -- ** directionToString #method:directionToString#

        directionToString                       ,

    -- ** faceBuilderAddTable #method:faceBuilderAddTable#

        faceBuilderAddTable                     ,

    -- ** faceBuilderCreate #method:faceBuilderCreate#

        faceBuilderCreate                       ,

    -- ** faceCollectUnicodes #method:faceCollectUnicodes#

        faceCollectUnicodes                     ,

    -- ** faceCollectVariationSelectors #method:faceCollectVariationSelectors#

        faceCollectVariationSelectors           ,

    -- ** faceCollectVariationUnicodes #method:faceCollectVariationUnicodes#

        faceCollectVariationUnicodes            ,

    -- ** faceCount #method:faceCount#

        faceCount                               ,

    -- ** faceCreate #method:faceCreate#

        faceCreate                              ,

    -- ** faceCreateForTables #method:faceCreateForTables#

        faceCreateForTables                     ,

    -- ** faceGetEmpty #method:faceGetEmpty#

        faceGetEmpty                            ,

    -- ** faceGetGlyphCount #method:faceGetGlyphCount#

        faceGetGlyphCount                       ,

    -- ** faceGetIndex #method:faceGetIndex#

        faceGetIndex                            ,

    -- ** faceGetTableTags #method:faceGetTableTags#

        faceGetTableTags                        ,

    -- ** faceGetUpem #method:faceGetUpem#

        faceGetUpem                             ,

    -- ** faceIsImmutable #method:faceIsImmutable#

        faceIsImmutable                         ,

    -- ** faceMakeImmutable #method:faceMakeImmutable#

        faceMakeImmutable                       ,

    -- ** faceReferenceBlob #method:faceReferenceBlob#

        faceReferenceBlob                       ,

    -- ** faceReferenceTable #method:faceReferenceTable#

        faceReferenceTable                      ,

    -- ** faceSetGlyphCount #method:faceSetGlyphCount#

        faceSetGlyphCount                       ,

    -- ** faceSetIndex #method:faceSetIndex#

        faceSetIndex                            ,

    -- ** faceSetUpem #method:faceSetUpem#

        faceSetUpem                             ,

    -- ** featureFromString #method:featureFromString#

        featureFromString                       ,

    -- ** featureToString #method:featureToString#

        featureToString                         ,

    -- ** fontAddGlyphOriginForDirection #method:fontAddGlyphOriginForDirection#

        fontAddGlyphOriginForDirection          ,

    -- ** fontCreate #method:fontCreate#

        fontCreate                              ,

    -- ** fontCreateSubFont #method:fontCreateSubFont#

        fontCreateSubFont                       ,

    -- ** fontFuncsCreate #method:fontFuncsCreate#

        fontFuncsCreate                         ,

    -- ** fontFuncsGetEmpty #method:fontFuncsGetEmpty#

        fontFuncsGetEmpty                       ,

    -- ** fontFuncsIsImmutable #method:fontFuncsIsImmutable#

        fontFuncsIsImmutable                    ,

    -- ** fontFuncsMakeImmutable #method:fontFuncsMakeImmutable#

        fontFuncsMakeImmutable                  ,

    -- ** fontFuncsSetFontHExtentsFunc #method:fontFuncsSetFontHExtentsFunc#

        fontFuncsSetFontHExtentsFunc            ,

    -- ** fontFuncsSetFontVExtentsFunc #method:fontFuncsSetFontVExtentsFunc#

        fontFuncsSetFontVExtentsFunc            ,

    -- ** fontFuncsSetGlyphContourPointFunc #method:fontFuncsSetGlyphContourPointFunc#

        fontFuncsSetGlyphContourPointFunc       ,

    -- ** fontFuncsSetGlyphExtentsFunc #method:fontFuncsSetGlyphExtentsFunc#

        fontFuncsSetGlyphExtentsFunc            ,

    -- ** fontFuncsSetGlyphFromNameFunc #method:fontFuncsSetGlyphFromNameFunc#

        fontFuncsSetGlyphFromNameFunc           ,

    -- ** fontFuncsSetGlyphFunc #method:fontFuncsSetGlyphFunc#

        fontFuncsSetGlyphFunc                   ,

    -- ** fontFuncsSetGlyphHAdvanceFunc #method:fontFuncsSetGlyphHAdvanceFunc#

        fontFuncsSetGlyphHAdvanceFunc           ,

    -- ** fontFuncsSetGlyphHAdvancesFunc #method:fontFuncsSetGlyphHAdvancesFunc#

        fontFuncsSetGlyphHAdvancesFunc          ,

    -- ** fontFuncsSetGlyphHKerningFunc #method:fontFuncsSetGlyphHKerningFunc#

        fontFuncsSetGlyphHKerningFunc           ,

    -- ** fontFuncsSetGlyphHOriginFunc #method:fontFuncsSetGlyphHOriginFunc#

        fontFuncsSetGlyphHOriginFunc            ,

    -- ** fontFuncsSetGlyphNameFunc #method:fontFuncsSetGlyphNameFunc#

        fontFuncsSetGlyphNameFunc               ,

    -- ** fontFuncsSetGlyphVAdvanceFunc #method:fontFuncsSetGlyphVAdvanceFunc#

        fontFuncsSetGlyphVAdvanceFunc           ,

    -- ** fontFuncsSetGlyphVAdvancesFunc #method:fontFuncsSetGlyphVAdvancesFunc#

        fontFuncsSetGlyphVAdvancesFunc          ,

    -- ** fontFuncsSetGlyphVKerningFunc #method:fontFuncsSetGlyphVKerningFunc#

        fontFuncsSetGlyphVKerningFunc           ,

    -- ** fontFuncsSetGlyphVOriginFunc #method:fontFuncsSetGlyphVOriginFunc#

        fontFuncsSetGlyphVOriginFunc            ,

    -- ** fontFuncsSetNominalGlyphFunc #method:fontFuncsSetNominalGlyphFunc#

        fontFuncsSetNominalGlyphFunc            ,

    -- ** fontFuncsSetNominalGlyphsFunc #method:fontFuncsSetNominalGlyphsFunc#

        fontFuncsSetNominalGlyphsFunc           ,

    -- ** fontFuncsSetVariationGlyphFunc #method:fontFuncsSetVariationGlyphFunc#

        fontFuncsSetVariationGlyphFunc          ,

    -- ** fontGetEmpty #method:fontGetEmpty#

        fontGetEmpty                            ,

    -- ** fontGetExtentsForDirection #method:fontGetExtentsForDirection#

        fontGetExtentsForDirection              ,

    -- ** fontGetFace #method:fontGetFace#

        fontGetFace                             ,

    -- ** fontGetGlyph #method:fontGetGlyph#

        fontGetGlyph                            ,

    -- ** fontGetGlyphAdvanceForDirection #method:fontGetGlyphAdvanceForDirection#

        fontGetGlyphAdvanceForDirection         ,

    -- ** fontGetGlyphAdvancesForDirection #method:fontGetGlyphAdvancesForDirection#

        fontGetGlyphAdvancesForDirection        ,

    -- ** fontGetGlyphContourPoint #method:fontGetGlyphContourPoint#

        fontGetGlyphContourPoint                ,

    -- ** fontGetGlyphContourPointForOrigin #method:fontGetGlyphContourPointForOrigin#

        fontGetGlyphContourPointForOrigin       ,

    -- ** fontGetGlyphExtents #method:fontGetGlyphExtents#

        fontGetGlyphExtents                     ,

    -- ** fontGetGlyphExtentsForOrigin #method:fontGetGlyphExtentsForOrigin#

        fontGetGlyphExtentsForOrigin            ,

    -- ** fontGetGlyphFromName #method:fontGetGlyphFromName#

        fontGetGlyphFromName                    ,

    -- ** fontGetGlyphHAdvance #method:fontGetGlyphHAdvance#

        fontGetGlyphHAdvance                    ,

    -- ** fontGetGlyphHAdvances #method:fontGetGlyphHAdvances#

        fontGetGlyphHAdvances                   ,

    -- ** fontGetGlyphHKerning #method:fontGetGlyphHKerning#

        fontGetGlyphHKerning                    ,

    -- ** fontGetGlyphHOrigin #method:fontGetGlyphHOrigin#

        fontGetGlyphHOrigin                     ,

    -- ** fontGetGlyphKerningForDirection #method:fontGetGlyphKerningForDirection#

        fontGetGlyphKerningForDirection         ,

    -- ** fontGetGlyphName #method:fontGetGlyphName#

        fontGetGlyphName                        ,

    -- ** fontGetGlyphOriginForDirection #method:fontGetGlyphOriginForDirection#

        fontGetGlyphOriginForDirection          ,

    -- ** fontGetGlyphVAdvance #method:fontGetGlyphVAdvance#

        fontGetGlyphVAdvance                    ,

    -- ** fontGetGlyphVAdvances #method:fontGetGlyphVAdvances#

        fontGetGlyphVAdvances                   ,

    -- ** fontGetGlyphVKerning #method:fontGetGlyphVKerning#

        fontGetGlyphVKerning                    ,

    -- ** fontGetGlyphVOrigin #method:fontGetGlyphVOrigin#

        fontGetGlyphVOrigin                     ,

    -- ** fontGetHExtents #method:fontGetHExtents#

        fontGetHExtents                         ,

    -- ** fontGetNominalGlyph #method:fontGetNominalGlyph#

        fontGetNominalGlyph                     ,

    -- ** fontGetNominalGlyphs #method:fontGetNominalGlyphs#

        fontGetNominalGlyphs                    ,

    -- ** fontGetParent #method:fontGetParent#

        fontGetParent                           ,

    -- ** fontGetPpem #method:fontGetPpem#

        fontGetPpem                             ,

    -- ** fontGetPtem #method:fontGetPtem#

        fontGetPtem                             ,

    -- ** fontGetScale #method:fontGetScale#

        fontGetScale                            ,

    -- ** fontGetVExtents #method:fontGetVExtents#

        fontGetVExtents                         ,

    -- ** fontGetVarCoordsNormalized #method:fontGetVarCoordsNormalized#

        fontGetVarCoordsNormalized              ,

    -- ** fontGetVariationGlyph #method:fontGetVariationGlyph#

        fontGetVariationGlyph                   ,

    -- ** fontGlyphFromString #method:fontGlyphFromString#

        fontGlyphFromString                     ,

    -- ** fontGlyphToString #method:fontGlyphToString#

        fontGlyphToString                       ,

    -- ** fontIsImmutable #method:fontIsImmutable#

        fontIsImmutable                         ,

    -- ** fontMakeImmutable #method:fontMakeImmutable#

        fontMakeImmutable                       ,

    -- ** fontSetFace #method:fontSetFace#

        fontSetFace                             ,

    -- ** fontSetFuncs #method:fontSetFuncs#

        fontSetFuncs                            ,

    -- ** fontSetFuncsData #method:fontSetFuncsData#

        fontSetFuncsData                        ,

    -- ** fontSetParent #method:fontSetParent#

        fontSetParent                           ,

    -- ** fontSetPpem #method:fontSetPpem#

        fontSetPpem                             ,

    -- ** fontSetPtem #method:fontSetPtem#

        fontSetPtem                             ,

    -- ** fontSetScale #method:fontSetScale#

        fontSetScale                            ,

    -- ** fontSetVarCoordsDesign #method:fontSetVarCoordsDesign#

        fontSetVarCoordsDesign                  ,

    -- ** fontSetVarCoordsNormalized #method:fontSetVarCoordsNormalized#

        fontSetVarCoordsNormalized              ,

    -- ** fontSetVarNamedInstance #method:fontSetVarNamedInstance#

        fontSetVarNamedInstance                 ,

    -- ** fontSetVariations #method:fontSetVariations#

        fontSetVariations                       ,

    -- ** fontSubtractGlyphOriginForDirection #method:fontSubtractGlyphOriginForDirection#

        fontSubtractGlyphOriginForDirection     ,

    -- ** ftFontChanged #method:ftFontChanged#

        ftFontChanged                           ,

    -- ** ftFontGetLoadFlags #method:ftFontGetLoadFlags#

        ftFontGetLoadFlags                      ,

    -- ** ftFontSetFuncs #method:ftFontSetFuncs#

        ftFontSetFuncs                          ,

    -- ** ftFontSetLoadFlags #method:ftFontSetLoadFlags#

        ftFontSetLoadFlags                      ,

    -- ** ftFontUnlockFace #method:ftFontUnlockFace#

        ftFontUnlockFace                        ,

    -- ** glibBlobCreate #method:glibBlobCreate#

        glibBlobCreate                          ,

    -- ** glibGetUnicodeFuncs #method:glibGetUnicodeFuncs#

        glibGetUnicodeFuncs                     ,

    -- ** glibScriptFromScript #method:glibScriptFromScript#

        glibScriptFromScript                    ,

    -- ** glibScriptToScript #method:glibScriptToScript#

        glibScriptToScript                      ,

    -- ** glyphInfoGetGlyphFlags #method:glyphInfoGetGlyphFlags#

        glyphInfoGetGlyphFlags                  ,

    -- ** languageFromString #method:languageFromString#

        languageFromString                      ,

    -- ** languageGetDefault #method:languageGetDefault#

        languageGetDefault                      ,

    -- ** languageToString #method:languageToString#

        languageToString                        ,

    -- ** mapAllocationSuccessful #method:mapAllocationSuccessful#

        mapAllocationSuccessful                 ,

    -- ** mapClear #method:mapClear#

        mapClear                                ,

    -- ** mapCreate #method:mapCreate#

        mapCreate                               ,

    -- ** mapDel #method:mapDel#

        mapDel                                  ,

    -- ** mapGet #method:mapGet#

        mapGet                                  ,

    -- ** mapGetEmpty #method:mapGetEmpty#

        mapGetEmpty                             ,

    -- ** mapGetPopulation #method:mapGetPopulation#

        mapGetPopulation                        ,

    -- ** mapHas #method:mapHas#

        mapHas                                  ,

    -- ** mapIsEmpty #method:mapIsEmpty#

        mapIsEmpty                              ,

    -- ** mapSet #method:mapSet#

        mapSet                                  ,

    -- ** otColorGlyphGetLayers #method:otColorGlyphGetLayers#

        otColorGlyphGetLayers                   ,

    -- ** otColorGlyphReferencePng #method:otColorGlyphReferencePng#

        otColorGlyphReferencePng                ,

    -- ** otColorGlyphReferenceSvg #method:otColorGlyphReferenceSvg#

        otColorGlyphReferenceSvg                ,

    -- ** otColorHasLayers #method:otColorHasLayers#

        otColorHasLayers                        ,

    -- ** otColorHasPalettes #method:otColorHasPalettes#

        otColorHasPalettes                      ,

    -- ** otColorHasPng #method:otColorHasPng#

        otColorHasPng                           ,

    -- ** otColorHasSvg #method:otColorHasSvg#

        otColorHasSvg                           ,

    -- ** otColorPaletteColorGetNameId #method:otColorPaletteColorGetNameId#

        otColorPaletteColorGetNameId            ,

    -- ** otColorPaletteGetColors #method:otColorPaletteGetColors#

        otColorPaletteGetColors                 ,

    -- ** otColorPaletteGetCount #method:otColorPaletteGetCount#

        otColorPaletteGetCount                  ,

    -- ** otColorPaletteGetFlags #method:otColorPaletteGetFlags#

        otColorPaletteGetFlags                  ,

    -- ** otColorPaletteGetNameId #method:otColorPaletteGetNameId#

        otColorPaletteGetNameId                 ,

    -- ** otFontSetFuncs #method:otFontSetFuncs#

        otFontSetFuncs                          ,

    -- ** otLayoutFeatureGetCharacters #method:otLayoutFeatureGetCharacters#

        otLayoutFeatureGetCharacters            ,

    -- ** otLayoutFeatureGetLookups #method:otLayoutFeatureGetLookups#

        otLayoutFeatureGetLookups               ,

    -- ** otLayoutFeatureGetNameIds #method:otLayoutFeatureGetNameIds#

        otLayoutFeatureGetNameIds               ,

    -- ** otLayoutFeatureWithVariationsGetLookups #method:otLayoutFeatureWithVariationsGetLookups#

        otLayoutFeatureWithVariationsGetLookups ,

    -- ** otLayoutGetAttachPoints #method:otLayoutGetAttachPoints#

        otLayoutGetAttachPoints                 ,

    -- ** otLayoutGetBaseline #method:otLayoutGetBaseline#

        otLayoutGetBaseline                     ,

    -- ** otLayoutGetGlyphClass #method:otLayoutGetGlyphClass#

        otLayoutGetGlyphClass                   ,

    -- ** otLayoutGetLigatureCarets #method:otLayoutGetLigatureCarets#

        otLayoutGetLigatureCarets               ,

    -- ** otLayoutGetSizeParams #method:otLayoutGetSizeParams#

        otLayoutGetSizeParams                   ,

    -- ** otLayoutHasGlyphClasses #method:otLayoutHasGlyphClasses#

        otLayoutHasGlyphClasses                 ,

    -- ** otLayoutHasPositioning #method:otLayoutHasPositioning#

        otLayoutHasPositioning                  ,

    -- ** otLayoutHasSubstitution #method:otLayoutHasSubstitution#

        otLayoutHasSubstitution                 ,

    -- ** otLayoutLanguageFindFeature #method:otLayoutLanguageFindFeature#

        otLayoutLanguageFindFeature             ,

    -- ** otLayoutLanguageGetFeatureIndexes #method:otLayoutLanguageGetFeatureIndexes#

        otLayoutLanguageGetFeatureIndexes       ,

    -- ** otLayoutLanguageGetFeatureTags #method:otLayoutLanguageGetFeatureTags#

        otLayoutLanguageGetFeatureTags          ,

    -- ** otLayoutLanguageGetRequiredFeature #method:otLayoutLanguageGetRequiredFeature#

        otLayoutLanguageGetRequiredFeature      ,

    -- ** otLayoutLanguageGetRequiredFeatureIndex #method:otLayoutLanguageGetRequiredFeatureIndex#

        otLayoutLanguageGetRequiredFeatureIndex ,

    -- ** otLayoutLookupWouldSubstitute #method:otLayoutLookupWouldSubstitute#

        otLayoutLookupWouldSubstitute           ,

    -- ** otLayoutScriptFindLanguage #method:otLayoutScriptFindLanguage#

        otLayoutScriptFindLanguage              ,

    -- ** otLayoutScriptGetLanguageTags #method:otLayoutScriptGetLanguageTags#

        otLayoutScriptGetLanguageTags           ,

    -- ** otLayoutScriptSelectLanguage #method:otLayoutScriptSelectLanguage#

        otLayoutScriptSelectLanguage            ,

    -- ** otLayoutTableChooseScript #method:otLayoutTableChooseScript#

        otLayoutTableChooseScript               ,

    -- ** otLayoutTableFindFeatureVariations #method:otLayoutTableFindFeatureVariations#

        otLayoutTableFindFeatureVariations      ,

    -- ** otLayoutTableFindScript #method:otLayoutTableFindScript#

        otLayoutTableFindScript                 ,

    -- ** otLayoutTableGetFeatureTags #method:otLayoutTableGetFeatureTags#

        otLayoutTableGetFeatureTags             ,

    -- ** otLayoutTableGetLookupCount #method:otLayoutTableGetLookupCount#

        otLayoutTableGetLookupCount             ,

    -- ** otLayoutTableGetScriptTags #method:otLayoutTableGetScriptTags#

        otLayoutTableGetScriptTags              ,

    -- ** otLayoutTableSelectScript #method:otLayoutTableSelectScript#

        otLayoutTableSelectScript               ,

    -- ** otMathGetConstant #method:otMathGetConstant#

        otMathGetConstant                       ,

    -- ** otMathGetGlyphAssembly #method:otMathGetGlyphAssembly#

        otMathGetGlyphAssembly                  ,

    -- ** otMathGetGlyphItalicsCorrection #method:otMathGetGlyphItalicsCorrection#

        otMathGetGlyphItalicsCorrection         ,

    -- ** otMathGetGlyphKerning #method:otMathGetGlyphKerning#

        otMathGetGlyphKerning                   ,

    -- ** otMathGetGlyphTopAccentAttachment #method:otMathGetGlyphTopAccentAttachment#

        otMathGetGlyphTopAccentAttachment       ,

    -- ** otMathGetGlyphVariants #method:otMathGetGlyphVariants#

        otMathGetGlyphVariants                  ,

    -- ** otMathGetMinConnectorOverlap #method:otMathGetMinConnectorOverlap#

        otMathGetMinConnectorOverlap            ,

    -- ** otMathHasData #method:otMathHasData#

        otMathHasData                           ,

    -- ** otMathIsGlyphExtendedShape #method:otMathIsGlyphExtendedShape#

        otMathIsGlyphExtendedShape              ,

    -- ** otMetaGetEntryTags #method:otMetaGetEntryTags#

        otMetaGetEntryTags                      ,

    -- ** otMetaReferenceEntry #method:otMetaReferenceEntry#

        otMetaReferenceEntry                    ,

    -- ** otMetricsGetPosition #method:otMetricsGetPosition#

        otMetricsGetPosition                    ,

    -- ** otMetricsGetVariation #method:otMetricsGetVariation#

        otMetricsGetVariation                   ,

    -- ** otMetricsGetXVariation #method:otMetricsGetXVariation#

        otMetricsGetXVariation                  ,

    -- ** otMetricsGetYVariation #method:otMetricsGetYVariation#

        otMetricsGetYVariation                  ,

    -- ** otNameGetUtf16 #method:otNameGetUtf16#

        otNameGetUtf16                          ,

    -- ** otNameGetUtf32 #method:otNameGetUtf32#

        otNameGetUtf32                          ,

    -- ** otNameGetUtf8 #method:otNameGetUtf8#

        otNameGetUtf8                           ,

    -- ** otNameListNames #method:otNameListNames#

        otNameListNames                         ,

    -- ** otShapeGlyphsClosure #method:otShapeGlyphsClosure#

        otShapeGlyphsClosure                    ,

    -- ** otTagFromLanguage #method:otTagFromLanguage#

        otTagFromLanguage                       ,

    -- ** otTagToLanguage #method:otTagToLanguage#

        otTagToLanguage                         ,

    -- ** otTagToScript #method:otTagToScript#

        otTagToScript                           ,

    -- ** otTagsFromScript #method:otTagsFromScript#

        otTagsFromScript                        ,

    -- ** otTagsFromScriptAndLanguage #method:otTagsFromScriptAndLanguage#

        otTagsFromScriptAndLanguage             ,

    -- ** otTagsToScriptAndLanguage #method:otTagsToScriptAndLanguage#

        otTagsToScriptAndLanguage               ,

    -- ** otVarFindAxis #method:otVarFindAxis#

        otVarFindAxis                           ,

    -- ** otVarFindAxisInfo #method:otVarFindAxisInfo#

        otVarFindAxisInfo                       ,

    -- ** otVarGetAxes #method:otVarGetAxes#

        otVarGetAxes                            ,

    -- ** otVarGetAxisCount #method:otVarGetAxisCount#

        otVarGetAxisCount                       ,

    -- ** otVarGetAxisInfos #method:otVarGetAxisInfos#

        otVarGetAxisInfos                       ,

    -- ** otVarGetNamedInstanceCount #method:otVarGetNamedInstanceCount#

        otVarGetNamedInstanceCount              ,

    -- ** otVarHasData #method:otVarHasData#

        otVarHasData                            ,

    -- ** otVarNamedInstanceGetDesignCoords #method:otVarNamedInstanceGetDesignCoords#

        otVarNamedInstanceGetDesignCoords       ,

    -- ** otVarNamedInstanceGetPostscriptNameId #method:otVarNamedInstanceGetPostscriptNameId#

        otVarNamedInstanceGetPostscriptNameId   ,

    -- ** otVarNamedInstanceGetSubfamilyNameId #method:otVarNamedInstanceGetSubfamilyNameId#

        otVarNamedInstanceGetSubfamilyNameId    ,

    -- ** otVarNormalizeCoords #method:otVarNormalizeCoords#

        otVarNormalizeCoords                    ,

    -- ** otVarNormalizeVariations #method:otVarNormalizeVariations#

        otVarNormalizeVariations                ,

    -- ** scriptFromIso15924Tag #method:scriptFromIso15924Tag#

        scriptFromIso15924Tag                   ,

    -- ** scriptFromString #method:scriptFromString#

        scriptFromString                        ,

    -- ** scriptGetHorizontalDirection #method:scriptGetHorizontalDirection#

        scriptGetHorizontalDirection            ,

    -- ** scriptToIso15924Tag #method:scriptToIso15924Tag#

        scriptToIso15924Tag                     ,

    -- ** segmentPropertiesEqual #method:segmentPropertiesEqual#

        segmentPropertiesEqual                  ,

    -- ** segmentPropertiesHash #method:segmentPropertiesHash#

        segmentPropertiesHash                   ,

    -- ** setAdd #method:setAdd#

        setAdd                                  ,

    -- ** setAddRange #method:setAddRange#

        setAddRange                             ,

    -- ** setAllocationSuccessful #method:setAllocationSuccessful#

        setAllocationSuccessful                 ,

    -- ** setClear #method:setClear#

        setClear                                ,

    -- ** setCreate #method:setCreate#

        setCreate                               ,

    -- ** setDel #method:setDel#

        setDel                                  ,

    -- ** setDelRange #method:setDelRange#

        setDelRange                             ,

    -- ** setGetEmpty #method:setGetEmpty#

        setGetEmpty                             ,

    -- ** setGetMax #method:setGetMax#

        setGetMax                               ,

    -- ** setGetMin #method:setGetMin#

        setGetMin                               ,

    -- ** setGetPopulation #method:setGetPopulation#

        setGetPopulation                        ,

    -- ** setHas #method:setHas#

        setHas                                  ,

    -- ** setIntersect #method:setIntersect#

        setIntersect                            ,

    -- ** setInvert #method:setInvert#

        setInvert                               ,

    -- ** setIsEmpty #method:setIsEmpty#

        setIsEmpty                              ,

    -- ** setIsEqual #method:setIsEqual#

        setIsEqual                              ,

    -- ** setIsSubset #method:setIsSubset#

        setIsSubset                             ,

    -- ** setNext #method:setNext#

        setNext                                 ,

    -- ** setNextRange #method:setNextRange#

        setNextRange                            ,

    -- ** setPrevious #method:setPrevious#

        setPrevious                             ,

    -- ** setPreviousRange #method:setPreviousRange#

        setPreviousRange                        ,

    -- ** setSet #method:setSet#

        setSet                                  ,

    -- ** setSubtract #method:setSubtract#

        setSubtract                             ,

    -- ** setSymmetricDifference #method:setSymmetricDifference#

        setSymmetricDifference                  ,

    -- ** setUnion #method:setUnion#

        setUnion                                ,

    -- ** shape #method:shape#

        shape                                   ,

    -- ** shapeFull #method:shapeFull#

        shapeFull                               ,

    -- ** shapeListShapers #method:shapeListShapers#

        shapeListShapers                        ,

    -- ** shapePlanCreate #method:shapePlanCreate#

        shapePlanCreate                         ,

    -- ** shapePlanCreate2 #method:shapePlanCreate2#

        shapePlanCreate2                        ,

    -- ** shapePlanCreateCached #method:shapePlanCreateCached#

        shapePlanCreateCached                   ,

    -- ** shapePlanCreateCached2 #method:shapePlanCreateCached2#

        shapePlanCreateCached2                  ,

    -- ** shapePlanExecute #method:shapePlanExecute#

        shapePlanExecute                        ,

    -- ** shapePlanGetEmpty #method:shapePlanGetEmpty#

        shapePlanGetEmpty                       ,

    -- ** shapePlanGetShaper #method:shapePlanGetShaper#

        shapePlanGetShaper                      ,

    -- ** tagFromString #method:tagFromString#

        tagFromString                           ,

    -- ** unicodeCombiningClass #method:unicodeCombiningClass#

        unicodeCombiningClass                   ,

    -- ** unicodeCompose #method:unicodeCompose#

        unicodeCompose                          ,

    -- ** unicodeDecompose #method:unicodeDecompose#

        unicodeDecompose                        ,

    -- ** unicodeDecomposeCompatibility #method:unicodeDecomposeCompatibility#

        unicodeDecomposeCompatibility           ,

    -- ** unicodeEastasianWidth #method:unicodeEastasianWidth#

        unicodeEastasianWidth                   ,

    -- ** unicodeFuncsCreate #method:unicodeFuncsCreate#

        unicodeFuncsCreate                      ,

    -- ** unicodeFuncsGetDefault #method:unicodeFuncsGetDefault#

        unicodeFuncsGetDefault                  ,

    -- ** unicodeFuncsGetEmpty #method:unicodeFuncsGetEmpty#

        unicodeFuncsGetEmpty                    ,

    -- ** unicodeFuncsGetParent #method:unicodeFuncsGetParent#

        unicodeFuncsGetParent                   ,

    -- ** unicodeFuncsIsImmutable #method:unicodeFuncsIsImmutable#

        unicodeFuncsIsImmutable                 ,

    -- ** unicodeFuncsMakeImmutable #method:unicodeFuncsMakeImmutable#

        unicodeFuncsMakeImmutable               ,

    -- ** unicodeFuncsSetCombiningClassFunc #method:unicodeFuncsSetCombiningClassFunc#

        unicodeFuncsSetCombiningClassFunc       ,

    -- ** unicodeFuncsSetComposeFunc #method:unicodeFuncsSetComposeFunc#

        unicodeFuncsSetComposeFunc              ,

    -- ** unicodeFuncsSetDecomposeCompatibilityFunc #method:unicodeFuncsSetDecomposeCompatibilityFunc#

        unicodeFuncsSetDecomposeCompatibilityFunc,

    -- ** unicodeFuncsSetDecomposeFunc #method:unicodeFuncsSetDecomposeFunc#

        unicodeFuncsSetDecomposeFunc            ,

    -- ** unicodeFuncsSetEastasianWidthFunc #method:unicodeFuncsSetEastasianWidthFunc#

        unicodeFuncsSetEastasianWidthFunc       ,

    -- ** unicodeFuncsSetGeneralCategoryFunc #method:unicodeFuncsSetGeneralCategoryFunc#

        unicodeFuncsSetGeneralCategoryFunc      ,

    -- ** unicodeFuncsSetMirroringFunc #method:unicodeFuncsSetMirroringFunc#

        unicodeFuncsSetMirroringFunc            ,

    -- ** unicodeFuncsSetScriptFunc #method:unicodeFuncsSetScriptFunc#

        unicodeFuncsSetScriptFunc               ,

    -- ** unicodeGeneralCategory #method:unicodeGeneralCategory#

        unicodeGeneralCategory                  ,

    -- ** unicodeMirroring #method:unicodeMirroring#

        unicodeMirroring                        ,

    -- ** unicodeScript #method:unicodeScript#

        unicodeScript                           ,

    -- ** variationFromString #method:variationFromString#

        variationFromString                     ,

    -- ** variationToString #method:variationToString#

        variationToString                       ,

    -- ** version #method:version#

        version                                 ,

    -- ** versionAtleast #method:versionAtleast#

        versionAtleast                          ,

    -- ** versionString #method:versionString#

        versionString                           ,

        ) 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.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.Text as T
    import qualified Data.ByteString.Char8 as B
    import qualified Data.Map as Map
    import qualified Foreign.Ptr as FP
    import qualified GHC.OverloadedLabels as OL

    import qualified GI.GLib.Enums as GLib.Enums
    import qualified GI.GLib.Structs.Bytes as GLib.Bytes
    import qualified GI.HarfBuzz.Callbacks as HarfBuzz.Callbacks
    import {-# SOURCE #-} qualified GI.HarfBuzz.Enums as HarfBuzz.Enums
    import {-# SOURCE #-} qualified GI.HarfBuzz.Flags as HarfBuzz.Flags
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.BlobT as HarfBuzz.BlobT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.BufferT as HarfBuzz.BufferT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.FaceT as HarfBuzz.FaceT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.FeatureT as HarfBuzz.FeatureT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.FontExtentsT as HarfBuzz.FontExtentsT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.FontFuncsT as HarfBuzz.FontFuncsT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.FontT as HarfBuzz.FontT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.GlyphExtentsT as HarfBuzz.GlyphExtentsT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.GlyphInfoT as HarfBuzz.GlyphInfoT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.GlyphPositionT as HarfBuzz.GlyphPositionT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.LanguageT as HarfBuzz.LanguageT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.MapT as HarfBuzz.MapT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.OtColorLayerT as HarfBuzz.OtColorLayerT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.OtMathGlyphPartT as HarfBuzz.OtMathGlyphPartT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.OtMathGlyphVariantT as HarfBuzz.OtMathGlyphVariantT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.OtNameEntryT as HarfBuzz.OtNameEntryT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.OtVarAxisInfoT as HarfBuzz.OtVarAxisInfoT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.OtVarAxisT as HarfBuzz.OtVarAxisT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.SegmentPropertiesT as HarfBuzz.SegmentPropertiesT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.SetT as HarfBuzz.SetT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.ShapePlanT as HarfBuzz.ShapePlanT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.UnicodeFuncsT as HarfBuzz.UnicodeFuncsT
    import {-# SOURCE #-} qualified GI.HarfBuzz.Structs.VariationT as HarfBuzz.VariationT

    -- function version_string
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_version_string" hb_version_string ::
        IO CString

    -- | Returns library version as a string with three components.
    --
    -- /Since: 0.9.2/
    versionString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m T.Text
        -- ^ __Returns:__ library version string.
    versionString :: m Text
    versionString  = IO Text -> m Text
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Text -> m Text) -> IO Text -> m Text
    forall a b. (a -> b) -> a -> b
    $ do
        CString
    result <- IO CString
    hb_version_string
        Text -> CString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "versionString" CString
    result
        Text
    result' <- HasCallStack => CString -> IO Text
    CString -> IO Text
    cstringToText CString
    result
        Text -> IO Text
    forall (m :: * -> *) a. Monad m => a -> m a
    return Text
    result'

    -- function version_atleast
    -- Args: [ Arg
    --           { argCName = "major"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "minor"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "micro"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_version_atleast" hb_version_atleast ::
        Word32 ->                               -- major : TBasicType TUInt
        Word32 ->                               -- minor : TBasicType TUInt
        Word32 ->                               -- micro : TBasicType TUInt
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.30/
    versionAtleast ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Word32
        -> Word32
        -> Word32
        -> m Int32
    versionAtleast :: Word32 -> Word32 -> Word32 -> m Int32
    versionAtleast major :: Word32
    major minor :: Word32
    minor micro :: Word32
    micro = IO Int32 -> m Int32
    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
        Int32
    result <- Word32 -> Word32 -> Word32 -> IO Int32
    hb_version_atleast Word32
    major Word32
    minor Word32
    micro
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function version
    -- Args: [ Arg
    --           { argCName = "major"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Library major version component."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "minor"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Library minor version component."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "micro"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Library micro version component."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_version" hb_version ::
        Ptr Word32 ->                           -- major : TBasicType TUInt
        Ptr Word32 ->                           -- minor : TBasicType TUInt
        Ptr Word32 ->                           -- micro : TBasicType TUInt
        IO ()

    -- | Returns library version as three integer components.
    --
    -- /Since: 0.9.2/
    version ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m ((Word32, Word32, Word32))
    version :: m (Word32, Word32, Word32)
    version  = IO (Word32, Word32, Word32) -> m (Word32, Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, Word32, Word32) -> m (Word32, Word32, Word32))
    -> IO (Word32, Word32, Word32) -> m (Word32, Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr Word32
    major <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    minor <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    micro <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32 -> Ptr Word32 -> Ptr Word32 -> IO ()
    hb_version Ptr Word32
    major Ptr Word32
    minor Ptr Word32
    micro
        Word32
    major' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    major
        Word32
    minor' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    minor
        Word32
    micro' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    micro
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    major
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    minor
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    micro
        (Word32, Word32, Word32) -> IO (Word32, Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    major', Word32
    minor', Word32
    micro')

    -- function variation_to_string
    -- Args: [ Arg
    --           { argCName = "variation"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "variation_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "buf"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_variation_to_string" hb_variation_to_string ::
        Ptr HarfBuzz.VariationT.VariationT ->   -- variation : TInterface (Name {namespace = "HarfBuzz", name = "variation_t"})
        CString ->                              -- buf : TBasicType TUTF8
        Word32 ->                               -- size : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    variationToString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.VariationT.VariationT
        -> T.Text
        -> Word32
        -> m ()
    variationToString :: VariationT -> Text -> Word32 -> m ()
    variationToString variation :: VariationT
    variation buf :: Text
    buf size :: Word32
    size = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr VariationT
    variation' <- VariationT -> IO (Ptr VariationT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr VariationT
    variation
        CString
    buf' <- Text -> IO CString
    textToCString Text
    buf
        Ptr VariationT -> CString -> Word32 -> IO ()
    hb_variation_to_string Ptr VariationT
    variation' CString
    buf' Word32
    size
        VariationT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr VariationT
    variation
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    buf'
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function variation_from_string
    -- Args: [ Arg
    --           { argCName = "str"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variation"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "variation_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_variation_from_string" hb_variation_from_string ::
        CString ->                              -- str : TBasicType TUTF8
        Int32 ->                                -- len : TBasicType TInt
        Ptr HarfBuzz.VariationT.VariationT ->   -- variation : TInterface (Name {namespace = "HarfBuzz", name = "variation_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    variationFromString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        T.Text
        -> Int32
        -> HarfBuzz.VariationT.VariationT
        -> m Int32
    variationFromString :: Text -> Int32 -> VariationT -> m Int32
    variationFromString str :: Text
    str len :: Int32
    len variation :: VariationT
    variation = IO Int32 -> m Int32
    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
        CString
    str' <- Text -> IO CString
    textToCString Text
    str
        Ptr VariationT
    variation' <- VariationT -> IO (Ptr VariationT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr VariationT
    variation
        Int32
    result <- CString -> Int32 -> Ptr VariationT -> IO Int32
    hb_variation_from_string CString
    str' Int32
    len Ptr VariationT
    variation'
        VariationT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr VariationT
    variation
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    str'
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function unicode_script
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "script_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_script" hb_unicode_script ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        Word32 ->                               -- unicode : TBasicType TUInt32
        IO CUInt

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -> Word32
        -> m HarfBuzz.Enums.ScriptT
    unicodeScript :: UnicodeFuncsT -> Word32 -> m ScriptT
    unicodeScript ufuncs :: UnicodeFuncsT
    ufuncs unicode :: Word32
    unicode = IO ScriptT -> m ScriptT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ScriptT -> m ScriptT) -> IO ScriptT -> m ScriptT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        CUInt
    result <- Ptr UnicodeFuncsT -> Word32 -> IO CUInt
    hb_unicode_script Ptr UnicodeFuncsT
    ufuncs' Word32
    unicode
        let result' :: ScriptT
    result' = (Int -> ScriptT
    forall a. Enum a => Int -> a
    toEnum (Int -> ScriptT) -> (CUInt -> Int) -> CUInt -> ScriptT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        ScriptT -> IO ScriptT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ScriptT
    result'

    -- function unicode_mirroring
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_mirroring" hb_unicode_mirroring ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        Word32 ->                               -- unicode : TBasicType TUInt32
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeMirroring ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -> Word32
        -> m Word32
    unicodeMirroring :: UnicodeFuncsT -> Word32 -> m Word32
    unicodeMirroring ufuncs :: UnicodeFuncsT
    ufuncs unicode :: Word32
    unicode = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        Word32
    result <- Ptr UnicodeFuncsT -> Word32 -> IO Word32
    hb_unicode_mirroring Ptr UnicodeFuncsT
    ufuncs' Word32
    unicode
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function unicode_general_category
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name
    --                    { namespace = "HarfBuzz" , name = "unicode_general_category_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_general_category" hb_unicode_general_category ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        Word32 ->                               -- unicode : TBasicType TUInt32
        IO CUInt

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeGeneralCategory ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -> Word32
        -> m HarfBuzz.Enums.UnicodeGeneralCategoryT
    unicodeGeneralCategory :: UnicodeFuncsT -> Word32 -> m UnicodeGeneralCategoryT
    unicodeGeneralCategory ufuncs :: UnicodeFuncsT
    ufuncs unicode :: Word32
    unicode = IO UnicodeGeneralCategoryT -> m UnicodeGeneralCategoryT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO UnicodeGeneralCategoryT -> m UnicodeGeneralCategoryT)
    -> IO UnicodeGeneralCategoryT -> m UnicodeGeneralCategoryT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        CUInt
    result <- Ptr UnicodeFuncsT -> Word32 -> IO CUInt
    hb_unicode_general_category Ptr UnicodeFuncsT
    ufuncs' Word32
    unicode
        let result' :: UnicodeGeneralCategoryT
    result' = (Int -> UnicodeGeneralCategoryT
    forall a. Enum a => Int -> a
    toEnum (Int -> UnicodeGeneralCategoryT)
    -> (CUInt -> Int) -> CUInt -> UnicodeGeneralCategoryT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        UnicodeGeneralCategoryT -> IO UnicodeGeneralCategoryT
    forall (m :: * -> *) a. Monad m => a -> m a
    return UnicodeGeneralCategoryT
    result'

    -- function unicode_funcs_set_script_func
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a Unicode function structure"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_script_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_set_script_func" hb_unicode_funcs_set_script_func ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_UnicodeScriptFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "unicode_script_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsSetScriptFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: a Unicode function structure
        -> HarfBuzz.Callbacks.UnicodeScriptFuncT
        -> m ()
    unicodeFuncsSetScriptFunc :: UnicodeFuncsT -> UnicodeScriptFuncT -> m ()
    unicodeFuncsSetScriptFunc ufuncs :: UnicodeFuncsT
    ufuncs func :: UnicodeScriptFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        FunPtr C_UnicodeScriptFuncT
    func' <- C_UnicodeScriptFuncT -> IO (FunPtr C_UnicodeScriptFuncT)
    HarfBuzz.Callbacks.mk_UnicodeScriptFuncT (Maybe (Ptr (FunPtr C_UnicodeScriptFuncT))
    -> UnicodeScriptFuncT_WithClosures -> C_UnicodeScriptFuncT
    HarfBuzz.Callbacks.wrap_UnicodeScriptFuncT Maybe (Ptr (FunPtr C_UnicodeScriptFuncT))
    forall a. Maybe a
    Nothing (UnicodeScriptFuncT -> UnicodeScriptFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_UnicodeScriptFuncT UnicodeScriptFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_UnicodeScriptFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_UnicodeScriptFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr UnicodeFuncsT
    -> FunPtr C_UnicodeScriptFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_unicode_funcs_set_script_func Ptr UnicodeFuncsT
    ufuncs' FunPtr C_UnicodeScriptFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function unicode_funcs_set_mirroring_func
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a Unicode function structure"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_mirroring_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_set_mirroring_func" hb_unicode_funcs_set_mirroring_func ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_UnicodeMirroringFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "unicode_mirroring_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsSetMirroringFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: a Unicode function structure
        -> HarfBuzz.Callbacks.UnicodeMirroringFuncT
        -> m ()
    unicodeFuncsSetMirroringFunc :: UnicodeFuncsT -> UnicodeMirroringFuncT -> m ()
    unicodeFuncsSetMirroringFunc ufuncs :: UnicodeFuncsT
    ufuncs func :: UnicodeMirroringFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        FunPtr C_UnicodeMirroringFuncT
    func' <- C_UnicodeMirroringFuncT -> IO (FunPtr C_UnicodeMirroringFuncT)
    HarfBuzz.Callbacks.mk_UnicodeMirroringFuncT (Maybe (Ptr (FunPtr C_UnicodeMirroringFuncT))
    -> UnicodeMirroringFuncT_WithClosures -> C_UnicodeMirroringFuncT
    HarfBuzz.Callbacks.wrap_UnicodeMirroringFuncT Maybe (Ptr (FunPtr C_UnicodeMirroringFuncT))
    forall a. Maybe a
    Nothing (UnicodeMirroringFuncT -> UnicodeMirroringFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_UnicodeMirroringFuncT UnicodeMirroringFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_UnicodeMirroringFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_UnicodeMirroringFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr UnicodeFuncsT
    -> FunPtr C_UnicodeMirroringFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_unicode_funcs_set_mirroring_func Ptr UnicodeFuncsT
    ufuncs' FunPtr C_UnicodeMirroringFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function unicode_funcs_set_general_category_func
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a Unicode function structure"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "unicode_general_category_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_set_general_category_func" hb_unicode_funcs_set_general_category_func ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_UnicodeGeneralCategoryFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "unicode_general_category_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsSetGeneralCategoryFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: a Unicode function structure
        -> HarfBuzz.Callbacks.UnicodeGeneralCategoryFuncT
        -> m ()
    unicodeFuncsSetGeneralCategoryFunc :: UnicodeFuncsT -> UnicodeGeneralCategoryFuncT -> m ()
    unicodeFuncsSetGeneralCategoryFunc ufuncs :: UnicodeFuncsT
    ufuncs func :: UnicodeGeneralCategoryFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        FunPtr C_UnicodeScriptFuncT
    func' <- C_UnicodeScriptFuncT -> IO (FunPtr C_UnicodeScriptFuncT)
    HarfBuzz.Callbacks.mk_UnicodeGeneralCategoryFuncT (Maybe (Ptr (FunPtr C_UnicodeScriptFuncT))
    -> UnicodeGeneralCategoryFuncT_WithClosures -> C_UnicodeScriptFuncT
    HarfBuzz.Callbacks.wrap_UnicodeGeneralCategoryFuncT Maybe (Ptr (FunPtr C_UnicodeScriptFuncT))
    forall a. Maybe a
    Nothing (UnicodeGeneralCategoryFuncT
    -> UnicodeGeneralCategoryFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_UnicodeGeneralCategoryFuncT UnicodeGeneralCategoryFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_UnicodeScriptFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_UnicodeScriptFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr UnicodeFuncsT
    -> FunPtr C_UnicodeScriptFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_unicode_funcs_set_general_category_func Ptr UnicodeFuncsT
    ufuncs' FunPtr C_UnicodeScriptFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function unicode_funcs_set_eastasian_width_func
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a Unicode function structure"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "unicode_eastasian_width_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_set_eastasian_width_func" hb_unicode_funcs_set_eastasian_width_func ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_UnicodeEastasianWidthFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "unicode_eastasian_width_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    {-# DEPRECATED unicodeFuncsSetEastasianWidthFunc ["(Since version 2.0.0)"] #-}
    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsSetEastasianWidthFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: a Unicode function structure
        -> HarfBuzz.Callbacks.UnicodeEastasianWidthFuncT
        -> m ()
    unicodeFuncsSetEastasianWidthFunc :: UnicodeFuncsT -> UnicodeMirroringFuncT -> m ()
    unicodeFuncsSetEastasianWidthFunc ufuncs :: UnicodeFuncsT
    ufuncs func :: UnicodeMirroringFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        FunPtr C_UnicodeMirroringFuncT
    func' <- C_UnicodeMirroringFuncT -> IO (FunPtr C_UnicodeMirroringFuncT)
    HarfBuzz.Callbacks.mk_UnicodeEastasianWidthFuncT (Maybe (Ptr (FunPtr C_UnicodeMirroringFuncT))
    -> UnicodeMirroringFuncT_WithClosures -> C_UnicodeMirroringFuncT
    HarfBuzz.Callbacks.wrap_UnicodeEastasianWidthFuncT Maybe (Ptr (FunPtr C_UnicodeMirroringFuncT))
    forall a. Maybe a
    Nothing (UnicodeMirroringFuncT -> UnicodeMirroringFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_UnicodeEastasianWidthFuncT UnicodeMirroringFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_UnicodeMirroringFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_UnicodeMirroringFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr UnicodeFuncsT
    -> FunPtr C_UnicodeMirroringFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_unicode_funcs_set_eastasian_width_func Ptr UnicodeFuncsT
    ufuncs' FunPtr C_UnicodeMirroringFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function unicode_funcs_set_decompose_func
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a Unicode function structure"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_decompose_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_set_decompose_func" hb_unicode_funcs_set_decompose_func ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_UnicodeDecomposeFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "unicode_decompose_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsSetDecomposeFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: a Unicode function structure
        -> HarfBuzz.Callbacks.UnicodeDecomposeFuncT
        -> m ()
    unicodeFuncsSetDecomposeFunc :: UnicodeFuncsT -> UnicodeDecomposeFuncT -> m ()
    unicodeFuncsSetDecomposeFunc ufuncs :: UnicodeFuncsT
    ufuncs func :: UnicodeDecomposeFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        FunPtr C_UnicodeDecomposeFuncT
    func' <- C_UnicodeDecomposeFuncT -> IO (FunPtr C_UnicodeDecomposeFuncT)
    HarfBuzz.Callbacks.mk_UnicodeDecomposeFuncT (Maybe (Ptr (FunPtr C_UnicodeDecomposeFuncT))
    -> UnicodeDecomposeFuncT_WithClosures -> C_UnicodeDecomposeFuncT
    HarfBuzz.Callbacks.wrap_UnicodeDecomposeFuncT Maybe (Ptr (FunPtr C_UnicodeDecomposeFuncT))
    forall a. Maybe a
    Nothing (UnicodeDecomposeFuncT -> UnicodeDecomposeFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_UnicodeDecomposeFuncT UnicodeDecomposeFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_UnicodeDecomposeFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_UnicodeDecomposeFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr UnicodeFuncsT
    -> FunPtr C_UnicodeDecomposeFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_unicode_funcs_set_decompose_func Ptr UnicodeFuncsT
    ufuncs' FunPtr C_UnicodeDecomposeFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function unicode_funcs_set_decompose_compatibility_func
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a Unicode function structure"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "unicode_decompose_compatibility_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_set_decompose_compatibility_func" hb_unicode_funcs_set_decompose_compatibility_func ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_UnicodeDecomposeCompatibilityFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "unicode_decompose_compatibility_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    {-# DEPRECATED unicodeFuncsSetDecomposeCompatibilityFunc ["(Since version 2.0.0)"] #-}
    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsSetDecomposeCompatibilityFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: a Unicode function structure
        -> HarfBuzz.Callbacks.UnicodeDecomposeCompatibilityFuncT
        -> m ()
    unicodeFuncsSetDecomposeCompatibilityFunc :: UnicodeFuncsT -> UnicodeDecomposeCompatibilityFuncT -> m ()
    unicodeFuncsSetDecomposeCompatibilityFunc ufuncs :: UnicodeFuncsT
    ufuncs func :: UnicodeDecomposeCompatibilityFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        FunPtr C_UnicodeDecomposeCompatibilityFuncT
    func' <- C_UnicodeDecomposeCompatibilityFuncT
    -> IO (FunPtr C_UnicodeDecomposeCompatibilityFuncT)
    HarfBuzz.Callbacks.mk_UnicodeDecomposeCompatibilityFuncT (Maybe (Ptr (FunPtr C_UnicodeDecomposeCompatibilityFuncT))
    -> UnicodeDecomposeCompatibilityFuncT_WithClosures
    -> C_UnicodeDecomposeCompatibilityFuncT
    HarfBuzz.Callbacks.wrap_UnicodeDecomposeCompatibilityFuncT Maybe (Ptr (FunPtr C_UnicodeDecomposeCompatibilityFuncT))
    forall a. Maybe a
    Nothing (UnicodeDecomposeCompatibilityFuncT
    -> UnicodeDecomposeCompatibilityFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_UnicodeDecomposeCompatibilityFuncT UnicodeDecomposeCompatibilityFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_UnicodeDecomposeCompatibilityFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_UnicodeDecomposeCompatibilityFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr UnicodeFuncsT
    -> FunPtr C_UnicodeDecomposeCompatibilityFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_unicode_funcs_set_decompose_compatibility_func Ptr UnicodeFuncsT
    ufuncs' FunPtr C_UnicodeDecomposeCompatibilityFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function unicode_funcs_set_compose_func
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a Unicode function structure"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_compose_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_set_compose_func" hb_unicode_funcs_set_compose_func ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_UnicodeComposeFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "unicode_compose_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsSetComposeFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: a Unicode function structure
        -> HarfBuzz.Callbacks.UnicodeComposeFuncT
        -> m ()
    unicodeFuncsSetComposeFunc :: UnicodeFuncsT -> UnicodeDecomposeFuncT -> m ()
    unicodeFuncsSetComposeFunc ufuncs :: UnicodeFuncsT
    ufuncs func :: UnicodeDecomposeFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        FunPtr C_UnicodeDecomposeFuncT
    func' <- C_UnicodeDecomposeFuncT -> IO (FunPtr C_UnicodeDecomposeFuncT)
    HarfBuzz.Callbacks.mk_UnicodeComposeFuncT (Maybe (Ptr (FunPtr C_UnicodeDecomposeFuncT))
    -> UnicodeDecomposeFuncT_WithClosures -> C_UnicodeDecomposeFuncT
    HarfBuzz.Callbacks.wrap_UnicodeComposeFuncT Maybe (Ptr (FunPtr C_UnicodeDecomposeFuncT))
    forall a. Maybe a
    Nothing (UnicodeDecomposeFuncT -> UnicodeDecomposeFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_UnicodeComposeFuncT UnicodeDecomposeFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_UnicodeDecomposeFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_UnicodeDecomposeFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr UnicodeFuncsT
    -> FunPtr C_UnicodeDecomposeFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_unicode_funcs_set_compose_func Ptr UnicodeFuncsT
    ufuncs' FunPtr C_UnicodeDecomposeFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function unicode_funcs_set_combining_class_func
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a Unicode function structure"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "unicode_combining_class_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_set_combining_class_func" hb_unicode_funcs_set_combining_class_func ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_UnicodeCombiningClassFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "unicode_combining_class_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsSetCombiningClassFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: a Unicode function structure
        -> HarfBuzz.Callbacks.UnicodeCombiningClassFuncT
        -> m ()
    unicodeFuncsSetCombiningClassFunc :: UnicodeFuncsT -> UnicodeCombiningClassFuncT -> m ()
    unicodeFuncsSetCombiningClassFunc ufuncs :: UnicodeFuncsT
    ufuncs func :: UnicodeCombiningClassFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        FunPtr C_UnicodeScriptFuncT
    func' <- C_UnicodeScriptFuncT -> IO (FunPtr C_UnicodeScriptFuncT)
    HarfBuzz.Callbacks.mk_UnicodeCombiningClassFuncT (Maybe (Ptr (FunPtr C_UnicodeScriptFuncT))
    -> UnicodeCombiningClassFuncT_WithClosures -> C_UnicodeScriptFuncT
    HarfBuzz.Callbacks.wrap_UnicodeCombiningClassFuncT Maybe (Ptr (FunPtr C_UnicodeScriptFuncT))
    forall a. Maybe a
    Nothing (UnicodeCombiningClassFuncT
    -> UnicodeCombiningClassFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_UnicodeCombiningClassFuncT UnicodeCombiningClassFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_UnicodeScriptFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_UnicodeScriptFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr UnicodeFuncsT
    -> FunPtr C_UnicodeScriptFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_unicode_funcs_set_combining_class_func Ptr UnicodeFuncsT
    ufuncs' FunPtr C_UnicodeScriptFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function unicode_funcs_make_immutable
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Unicode functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_make_immutable" hb_unicode_funcs_make_immutable ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsMakeImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: Unicode functions.
        -> m ()
    unicodeFuncsMakeImmutable :: UnicodeFuncsT -> m ()
    unicodeFuncsMakeImmutable ufuncs :: UnicodeFuncsT
    ufuncs = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        Ptr UnicodeFuncsT -> IO ()
    hb_unicode_funcs_make_immutable Ptr UnicodeFuncsT
    ufuncs'
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function unicode_funcs_is_immutable
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Unicode functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_is_immutable" hb_unicode_funcs_is_immutable ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsIsImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: Unicode functions.
        -> m Int32
    unicodeFuncsIsImmutable :: UnicodeFuncsT -> m Int32
    unicodeFuncsIsImmutable ufuncs :: UnicodeFuncsT
    ufuncs = IO Int32 -> m Int32
    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 UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        Int32
    result <- Ptr UnicodeFuncsT -> IO Int32
    hb_unicode_funcs_is_immutable Ptr UnicodeFuncsT
    ufuncs'
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function unicode_funcs_get_parent
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Unicode functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_get_parent" hb_unicode_funcs_get_parent ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        IO (Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsGetParent ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: Unicode functions.
        -> m HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
    unicodeFuncsGetParent :: UnicodeFuncsT -> m UnicodeFuncsT
    unicodeFuncsGetParent ufuncs :: UnicodeFuncsT
    ufuncs = IO UnicodeFuncsT -> m UnicodeFuncsT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO UnicodeFuncsT -> m UnicodeFuncsT)
    -> IO UnicodeFuncsT -> m UnicodeFuncsT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        Ptr UnicodeFuncsT
    result <- Ptr UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    hb_unicode_funcs_get_parent Ptr UnicodeFuncsT
    ufuncs'
        Text -> Ptr UnicodeFuncsT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "unicodeFuncsGetParent" Ptr UnicodeFuncsT
    result
        UnicodeFuncsT
    result' <- ((ManagedPtr UnicodeFuncsT -> UnicodeFuncsT)
    -> Ptr UnicodeFuncsT -> IO UnicodeFuncsT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr UnicodeFuncsT -> UnicodeFuncsT
    HarfBuzz.UnicodeFuncsT.UnicodeFuncsT) Ptr UnicodeFuncsT
    result
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        UnicodeFuncsT -> IO UnicodeFuncsT
    forall (m :: * -> *) a. Monad m => a -> m a
    return UnicodeFuncsT
    result'

    -- function unicode_funcs_get_empty
    -- Args: []
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_get_empty" hb_unicode_funcs_get_empty ::
        IO (Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsGetEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
    unicodeFuncsGetEmpty :: m UnicodeFuncsT
    unicodeFuncsGetEmpty  = IO UnicodeFuncsT -> m UnicodeFuncsT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO UnicodeFuncsT -> m UnicodeFuncsT)
    -> IO UnicodeFuncsT -> m UnicodeFuncsT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    result <- IO (Ptr UnicodeFuncsT)
    hb_unicode_funcs_get_empty
        Text -> Ptr UnicodeFuncsT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "unicodeFuncsGetEmpty" Ptr UnicodeFuncsT
    result
        UnicodeFuncsT
    result' <- ((ManagedPtr UnicodeFuncsT -> UnicodeFuncsT)
    -> Ptr UnicodeFuncsT -> IO UnicodeFuncsT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr UnicodeFuncsT -> UnicodeFuncsT
    HarfBuzz.UnicodeFuncsT.UnicodeFuncsT) Ptr UnicodeFuncsT
    result
        UnicodeFuncsT -> IO UnicodeFuncsT
    forall (m :: * -> *) a. Monad m => a -> m a
    return UnicodeFuncsT
    result'

    -- function unicode_funcs_get_default
    -- Args: []
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_get_default" hb_unicode_funcs_get_default ::
        IO (Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT)

    -- | /No description available in the introspection data./
    unicodeFuncsGetDefault ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
    unicodeFuncsGetDefault :: m UnicodeFuncsT
    unicodeFuncsGetDefault  = IO UnicodeFuncsT -> m UnicodeFuncsT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO UnicodeFuncsT -> m UnicodeFuncsT)
    -> IO UnicodeFuncsT -> m UnicodeFuncsT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    result <- IO (Ptr UnicodeFuncsT)
    hb_unicode_funcs_get_default
        Text -> Ptr UnicodeFuncsT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "unicodeFuncsGetDefault" Ptr UnicodeFuncsT
    result
        UnicodeFuncsT
    result' <- ((ManagedPtr UnicodeFuncsT -> UnicodeFuncsT)
    -> Ptr UnicodeFuncsT -> IO UnicodeFuncsT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr UnicodeFuncsT -> UnicodeFuncsT
    HarfBuzz.UnicodeFuncsT.UnicodeFuncsT) Ptr UnicodeFuncsT
    result
        UnicodeFuncsT -> IO UnicodeFuncsT
    forall (m :: * -> *) a. Monad m => a -> m a
    return UnicodeFuncsT
    result'

    -- function unicode_funcs_create
    -- Args: [ Arg
    --           { argCName = "parent"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_funcs_create" hb_unicode_funcs_create ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- parent : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        IO (Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeFuncsCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Maybe (HarfBuzz.UnicodeFuncsT.UnicodeFuncsT)
        -> m HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
    unicodeFuncsCreate :: Maybe UnicodeFuncsT -> m UnicodeFuncsT
    unicodeFuncsCreate parent :: Maybe UnicodeFuncsT
    parent = IO UnicodeFuncsT -> m UnicodeFuncsT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO UnicodeFuncsT -> m UnicodeFuncsT)
    -> IO UnicodeFuncsT -> m UnicodeFuncsT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    maybeParent <- case Maybe UnicodeFuncsT
    parent of
            Nothing -> Ptr UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr UnicodeFuncsT
    forall a. Ptr a
    nullPtr
            Just jParent :: UnicodeFuncsT
    jParent -> do
                Ptr UnicodeFuncsT
    jParent' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    jParent
                Ptr UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr UnicodeFuncsT
    jParent'
        Ptr UnicodeFuncsT
    result <- Ptr UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    hb_unicode_funcs_create Ptr UnicodeFuncsT
    maybeParent
        Text -> Ptr UnicodeFuncsT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "unicodeFuncsCreate" Ptr UnicodeFuncsT
    result
        UnicodeFuncsT
    result' <- ((ManagedPtr UnicodeFuncsT -> UnicodeFuncsT)
    -> Ptr UnicodeFuncsT -> IO UnicodeFuncsT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr UnicodeFuncsT -> UnicodeFuncsT
    HarfBuzz.UnicodeFuncsT.UnicodeFuncsT) Ptr UnicodeFuncsT
    result
        Maybe UnicodeFuncsT -> (UnicodeFuncsT -> IO ()) -> IO ()
    forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
    whenJust Maybe UnicodeFuncsT
    parent UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr
        UnicodeFuncsT -> IO UnicodeFuncsT
    forall (m :: * -> *) a. Monad m => a -> m a
    return UnicodeFuncsT
    result'

    -- function unicode_eastasian_width
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_eastasian_width" hb_unicode_eastasian_width ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        Word32 ->                               -- unicode : TBasicType TUInt32
        IO Word32

    {-# DEPRECATED unicodeEastasianWidth ["(Since version 2.0.0)"] #-}
    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeEastasianWidth ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -> Word32
        -> m Word32
    unicodeEastasianWidth :: UnicodeFuncsT -> Word32 -> m Word32
    unicodeEastasianWidth ufuncs :: UnicodeFuncsT
    ufuncs unicode :: Word32
    unicode = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        Word32
    result <- Ptr UnicodeFuncsT -> Word32 -> IO Word32
    hb_unicode_eastasian_width Ptr UnicodeFuncsT
    ufuncs' Word32
    unicode
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function unicode_decompose_compatibility
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Unicode functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "u"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "decomposed"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_decompose_compatibility" hb_unicode_decompose_compatibility ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        Word32 ->                               -- u : TBasicType TUInt32
        Ptr Word32 ->                           -- decomposed : TBasicType TUInt32
        IO Word32

    {-# DEPRECATED unicodeDecomposeCompatibility ["(Since version 2.0.0)"] #-}
    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeDecomposeCompatibility ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: Unicode functions.
        -> Word32
        -> m ((Word32, Word32))
    unicodeDecomposeCompatibility :: UnicodeFuncsT -> Word32 -> m (Word32, Word32)
    unicodeDecomposeCompatibility ufuncs :: UnicodeFuncsT
    ufuncs u :: Word32
    u = IO (Word32, Word32) -> m (Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, Word32) -> m (Word32, Word32))
    -> IO (Word32, Word32) -> m (Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        Ptr Word32
    decomposed <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Word32
    result <- Ptr UnicodeFuncsT -> Word32 -> Ptr Word32 -> IO Word32
    hb_unicode_decompose_compatibility Ptr UnicodeFuncsT
    ufuncs' Word32
    u Ptr Word32
    decomposed
        Word32
    decomposed' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    decomposed
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    decomposed
        (Word32, Word32) -> IO (Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, Word32
    decomposed')

    -- function unicode_decompose
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Unicode functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "ab"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "a"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "b"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_decompose" hb_unicode_decompose ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        Word32 ->                               -- ab : TBasicType TUInt32
        Ptr Word32 ->                           -- a : TBasicType TUInt32
        Ptr Word32 ->                           -- b : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeDecompose ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: Unicode functions.
        -> Word32
        -> m ((Int32, Word32, Word32))
    unicodeDecompose :: UnicodeFuncsT -> Word32 -> m (Int32, Word32, Word32)
    unicodeDecompose ufuncs :: UnicodeFuncsT
    ufuncs ab :: Word32
    ab = IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32))
    -> IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        Ptr Word32
    a <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    b <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr UnicodeFuncsT -> Word32 -> Ptr Word32 -> Ptr Word32 -> IO Int32
    hb_unicode_decompose Ptr UnicodeFuncsT
    ufuncs' Word32
    ab Ptr Word32
    a Ptr Word32
    b
        Word32
    a' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    a
        Word32
    b' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    b
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    a
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    b
        (Int32, Word32, Word32) -> IO (Int32, Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    a', Word32
    b')

    -- function unicode_compose
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Unicode functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "a"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "b"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "ab"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_compose" hb_unicode_compose ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        Word32 ->                               -- a : TBasicType TUInt32
        Word32 ->                               -- b : TBasicType TUInt32
        Ptr Word32 ->                           -- ab : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeCompose ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ /@ufuncs@/: Unicode functions.
        -> Word32
        -> Word32
        -> m ((Int32, Word32))
    unicodeCompose :: UnicodeFuncsT -> Word32 -> Word32 -> m (Int32, Word32)
    unicodeCompose ufuncs :: UnicodeFuncsT
    ufuncs a :: Word32
    a b :: Word32
    b = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        Ptr Word32
    ab <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr UnicodeFuncsT -> Word32 -> Word32 -> Ptr Word32 -> IO Int32
    hb_unicode_compose Ptr UnicodeFuncsT
    ufuncs' Word32
    a Word32
    b Ptr Word32
    ab
        Word32
    ab' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    ab
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    ab
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    ab')

    -- function unicode_combining_class
    -- Args: [ Arg
    --           { argCName = "ufuncs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name
    --                    { namespace = "HarfBuzz" , name = "unicode_combining_class_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_unicode_combining_class" hb_unicode_combining_class ::
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- ufuncs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        Word32 ->                               -- unicode : TBasicType TUInt32
        IO CUInt

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    unicodeCombiningClass ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -> Word32
        -> m HarfBuzz.Enums.UnicodeCombiningClassT
    unicodeCombiningClass :: UnicodeFuncsT -> Word32 -> m UnicodeCombiningClassT
    unicodeCombiningClass ufuncs :: UnicodeFuncsT
    ufuncs unicode :: Word32
    unicode = IO UnicodeCombiningClassT -> m UnicodeCombiningClassT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO UnicodeCombiningClassT -> m UnicodeCombiningClassT)
    -> IO UnicodeCombiningClassT -> m UnicodeCombiningClassT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    ufuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    ufuncs
        CUInt
    result <- Ptr UnicodeFuncsT -> Word32 -> IO CUInt
    hb_unicode_combining_class Ptr UnicodeFuncsT
    ufuncs' Word32
    unicode
        let result' :: UnicodeCombiningClassT
    result' = (Int -> UnicodeCombiningClassT
    forall a. Enum a => Int -> a
    toEnum (Int -> UnicodeCombiningClassT)
    -> (CUInt -> Int) -> CUInt -> UnicodeCombiningClassT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    ufuncs
        UnicodeCombiningClassT -> IO UnicodeCombiningClassT
    forall (m :: * -> *) a. Monad m => a -> m a
    return UnicodeCombiningClassT
    result'

    -- function tag_to_string
    -- XXX Could not generate function tag_to_string

    -- Not implemented: Don't know how to allocate "buf" of type TCArray False 4 (-1) (TBasicType TUInt8)

    -- function tag_from_string
    -- Args: [ Arg
    --           { argCName = "str"
    --           , argType = TCArray False (-1) 1 (TBasicType TUInt8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "len"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_tag_from_string" hb_tag_from_string ::
        Ptr Word8 ->                            -- str : TCArray False (-1) 1 (TBasicType TUInt8)
        Int32 ->                                -- len : TBasicType TInt
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    tagFromString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        ByteString
        -> m Word32
    tagFromString :: ByteString -> m Word32
    tagFromString str :: ByteString
    str = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        let len :: Int32
    len = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ ByteString -> Int
    B.length ByteString
    str
        Ptr Word8
    str' <- ByteString -> IO (Ptr Word8)
    packByteString ByteString
    str
        Word32
    result <- Ptr Word8 -> Int32 -> IO Word32
    hb_tag_from_string Ptr Word8
    str' Int32
    len
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    str'
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function shape_plan_get_shaper
    -- Args: [ Arg
    --           { argCName = "shape_plan"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "shape_plan_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a shape plan." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape_plan_get_shaper" hb_shape_plan_get_shaper ::
        Ptr HarfBuzz.ShapePlanT.ShapePlanT ->   -- shape_plan : TInterface (Name {namespace = "HarfBuzz", name = "shape_plan_t"})
        IO CString

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    shapePlanGetShaper ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.ShapePlanT.ShapePlanT
        -- ^ /@shapePlan@/: a shape plan.
        -> m T.Text
    shapePlanGetShaper :: ShapePlanT -> m Text
    shapePlanGetShaper shapePlan :: ShapePlanT
    shapePlan = IO Text -> m Text
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Text -> m Text) -> IO Text -> m Text
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr ShapePlanT
    shapePlan' <- ShapePlanT -> IO (Ptr ShapePlanT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr ShapePlanT
    shapePlan
        CString
    result <- Ptr ShapePlanT -> IO CString
    hb_shape_plan_get_shaper Ptr ShapePlanT
    shapePlan'
        Text -> CString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "shapePlanGetShaper" CString
    result
        Text
    result' <- HasCallStack => CString -> IO Text
    CString -> IO Text
    cstringToText CString
    result
        ShapePlanT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr ShapePlanT
    shapePlan
        Text -> IO Text
    forall (m :: * -> *) a. Monad m => a -> m a
    return Text
    result'

    -- function shape_plan_get_empty
    -- Args: []
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "shape_plan_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape_plan_get_empty" hb_shape_plan_get_empty ::
        IO (Ptr HarfBuzz.ShapePlanT.ShapePlanT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    shapePlanGetEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.ShapePlanT.ShapePlanT
    shapePlanGetEmpty :: m ShapePlanT
    shapePlanGetEmpty  = IO ShapePlanT -> m ShapePlanT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ShapePlanT -> m ShapePlanT) -> IO ShapePlanT -> m ShapePlanT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr ShapePlanT
    result <- IO (Ptr ShapePlanT)
    hb_shape_plan_get_empty
        Text -> Ptr ShapePlanT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "shapePlanGetEmpty" Ptr ShapePlanT
    result
        ShapePlanT
    result' <- ((ManagedPtr ShapePlanT -> ShapePlanT)
    -> Ptr ShapePlanT -> IO ShapePlanT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr ShapePlanT -> ShapePlanT
    HarfBuzz.ShapePlanT.ShapePlanT) Ptr ShapePlanT
    result
        ShapePlanT -> IO ShapePlanT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ShapePlanT
    result'

    -- function shape_plan_execute
    -- Args: [ Arg
    --           { argCName = "shape_plan"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "shape_plan_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a shape plan." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a buffer." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "features"
    --           , argType =
    --               TCArray
    --                 False
    --                 (-1)
    --                 4
    --                 (TInterface Name { namespace = "HarfBuzz" , name = "feature_t" })
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_features"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "num_features"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape_plan_execute" hb_shape_plan_execute ::
        Ptr HarfBuzz.ShapePlanT.ShapePlanT ->   -- shape_plan : TInterface (Name {namespace = "HarfBuzz", name = "shape_plan_t"})
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- features : TCArray False (-1) 4 (TInterface (Name {namespace = "HarfBuzz", name = "feature_t"}))
        Word32 ->                               -- num_features : TBasicType TUInt
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    shapePlanExecute ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.ShapePlanT.ShapePlanT
        -- ^ /@shapePlan@/: a shape plan.
        -> HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: a buffer.
        -> [HarfBuzz.FeatureT.FeatureT]
        -> m Int32
    shapePlanExecute :: ShapePlanT -> FontT -> BufferT -> [FeatureT] -> m Int32
    shapePlanExecute shapePlan :: ShapePlanT
    shapePlan font :: FontT
    font buffer :: BufferT
    buffer features :: [FeatureT]
    features = IO Int32 -> m Int32
    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
        let numFeatures :: Word32
    numFeatures = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [FeatureT] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [FeatureT]
    features
        Ptr ShapePlanT
    shapePlan' <- ShapePlanT -> IO (Ptr ShapePlanT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr ShapePlanT
    shapePlan
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        [Ptr FeatureT]
    features' <- (FeatureT -> IO (Ptr FeatureT)) -> [FeatureT] -> IO [Ptr FeatureT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM FeatureT -> IO (Ptr FeatureT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr [FeatureT]
    features
        Ptr FeatureT
    features'' <- Int -> [Ptr FeatureT] -> IO (Ptr FeatureT)
    forall a. Int -> [Ptr a] -> IO (Ptr a)
    packBlockArray 16 [Ptr FeatureT]
    features'
        Int32
    result <- Ptr ShapePlanT
    -> Ptr FontT -> Ptr BufferT -> Ptr FeatureT -> Word32 -> IO Int32
    hb_shape_plan_execute Ptr ShapePlanT
    shapePlan' Ptr FontT
    font' Ptr BufferT
    buffer' Ptr FeatureT
    features'' Word32
    numFeatures
        ShapePlanT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr ShapePlanT
    shapePlan
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        (FeatureT -> IO ()) -> [FeatureT] -> IO ()
    forall (t :: * -> *) (m :: * -> *) a b.
    (Foldable t, Monad m) =>
    (a -> m b) -> t a -> m ()
    mapM_ FeatureT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr [FeatureT]
    features
        Ptr FeatureT -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr FeatureT
    features''
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function shape_plan_create_cached2
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "props"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "segment_properties_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_features"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "feature_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_user_features"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_coords"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "shaper_list"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "shape_plan_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape_plan_create_cached2" hb_shape_plan_create_cached2 ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT -> -- props : TInterface (Name {namespace = "HarfBuzz", name = "segment_properties_t"})
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- user_features : TInterface (Name {namespace = "HarfBuzz", name = "feature_t"})
        Word32 ->                               -- num_user_features : TBasicType TUInt
        Int32 ->                                -- coords : TBasicType TInt
        Word32 ->                               -- num_coords : TBasicType TUInt
        CString ->                              -- shaper_list : TBasicType TUTF8
        IO (Ptr HarfBuzz.ShapePlanT.ShapePlanT)

    -- | /No description available in the introspection data./
    shapePlanCreateCached2 ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> HarfBuzz.SegmentPropertiesT.SegmentPropertiesT
        -> HarfBuzz.FeatureT.FeatureT
        -> Word32
        -> Int32
        -> Word32
        -> T.Text
        -> m HarfBuzz.ShapePlanT.ShapePlanT
    shapePlanCreateCached2 :: FaceT
    -> SegmentPropertiesT
    -> FeatureT
    -> Word32
    -> Int32
    -> Word32
    -> Text
    -> m ShapePlanT
    shapePlanCreateCached2 face :: FaceT
    face props :: SegmentPropertiesT
    props userFeatures :: FeatureT
    userFeatures numUserFeatures :: Word32
    numUserFeatures coords :: Int32
    coords numCoords :: Word32
    numCoords shaperList :: Text
    shaperList = IO ShapePlanT -> m ShapePlanT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ShapePlanT -> m ShapePlanT) -> IO ShapePlanT -> m ShapePlanT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr SegmentPropertiesT
    props' <- SegmentPropertiesT -> IO (Ptr SegmentPropertiesT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SegmentPropertiesT
    props
        Ptr FeatureT
    userFeatures' <- FeatureT -> IO (Ptr FeatureT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FeatureT
    userFeatures
        CString
    shaperList' <- Text -> IO CString
    textToCString Text
    shaperList
        Ptr ShapePlanT
    result <- Ptr FaceT
    -> Ptr SegmentPropertiesT
    -> Ptr FeatureT
    -> Word32
    -> Int32
    -> Word32
    -> CString
    -> IO (Ptr ShapePlanT)
    hb_shape_plan_create_cached2 Ptr FaceT
    face' Ptr SegmentPropertiesT
    props' Ptr FeatureT
    userFeatures' Word32
    numUserFeatures Int32
    coords Word32
    numCoords CString
    shaperList'
        Text -> Ptr ShapePlanT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "shapePlanCreateCached2" Ptr ShapePlanT
    result
        ShapePlanT
    result' <- ((ManagedPtr ShapePlanT -> ShapePlanT)
    -> Ptr ShapePlanT -> IO ShapePlanT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr ShapePlanT -> ShapePlanT
    HarfBuzz.ShapePlanT.ShapePlanT) Ptr ShapePlanT
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        SegmentPropertiesT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SegmentPropertiesT
    props
        FeatureT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FeatureT
    userFeatures
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    shaperList'
        ShapePlanT -> IO ShapePlanT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ShapePlanT
    result'

    -- function shape_plan_create_cached
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "props"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "segment_properties_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_features"
    --           , argType =
    --               TCArray
    --                 False
    --                 (-1)
    --                 3
    --                 (TInterface Name { namespace = "HarfBuzz" , name = "feature_t" })
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_user_features"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "shaper_list"
    --           , argType = TCArray True (-1) (-1) (TBasicType TUTF8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "num_user_features"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "shape_plan_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape_plan_create_cached" hb_shape_plan_create_cached ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT -> -- props : TInterface (Name {namespace = "HarfBuzz", name = "segment_properties_t"})
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- user_features : TCArray False (-1) 3 (TInterface (Name {namespace = "HarfBuzz", name = "feature_t"}))
        Word32 ->                               -- num_user_features : TBasicType TUInt
        Ptr CString ->                          -- shaper_list : TCArray True (-1) (-1) (TBasicType TUTF8)
        IO (Ptr HarfBuzz.ShapePlanT.ShapePlanT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    shapePlanCreateCached ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> HarfBuzz.SegmentPropertiesT.SegmentPropertiesT
        -> [HarfBuzz.FeatureT.FeatureT]
        -> [T.Text]
        -> m HarfBuzz.ShapePlanT.ShapePlanT
    shapePlanCreateCached :: FaceT -> SegmentPropertiesT -> [FeatureT] -> [Text] -> m ShapePlanT
    shapePlanCreateCached face :: FaceT
    face props :: SegmentPropertiesT
    props userFeatures :: [FeatureT]
    userFeatures shaperList :: [Text]
    shaperList = IO ShapePlanT -> m ShapePlanT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ShapePlanT -> m ShapePlanT) -> IO ShapePlanT -> m ShapePlanT
    forall a b. (a -> b) -> a -> b
    $ do
        let numUserFeatures :: Word32
    numUserFeatures = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [FeatureT] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [FeatureT]
    userFeatures
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr SegmentPropertiesT
    props' <- SegmentPropertiesT -> IO (Ptr SegmentPropertiesT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SegmentPropertiesT
    props
        [Ptr FeatureT]
    userFeatures' <- (FeatureT -> IO (Ptr FeatureT)) -> [FeatureT] -> IO [Ptr FeatureT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM FeatureT -> IO (Ptr FeatureT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr [FeatureT]
    userFeatures
        Ptr FeatureT
    userFeatures'' <- Int -> [Ptr FeatureT] -> IO (Ptr FeatureT)
    forall a. Int -> [Ptr a] -> IO (Ptr a)
    packBlockArray 16 [Ptr FeatureT]
    userFeatures'
        Ptr CString
    shaperList' <- [Text] -> IO (Ptr CString)
    packZeroTerminatedUTF8CArray [Text]
    shaperList
        Ptr ShapePlanT
    result <- Ptr FaceT
    -> Ptr SegmentPropertiesT
    -> Ptr FeatureT
    -> Word32
    -> Ptr CString
    -> IO (Ptr ShapePlanT)
    hb_shape_plan_create_cached Ptr FaceT
    face' Ptr SegmentPropertiesT
    props' Ptr FeatureT
    userFeatures'' Word32
    numUserFeatures Ptr CString
    shaperList'
        Text -> Ptr ShapePlanT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "shapePlanCreateCached" Ptr ShapePlanT
    result
        ShapePlanT
    result' <- ((ManagedPtr ShapePlanT -> ShapePlanT)
    -> Ptr ShapePlanT -> IO ShapePlanT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr ShapePlanT -> ShapePlanT
    HarfBuzz.ShapePlanT.ShapePlanT) Ptr ShapePlanT
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        SegmentPropertiesT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SegmentPropertiesT
    props
        (FeatureT -> IO ()) -> [FeatureT] -> IO ()
    forall (t :: * -> *) (m :: * -> *) a b.
    (Foldable t, Monad m) =>
    (a -> m b) -> t a -> m ()
    mapM_ FeatureT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr [FeatureT]
    userFeatures
        Ptr FeatureT -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr FeatureT
    userFeatures''
        (CString -> IO ()) -> Ptr CString -> IO ()
    forall a b. (Ptr a -> IO b) -> Ptr (Ptr a) -> IO ()
    mapZeroTerminatedCArray CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    shaperList'
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    shaperList'
        ShapePlanT -> IO ShapePlanT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ShapePlanT
    result'

    -- function shape_plan_create2
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "props"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "segment_properties_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_features"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "feature_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_user_features"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_coords"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "shaper_list"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "shape_plan_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape_plan_create2" hb_shape_plan_create2 ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT -> -- props : TInterface (Name {namespace = "HarfBuzz", name = "segment_properties_t"})
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- user_features : TInterface (Name {namespace = "HarfBuzz", name = "feature_t"})
        Word32 ->                               -- num_user_features : TBasicType TUInt
        Int32 ->                                -- coords : TBasicType TInt
        Word32 ->                               -- num_coords : TBasicType TUInt
        CString ->                              -- shaper_list : TBasicType TUTF8
        IO (Ptr HarfBuzz.ShapePlanT.ShapePlanT)

    -- | /No description available in the introspection data./
    shapePlanCreate2 ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> HarfBuzz.SegmentPropertiesT.SegmentPropertiesT
        -> HarfBuzz.FeatureT.FeatureT
        -> Word32
        -> Int32
        -> Word32
        -> T.Text
        -> m HarfBuzz.ShapePlanT.ShapePlanT
    shapePlanCreate2 :: FaceT
    -> SegmentPropertiesT
    -> FeatureT
    -> Word32
    -> Int32
    -> Word32
    -> Text
    -> m ShapePlanT
    shapePlanCreate2 face :: FaceT
    face props :: SegmentPropertiesT
    props userFeatures :: FeatureT
    userFeatures numUserFeatures :: Word32
    numUserFeatures coords :: Int32
    coords numCoords :: Word32
    numCoords shaperList :: Text
    shaperList = IO ShapePlanT -> m ShapePlanT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ShapePlanT -> m ShapePlanT) -> IO ShapePlanT -> m ShapePlanT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr SegmentPropertiesT
    props' <- SegmentPropertiesT -> IO (Ptr SegmentPropertiesT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SegmentPropertiesT
    props
        Ptr FeatureT
    userFeatures' <- FeatureT -> IO (Ptr FeatureT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FeatureT
    userFeatures
        CString
    shaperList' <- Text -> IO CString
    textToCString Text
    shaperList
        Ptr ShapePlanT
    result <- Ptr FaceT
    -> Ptr SegmentPropertiesT
    -> Ptr FeatureT
    -> Word32
    -> Int32
    -> Word32
    -> CString
    -> IO (Ptr ShapePlanT)
    hb_shape_plan_create2 Ptr FaceT
    face' Ptr SegmentPropertiesT
    props' Ptr FeatureT
    userFeatures' Word32
    numUserFeatures Int32
    coords Word32
    numCoords CString
    shaperList'
        Text -> Ptr ShapePlanT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "shapePlanCreate2" Ptr ShapePlanT
    result
        ShapePlanT
    result' <- ((ManagedPtr ShapePlanT -> ShapePlanT)
    -> Ptr ShapePlanT -> IO ShapePlanT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr ShapePlanT -> ShapePlanT
    HarfBuzz.ShapePlanT.ShapePlanT) Ptr ShapePlanT
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        SegmentPropertiesT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SegmentPropertiesT
    props
        FeatureT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FeatureT
    userFeatures
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    shaperList'
        ShapePlanT -> IO ShapePlanT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ShapePlanT
    result'

    -- function shape_plan_create
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "props"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "segment_properties_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_features"
    --           , argType =
    --               TCArray
    --                 False
    --                 (-1)
    --                 3
    --                 (TInterface Name { namespace = "HarfBuzz" , name = "feature_t" })
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_user_features"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "shaper_list"
    --           , argType = TCArray True (-1) (-1) (TBasicType TUTF8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "num_user_features"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "shape_plan_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape_plan_create" hb_shape_plan_create ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT -> -- props : TInterface (Name {namespace = "HarfBuzz", name = "segment_properties_t"})
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- user_features : TCArray False (-1) 3 (TInterface (Name {namespace = "HarfBuzz", name = "feature_t"}))
        Word32 ->                               -- num_user_features : TBasicType TUInt
        Ptr CString ->                          -- shaper_list : TCArray True (-1) (-1) (TBasicType TUTF8)
        IO (Ptr HarfBuzz.ShapePlanT.ShapePlanT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    shapePlanCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> HarfBuzz.SegmentPropertiesT.SegmentPropertiesT
        -> [HarfBuzz.FeatureT.FeatureT]
        -> [T.Text]
        -> m HarfBuzz.ShapePlanT.ShapePlanT
    shapePlanCreate :: FaceT -> SegmentPropertiesT -> [FeatureT] -> [Text] -> m ShapePlanT
    shapePlanCreate face :: FaceT
    face props :: SegmentPropertiesT
    props userFeatures :: [FeatureT]
    userFeatures shaperList :: [Text]
    shaperList = IO ShapePlanT -> m ShapePlanT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ShapePlanT -> m ShapePlanT) -> IO ShapePlanT -> m ShapePlanT
    forall a b. (a -> b) -> a -> b
    $ do
        let numUserFeatures :: Word32
    numUserFeatures = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [FeatureT] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [FeatureT]
    userFeatures
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr SegmentPropertiesT
    props' <- SegmentPropertiesT -> IO (Ptr SegmentPropertiesT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SegmentPropertiesT
    props
        [Ptr FeatureT]
    userFeatures' <- (FeatureT -> IO (Ptr FeatureT)) -> [FeatureT] -> IO [Ptr FeatureT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM FeatureT -> IO (Ptr FeatureT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr [FeatureT]
    userFeatures
        Ptr FeatureT
    userFeatures'' <- Int -> [Ptr FeatureT] -> IO (Ptr FeatureT)
    forall a. Int -> [Ptr a] -> IO (Ptr a)
    packBlockArray 16 [Ptr FeatureT]
    userFeatures'
        Ptr CString
    shaperList' <- [Text] -> IO (Ptr CString)
    packZeroTerminatedUTF8CArray [Text]
    shaperList
        Ptr ShapePlanT
    result <- Ptr FaceT
    -> Ptr SegmentPropertiesT
    -> Ptr FeatureT
    -> Word32
    -> Ptr CString
    -> IO (Ptr ShapePlanT)
    hb_shape_plan_create Ptr FaceT
    face' Ptr SegmentPropertiesT
    props' Ptr FeatureT
    userFeatures'' Word32
    numUserFeatures Ptr CString
    shaperList'
        Text -> Ptr ShapePlanT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "shapePlanCreate" Ptr ShapePlanT
    result
        ShapePlanT
    result' <- ((ManagedPtr ShapePlanT -> ShapePlanT)
    -> Ptr ShapePlanT -> IO ShapePlanT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr ShapePlanT -> ShapePlanT
    HarfBuzz.ShapePlanT.ShapePlanT) Ptr ShapePlanT
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        SegmentPropertiesT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SegmentPropertiesT
    props
        (FeatureT -> IO ()) -> [FeatureT] -> IO ()
    forall (t :: * -> *) (m :: * -> *) a b.
    (Foldable t, Monad m) =>
    (a -> m b) -> t a -> m ()
    mapM_ FeatureT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr [FeatureT]
    userFeatures
        Ptr FeatureT -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr FeatureT
    userFeatures''
        (CString -> IO ()) -> Ptr CString -> IO ()
    forall a b. (Ptr a -> IO b) -> Ptr (Ptr a) -> IO ()
    mapZeroTerminatedCArray CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    shaperList'
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    shaperList'
        ShapePlanT -> IO ShapePlanT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ShapePlanT
    result'

    -- function shape_list_shapers
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TCArray True (-1) (-1) (TBasicType TUTF8))
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape_list_shapers" hb_shape_list_shapers ::
        IO (Ptr CString)

    -- | Retrieves the list of shapers supported by HarfBuzz.
    --
    -- /Since: 0.9.2/
    shapeListShapers ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m [T.Text]
        -- ^ __Returns:__ an array of
        --    constant strings
    shapeListShapers :: m [Text]
    shapeListShapers  = IO [Text] -> m [Text]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [Text] -> m [Text]) -> IO [Text] -> m [Text]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr CString
    result <- IO (Ptr CString)
    hb_shape_list_shapers
        Text -> Ptr CString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "shapeListShapers" Ptr CString
    result
        [Text]
    result' <- HasCallStack => Ptr CString -> IO [Text]
    Ptr CString -> IO [Text]
    unpackZeroTerminatedUTF8CArray Ptr CString
    result
        [Text] -> IO [Text]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [Text]
    result'

    -- function shape_full
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_font_t to use for shaping"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t to shape"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "features"
    --           , argType =
    --               TCArray
    --                 False
    --                 (-1)
    --                 3
    --                 (TInterface Name { namespace = "HarfBuzz" , name = "feature_t" })
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "an array of user\n   specified #hb_feature_t or %NULL"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_features"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the length of @features array"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "shaper_list"
    --           , argType = TCArray True (-1) (-1) (TBasicType TUTF8)
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "a %NULL-terminated\n   array of shapers to use or %NULL"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "num_features"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText = Just "the length of @features array"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape_full" hb_shape_full ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- features : TCArray False (-1) 3 (TInterface (Name {namespace = "HarfBuzz", name = "feature_t"}))
        Word32 ->                               -- num_features : TBasicType TUInt
        Ptr CString ->                          -- shaper_list : TCArray True (-1) (-1) (TBasicType TUTF8)
        IO Int32

    -- | See 'GI.HarfBuzz.Functions.shape' for details. If /@shaperList@/ is not 'P.Nothing', the specified
    -- shapers will be used in the given order, otherwise the default shapers list
    -- will be used.
    --
    -- /Since: 0.9.2/
    shapeFull ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: an t'GI.HarfBuzz.Structs.FontT.FontT' to use for shaping
        -> HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT' to shape
        -> Maybe ([HarfBuzz.FeatureT.FeatureT])
        -- ^ /@features@/: an array of user
        --    specified t'GI.HarfBuzz.Structs.FeatureT.FeatureT' or 'P.Nothing'
        -> Maybe ([T.Text])
        -- ^ /@shaperList@/: a 'P.Nothing'-terminated
        --    array of shapers to use or 'P.Nothing'
        -> m Int32
        -- ^ __Returns:__ false if all shapers failed, true otherwise
    shapeFull :: FontT -> BufferT -> Maybe [FeatureT] -> Maybe [Text] -> m Int32
    shapeFull font :: FontT
    font buffer :: BufferT
    buffer features :: Maybe [FeatureT]
    features shaperList :: Maybe [Text]
    shaperList = IO Int32 -> m Int32
    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
        let numFeatures :: Word32
    numFeatures = case Maybe [FeatureT]
    features of
                Nothing -> 0
                Just jFeatures :: [FeatureT]
    jFeatures -> Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [FeatureT] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [FeatureT]
    jFeatures
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr FeatureT
    maybeFeatures <- case Maybe [FeatureT]
    features of
            Nothing -> Ptr FeatureT -> IO (Ptr FeatureT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr FeatureT
    forall a. Ptr a
    nullPtr
            Just jFeatures :: [FeatureT]
    jFeatures -> do
                [Ptr FeatureT]
    jFeatures' <- (FeatureT -> IO (Ptr FeatureT)) -> [FeatureT] -> IO [Ptr FeatureT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM FeatureT -> IO (Ptr FeatureT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr [FeatureT]
    jFeatures
                Ptr FeatureT
    jFeatures'' <- Int -> [Ptr FeatureT] -> IO (Ptr FeatureT)
    forall a. Int -> [Ptr a] -> IO (Ptr a)
    packBlockArray 16 [Ptr FeatureT]
    jFeatures'
                Ptr FeatureT -> IO (Ptr FeatureT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr FeatureT
    jFeatures''
        Ptr CString
    maybeShaperList <- case Maybe [Text]
    shaperList of
            Nothing -> Ptr CString -> IO (Ptr CString)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr CString
    forall a. Ptr a
    nullPtr
            Just jShaperList :: [Text]
    jShaperList -> do
                Ptr CString
    jShaperList' <- [Text] -> IO (Ptr CString)
    packZeroTerminatedUTF8CArray [Text]
    jShaperList
                Ptr CString -> IO (Ptr CString)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr CString
    jShaperList'
        Int32
    result <- Ptr FontT
    -> Ptr BufferT -> Ptr FeatureT -> Word32 -> Ptr CString -> IO Int32
    hb_shape_full Ptr FontT
    font' Ptr BufferT
    buffer' Ptr FeatureT
    maybeFeatures Word32
    numFeatures Ptr CString
    maybeShaperList
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Maybe [FeatureT] -> ([FeatureT] -> IO ()) -> IO ()
    forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
    whenJust Maybe [FeatureT]
    features ((FeatureT -> IO ()) -> [FeatureT] -> IO ()
    forall (t :: * -> *) (m :: * -> *) a b.
    (Foldable t, Monad m) =>
    (a -> m b) -> t a -> m ()
    mapM_ FeatureT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr)
        Ptr FeatureT -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr FeatureT
    maybeFeatures
        (CString -> IO ()) -> Ptr CString -> IO ()
    forall a b. (Ptr a -> IO b) -> Ptr (Ptr a) -> IO ()
    mapZeroTerminatedCArray CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    maybeShaperList
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    maybeShaperList
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function shape
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_font_t to use for shaping"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t to shape"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "features"
    --           , argType =
    --               TCArray
    --                 False
    --                 (-1)
    --                 3
    --                 (TInterface Name { namespace = "HarfBuzz" , name = "feature_t" })
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "an array of user\n   specified #hb_feature_t or %NULL"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_features"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the length of @features array"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "num_features"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText = Just "the length of @features array"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_shape" hb_shape ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- features : TCArray False (-1) 3 (TInterface (Name {namespace = "HarfBuzz", name = "feature_t"}))
        Word32 ->                               -- num_features : TBasicType TUInt
        IO ()

    -- | Shapes /@buffer@/ using /@font@/ turning its Unicode characters content to
    -- positioned glyphs. If /@features@/ is not 'P.Nothing', it will be used to control the
    -- features applied during shaping. If two /@features@/ have the same tag but
    -- overlapping ranges the value of the feature with the higher index takes
    -- precedence.
    --
    -- /Since: 0.9.2/
    shape ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: an t'GI.HarfBuzz.Structs.FontT.FontT' to use for shaping
        -> HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT' to shape
        -> Maybe ([HarfBuzz.FeatureT.FeatureT])
        -- ^ /@features@/: an array of user
        --    specified t'GI.HarfBuzz.Structs.FeatureT.FeatureT' or 'P.Nothing'
        -> m ()
    shape :: FontT -> BufferT -> Maybe [FeatureT] -> m ()
    shape font :: FontT
    font buffer :: BufferT
    buffer features :: Maybe [FeatureT]
    features = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        let numFeatures :: Word32
    numFeatures = case Maybe [FeatureT]
    features of
                Nothing -> 0
                Just jFeatures :: [FeatureT]
    jFeatures -> Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [FeatureT] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [FeatureT]
    jFeatures
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr FeatureT
    maybeFeatures <- case Maybe [FeatureT]
    features of
            Nothing -> Ptr FeatureT -> IO (Ptr FeatureT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr FeatureT
    forall a. Ptr a
    nullPtr
            Just jFeatures :: [FeatureT]
    jFeatures -> do
                [Ptr FeatureT]
    jFeatures' <- (FeatureT -> IO (Ptr FeatureT)) -> [FeatureT] -> IO [Ptr FeatureT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM FeatureT -> IO (Ptr FeatureT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr [FeatureT]
    jFeatures
                Ptr FeatureT
    jFeatures'' <- Int -> [Ptr FeatureT] -> IO (Ptr FeatureT)
    forall a. Int -> [Ptr a] -> IO (Ptr a)
    packBlockArray 16 [Ptr FeatureT]
    jFeatures'
                Ptr FeatureT -> IO (Ptr FeatureT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr FeatureT
    jFeatures''
        Ptr FontT -> Ptr BufferT -> Ptr FeatureT -> Word32 -> IO ()
    hb_shape Ptr FontT
    font' Ptr BufferT
    buffer' Ptr FeatureT
    maybeFeatures Word32
    numFeatures
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Maybe [FeatureT] -> ([FeatureT] -> IO ()) -> IO ()
    forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
    whenJust Maybe [FeatureT]
    features ((FeatureT -> IO ()) -> [FeatureT] -> IO ()
    forall (t :: * -> *) (m :: * -> *) a b.
    (Foldable t, Monad m) =>
    (a -> m b) -> t a -> m ()
    mapM_ FeatureT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr)
        Ptr FeatureT -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr FeatureT
    maybeFeatures
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_union
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "other"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_union" hb_set_union ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr HarfBuzz.SetT.SetT ->               -- other : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setUnion ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> HarfBuzz.SetT.SetT
        -> m ()
    setUnion :: SetT -> SetT -> m ()
    setUnion set :: SetT
    set other :: SetT
    other = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT
    other' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    other
        Ptr SetT -> Ptr SetT -> IO ()
    hb_set_union Ptr SetT
    set' Ptr SetT
    other'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    other
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_symmetric_difference
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "other"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_symmetric_difference" hb_set_symmetric_difference ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr HarfBuzz.SetT.SetT ->               -- other : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setSymmetricDifference ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> HarfBuzz.SetT.SetT
        -> m ()
    setSymmetricDifference :: SetT -> SetT -> m ()
    setSymmetricDifference set :: SetT
    set other :: SetT
    other = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT
    other' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    other
        Ptr SetT -> Ptr SetT -> IO ()
    hb_set_symmetric_difference Ptr SetT
    set' Ptr SetT
    other'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    other
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_subtract
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "other"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_subtract" hb_set_subtract ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr HarfBuzz.SetT.SetT ->               -- other : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setSubtract ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> HarfBuzz.SetT.SetT
        -> m ()
    setSubtract :: SetT -> SetT -> m ()
    setSubtract set :: SetT
    set other :: SetT
    other = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT
    other' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    other
        Ptr SetT -> Ptr SetT -> IO ()
    hb_set_subtract Ptr SetT
    set' Ptr SetT
    other'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    other
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_set
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "other"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_set" hb_set_set ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr HarfBuzz.SetT.SetT ->               -- other : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setSet ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> HarfBuzz.SetT.SetT
        -> m ()
    setSet :: SetT -> SetT -> m ()
    setSet set :: SetT
    set other :: SetT
    other = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT
    other' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    other
        Ptr SetT -> Ptr SetT -> IO ()
    hb_set_set Ptr SetT
    set' Ptr SetT
    other'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    other
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_previous_range
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionInout
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "input current first and output first codepoint in the range."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "last"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "output last codepoint in the range."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_previous_range" hb_set_previous_range ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr Word32 ->                           -- first : TBasicType TUInt32
        Ptr Word32 ->                           -- last : TBasicType TUInt32
        IO Int32

    -- | Gets the previous consecutive range of numbers in /@set@/ that
    -- are less than current value of /@first@/.
    --
    -- Set /@first@/ to 'GI.HarfBuzz.Constants.SET_VALUE_INVALID' to get started.
    --
    -- /Since: 1.8.0/
    setPreviousRange ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> Word32
        -- ^ /@first@/: input current first and output first codepoint in the range.
        -> m ((Int32, Word32, Word32))
        -- ^ __Returns:__ whether there was a previous range.
    setPreviousRange :: SetT -> Word32 -> m (Int32, Word32, Word32)
    setPreviousRange set :: SetT
    set first :: Word32
    first = IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32))
    -> IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr Word32
    first' <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32 -> Word32 -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke Ptr Word32
    first' Word32
    first
        Ptr Word32
    last <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr SetT -> Ptr Word32 -> Ptr Word32 -> IO Int32
    hb_set_previous_range Ptr SetT
    set' Ptr Word32
    first' Ptr Word32
    last
        Word32
    first'' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    first'
        Word32
    last' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    last
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    first'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    last
        (Int32, Word32, Word32) -> IO (Int32, Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    first'', Word32
    last')

    -- function set_previous
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "codepoint"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionInout
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_previous" hb_set_previous ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr Word32 ->                           -- codepoint : TBasicType TUInt32
        IO Int32

    -- | Gets the previous number in /@set@/ that is lower than current value of /@codepoint@/.
    --
    -- Set /@codepoint@/ to 'GI.HarfBuzz.Constants.SET_VALUE_INVALID' to get started.
    --
    -- /Since: 1.8.0/
    setPrevious ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> Word32
        -> m ((Int32, Word32))
        -- ^ __Returns:__ whether there was a previous value.
    setPrevious :: SetT -> Word32 -> m (Int32, Word32)
    setPrevious set :: SetT
    set codepoint :: Word32
    codepoint = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr Word32
    codepoint' <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32 -> Word32 -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke Ptr Word32
    codepoint' Word32
    codepoint
        Int32
    result <- Ptr SetT -> Ptr Word32 -> IO Int32
    hb_set_previous Ptr SetT
    set' Ptr Word32
    codepoint'
        Word32
    codepoint'' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    codepoint'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    codepoint'
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    codepoint'')

    -- function set_next_range
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "output first codepoint in the range."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "last"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionInout
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "input current last and output last codepoint in the range."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_next_range" hb_set_next_range ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr Word32 ->                           -- first : TBasicType TUInt32
        Ptr Word32 ->                           -- last : TBasicType TUInt32
        IO Int32

    -- | Gets the next consecutive range of numbers in /@set@/ that
    -- are greater than current value of /@last@/.
    --
    -- Set /@last@/ to 'GI.HarfBuzz.Constants.SET_VALUE_INVALID' to get started.
    --
    -- /Since: 0.9.7/
    setNextRange ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> Word32
        -- ^ /@last@/: input current last and output last codepoint in the range.
        -> m ((Int32, Word32, Word32))
        -- ^ __Returns:__ whether there was a next range.
    setNextRange :: SetT -> Word32 -> m (Int32, Word32, Word32)
    setNextRange set :: SetT
    set last :: Word32
    last = IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32))
    -> IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr Word32
    first <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    last' <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32 -> Word32 -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke Ptr Word32
    last' Word32
    last
        Int32
    result <- Ptr SetT -> Ptr Word32 -> Ptr Word32 -> IO Int32
    hb_set_next_range Ptr SetT
    set' Ptr Word32
    first Ptr Word32
    last'
        Word32
    first' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    first
        Word32
    last'' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    last'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    first
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    last'
        (Int32, Word32, Word32) -> IO (Int32, Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    first', Word32
    last'')

    -- function set_next
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "codepoint"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionInout
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_next" hb_set_next ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr Word32 ->                           -- codepoint : TBasicType TUInt32
        IO Int32

    -- | Gets the next number in /@set@/ that is greater than current value of /@codepoint@/.
    --
    -- Set /@codepoint@/ to 'GI.HarfBuzz.Constants.SET_VALUE_INVALID' to get started.
    --
    -- /Since: 0.9.2/
    setNext ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> Word32
        -> m ((Int32, Word32))
        -- ^ __Returns:__ whether there was a next value.
    setNext :: SetT -> Word32 -> m (Int32, Word32)
    setNext set :: SetT
    set codepoint :: Word32
    codepoint = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr Word32
    codepoint' <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32 -> Word32 -> IO ()
    forall a. Storable a => Ptr a -> a -> IO ()
    poke Ptr Word32
    codepoint' Word32
    codepoint
        Int32
    result <- Ptr SetT -> Ptr Word32 -> IO Int32
    hb_set_next Ptr SetT
    set' Ptr Word32
    codepoint'
        Word32
    codepoint'' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    codepoint'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    codepoint'
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    codepoint'')

    -- function set_is_subset
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "larger_set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "other set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_is_subset" hb_set_is_subset ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr HarfBuzz.SetT.SetT ->               -- larger_set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.8.1/
    setIsSubset ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> HarfBuzz.SetT.SetT
        -- ^ /@largerSet@/: other set.
        -> m Int32
        -- ^ __Returns:__ 'P.True' if the /@set@/ is a subset of (or equal to) /@largerSet@/, 'P.False' otherwise.
    setIsSubset :: SetT -> SetT -> m Int32
    setIsSubset set :: SetT
    set largerSet :: SetT
    largerSet = IO Int32 -> m Int32
    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 SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT
    largerSet' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    largerSet
        Int32
    result <- Ptr SetT -> Ptr SetT -> IO Int32
    hb_set_is_subset Ptr SetT
    set' Ptr SetT
    largerSet'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    largerSet
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function set_is_equal
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "other"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "other set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_is_equal" hb_set_is_equal ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr HarfBuzz.SetT.SetT ->               -- other : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    setIsEqual ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> HarfBuzz.SetT.SetT
        -- ^ /@other@/: other set.
        -> m Int32
        -- ^ __Returns:__ 'P.True' if the two sets are equal, 'P.False' otherwise.
    setIsEqual :: SetT -> SetT -> m Int32
    setIsEqual set :: SetT
    set other :: SetT
    other = IO Int32 -> m Int32
    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 SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT
    other' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    other
        Int32
    result <- Ptr SetT -> Ptr SetT -> IO Int32
    hb_set_is_equal Ptr SetT
    set' Ptr SetT
    other'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    other
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function set_is_empty
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_is_empty" hb_set_is_empty ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    setIsEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> m Int32
    setIsEmpty :: SetT -> m Int32
    setIsEmpty set :: SetT
    set = IO Int32 -> m Int32
    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 SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Int32
    result <- Ptr SetT -> IO Int32
    hb_set_is_empty Ptr SetT
    set'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function set_invert
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_invert" hb_set_invert ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    {-# DEPRECATED setInvert ["(Since version 1.6.1)"] #-}
    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.10/
    setInvert ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> m ()
    setInvert :: SetT -> m ()
    setInvert set :: SetT
    set = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT -> IO ()
    hb_set_invert Ptr SetT
    set'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_intersect
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "other"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_intersect" hb_set_intersect ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Ptr HarfBuzz.SetT.SetT ->               -- other : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setIntersect ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> HarfBuzz.SetT.SetT
        -> m ()
    setIntersect :: SetT -> SetT -> m ()
    setIntersect set :: SetT
    set other :: SetT
    other = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT
    other' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    other
        Ptr SetT -> Ptr SetT -> IO ()
    hb_set_intersect Ptr SetT
    set' Ptr SetT
    other'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    other
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_has
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "codepoint"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_has" hb_set_has ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Word32 ->                               -- codepoint : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setHas ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> Word32
        -> m Int32
    setHas :: SetT -> Word32 -> m Int32
    setHas set :: SetT
    set codepoint :: Word32
    codepoint = IO Int32 -> m Int32
    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 SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Int32
    result <- Ptr SetT -> Word32 -> IO Int32
    hb_set_has Ptr SetT
    set' Word32
    codepoint
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function set_get_population
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_get_population" hb_set_get_population ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO Word32

    -- | Returns the number of numbers in the set.
    --
    -- /Since: 0.9.7/
    setGetPopulation ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> m Word32
        -- ^ __Returns:__ set population.
    setGetPopulation :: SetT -> m Word32
    setGetPopulation set :: SetT
    set = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Word32
    result <- Ptr SetT -> IO Word32
    hb_set_get_population Ptr SetT
    set'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function set_get_min
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_get_min" hb_set_get_min ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO Word32

    -- | Finds the minimum number in the set.
    --
    -- /Since: 0.9.7/
    setGetMin ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> m Word32
        -- ^ __Returns:__ minimum of the set, or 'GI.HarfBuzz.Constants.SET_VALUE_INVALID' if set is empty.
    setGetMin :: SetT -> m Word32
    setGetMin set :: SetT
    set = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Word32
    result <- Ptr SetT -> IO Word32
    hb_set_get_min Ptr SetT
    set'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function set_get_max
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_get_max" hb_set_get_max ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO Word32

    -- | Finds the maximum number in the set.
    --
    -- /Since: 0.9.7/
    setGetMax ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> m Word32
        -- ^ __Returns:__ minimum of the set, or 'GI.HarfBuzz.Constants.SET_VALUE_INVALID' if set is empty.
    setGetMax :: SetT -> m Word32
    setGetMax set :: SetT
    set = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Word32
    result <- Ptr SetT -> IO Word32
    hb_set_get_max Ptr SetT
    set'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function set_get_empty
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "set_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_get_empty" hb_set_get_empty ::
        IO (Ptr HarfBuzz.SetT.SetT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setGetEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.SetT.SetT
    setGetEmpty :: m SetT
    setGetEmpty  = IO SetT -> m SetT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO SetT -> m SetT) -> IO SetT -> m SetT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    result <- IO (Ptr SetT)
    hb_set_get_empty
        Text -> Ptr SetT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "setGetEmpty" Ptr SetT
    result
        SetT
    result' <- ((ManagedPtr SetT -> SetT) -> Ptr SetT -> IO SetT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr SetT -> SetT
    HarfBuzz.SetT.SetT) Ptr SetT
    result
        SetT -> IO SetT
    forall (m :: * -> *) a. Monad m => a -> m a
    return SetT
    result'

    -- function set_del_range
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "last"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_del_range" hb_set_del_range ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Word32 ->                               -- first : TBasicType TUInt32
        Word32 ->                               -- last : TBasicType TUInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    setDelRange ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> Word32
        -> Word32
        -> m ()
    setDelRange :: SetT -> Word32 -> Word32 -> m ()
    setDelRange set :: SetT
    set first :: Word32
    first last :: Word32
    last = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT -> Word32 -> Word32 -> IO ()
    hb_set_del_range Ptr SetT
    set' Word32
    first Word32
    last
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_del
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "codepoint"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_del" hb_set_del ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Word32 ->                               -- codepoint : TBasicType TUInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setDel ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> Word32
        -> m ()
    setDel :: SetT -> Word32 -> m ()
    setDel set :: SetT
    set codepoint :: Word32
    codepoint = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT -> Word32 -> IO ()
    hb_set_del Ptr SetT
    set' Word32
    codepoint
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_create
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "set_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_create" hb_set_create ::
        IO (Ptr HarfBuzz.SetT.SetT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.SetT.SetT
    setCreate :: m SetT
    setCreate  = IO SetT -> m SetT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO SetT -> m SetT) -> IO SetT -> m SetT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    result <- IO (Ptr SetT)
    hb_set_create
        Text -> Ptr SetT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "setCreate" Ptr SetT
    result
        SetT
    result' <- ((ManagedPtr SetT -> SetT) -> Ptr SetT -> IO SetT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr SetT -> SetT
    HarfBuzz.SetT.SetT) Ptr SetT
    result
        SetT -> IO SetT
    forall (m :: * -> *) a. Monad m => a -> m a
    return SetT
    result'

    -- function set_clear
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_clear" hb_set_clear ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setClear ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> m ()
    setClear :: SetT -> m ()
    setClear set :: SetT
    set = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT -> IO ()
    hb_set_clear Ptr SetT
    set'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_allocation_successful
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_allocation_successful" hb_set_allocation_successful ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setAllocationSuccessful ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> m Int32
    setAllocationSuccessful :: SetT -> m Int32
    setAllocationSuccessful set :: SetT
    set = IO Int32 -> m Int32
    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 SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Int32
    result <- Ptr SetT -> IO Int32
    hb_set_allocation_successful Ptr SetT
    set'
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function set_add_range
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "last"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_add_range" hb_set_add_range ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Word32 ->                               -- first : TBasicType TUInt32
        Word32 ->                               -- last : TBasicType TUInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    setAddRange ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> Word32
        -> Word32
        -> m ()
    setAddRange :: SetT -> Word32 -> Word32 -> m ()
    setAddRange set :: SetT
    set first :: Word32
    first last :: Word32
    last = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT -> Word32 -> Word32 -> IO ()
    hb_set_add_range Ptr SetT
    set' Word32
    first Word32
    last
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function set_add
    -- Args: [ Arg
    --           { argCName = "set"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a set." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "codepoint"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_set_add" hb_set_add ::
        Ptr HarfBuzz.SetT.SetT ->               -- set : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        Word32 ->                               -- codepoint : TBasicType TUInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    setAdd ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SetT.SetT
        -- ^ /@set@/: a set.
        -> Word32
        -> m ()
    setAdd :: SetT -> Word32 -> m ()
    setAdd set :: SetT
    set codepoint :: Word32
    codepoint = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SetT
    set' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    set
        Ptr SetT -> Word32 -> IO ()
    hb_set_add Ptr SetT
    set' Word32
    codepoint
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    set
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function segment_properties_hash
    -- Args: [ Arg
    --           { argCName = "p"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "segment_properties_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_segment_properties_t to hash."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_segment_properties_hash" hb_segment_properties_hash ::
        Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT -> -- p : TInterface (Name {namespace = "HarfBuzz", name = "segment_properties_t"})
        IO Word32

    -- | Creates a hash representing /@p@/.
    --
    -- /Since: 0.9.7/
    segmentPropertiesHash ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SegmentPropertiesT.SegmentPropertiesT
        -- ^ /@p@/: t'GI.HarfBuzz.Structs.SegmentPropertiesT.SegmentPropertiesT' to hash.
        -> m Word32
        -- ^ __Returns:__ A hash of /@p@/.
    segmentPropertiesHash :: SegmentPropertiesT -> m Word32
    segmentPropertiesHash p :: SegmentPropertiesT
    p = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr SegmentPropertiesT
    p' <- SegmentPropertiesT -> IO (Ptr SegmentPropertiesT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SegmentPropertiesT
    p
        Word32
    result <- Ptr SegmentPropertiesT -> IO Word32
    hb_segment_properties_hash Ptr SegmentPropertiesT
    p'
        SegmentPropertiesT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SegmentPropertiesT
    p
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function segment_properties_equal
    -- Args: [ Arg
    --           { argCName = "a"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "segment_properties_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "first #hb_segment_properties_t to compare."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "b"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "segment_properties_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "second #hb_segment_properties_t to compare."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_segment_properties_equal" hb_segment_properties_equal ::
        Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT -> -- a : TInterface (Name {namespace = "HarfBuzz", name = "segment_properties_t"})
        Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT -> -- b : TInterface (Name {namespace = "HarfBuzz", name = "segment_properties_t"})
        IO Int32

    -- | Checks the equality of two t'GI.HarfBuzz.Structs.SegmentPropertiesT.SegmentPropertiesT'\'s.
    --
    -- /Since: 0.9.7/
    segmentPropertiesEqual ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.SegmentPropertiesT.SegmentPropertiesT
        -- ^ /@a@/: first t'GI.HarfBuzz.Structs.SegmentPropertiesT.SegmentPropertiesT' to compare.
        -> HarfBuzz.SegmentPropertiesT.SegmentPropertiesT
        -- ^ /@b@/: second t'GI.HarfBuzz.Structs.SegmentPropertiesT.SegmentPropertiesT' to compare.
        -> m Int32
        -- ^ __Returns:__ @/true/@ if all properties of /@a@/ equal those of /@b@/, false otherwise.
    segmentPropertiesEqual :: SegmentPropertiesT -> SegmentPropertiesT -> m Int32
    segmentPropertiesEqual a :: SegmentPropertiesT
    a b :: SegmentPropertiesT
    b = IO Int32 -> m Int32
    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 SegmentPropertiesT
    a' <- SegmentPropertiesT -> IO (Ptr SegmentPropertiesT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SegmentPropertiesT
    a
        Ptr SegmentPropertiesT
    b' <- SegmentPropertiesT -> IO (Ptr SegmentPropertiesT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SegmentPropertiesT
    b
        Int32
    result <- Ptr SegmentPropertiesT -> Ptr SegmentPropertiesT -> IO Int32
    hb_segment_properties_equal Ptr SegmentPropertiesT
    a' Ptr SegmentPropertiesT
    b'
        SegmentPropertiesT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SegmentPropertiesT
    a
        SegmentPropertiesT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SegmentPropertiesT
    b
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function script_to_iso15924_tag
    -- Args: [ Arg
    --           { argCName = "script"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "script_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_script_t to convert."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_script_to_iso15924_tag" hb_script_to_iso15924_tag ::
        CUInt ->                                -- script : TInterface (Name {namespace = "HarfBuzz", name = "script_t"})
        IO Word32

    -- | See 'GI.HarfBuzz.Functions.scriptFromIso15924Tag'.
    --
    -- /Since: 0.9.2/
    scriptToIso15924Tag ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.Enums.ScriptT
        -- ^ /@script@/: an t'GI.HarfBuzz.Enums.ScriptT' to convert.
        -> m Word32
        -- ^ __Returns:__ An @/hb_tag_t/@ representing an ISO 15924 script tag.
    scriptToIso15924Tag :: ScriptT -> m Word32
    scriptToIso15924Tag script :: ScriptT
    script = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        let script' :: CUInt
    script' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (ScriptT -> Int) -> ScriptT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ScriptT -> Int
    forall a. Enum a => a -> Int
    fromEnum) ScriptT
    script
        Word32
    result <- CUInt -> IO Word32
    hb_script_to_iso15924_tag CUInt
    script'
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function script_get_horizontal_direction
    -- Args: [ Arg
    --           { argCName = "script"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "script_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "direction_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_script_get_horizontal_direction" hb_script_get_horizontal_direction ::
        CUInt ->                                -- script : TInterface (Name {namespace = "HarfBuzz", name = "script_t"})
        IO CUInt

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    scriptGetHorizontalDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.Enums.ScriptT
        -> m HarfBuzz.Enums.DirectionT
    scriptGetHorizontalDirection :: ScriptT -> m DirectionT
    scriptGetHorizontalDirection script :: ScriptT
    script = IO DirectionT -> m DirectionT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO DirectionT -> m DirectionT) -> IO DirectionT -> m DirectionT
    forall a b. (a -> b) -> a -> b
    $ do
        let script' :: CUInt
    script' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (ScriptT -> Int) -> ScriptT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ScriptT -> Int
    forall a. Enum a => a -> Int
    fromEnum) ScriptT
    script
        CUInt
    result <- CUInt -> IO CUInt
    hb_script_get_horizontal_direction CUInt
    script'
        let result' :: DirectionT
    result' = (Int -> DirectionT
    forall a. Enum a => Int -> a
    toEnum (Int -> DirectionT) -> (CUInt -> Int) -> CUInt -> DirectionT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        DirectionT -> IO DirectionT
    forall (m :: * -> *) a. Monad m => a -> m a
    return DirectionT
    result'

    -- function script_from_string
    -- Args: [ Arg
    --           { argCName = "str"
    --           , argType = TCArray False (-1) 1 (TBasicType TUInt8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "a string representing an\n      ISO 15924 tag."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "length of the @str, or -1 if it is %NULL-terminated."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "len"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just "length of the @str, or -1 if it is %NULL-terminated."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "script_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_script_from_string" hb_script_from_string ::
        Ptr Word8 ->                            -- str : TCArray False (-1) 1 (TBasicType TUInt8)
        Int32 ->                                -- len : TBasicType TInt
        IO CUInt

    -- | Converts a string /@str@/ representing an ISO 15924 script tag to a
    -- corresponding t'GI.HarfBuzz.Enums.ScriptT'. Shorthand for 'GI.HarfBuzz.Functions.tagFromString' then
    -- 'GI.HarfBuzz.Functions.scriptFromIso15924Tag'.
    --
    -- /Since: 0.9.2/
    scriptFromString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        ByteString
        -- ^ /@str@/: a string representing an
        --       ISO 15924 tag.
        -> m HarfBuzz.Enums.ScriptT
        -- ^ __Returns:__ An t'GI.HarfBuzz.Enums.ScriptT' corresponding to the ISO 15924 tag.
    scriptFromString :: ByteString -> m ScriptT
    scriptFromString str :: ByteString
    str = IO ScriptT -> m ScriptT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ScriptT -> m ScriptT) -> IO ScriptT -> m ScriptT
    forall a b. (a -> b) -> a -> b
    $ do
        let len :: Int32
    len = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ ByteString -> Int
    B.length ByteString
    str
        Ptr Word8
    str' <- ByteString -> IO (Ptr Word8)
    packByteString ByteString
    str
        CUInt
    result <- Ptr Word8 -> Int32 -> IO CUInt
    hb_script_from_string Ptr Word8
    str' Int32
    len
        let result' :: ScriptT
    result' = (Int -> ScriptT
    forall a. Enum a => Int -> a
    toEnum (Int -> ScriptT) -> (CUInt -> Int) -> CUInt -> ScriptT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    str'
        ScriptT -> IO ScriptT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ScriptT
    result'

    -- function script_from_iso15924_tag
    -- Args: [ Arg
    --           { argCName = "tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_tag_t representing an ISO 15924 tag."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "script_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_script_from_iso15924_tag" hb_script_from_iso15924_tag ::
        Word32 ->                               -- tag : TBasicType TUInt32
        IO CUInt

    -- | Converts an ISO 15924 script tag to a corresponding t'GI.HarfBuzz.Enums.ScriptT'.
    --
    -- /Since: 0.9.2/
    scriptFromIso15924Tag ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Word32
        -- ^ /@tag@/: an @/hb_tag_t/@ representing an ISO 15924 tag.
        -> m HarfBuzz.Enums.ScriptT
        -- ^ __Returns:__ An t'GI.HarfBuzz.Enums.ScriptT' corresponding to the ISO 15924 tag.
    scriptFromIso15924Tag :: Word32 -> m ScriptT
    scriptFromIso15924Tag tag :: Word32
    tag = IO ScriptT -> m ScriptT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ScriptT -> m ScriptT) -> IO ScriptT -> m ScriptT
    forall a b. (a -> b) -> a -> b
    $ do
        CUInt
    result <- Word32 -> IO CUInt
    hb_script_from_iso15924_tag Word32
    tag
        let result' :: ScriptT
    result' = (Int -> ScriptT
    forall a. Enum a => Int -> a
    toEnum (Int -> ScriptT) -> (CUInt -> Int) -> CUInt -> ScriptT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        ScriptT -> IO ScriptT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ScriptT
    result'

    -- function ot_var_normalize_variations
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variations"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "variation_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variations_length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords_length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_normalize_variations" hb_ot_var_normalize_variations ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Ptr HarfBuzz.VariationT.VariationT ->   -- variations : TInterface (Name {namespace = "HarfBuzz", name = "variation_t"})
        Word32 ->                               -- variations_length : TBasicType TUInt
        Int32 ->                                -- coords : TBasicType TInt
        Word32 ->                               -- coords_length : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    otVarNormalizeVariations ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> HarfBuzz.VariationT.VariationT
        -> Word32
        -> Int32
        -> Word32
        -> m ()
    otVarNormalizeVariations :: FaceT -> VariationT -> Word32 -> Int32 -> Word32 -> m ()
    otVarNormalizeVariations face :: FaceT
    face variations :: VariationT
    variations variationsLength :: Word32
    variationsLength coords :: Int32
    coords coordsLength :: Word32
    coordsLength = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr VariationT
    variations' <- VariationT -> IO (Ptr VariationT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr VariationT
    variations
        Ptr FaceT -> Ptr VariationT -> Word32 -> Int32 -> Word32 -> IO ()
    hb_ot_var_normalize_variations Ptr FaceT
    face' Ptr VariationT
    variations' Word32
    variationsLength Int32
    coords Word32
    coordsLength
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        VariationT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr VariationT
    variations
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function ot_var_normalize_coords
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords_length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "design_coords"
    --           , argType = TBasicType TFloat
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "normalized_coords"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_normalize_coords" hb_ot_var_normalize_coords ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- coords_length : TBasicType TUInt
        CFloat ->                               -- design_coords : TBasicType TFloat
        Int32 ->                                -- normalized_coords : TBasicType TInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    otVarNormalizeCoords ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> Float
        -> Int32
        -> m ()
    otVarNormalizeCoords :: FaceT -> Word32 -> Float -> Int32 -> m ()
    otVarNormalizeCoords face :: FaceT
    face coordsLength :: Word32
    coordsLength designCoords :: Float
    designCoords normalizedCoords :: Int32
    normalizedCoords = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        let designCoords' :: CFloat
    designCoords' = Float -> CFloat
    forall a b. (Real a, Fractional b) => a -> b
    realToFrac Float
    designCoords
        Ptr FaceT -> Word32 -> CFloat -> Int32 -> IO ()
    hb_ot_var_normalize_coords Ptr FaceT
    face' Word32
    coordsLength CFloat
    designCoords' Int32
    normalizedCoords
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function ot_var_named_instance_get_subfamily_name_id
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "instance_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_named_instance_get_subfamily_name_id" hb_ot_var_named_instance_get_subfamily_name_id ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- instance_index : TBasicType TUInt
        IO Word32

    -- | /No description available in the introspection data./
    otVarNamedInstanceGetSubfamilyNameId ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> m Word32
    otVarNamedInstanceGetSubfamilyNameId :: FaceT -> Word32 -> m Word32
    otVarNamedInstanceGetSubfamilyNameId face :: FaceT
    face instanceIndex :: Word32
    instanceIndex = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> Word32 -> IO Word32
    hb_ot_var_named_instance_get_subfamily_name_id Ptr FaceT
    face' Word32
    instanceIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_var_named_instance_get_postscript_name_id
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "instance_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_named_instance_get_postscript_name_id" hb_ot_var_named_instance_get_postscript_name_id ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- instance_index : TBasicType TUInt
        IO Word32

    -- | /No description available in the introspection data./
    otVarNamedInstanceGetPostscriptNameId ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> m Word32
    otVarNamedInstanceGetPostscriptNameId :: FaceT -> Word32 -> m Word32
    otVarNamedInstanceGetPostscriptNameId face :: FaceT
    face instanceIndex :: Word32
    instanceIndex = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> Word32 -> IO Word32
    hb_ot_var_named_instance_get_postscript_name_id Ptr FaceT
    face' Word32
    instanceIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_var_named_instance_get_design_coords
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "instance_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords_length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords"
    --           , argType = TBasicType TFloat
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_named_instance_get_design_coords" hb_ot_var_named_instance_get_design_coords ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- instance_index : TBasicType TUInt
        Word32 ->                               -- coords_length : TBasicType TUInt
        CFloat ->                               -- coords : TBasicType TFloat
        IO Word32

    -- | /No description available in the introspection data./
    otVarNamedInstanceGetDesignCoords ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> Word32
        -> Float
        -> m Word32
    otVarNamedInstanceGetDesignCoords :: FaceT -> Word32 -> Word32 -> Float -> m Word32
    otVarNamedInstanceGetDesignCoords face :: FaceT
    face instanceIndex :: Word32
    instanceIndex coordsLength :: Word32
    coordsLength coords :: Float
    coords = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        let coords' :: CFloat
    coords' = Float -> CFloat
    forall a b. (Real a, Fractional b) => a -> b
    realToFrac Float
    coords
        Word32
    result <- Ptr FaceT -> Word32 -> Word32 -> CFloat -> IO Word32
    hb_ot_var_named_instance_get_design_coords Ptr FaceT
    face' Word32
    instanceIndex Word32
    coordsLength CFloat
    coords'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_var_has_data
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to test" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_has_data" hb_ot_var_has_data ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | This function allows to verify the presence of OpenType variation data on the face.
    --
    -- /Since: 1.4.2/
    otVarHasData ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to test
        -> m Int32
        -- ^ __Returns:__ true if face has a \`fvar\' table and false otherwise
    otVarHasData :: FaceT -> m Int32
    otVarHasData face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_ot_var_has_data Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_var_get_named_instance_count
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_get_named_instance_count" hb_ot_var_get_named_instance_count ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Word32

    -- | /No description available in the introspection data./
    otVarGetNamedInstanceCount ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> m Word32
    otVarGetNamedInstanceCount :: FaceT -> m Word32
    otVarGetNamedInstanceCount face :: FaceT
    face = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> IO Word32
    hb_ot_var_get_named_instance_count Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_var_get_axis_infos
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "axes_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "axes_array"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "ot_var_axis_info_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_get_axis_infos" hb_ot_var_get_axis_infos ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- start_offset : TBasicType TUInt
        Word32 ->                               -- axes_count : TBasicType TUInt
        Ptr HarfBuzz.OtVarAxisInfoT.OtVarAxisInfoT -> -- axes_array : TInterface (Name {namespace = "HarfBuzz", name = "ot_var_axis_info_t"})
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 2.2.0/
    otVarGetAxisInfos ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> Word32
        -> HarfBuzz.OtVarAxisInfoT.OtVarAxisInfoT
        -> m Word32
    otVarGetAxisInfos :: FaceT -> Word32 -> Word32 -> OtVarAxisInfoT -> m Word32
    otVarGetAxisInfos face :: FaceT
    face startOffset :: Word32
    startOffset axesCount :: Word32
    axesCount axesArray :: OtVarAxisInfoT
    axesArray = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr OtVarAxisInfoT
    axesArray' <- OtVarAxisInfoT -> IO (Ptr OtVarAxisInfoT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr OtVarAxisInfoT
    axesArray
        Word32
    result <- Ptr FaceT -> Word32 -> Word32 -> Ptr OtVarAxisInfoT -> IO Word32
    hb_ot_var_get_axis_infos Ptr FaceT
    face' Word32
    startOffset Word32
    axesCount Ptr OtVarAxisInfoT
    axesArray'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        OtVarAxisInfoT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr OtVarAxisInfoT
    axesArray
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_var_get_axis_count
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_get_axis_count" hb_ot_var_get_axis_count ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    otVarGetAxisCount ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> m Word32
    otVarGetAxisCount :: FaceT -> m Word32
    otVarGetAxisCount face :: FaceT
    face = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> IO Word32
    hb_ot_var_get_axis_count Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_var_get_axes
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "axes_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "axes_array"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "ot_var_axis_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_get_axes" hb_ot_var_get_axes ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- start_offset : TBasicType TUInt
        Word32 ->                               -- axes_count : TBasicType TUInt
        Ptr HarfBuzz.OtVarAxisT.OtVarAxisT ->   -- axes_array : TInterface (Name {namespace = "HarfBuzz", name = "ot_var_axis_t"})
        IO Word32

    {-# DEPRECATED otVarGetAxes ["(Since version 2.2.0)"] #-}
    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    otVarGetAxes ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> Word32
        -> HarfBuzz.OtVarAxisT.OtVarAxisT
        -> m Word32
    otVarGetAxes :: FaceT -> Word32 -> Word32 -> OtVarAxisT -> m Word32
    otVarGetAxes face :: FaceT
    face startOffset :: Word32
    startOffset axesCount :: Word32
    axesCount axesArray :: OtVarAxisT
    axesArray = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr OtVarAxisT
    axesArray' <- OtVarAxisT -> IO (Ptr OtVarAxisT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr OtVarAxisT
    axesArray
        Word32
    result <- Ptr FaceT -> Word32 -> Word32 -> Ptr OtVarAxisT -> IO Word32
    hb_ot_var_get_axes Ptr FaceT
    face' Word32
    startOffset Word32
    axesCount Ptr OtVarAxisT
    axesArray'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        OtVarAxisT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr OtVarAxisT
    axesArray
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_var_find_axis_info
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "axis_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "axis_info"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "ot_var_axis_info_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_find_axis_info" hb_ot_var_find_axis_info ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- axis_tag : TBasicType TUInt32
        Ptr HarfBuzz.OtVarAxisInfoT.OtVarAxisInfoT -> -- axis_info : TInterface (Name {namespace = "HarfBuzz", name = "ot_var_axis_info_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 2.2.0/
    otVarFindAxisInfo ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> HarfBuzz.OtVarAxisInfoT.OtVarAxisInfoT
        -> m Int32
    otVarFindAxisInfo :: FaceT -> Word32 -> OtVarAxisInfoT -> m Int32
    otVarFindAxisInfo face :: FaceT
    face axisTag :: Word32
    axisTag axisInfo :: OtVarAxisInfoT
    axisInfo = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr OtVarAxisInfoT
    axisInfo' <- OtVarAxisInfoT -> IO (Ptr OtVarAxisInfoT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr OtVarAxisInfoT
    axisInfo
        Int32
    result <- Ptr FaceT -> Word32 -> Ptr OtVarAxisInfoT -> IO Int32
    hb_ot_var_find_axis_info Ptr FaceT
    face' Word32
    axisTag Ptr OtVarAxisInfoT
    axisInfo'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        OtVarAxisInfoT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr OtVarAxisInfoT
    axisInfo
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_var_find_axis
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "axis_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "axis_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "axis_info"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "ot_var_axis_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_var_find_axis" hb_ot_var_find_axis ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- axis_tag : TBasicType TUInt32
        Word32 ->                               -- axis_index : TBasicType TUInt
        Ptr HarfBuzz.OtVarAxisT.OtVarAxisT ->   -- axis_info : TInterface (Name {namespace = "HarfBuzz", name = "ot_var_axis_t"})
        IO Int32

    {-# DEPRECATED otVarFindAxis ["(Since version 2.2.0)"] #-}
    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    otVarFindAxis ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> Word32
        -> HarfBuzz.OtVarAxisT.OtVarAxisT
        -> m Int32
    otVarFindAxis :: FaceT -> Word32 -> Word32 -> OtVarAxisT -> m Int32
    otVarFindAxis face :: FaceT
    face axisTag :: Word32
    axisTag axisIndex :: Word32
    axisIndex axisInfo :: OtVarAxisT
    axisInfo = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr OtVarAxisT
    axisInfo' <- OtVarAxisT -> IO (Ptr OtVarAxisT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr OtVarAxisT
    axisInfo
        Int32
    result <- Ptr FaceT -> Word32 -> Word32 -> Ptr OtVarAxisT -> IO Int32
    hb_ot_var_find_axis Ptr FaceT
    face' Word32
    axisTag Word32
    axisIndex Ptr OtVarAxisT
    axisInfo'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        OtVarAxisT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr OtVarAxisT
    axisInfo
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_tags_to_script_and_language
    -- Args: [ Arg
    --           { argCName = "script_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a script tag" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a language tag" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "script_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the #hb_script_t corresponding to @script_tag (OUT)."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "language_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "the #hb_language_t corresponding to @script_tag and\n@language_tag (OUT)."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_tags_to_script_and_language" hb_ot_tags_to_script_and_language ::
        Word32 ->                               -- script_tag : TBasicType TUInt32
        Word32 ->                               -- language_tag : TBasicType TUInt32
        CUInt ->                                -- script : TInterface (Name {namespace = "HarfBuzz", name = "script_t"})
        Ptr HarfBuzz.LanguageT.LanguageT ->     -- language : TInterface (Name {namespace = "HarfBuzz", name = "language_t"})
        IO ()

    -- | Converts a script tag and a language tag to an t'GI.HarfBuzz.Enums.ScriptT' and an
    -- t'GI.HarfBuzz.Structs.LanguageT.LanguageT'.
    --
    -- /Since: 2.0.0/
    otTagsToScriptAndLanguage ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Word32
        -- ^ /@scriptTag@/: a script tag
        -> Word32
        -- ^ /@languageTag@/: a language tag
        -> HarfBuzz.Enums.ScriptT
        -- ^ /@script@/: the t'GI.HarfBuzz.Enums.ScriptT' corresponding to /@scriptTag@/ (OUT).
        -> Maybe (HarfBuzz.LanguageT.LanguageT)
        -- ^ /@language@/: the t'GI.HarfBuzz.Structs.LanguageT.LanguageT' corresponding to /@scriptTag@/ and
        -- /@languageTag@/ (OUT).
        -> m ()
    otTagsToScriptAndLanguage :: Word32 -> Word32 -> ScriptT -> Maybe LanguageT -> m ()
    otTagsToScriptAndLanguage scriptTag :: Word32
    scriptTag languageTag :: Word32
    languageTag script :: ScriptT
    script language :: Maybe LanguageT
    language = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        let script' :: CUInt
    script' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (ScriptT -> Int) -> ScriptT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ScriptT -> Int
    forall a. Enum a => a -> Int
    fromEnum) ScriptT
    script
        Ptr LanguageT
    maybeLanguage <- case Maybe LanguageT
    language of
            Nothing -> Ptr LanguageT -> IO (Ptr LanguageT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr LanguageT
    forall a. Ptr a
    nullPtr
            Just jLanguage :: LanguageT
    jLanguage -> do
                Ptr LanguageT
    jLanguage' <- LanguageT -> IO (Ptr LanguageT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr LanguageT
    jLanguage
                Ptr LanguageT -> IO (Ptr LanguageT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr LanguageT
    jLanguage'
        Word32 -> Word32 -> CUInt -> Ptr LanguageT -> IO ()
    hb_ot_tags_to_script_and_language Word32
    scriptTag Word32
    languageTag CUInt
    script' Ptr LanguageT
    maybeLanguage
        Maybe LanguageT -> (LanguageT -> IO ()) -> IO ()
    forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
    whenJust Maybe LanguageT
    language LanguageT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function ot_tags_from_script_and_language
    -- Args: [ Arg
    --           { argCName = "script"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "script_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_script_t to convert."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "language_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_language_t to convert."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "maximum number of script tags to retrieve (IN)\nand actual number of script tags retrieved (OUT)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_tags"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "array of size at least @script_count to store the\nscript tag results"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "language_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "maximum number of language tags to retrieve\n(IN) and actual number of language tags retrieved (OUT)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_tags"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "array of size at least @language_count to store\nthe language tag results"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_tags_from_script_and_language" hb_ot_tags_from_script_and_language ::
        CUInt ->                                -- script : TInterface (Name {namespace = "HarfBuzz", name = "script_t"})
        Ptr HarfBuzz.LanguageT.LanguageT ->     -- language : TInterface (Name {namespace = "HarfBuzz", name = "language_t"})
        Word32 ->                               -- script_count : TBasicType TUInt
        Ptr Word32 ->                           -- script_tags : TBasicType TUInt32
        Word32 ->                               -- language_count : TBasicType TUInt
        Ptr Word32 ->                           -- language_tags : TBasicType TUInt32
        IO ()

    -- | Converts an t'GI.HarfBuzz.Enums.ScriptT' and an t'GI.HarfBuzz.Structs.LanguageT.LanguageT' to script and language tags.
    --
    -- /Since: 2.0.0/
    otTagsFromScriptAndLanguage ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.Enums.ScriptT
        -- ^ /@script@/: an t'GI.HarfBuzz.Enums.ScriptT' to convert.
        -> HarfBuzz.LanguageT.LanguageT
        -- ^ /@language@/: an t'GI.HarfBuzz.Structs.LanguageT.LanguageT' to convert.
        -> Word32
        -- ^ /@scriptCount@/: maximum number of script tags to retrieve (IN)
        -- and actual number of script tags retrieved (OUT)
        -> Word32
        -- ^ /@languageCount@/: maximum number of language tags to retrieve
        -- (IN) and actual number of language tags retrieved (OUT)
        -> m ((Word32, Word32))
    otTagsFromScriptAndLanguage :: ScriptT -> LanguageT -> Word32 -> Word32 -> m (Word32, Word32)
    otTagsFromScriptAndLanguage script :: ScriptT
    script language :: LanguageT
    language scriptCount :: Word32
    scriptCount languageCount :: Word32
    languageCount = IO (Word32, Word32) -> m (Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, Word32) -> m (Word32, Word32))
    -> IO (Word32, Word32) -> m (Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        let script' :: CUInt
    script' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (ScriptT -> Int) -> ScriptT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ScriptT -> Int
    forall a. Enum a => a -> Int
    fromEnum) ScriptT
    script
        Ptr LanguageT
    language' <- LanguageT -> IO (Ptr LanguageT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr LanguageT
    language
        Ptr Word32
    scriptTags <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    languageTags <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        CUInt
    -> Ptr LanguageT
    -> Word32
    -> Ptr Word32
    -> Word32
    -> Ptr Word32
    -> IO ()
    hb_ot_tags_from_script_and_language CUInt
    script' Ptr LanguageT
    language' Word32
    scriptCount Ptr Word32
    scriptTags Word32
    languageCount Ptr Word32
    languageTags
        Word32
    scriptTags' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    scriptTags
        Word32
    languageTags' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    languageTags
        LanguageT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr LanguageT
    language
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    scriptTags
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    languageTags
        (Word32, Word32) -> IO (Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    scriptTags', Word32
    languageTags')

    -- function ot_tags_from_script
    -- Args: [ Arg
    --           { argCName = "script"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "script_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_tag_1"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_tag_2"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_tags_from_script" hb_ot_tags_from_script ::
        CUInt ->                                -- script : TInterface (Name {namespace = "HarfBuzz", name = "script_t"})
        Word32 ->                               -- script_tag_1 : TBasicType TUInt32
        Word32 ->                               -- script_tag_2 : TBasicType TUInt32
        IO ()

    -- | /No description available in the introspection data./
    otTagsFromScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.Enums.ScriptT
        -> Word32
        -> Word32
        -> m ()
    otTagsFromScript :: ScriptT -> Word32 -> Word32 -> m ()
    otTagsFromScript script :: ScriptT
    script scriptTag1 :: Word32
    scriptTag1 scriptTag2 :: Word32
    scriptTag2 = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        let script' :: CUInt
    script' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (ScriptT -> Int) -> ScriptT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ScriptT -> Int
    forall a. Enum a => a -> Int
    fromEnum) ScriptT
    script
        CUInt -> Word32 -> Word32 -> IO ()
    hb_ot_tags_from_script CUInt
    script' Word32
    scriptTag1 Word32
    scriptTag2
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function ot_tag_to_script
    -- Args: [ Arg
    --           { argCName = "tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "script_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_tag_to_script" hb_ot_tag_to_script ::
        Word32 ->                               -- tag : TBasicType TUInt32
        IO CUInt

    -- | /No description available in the introspection data./
    otTagToScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Word32
        -> m HarfBuzz.Enums.ScriptT
    otTagToScript :: Word32 -> m ScriptT
    otTagToScript tag :: Word32
    tag = IO ScriptT -> m ScriptT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ScriptT -> m ScriptT) -> IO ScriptT -> m ScriptT
    forall a b. (a -> b) -> a -> b
    $ do
        CUInt
    result <- Word32 -> IO CUInt
    hb_ot_tag_to_script Word32
    tag
        let result' :: ScriptT
    result' = (Int -> ScriptT
    forall a. Enum a => Int -> a
    toEnum (Int -> ScriptT) -> (CUInt -> Int) -> CUInt -> ScriptT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        ScriptT -> IO ScriptT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ScriptT
    result'

    -- function ot_tag_to_language
    -- Args: [ Arg
    --           { argCName = "tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "language_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_tag_to_language" hb_ot_tag_to_language ::
        Word32 ->                               -- tag : TBasicType TUInt32
        IO (Ptr HarfBuzz.LanguageT.LanguageT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    otTagToLanguage ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Word32
        -> m HarfBuzz.LanguageT.LanguageT
    otTagToLanguage :: Word32 -> m LanguageT
    otTagToLanguage tag :: Word32
    tag = IO LanguageT -> m LanguageT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO LanguageT -> m LanguageT) -> IO LanguageT -> m LanguageT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr LanguageT
    result <- Word32 -> IO (Ptr LanguageT)
    hb_ot_tag_to_language Word32
    tag
        Text -> Ptr LanguageT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "otTagToLanguage" Ptr LanguageT
    result
        LanguageT
    result' <- ((ManagedPtr LanguageT -> LanguageT)
    -> Ptr LanguageT -> IO LanguageT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newPtr ManagedPtr LanguageT -> LanguageT
    HarfBuzz.LanguageT.LanguageT) Ptr LanguageT
    result
        LanguageT -> IO LanguageT
    forall (m :: * -> *) a. Monad m => a -> m a
    return LanguageT
    result'

    -- function ot_tag_from_language
    -- Args: [ Arg
    --           { argCName = "language"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "language_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_tag_from_language" hb_ot_tag_from_language ::
        Ptr HarfBuzz.LanguageT.LanguageT ->     -- language : TInterface (Name {namespace = "HarfBuzz", name = "language_t"})
        IO Word32

    -- | /No description available in the introspection data./
    otTagFromLanguage ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.LanguageT.LanguageT
        -> m Word32
    otTagFromLanguage :: LanguageT -> m Word32
    otTagFromLanguage language :: LanguageT
    language = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr LanguageT
    language' <- LanguageT -> IO (Ptr LanguageT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr LanguageT
    language
        Word32
    result <- Ptr LanguageT -> IO Word32
    hb_ot_tag_from_language Ptr LanguageT
    language'
        LanguageT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr LanguageT
    language
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_shape_glyphs_closure
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "features"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "feature_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_features"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyphs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_shape_glyphs_closure" hb_ot_shape_glyphs_closure ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- features : TInterface (Name {namespace = "HarfBuzz", name = "feature_t"})
        Word32 ->                               -- num_features : TBasicType TUInt
        Ptr HarfBuzz.SetT.SetT ->               -- glyphs : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    otShapeGlyphsClosure ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> HarfBuzz.BufferT.BufferT
        -> HarfBuzz.FeatureT.FeatureT
        -> Word32
        -> HarfBuzz.SetT.SetT
        -> m ()
    otShapeGlyphsClosure :: FontT -> BufferT -> FeatureT -> Word32 -> SetT -> m ()
    otShapeGlyphsClosure font :: FontT
    font buffer :: BufferT
    buffer features :: FeatureT
    features numFeatures :: Word32
    numFeatures glyphs :: SetT
    glyphs = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr FeatureT
    features' <- FeatureT -> IO (Ptr FeatureT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FeatureT
    features
        Ptr SetT
    glyphs' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    glyphs
        Ptr FontT
    -> Ptr BufferT -> Ptr FeatureT -> Word32 -> Ptr SetT -> IO ()
    hb_ot_shape_glyphs_closure Ptr FontT
    font' Ptr BufferT
    buffer' Ptr FeatureT
    features' Word32
    numFeatures Ptr SetT
    glyphs'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        FeatureT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FeatureT
    features
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    glyphs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function ot_name_list_names
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_entries"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "number of returned entries."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "num_entries"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText = Just "number of returned entries."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just
    --               (TCArray
    --                  False
    --                  (-1)
    --                  1
    --                  (TInterface
    --                     Name { namespace = "HarfBuzz" , name = "ot_name_entry_t" }))
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_name_list_names" hb_ot_name_list_names ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Ptr Word32 ->                           -- num_entries : TBasicType TUInt
        IO (Ptr HarfBuzz.OtNameEntryT.OtNameEntryT)

    -- | Enumerates all available name IDs and language combinations. Returned
    -- array is owned by the /@face@/ and should not be modified.  It can be
    -- used as long as /@face@/ is alive.
    --
    -- /Since: 2.1.0/
    otNameListNames ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: font face.
        -> m [HarfBuzz.OtNameEntryT.OtNameEntryT]
        -- ^ __Returns:__ Array of available name entries.
    otNameListNames :: FaceT -> m [OtNameEntryT]
    otNameListNames face :: FaceT
    face = IO [OtNameEntryT] -> m [OtNameEntryT]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [OtNameEntryT] -> m [OtNameEntryT])
    -> IO [OtNameEntryT] -> m [OtNameEntryT]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    numEntries <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr OtNameEntryT
    result <- Ptr FaceT -> Ptr Word32 -> IO (Ptr OtNameEntryT)
    hb_ot_name_list_names Ptr FaceT
    face' Ptr Word32
    numEntries
        Word32
    numEntries' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    numEntries
        Text -> Ptr OtNameEntryT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "otNameListNames" Ptr OtNameEntryT
    result
        [Ptr OtNameEntryT]
    result' <- (Int -> Word32 -> Ptr OtNameEntryT -> IO [Ptr OtNameEntryT]
    forall a b. Integral a => Int -> a -> Ptr b -> IO [Ptr b]
    unpackBlockArrayWithLength 16 Word32
    numEntries') Ptr OtNameEntryT
    result
        [OtNameEntryT]
    result'' <- (Ptr OtNameEntryT -> IO OtNameEntryT)
    -> [Ptr OtNameEntryT] -> IO [OtNameEntryT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM ((ManagedPtr OtNameEntryT -> OtNameEntryT)
    -> Ptr OtNameEntryT -> IO OtNameEntryT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newPtr ManagedPtr OtNameEntryT -> OtNameEntryT
    HarfBuzz.OtNameEntryT.OtNameEntryT) [Ptr OtNameEntryT]
    result'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    numEntries
        [OtNameEntryT] -> IO [OtNameEntryT]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [OtNameEntryT]
    result''

    -- function ot_name_get_utf8
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "name_id"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "OpenType name identifier to fetch."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "language_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "language to fetch the name for."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text_size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "input size of @text buffer, and output size of\n                                  text written to buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TCArray False (-1) 3 (TBasicType TUTF8)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "buffer to write fetched name into."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "text_size"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "input size of @text buffer, and output size of\n                                  text written to buffer."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_name_get_utf8" hb_ot_name_get_utf8 ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- name_id : TBasicType TUInt
        Ptr HarfBuzz.LanguageT.LanguageT ->     -- language : TInterface (Name {namespace = "HarfBuzz", name = "language_t"})
        Word32 ->                               -- text_size : TBasicType TUInt
        Ptr CString ->                          -- text : TCArray False (-1) 3 (TBasicType TUTF8)
        IO Word32

    -- | Fetches a font name from the OpenType \'name\' table.
    -- If /@language@/ is 'GI.HarfBuzz.Constants.LANGUAGE_INVALID', English (\"en\") is assumed.
    -- Returns string in UTF-8 encoding.
    --
    -- /Since: 2.1.0/
    otNameGetUtf8 ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: font face.
        -> Word32
        -- ^ /@nameId@/: OpenType name identifier to fetch.
        -> HarfBuzz.LanguageT.LanguageT
        -- ^ /@language@/: language to fetch the name for.
        -> [T.Text]
        -- ^ /@text@/: buffer to write fetched name into.
        -> m ((Word32, [T.Text]))
        -- ^ __Returns:__ full length of the requested string, or 0 if not found.
    otNameGetUtf8 :: FaceT -> Word32 -> LanguageT -> [Text] -> m (Word32, [Text])
    otNameGetUtf8 face :: FaceT
    face nameId :: Word32
    nameId language :: LanguageT
    language text :: [Text]
    text = IO (Word32, [Text]) -> m (Word32, [Text])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Text]) -> m (Word32, [Text]))
    -> IO (Word32, [Text]) -> m (Word32, [Text])
    forall a b. (a -> b) -> a -> b
    $ do
        let textSize :: Word32
    textSize = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [Text] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Text]
    text
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr LanguageT
    language' <- LanguageT -> IO (Ptr LanguageT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr LanguageT
    language
        Ptr CString
    text' <- [Text] -> IO (Ptr CString)
    packUTF8CArray [Text]
    text
        Word32
    result <- Ptr FaceT
    -> Word32 -> Ptr LanguageT -> Word32 -> Ptr CString -> IO Word32
    hb_ot_name_get_utf8 Ptr FaceT
    face' Word32
    nameId Ptr LanguageT
    language' Word32
    textSize Ptr CString
    text'
        [Text]
    text'' <- (Word32 -> Ptr CString -> IO [Text]
    forall a.
    (HasCallStack, Integral a) =>
    a -> Ptr CString -> IO [Text]
    unpackUTF8CArrayWithLength Word32
    textSize) Ptr CString
    text'
        (Word32 -> (CString -> IO ()) -> Ptr CString -> IO ()
    forall a b c.
    (Storable a, Integral b) =>
    b -> (a -> IO c) -> Ptr a -> IO ()
    mapCArrayWithLength Word32
    textSize) CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    text'
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    text'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        LanguageT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr LanguageT
    language
        (Word32, [Text]) -> IO (Word32, [Text])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Text]
    text'')

    -- function ot_name_get_utf32
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "name_id"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "OpenType name identifier to fetch."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "language_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "language to fetch the name for."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text_size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "input size of @text buffer, and output size of\n                                  text written to buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TCArray False (-1) 3 (TBasicType TUInt32)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "buffer to write fetched name into."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "text_size"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "input size of @text buffer, and output size of\n                                  text written to buffer."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_name_get_utf32" hb_ot_name_get_utf32 ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- name_id : TBasicType TUInt
        Ptr HarfBuzz.LanguageT.LanguageT ->     -- language : TInterface (Name {namespace = "HarfBuzz", name = "language_t"})
        Word32 ->                               -- text_size : TBasicType TUInt
        Ptr Word32 ->                           -- text : TCArray False (-1) 3 (TBasicType TUInt32)
        IO Word32

    -- | Fetches a font name from the OpenType \'name\' table.
    -- If /@language@/ is 'GI.HarfBuzz.Constants.LANGUAGE_INVALID', English (\"en\") is assumed.
    -- Returns string in UTF-32 encoding.
    --
    -- /Since: 2.1.0/
    otNameGetUtf32 ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: font face.
        -> Word32
        -- ^ /@nameId@/: OpenType name identifier to fetch.
        -> HarfBuzz.LanguageT.LanguageT
        -- ^ /@language@/: language to fetch the name for.
        -> [Word32]
        -- ^ /@text@/: buffer to write fetched name into.
        -> m ((Word32, [Word32]))
        -- ^ __Returns:__ full length of the requested string, or 0 if not found.
    otNameGetUtf32 :: FaceT -> Word32 -> LanguageT -> [Word32] -> m (Word32, [Word32])
    otNameGetUtf32 face :: FaceT
    face nameId :: Word32
    nameId language :: LanguageT
    language text :: [Word32]
    text = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        let textSize :: Word32
    textSize = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [Word32] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Word32]
    text
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr LanguageT
    language' <- LanguageT -> IO (Ptr LanguageT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr LanguageT
    language
        Ptr Word32
    text' <- [Word32] -> IO (Ptr Word32)
    forall a. Storable a => [a] -> IO (Ptr a)
    packStorableArray [Word32]
    text
        Word32
    result <- Ptr FaceT
    -> Word32 -> Ptr LanguageT -> Word32 -> Ptr Word32 -> IO Word32
    hb_ot_name_get_utf32 Ptr FaceT
    face' Word32
    nameId Ptr LanguageT
    language' Word32
    textSize Ptr Word32
    text'
        [Word32]
    text'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    textSize) Ptr Word32
    text'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    text'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        LanguageT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr LanguageT
    language
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    text'')

    -- function ot_name_get_utf16
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "name_id"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "OpenType name identifier to fetch."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "language_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "language to fetch the name for."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text_size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "input size of @text buffer, and output size of\n                                  text written to buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TCArray False (-1) 3 (TBasicType TUInt16)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "buffer to write fetched name into."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "text_size"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "input size of @text buffer, and output size of\n                                  text written to buffer."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_name_get_utf16" hb_ot_name_get_utf16 ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- name_id : TBasicType TUInt
        Ptr HarfBuzz.LanguageT.LanguageT ->     -- language : TInterface (Name {namespace = "HarfBuzz", name = "language_t"})
        Word32 ->                               -- text_size : TBasicType TUInt
        Ptr Word16 ->                           -- text : TCArray False (-1) 3 (TBasicType TUInt16)
        IO Word32

    -- | Fetches a font name from the OpenType \'name\' table.
    -- If /@language@/ is 'GI.HarfBuzz.Constants.LANGUAGE_INVALID', English (\"en\") is assumed.
    -- Returns string in UTF-16 encoding.
    --
    -- /Since: 2.1.0/
    otNameGetUtf16 ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: font face.
        -> Word32
        -- ^ /@nameId@/: OpenType name identifier to fetch.
        -> HarfBuzz.LanguageT.LanguageT
        -- ^ /@language@/: language to fetch the name for.
        -> [Word16]
        -- ^ /@text@/: buffer to write fetched name into.
        -> m ((Word32, [Word16]))
        -- ^ __Returns:__ full length of the requested string, or 0 if not found.
    otNameGetUtf16 :: FaceT -> Word32 -> LanguageT -> [Word16] -> m (Word32, [Word16])
    otNameGetUtf16 face :: FaceT
    face nameId :: Word32
    nameId language :: LanguageT
    language text :: [Word16]
    text = IO (Word32, [Word16]) -> m (Word32, [Word16])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word16]) -> m (Word32, [Word16]))
    -> IO (Word32, [Word16]) -> m (Word32, [Word16])
    forall a b. (a -> b) -> a -> b
    $ do
        let textSize :: Word32
    textSize = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [Word16] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Word16]
    text
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr LanguageT
    language' <- LanguageT -> IO (Ptr LanguageT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr LanguageT
    language
        Ptr Word16
    text' <- [Word16] -> IO (Ptr Word16)
    forall a. Storable a => [a] -> IO (Ptr a)
    packStorableArray [Word16]
    text
        Word32
    result <- Ptr FaceT
    -> Word32 -> Ptr LanguageT -> Word32 -> Ptr Word16 -> IO Word32
    hb_ot_name_get_utf16 Ptr FaceT
    face' Word32
    nameId Ptr LanguageT
    language' Word32
    textSize Ptr Word16
    text'
        [Word16]
    text'' <- (Word32 -> Ptr Word16 -> IO [Word16]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    textSize) Ptr Word16
    text'
        Ptr Word16 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word16
    text'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        LanguageT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr LanguageT
    language
        (Word32, [Word16]) -> IO (Word32, [Word16])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word16]
    text'')

    -- function ot_metrics_get_y_variation
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "metrics_tag"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "ot_metrics_tag_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_metrics_get_y_variation" hb_ot_metrics_get_y_variation ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- metrics_tag : TInterface (Name {namespace = "HarfBuzz", name = "ot_metrics_tag_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 2.6.0/
    otMetricsGetYVariation ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> HarfBuzz.Enums.OtMetricsTagT
        -> m Int32
    otMetricsGetYVariation :: FontT -> OtMetricsTagT -> m Int32
    otMetricsGetYVariation font :: FontT
    font metricsTag :: OtMetricsTagT
    metricsTag = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let metricsTag' :: CUInt
    metricsTag' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (OtMetricsTagT -> Int) -> OtMetricsTagT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . OtMetricsTagT -> Int
    forall a. Enum a => a -> Int
    fromEnum) OtMetricsTagT
    metricsTag
        Int32
    result <- Ptr FontT -> CUInt -> IO Int32
    hb_ot_metrics_get_y_variation Ptr FontT
    font' CUInt
    metricsTag'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_metrics_get_x_variation
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "metrics_tag"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "ot_metrics_tag_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_metrics_get_x_variation" hb_ot_metrics_get_x_variation ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- metrics_tag : TInterface (Name {namespace = "HarfBuzz", name = "ot_metrics_tag_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 2.6.0/
    otMetricsGetXVariation ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> HarfBuzz.Enums.OtMetricsTagT
        -> m Int32
    otMetricsGetXVariation :: FontT -> OtMetricsTagT -> m Int32
    otMetricsGetXVariation font :: FontT
    font metricsTag :: OtMetricsTagT
    metricsTag = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let metricsTag' :: CUInt
    metricsTag' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (OtMetricsTagT -> Int) -> OtMetricsTagT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . OtMetricsTagT -> Int
    forall a. Enum a => a -> Int
    fromEnum) OtMetricsTagT
    metricsTag
        Int32
    result <- Ptr FontT -> CUInt -> IO Int32
    hb_ot_metrics_get_x_variation Ptr FontT
    font' CUInt
    metricsTag'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_metrics_get_variation
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "metrics_tag"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "ot_metrics_tag_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TFloat)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_metrics_get_variation" hb_ot_metrics_get_variation ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- metrics_tag : TInterface (Name {namespace = "HarfBuzz", name = "ot_metrics_tag_t"})
        IO CFloat

    -- | /No description available in the introspection data./
    --
    -- /Since: 2.6.0/
    otMetricsGetVariation ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> HarfBuzz.Enums.OtMetricsTagT
        -> m Float
    otMetricsGetVariation :: FontT -> OtMetricsTagT -> m Float
    otMetricsGetVariation font :: FontT
    font metricsTag :: OtMetricsTagT
    metricsTag = IO Float -> m Float
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Float -> m Float) -> IO Float -> m Float
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let metricsTag' :: CUInt
    metricsTag' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (OtMetricsTagT -> Int) -> OtMetricsTagT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . OtMetricsTagT -> Int
    forall a. Enum a => a -> Int
    fromEnum) OtMetricsTagT
    metricsTag
        CFloat
    result <- Ptr FontT -> CUInt -> IO CFloat
    hb_ot_metrics_get_variation Ptr FontT
    font' CUInt
    metricsTag'
        let result' :: Float
    result' = CFloat -> Float
    forall a b. (Real a, Fractional b) => a -> b
    realToFrac CFloat
    result
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Float -> IO Float
    forall (m :: * -> *) a. Monad m => a -> m a
    return Float
    result'

    -- function ot_metrics_get_position
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a #hb_font_t object."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "metrics_tag"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "ot_metrics_tag_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "tag of metrics value you like to fetch."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "position"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "result of metrics value from the font."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_metrics_get_position" hb_ot_metrics_get_position ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- metrics_tag : TInterface (Name {namespace = "HarfBuzz", name = "ot_metrics_tag_t"})
        Ptr Int32 ->                            -- position : TBasicType TInt32
        IO Int32

    -- | It fetches metrics value corresponding to a given tag from a font.
    --
    -- /Since: 2.6.0/
    otMetricsGetPosition ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a t'GI.HarfBuzz.Structs.FontT.FontT' object.
        -> HarfBuzz.Enums.OtMetricsTagT
        -- ^ /@metricsTag@/: tag of metrics value you like to fetch.
        -> m ((Int32, Int32))
        -- ^ __Returns:__ Whether found the requested metrics in the font.
    otMetricsGetPosition :: FontT -> OtMetricsTagT -> m (Int32, Int32)
    otMetricsGetPosition font :: FontT
    font metricsTag :: OtMetricsTagT
    metricsTag = IO (Int32, Int32) -> m (Int32, Int32)
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let metricsTag' :: CUInt
    metricsTag' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (OtMetricsTagT -> Int) -> OtMetricsTagT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . OtMetricsTagT -> Int
    forall a. Enum a => a -> Int
    fromEnum) OtMetricsTagT
    metricsTag
        Ptr Int32
    position <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Int32
    result <- Ptr FontT -> CUInt -> Ptr Int32 -> IO Int32
    hb_ot_metrics_get_position Ptr FontT
    font' CUInt
    metricsTag' Ptr Int32
    position
        Int32
    position' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    position
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    position
        (Int32, Int32) -> IO (Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Int32
    position')

    -- function ot_meta_reference_entry
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a #hb_face_t object."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "meta_tag"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "ot_meta_tag_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "tag of metadata you like to have."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_meta_reference_entry" hb_ot_meta_reference_entry ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        CUInt ->                                -- meta_tag : TInterface (Name {namespace = "HarfBuzz", name = "ot_meta_tag_t"})
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | It fetches metadata entry of a given tag from a font.
    --
    -- /Since: 2.6.0/
    otMetaReferenceEntry ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a t'GI.HarfBuzz.Structs.FaceT.FaceT' object.
        -> HarfBuzz.Enums.OtMetaTagT
        -- ^ /@metaTag@/: tag of metadata you like to have.
        -> m HarfBuzz.BlobT.BlobT
        -- ^ __Returns:__ A blob containing the blob.
    otMetaReferenceEntry :: FaceT -> OtMetaTagT -> m BlobT
    otMetaReferenceEntry face :: FaceT
    face metaTag :: OtMetaTagT
    metaTag = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        let metaTag' :: CUInt
    metaTag' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (OtMetaTagT -> Int) -> OtMetaTagT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . OtMetaTagT -> Int
    forall a. Enum a => a -> Int
    fromEnum) OtMetaTagT
    metaTag
        Ptr BlobT
    result <- Ptr FaceT -> CUInt -> IO (Ptr BlobT)
    hb_ot_meta_reference_entry Ptr FaceT
    face' CUInt
    metaTag'
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "otMetaReferenceEntry" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'

    -- function ot_meta_get_entry_tags
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "entries_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "entries"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "ot_meta_tag_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_meta_get_entry_tags" hb_ot_meta_get_entry_tags ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- start_offset : TBasicType TUInt
        Word32 ->                               -- entries_count : TBasicType TUInt
        CUInt ->                                -- entries : TInterface (Name {namespace = "HarfBuzz", name = "ot_meta_tag_t"})
        IO Word32

    -- | /No description available in the introspection data./
    otMetaGetEntryTags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> Word32
        -> HarfBuzz.Enums.OtMetaTagT
        -> m Word32
    otMetaGetEntryTags :: FaceT -> Word32 -> Word32 -> OtMetaTagT -> m Word32
    otMetaGetEntryTags face :: FaceT
    face startOffset :: Word32
    startOffset entriesCount :: Word32
    entriesCount entries :: OtMetaTagT
    entries = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        let entries' :: CUInt
    entries' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (OtMetaTagT -> Int) -> OtMetaTagT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . OtMetaTagT -> Int
    forall a. Enum a => a -> Int
    fromEnum) OtMetaTagT
    entries
        Word32
    result <- Ptr FaceT -> Word32 -> Word32 -> CUInt -> IO Word32
    hb_ot_meta_get_entry_tags Ptr FaceT
    face' Word32
    startOffset Word32
    entriesCount CUInt
    entries'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_math_is_glyph_extended_shape
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The glyph index to test"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_math_is_glyph_extended_shape" hb_ot_math_is_glyph_extended_shape ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        IO Int32

    -- | Tests whether the given glyph index is an extended shape in the face.
    --
    -- /Since: 1.3.3/
    otMathIsGlyphExtendedShape ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@glyph@/: The glyph index to test
        -> m Int32
        -- ^ __Returns:__ true if the glyph is an extended shape, false otherwise
    otMathIsGlyphExtendedShape :: FaceT -> Word32 -> m Int32
    otMathIsGlyphExtendedShape face :: FaceT
    face glyph :: Word32
    glyph = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> Word32 -> IO Int32
    hb_ot_math_is_glyph_extended_shape Ptr FaceT
    face' Word32
    glyph
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_math_has_data
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to test" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_math_has_data" hb_ot_math_has_data ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | Tests whether a face has a @MATH@ table.
    --
    -- /Since: 1.3.3/
    otMathHasData ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to test
        -> m Int32
        -- ^ __Returns:__ true if the table is found, false otherwise
    otMathHasData :: FaceT -> m Int32
    otMathHasData face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_ot_math_has_data Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_math_get_min_connector_overlap
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "direction of the stretching (horizontal or vertical)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_math_get_min_connector_overlap" hb_ot_math_get_min_connector_overlap ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        IO Int32

    -- | Fetches the MathVariants table for the specified font and returns the
    -- minimum overlap of connecting glyphs that are required to draw a glyph
    -- assembly in the specified direction.
    --
    -- \<note>The /@direction@/ parameter is only used to select between horizontal
    -- or vertical directions for the construction. Even though all t'GI.HarfBuzz.Enums.DirectionT'
    -- values are accepted, only the result of @/HB_DIRECTION_IS_HORIZONTAL/@ is
    -- considered.\<\/note>
    --
    -- /Since: 1.3.3/
    otMathGetMinConnectorOverlap ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> HarfBuzz.Enums.DirectionT
        -- ^ /@direction@/: direction of the stretching (horizontal or vertical)
        -> m Int32
        -- ^ __Returns:__ requested minimum connector overlap or zero
    otMathGetMinConnectorOverlap :: FontT -> DirectionT -> m Int32
    otMathGetMinConnectorOverlap font :: FontT
    font direction :: DirectionT
    direction = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Int32
    result <- Ptr FontT -> CUInt -> IO Int32
    hb_ot_math_get_min_connector_overlap Ptr FontT
    font' CUInt
    direction'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_math_get_glyph_variants
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the glyph to stretch"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The direction of the stretching (horizontal or vertical)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first variant to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variants_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of variants to return;\n                          Output = the actual number of variants returned"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "variants"
    --           , argType =
    --               TCArray
    --                 False
    --                 (-1)
    --                 4
    --                 (TInterface
    --                    Name { namespace = "HarfBuzz" , name = "ot_math_glyph_variant_t" })
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "array of variants returned"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "variants_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of variants to return;\n                          Output = the actual number of variants returned"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_math_get_glyph_variants" hb_ot_math_get_glyph_variants ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Word32 ->                               -- start_offset : TBasicType TUInt
        Word32 ->                               -- variants_count : TBasicType TUInt
        Ptr HarfBuzz.OtMathGlyphVariantT.OtMathGlyphVariantT -> -- variants : TCArray False (-1) 4 (TInterface (Name {namespace = "HarfBuzz", name = "ot_math_glyph_variant_t"}))
        IO Word32

    -- | Fetches the MathGlyphConstruction for the specified font, glyph index, and
    -- direction. The corresponding list of size variants is returned as a list of
    -- t'GI.HarfBuzz.Structs.OtMathGlyphVariantT.OtMathGlyphVariantT' structs.
    --
    -- \<note>The /@direction@/ parameter is only used to select between horizontal
    -- or vertical directions for the construction. Even though all t'GI.HarfBuzz.Enums.DirectionT'
    -- values are accepted, only the result of @/HB_DIRECTION_IS_HORIZONTAL/@ is
    -- considered.\<\/note>
    --
    -- /Since: 1.3.3/
    otMathGetGlyphVariants ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> Word32
        -- ^ /@glyph@/: The index of the glyph to stretch
        -> HarfBuzz.Enums.DirectionT
        -- ^ /@direction@/: The direction of the stretching (horizontal or vertical)
        -> Word32
        -- ^ /@startOffset@/: offset of the first variant to retrieve
        -> [HarfBuzz.OtMathGlyphVariantT.OtMathGlyphVariantT]
        -- ^ /@variants@/: array of variants returned
        -> m ((Word32, [HarfBuzz.OtMathGlyphVariantT.OtMathGlyphVariantT]))
        -- ^ __Returns:__ the total number of size variants available or zero
    otMathGetGlyphVariants :: FontT
    -> Word32
    -> DirectionT
    -> Word32
    -> [OtMathGlyphVariantT]
    -> m (Word32, [OtMathGlyphVariantT])
    otMathGetGlyphVariants font :: FontT
    font glyph :: Word32
    glyph direction :: DirectionT
    direction startOffset :: Word32
    startOffset variants :: [OtMathGlyphVariantT]
    variants = IO (Word32, [OtMathGlyphVariantT])
    -> m (Word32, [OtMathGlyphVariantT])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [OtMathGlyphVariantT])
     -> m (Word32, [OtMathGlyphVariantT]))
    -> IO (Word32, [OtMathGlyphVariantT])
    -> m (Word32, [OtMathGlyphVariantT])
    forall a b. (a -> b) -> a -> b
    $ do
        let variantsCount :: Word32
    variantsCount = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [OtMathGlyphVariantT] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [OtMathGlyphVariantT]
    variants
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        [Ptr OtMathGlyphVariantT]
    variants' <- (OtMathGlyphVariantT -> IO (Ptr OtMathGlyphVariantT))
    -> [OtMathGlyphVariantT] -> IO [Ptr OtMathGlyphVariantT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM OtMathGlyphVariantT -> IO (Ptr OtMathGlyphVariantT)
    forall a. (HasCallStack, GBoxed a) => a -> IO (Ptr a)
    B.ManagedPtr.disownBoxed [OtMathGlyphVariantT]
    variants
        Ptr OtMathGlyphVariantT
    variants'' <- Int -> [Ptr OtMathGlyphVariantT] -> IO (Ptr OtMathGlyphVariantT)
    forall a. Int -> [Ptr a] -> IO (Ptr a)
    packBlockArray 8 [Ptr OtMathGlyphVariantT]
    variants'
        Word32
    result <- Ptr FontT
    -> Word32
    -> CUInt
    -> Word32
    -> Word32
    -> Ptr OtMathGlyphVariantT
    -> IO Word32
    hb_ot_math_get_glyph_variants Ptr FontT
    font' Word32
    glyph CUInt
    direction' Word32
    startOffset Word32
    variantsCount Ptr OtMathGlyphVariantT
    variants''
        [Ptr OtMathGlyphVariantT]
    variants''' <- (Int
    -> Word32
    -> Ptr OtMathGlyphVariantT
    -> IO [Ptr OtMathGlyphVariantT]
    forall a b.
    (Integral a, GBoxed b) =>
    Int -> a -> Ptr b -> IO [Ptr b]
    unpackBoxedArrayWithLength 8 Word32
    variantsCount) Ptr OtMathGlyphVariantT
    variants''
        [OtMathGlyphVariantT]
    variants'''' <- (Ptr OtMathGlyphVariantT -> IO OtMathGlyphVariantT)
    -> [Ptr OtMathGlyphVariantT] -> IO [OtMathGlyphVariantT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM ((ManagedPtr OtMathGlyphVariantT -> OtMathGlyphVariantT)
    -> Ptr OtMathGlyphVariantT -> IO OtMathGlyphVariantT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr OtMathGlyphVariantT -> OtMathGlyphVariantT
    HarfBuzz.OtMathGlyphVariantT.OtMathGlyphVariantT) [Ptr OtMathGlyphVariantT]
    variants'''
        Ptr OtMathGlyphVariantT -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr OtMathGlyphVariantT
    variants''
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (OtMathGlyphVariantT -> IO ()) -> [OtMathGlyphVariantT] -> IO ()
    forall (t :: * -> *) (m :: * -> *) a b.
    (Foldable t, Monad m) =>
    (a -> m b) -> t a -> m ()
    mapM_ OtMathGlyphVariantT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr [OtMathGlyphVariantT]
    variants
        (Word32, [OtMathGlyphVariantT])
    -> IO (Word32, [OtMathGlyphVariantT])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [OtMathGlyphVariantT]
    variants'''')

    -- function ot_math_get_glyph_top_accent_attachment
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The glyph index from which to retrieve the value"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_math_get_glyph_top_accent_attachment" hb_ot_math_get_glyph_top_accent_attachment ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        IO Int32

    -- | Fetches a top-accent-attachment value (if one exists) for the specified
    -- glyph index.
    --
    -- For any glyph that does not have a top-accent-attachment value - that is,
    -- a glyph not covered by the @MathTopAccentAttachment@ table (or, when
    -- /@font@/ has no @MathTopAccentAttachment@ table or no @MATH@ table, any
    -- glyph) - the function synthesizes a value, returning the position at
    -- one-half the glyph\'s advance width.
    --
    -- /Since: 1.3.3/
    otMathGetGlyphTopAccentAttachment ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> Word32
        -- ^ /@glyph@/: The glyph index from which to retrieve the value
        -> m Int32
        -- ^ __Returns:__ the top accent attachment of the glyph or 0.5 * the advance
        --               width of /@glyph@/
    otMathGetGlyphTopAccentAttachment :: FontT -> Word32 -> m Int32
    otMathGetGlyphTopAccentAttachment font :: FontT
    font glyph :: Word32
    glyph = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Int32
    result <- Ptr FontT -> Word32 -> IO Int32
    hb_ot_math_get_glyph_top_accent_attachment Ptr FontT
    font' Word32
    glyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_math_get_glyph_kerning
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The glyph index from which to retrieve the value"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "kern"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "ot_math_kern_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The #hb_ot_math_kern_t from which to retrieve the value"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "correction_height"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the correction height to use to determine the kerning."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_math_get_glyph_kerning" hb_ot_math_get_glyph_kerning ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        CUInt ->                                -- kern : TInterface (Name {namespace = "HarfBuzz", name = "ot_math_kern_t"})
        Int32 ->                                -- correction_height : TBasicType TInt32
        IO Int32

    -- | Fetches the math kerning (cut-ins) value for the specified font, glyph index, and
    -- /@kern@/.
    --
    -- If the MathKern table is found, the function examines it to find a height
    -- value that is greater or equal to /@correctionHeight@/. If such a height
    -- value is found, corresponding kerning value from the table is returned. If
    -- no such height value is found, the last kerning value is returned.
    --
    -- /Since: 1.3.3/
    otMathGetGlyphKerning ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> Word32
        -- ^ /@glyph@/: The glyph index from which to retrieve the value
        -> HarfBuzz.Enums.OtMathKernT
        -- ^ /@kern@/: The t'GI.HarfBuzz.Enums.OtMathKernT' from which to retrieve the value
        -> Int32
        -- ^ /@correctionHeight@/: the correction height to use to determine the kerning.
        -> m Int32
        -- ^ __Returns:__ requested kerning value or zero
    otMathGetGlyphKerning :: FontT -> Word32 -> OtMathKernT -> Int32 -> m Int32
    otMathGetGlyphKerning font :: FontT
    font glyph :: Word32
    glyph kern :: OtMathKernT
    kern correctionHeight :: Int32
    correctionHeight = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let kern' :: CUInt
    kern' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (OtMathKernT -> Int) -> OtMathKernT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . OtMathKernT -> Int
    forall a. Enum a => a -> Int
    fromEnum) OtMathKernT
    kern
        Int32
    result <- Ptr FontT -> Word32 -> CUInt -> Int32 -> IO Int32
    hb_ot_math_get_glyph_kerning Ptr FontT
    font' Word32
    glyph CUInt
    kern' Int32
    correctionHeight
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_math_get_glyph_italics_correction
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The glyph index from which to retrieve the value"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_math_get_glyph_italics_correction" hb_ot_math_get_glyph_italics_correction ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        IO Int32

    -- | Fetches an italics-correction value (if one exists) for the specified
    -- glyph index.
    --
    -- /Since: 1.3.3/
    otMathGetGlyphItalicsCorrection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> Word32
        -- ^ /@glyph@/: The glyph index from which to retrieve the value
        -> m Int32
        -- ^ __Returns:__ the italics correction of the glyph or zero
    otMathGetGlyphItalicsCorrection :: FontT -> Word32 -> m Int32
    otMathGetGlyphItalicsCorrection font :: FontT
    font glyph :: Word32
    glyph = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Int32
    result <- Ptr FontT -> Word32 -> IO Int32
    hb_ot_math_get_glyph_italics_correction Ptr FontT
    font' Word32
    glyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_math_get_glyph_assembly
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the glyph to stretch"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "direction of the stretching (horizontal or vertical)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first glyph part to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "parts_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = maximum number of glyph parts to return;\n              Output = actual number of parts returned"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "parts"
    --           , argType =
    --               TCArray
    --                 False
    --                 (-1)
    --                 4
    --                 (TInterface
    --                    Name { namespace = "HarfBuzz" , name = "ot_math_glyph_part_t" })
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the glyph parts returned"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "italics_correction"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "italics correction of the glyph assembly"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "parts_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = maximum number of glyph parts to return;\n              Output = actual number of parts returned"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_math_get_glyph_assembly" hb_ot_math_get_glyph_assembly ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Word32 ->                               -- start_offset : TBasicType TUInt
        Word32 ->                               -- parts_count : TBasicType TUInt
        Ptr HarfBuzz.OtMathGlyphPartT.OtMathGlyphPartT -> -- parts : TCArray False (-1) 4 (TInterface (Name {namespace = "HarfBuzz", name = "ot_math_glyph_part_t"}))
        Ptr Int32 ->                            -- italics_correction : TBasicType TInt32
        IO Word32

    -- | Fetches the GlyphAssembly for the specified font, glyph index, and direction.
    -- Returned are a list of t'GI.HarfBuzz.Structs.OtMathGlyphPartT.OtMathGlyphPartT' glyph parts that can be
    -- used to draw the glyph and an italics-correction value (if one is defined
    -- in the font).
    --
    -- \<note>The /@direction@/ parameter is only used to select between horizontal
    -- or vertical directions for the construction. Even though all t'GI.HarfBuzz.Enums.DirectionT'
    -- values are accepted, only the result of @/HB_DIRECTION_IS_HORIZONTAL/@ is
    -- considered.\<\/note>
    --
    -- /Since: 1.3.3/
    otMathGetGlyphAssembly ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> Word32
        -- ^ /@glyph@/: The index of the glyph to stretch
        -> HarfBuzz.Enums.DirectionT
        -- ^ /@direction@/: direction of the stretching (horizontal or vertical)
        -> Word32
        -- ^ /@startOffset@/: offset of the first glyph part to retrieve
        -> [HarfBuzz.OtMathGlyphPartT.OtMathGlyphPartT]
        -- ^ /@parts@/: the glyph parts returned
        -> m ((Word32, [HarfBuzz.OtMathGlyphPartT.OtMathGlyphPartT], Int32))
        -- ^ __Returns:__ the total number of parts in the glyph assembly
    otMathGetGlyphAssembly :: FontT
    -> Word32
    -> DirectionT
    -> Word32
    -> [OtMathGlyphPartT]
    -> m (Word32, [OtMathGlyphPartT], Int32)
    otMathGetGlyphAssembly font :: FontT
    font glyph :: Word32
    glyph direction :: DirectionT
    direction startOffset :: Word32
    startOffset parts :: [OtMathGlyphPartT]
    parts = IO (Word32, [OtMathGlyphPartT], Int32)
    -> m (Word32, [OtMathGlyphPartT], Int32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [OtMathGlyphPartT], Int32)
     -> m (Word32, [OtMathGlyphPartT], Int32))
    -> IO (Word32, [OtMathGlyphPartT], Int32)
    -> m (Word32, [OtMathGlyphPartT], Int32)
    forall a b. (a -> b) -> a -> b
    $ do
        let partsCount :: Word32
    partsCount = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [OtMathGlyphPartT] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [OtMathGlyphPartT]
    parts
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        [Ptr OtMathGlyphPartT]
    parts' <- (OtMathGlyphPartT -> IO (Ptr OtMathGlyphPartT))
    -> [OtMathGlyphPartT] -> IO [Ptr OtMathGlyphPartT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM OtMathGlyphPartT -> IO (Ptr OtMathGlyphPartT)
    forall a. (HasCallStack, GBoxed a) => a -> IO (Ptr a)
    B.ManagedPtr.disownBoxed [OtMathGlyphPartT]
    parts
        Ptr OtMathGlyphPartT
    parts'' <- Int -> [Ptr OtMathGlyphPartT] -> IO (Ptr OtMathGlyphPartT)
    forall a. Int -> [Ptr a] -> IO (Ptr a)
    packBlockArray 20 [Ptr OtMathGlyphPartT]
    parts'
        Ptr Int32
    italicsCorrection <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Word32
    result <- Ptr FontT
    -> Word32
    -> CUInt
    -> Word32
    -> Word32
    -> Ptr OtMathGlyphPartT
    -> Ptr Int32
    -> IO Word32
    hb_ot_math_get_glyph_assembly Ptr FontT
    font' Word32
    glyph CUInt
    direction' Word32
    startOffset Word32
    partsCount Ptr OtMathGlyphPartT
    parts'' Ptr Int32
    italicsCorrection
        [Ptr OtMathGlyphPartT]
    parts''' <- (Int -> Word32 -> Ptr OtMathGlyphPartT -> IO [Ptr OtMathGlyphPartT]
    forall a b.
    (Integral a, GBoxed b) =>
    Int -> a -> Ptr b -> IO [Ptr b]
    unpackBoxedArrayWithLength 20 Word32
    partsCount) Ptr OtMathGlyphPartT
    parts''
        [OtMathGlyphPartT]
    parts'''' <- (Ptr OtMathGlyphPartT -> IO OtMathGlyphPartT)
    -> [Ptr OtMathGlyphPartT] -> IO [OtMathGlyphPartT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM ((ManagedPtr OtMathGlyphPartT -> OtMathGlyphPartT)
    -> Ptr OtMathGlyphPartT -> IO OtMathGlyphPartT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr OtMathGlyphPartT -> OtMathGlyphPartT
    HarfBuzz.OtMathGlyphPartT.OtMathGlyphPartT) [Ptr OtMathGlyphPartT]
    parts'''
        Ptr OtMathGlyphPartT -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr OtMathGlyphPartT
    parts''
        Int32
    italicsCorrection' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    italicsCorrection
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (OtMathGlyphPartT -> IO ()) -> [OtMathGlyphPartT] -> IO ()
    forall (t :: * -> *) (m :: * -> *) a b.
    (Foldable t, Monad m) =>
    (a -> m b) -> t a -> m ()
    mapM_ OtMathGlyphPartT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr [OtMathGlyphPartT]
    parts
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    italicsCorrection
        (Word32, [OtMathGlyphPartT], Int32)
    -> IO (Word32, [OtMathGlyphPartT], Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [OtMathGlyphPartT]
    parts'''', Int32
    italicsCorrection')

    -- function ot_math_get_constant
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "constant"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "ot_math_constant_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "#hb_ot_math_constant_t the constant to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_math_get_constant" hb_ot_math_get_constant ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- constant : TInterface (Name {namespace = "HarfBuzz", name = "ot_math_constant_t"})
        IO Int32

    -- | Fetches the specified math constant. For most constants, the value returned
    -- is an @/hb_position_t/@.
    --
    -- However, if the requested constant is @/HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN/@,
    -- @/HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN/@ or
    -- @/HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN/@, then the return value is
    -- an integer between 0 and 100 representing that percentage.
    --
    -- /Since: 1.3.3/
    otMathGetConstant ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> HarfBuzz.Enums.OtMathConstantT
        -- ^ /@constant@/: t'GI.HarfBuzz.Enums.OtMathConstantT' the constant to retrieve
        -> m Int32
        -- ^ __Returns:__ the requested constant or zero
    otMathGetConstant :: FontT -> OtMathConstantT -> m Int32
    otMathGetConstant font :: FontT
    font constant :: OtMathConstantT
    constant = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let constant' :: CUInt
    constant' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt)
    -> (OtMathConstantT -> Int) -> OtMathConstantT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . OtMathConstantT -> Int
    forall a. Enum a => a -> Int
    fromEnum) OtMathConstantT
    constant
        Int32
    result <- Ptr FontT -> CUInt -> IO Int32
    hb_ot_math_get_constant Ptr FontT
    font' CUInt
    constant'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_layout_table_select_script
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Number of script tags in the array"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_tags"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Array of #hb_tag_t script tags"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "chosen_script"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_tag_t of the requested script"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_table_select_script" hb_ot_layout_table_select_script ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_count : TBasicType TUInt
        Word32 ->                               -- script_tags : TBasicType TUInt32
        Ptr Word32 ->                           -- script_index : TBasicType TUInt
        Ptr Word32 ->                           -- chosen_script : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 2.0.0/
    otLayoutTableSelectScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptCount@/: Number of script tags in the array
        -> Word32
        -- ^ /@scriptTags@/: Array of @/hb_tag_t/@ script tags
        -> m ((Int32, Word32, Word32))
    otLayoutTableSelectScript :: FaceT -> Word32 -> Word32 -> Word32 -> m (Int32, Word32, Word32)
    otLayoutTableSelectScript face :: FaceT
    face tableTag :: Word32
    tableTag scriptCount :: Word32
    scriptCount scriptTags :: Word32
    scriptTags = IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32))
    -> IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    scriptIndex <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    chosenScript <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT
    -> Word32
    -> Word32
    -> Word32
    -> Ptr Word32
    -> Ptr Word32
    -> IO Int32
    hb_ot_layout_table_select_script Ptr FaceT
    face' Word32
    tableTag Word32
    scriptCount Word32
    scriptTags Ptr Word32
    scriptIndex Ptr Word32
    chosenScript
        Word32
    scriptIndex' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    scriptIndex
        Word32
    chosenScript' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    chosenScript
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    scriptIndex
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    chosenScript
        (Int32, Word32, Word32) -> IO (Int32, Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    scriptIndex', Word32
    chosenScript')

    -- function ot_layout_table_get_script_tags
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first script tag to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of script tags to return;\n               Output = the actual number of script tags returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "script_tags"
    --           , argType = TCArray False (-1) 3 (TBasicType TUInt32)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The array of #hb_tag_t script tags found for the query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "script_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of script tags to return;\n               Output = the actual number of script tags returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_table_get_script_tags" hb_ot_layout_table_get_script_tags ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- script_count : TBasicType TUInt
        Ptr (Ptr Word32) ->                     -- script_tags : TCArray False (-1) 3 (TBasicType TUInt32)
        IO Word32

    -- | Fetches a list of all scripts enumerated in the specified face\'s GSUB table
    -- or GPOS table. The list returned will begin at the offset provided.
    otLayoutTableGetScriptTags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@startOffset@/: offset of the first script tag to retrieve
        -> m ((Word32, [Word32]))
    otLayoutTableGetScriptTags :: FaceT -> Word32 -> Word32 -> m (Word32, [Word32])
    otLayoutTableGetScriptTags face :: FaceT
    face tableTag :: Word32
    tableTag startOffset :: Word32
    startOffset = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    scriptCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Word32)
    scriptTags <- IO (Ptr (Ptr Word32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word32))
        Word32
    result <- Ptr FaceT
    -> Word32 -> Word32 -> Ptr Word32 -> Ptr (Ptr Word32) -> IO Word32
    hb_ot_layout_table_get_script_tags Ptr FaceT
    face' Word32
    tableTag Word32
    startOffset Ptr Word32
    scriptCount Ptr (Ptr Word32)
    scriptTags
        Word32
    scriptCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    scriptCount
        Ptr Word32
    scriptTags' <- Ptr (Ptr Word32) -> IO (Ptr Word32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word32)
    scriptTags
        [Word32]
    scriptTags'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    scriptCount') Ptr Word32
    scriptTags'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    scriptTags'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    scriptCount
        Ptr (Ptr Word32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word32)
    scriptTags
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    scriptTags'')

    -- function ot_layout_table_get_lookup_count
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_table_get_lookup_count" hb_ot_layout_table_get_lookup_count ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        IO Word32

    -- | Fetches the total number of lookups enumerated in the specified
    -- face\'s GSUB table or GPOS table.
    --
    -- /Since: 0.9.22/
    otLayoutTableGetLookupCount ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> m Word32
    otLayoutTableGetLookupCount :: FaceT -> Word32 -> m Word32
    otLayoutTableGetLookupCount face :: FaceT
    face tableTag :: Word32
    tableTag = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> Word32 -> IO Word32
    hb_ot_layout_table_get_lookup_count Ptr FaceT
    face' Word32
    tableTag
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_layout_table_get_feature_tags
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first feature tag to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of feature tags to return;\n                Output = the actual number of feature tags returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "feature_tags"
    --           , argType = TCArray False (-1) 3 (TBasicType TUInt32)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Array of feature tags found in the table"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "feature_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of feature tags to return;\n                Output = the actual number of feature tags returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_table_get_feature_tags" hb_ot_layout_table_get_feature_tags ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- feature_count : TBasicType TUInt
        Ptr (Ptr Word32) ->                     -- feature_tags : TCArray False (-1) 3 (TBasicType TUInt32)
        IO Word32

    -- | Fetches a list of all feature tags in the given face\'s GSUB or GPOS table.
    otLayoutTableGetFeatureTags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@startOffset@/: offset of the first feature tag to retrieve
        -> m ((Word32, [Word32]))
    otLayoutTableGetFeatureTags :: FaceT -> Word32 -> Word32 -> m (Word32, [Word32])
    otLayoutTableGetFeatureTags face :: FaceT
    face tableTag :: Word32
    tableTag startOffset :: Word32
    startOffset = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    featureCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Word32)
    featureTags <- IO (Ptr (Ptr Word32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word32))
        Word32
    result <- Ptr FaceT
    -> Word32 -> Word32 -> Ptr Word32 -> Ptr (Ptr Word32) -> IO Word32
    hb_ot_layout_table_get_feature_tags Ptr FaceT
    face' Word32
    tableTag Word32
    startOffset Ptr Word32
    featureCount Ptr (Ptr Word32)
    featureTags
        Word32
    featureCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    featureCount
        Ptr Word32
    featureTags' <- Ptr (Ptr Word32) -> IO (Ptr Word32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word32)
    featureTags
        [Word32]
    featureTags'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    featureCount') Ptr Word32
    featureTags'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureTags'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureCount
        Ptr (Ptr Word32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word32)
    featureTags
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    featureTags'')

    -- function ot_layout_table_find_script
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_tag_t of the script tag requested"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_table_find_script" hb_ot_layout_table_find_script ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_tag : TBasicType TUInt32
        Ptr Word32 ->                           -- script_index : TBasicType TUInt
        IO Int32

    -- | Fetches the index if a given script tag in the specified face\'s GSUB table
    -- or GPOS table.
    otLayoutTableFindScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptTag@/: @/hb_tag_t/@ of the script tag requested
        -> m ((Int32, Word32))
        -- ^ __Returns:__ true if the script is found, false otherwise
    otLayoutTableFindScript :: FaceT -> Word32 -> Word32 -> m (Int32, Word32)
    otLayoutTableFindScript face :: FaceT
    face tableTag :: Word32
    tableTag scriptTag :: Word32
    scriptTag = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    scriptIndex <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT -> Word32 -> Word32 -> Ptr Word32 -> IO Int32
    hb_ot_layout_table_find_script Ptr FaceT
    face' Word32
    tableTag Word32
    scriptTag Ptr Word32
    scriptIndex
        Word32
    scriptIndex' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    scriptIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    scriptIndex
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    scriptIndex')

    -- function ot_layout_table_find_feature_variations
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The variation coordinates to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "num_coords"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The number of variation coorinates"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variations_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The array of feature variations found for the query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_table_find_feature_variations" hb_ot_layout_table_find_feature_variations ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Int32 ->                                -- coords : TBasicType TInt
        Word32 ->                               -- num_coords : TBasicType TUInt
        Ptr Word32 ->                           -- variations_index : TBasicType TUInt
        IO Int32

    -- | Fetches a list of feature variations in the specified face\'s GSUB table
    -- or GPOS table, at the specified variation coordinates.
    otLayoutTableFindFeatureVariations ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Int32
        -- ^ /@coords@/: The variation coordinates to query
        -> Word32
        -- ^ /@numCoords@/: The number of variation coorinates
        -> m ((Int32, Word32))
    otLayoutTableFindFeatureVariations :: FaceT -> Word32 -> Int32 -> Word32 -> m (Int32, Word32)
    otLayoutTableFindFeatureVariations face :: FaceT
    face tableTag :: Word32
    tableTag coords :: Int32
    coords numCoords :: Word32
    numCoords = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    variationsIndex <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT -> Word32 -> Int32 -> Word32 -> Ptr Word32 -> IO Int32
    hb_ot_layout_table_find_feature_variations Ptr FaceT
    face' Word32
    tableTag Int32
    coords Word32
    numCoords Ptr Word32
    variationsIndex
        Word32
    variationsIndex' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    variationsIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    variationsIndex
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    variationsIndex')

    -- function ot_layout_table_choose_script
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_tags"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Array of #hb_tag_t script tags"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "chosen_script"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_tag_t of the script tag requested"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_table_choose_script" hb_ot_layout_table_choose_script ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_tags : TBasicType TUInt32
        Ptr Word32 ->                           -- script_index : TBasicType TUInt
        Ptr Word32 ->                           -- chosen_script : TBasicType TUInt32
        IO Int32

    -- | Deprecated since 2.0.0
    otLayoutTableChooseScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptTags@/: Array of @/hb_tag_t/@ script tags
        -> m ((Int32, Word32, Word32))
    otLayoutTableChooseScript :: FaceT -> Word32 -> Word32 -> m (Int32, Word32, Word32)
    otLayoutTableChooseScript face :: FaceT
    face tableTag :: Word32
    tableTag scriptTags :: Word32
    scriptTags = IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32))
    -> IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    scriptIndex <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    chosenScript <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT
    -> Word32 -> Word32 -> Ptr Word32 -> Ptr Word32 -> IO Int32
    hb_ot_layout_table_choose_script Ptr FaceT
    face' Word32
    tableTag Word32
    scriptTags Ptr Word32
    scriptIndex Ptr Word32
    chosenScript
        Word32
    scriptIndex' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    scriptIndex
        Word32
    chosenScript' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    chosenScript
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    scriptIndex
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    chosenScript
        (Int32, Word32, Word32) -> IO (Int32, Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    scriptIndex', Word32
    chosenScript')

    -- function ot_layout_script_select_language
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The number of languages in the specified script"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_tags"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The array of language tags"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested language"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_script_select_language" hb_ot_layout_script_select_language ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_index : TBasicType TUInt
        Word32 ->                               -- language_count : TBasicType TUInt
        Word32 ->                               -- language_tags : TBasicType TUInt32
        Ptr Word32 ->                           -- language_index : TBasicType TUInt
        IO Int32

    -- | Fetches the index of a given language tag in the specified face\'s GSUB table
    -- or GPOS table, underneath the specified script index.
    --
    -- /Since: 2.0.0/
    otLayoutScriptSelectLanguage ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptIndex@/: The index of the requested script tag
        -> Word32
        -- ^ /@languageCount@/: The number of languages in the specified script
        -> Word32
        -- ^ /@languageTags@/: The array of language tags
        -> m ((Int32, Word32))
        -- ^ __Returns:__ true if the language tag is found, false otherwise
    otLayoutScriptSelectLanguage :: FaceT -> Word32 -> Word32 -> Word32 -> Word32 -> m (Int32, Word32)
    otLayoutScriptSelectLanguage face :: FaceT
    face tableTag :: Word32
    tableTag scriptIndex :: Word32
    scriptIndex languageCount :: Word32
    languageCount languageTags :: Word32
    languageTags = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    languageIndex <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT
    -> Word32 -> Word32 -> Word32 -> Word32 -> Ptr Word32 -> IO Int32
    hb_ot_layout_script_select_language Ptr FaceT
    face' Word32
    tableTag Word32
    scriptIndex Word32
    languageCount Word32
    languageTags Ptr Word32
    languageIndex
        Word32
    languageIndex' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    languageIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    languageIndex
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    languageIndex')

    -- function ot_layout_script_get_language_tags
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first language tag to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of language tags to return;\n                 Output = the actual number of language tags returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "language_tags"
    --           , argType = TCArray False (-1) 4 (TBasicType TUInt32)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Array of language tags found in the table"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "language_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of language tags to return;\n                 Output = the actual number of language tags returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_script_get_language_tags" hb_ot_layout_script_get_language_tags ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_index : TBasicType TUInt
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- language_count : TBasicType TUInt
        Ptr (Ptr Word32) ->                     -- language_tags : TCArray False (-1) 4 (TBasicType TUInt32)
        IO Word32

    -- | Fetches a list of language tags in the given face\'s GSUB or GPOS table, underneath
    -- the specified script index. The list returned will begin at the offset provided.
    otLayoutScriptGetLanguageTags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptIndex@/: The index of the requested script tag
        -> Word32
        -- ^ /@startOffset@/: offset of the first language tag to retrieve
        -> m ((Word32, [Word32]))
    otLayoutScriptGetLanguageTags :: FaceT -> Word32 -> Word32 -> Word32 -> m (Word32, [Word32])
    otLayoutScriptGetLanguageTags face :: FaceT
    face tableTag :: Word32
    tableTag scriptIndex :: Word32
    scriptIndex startOffset :: Word32
    startOffset = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    languageCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Word32)
    languageTags <- IO (Ptr (Ptr Word32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word32))
        Word32
    result <- Ptr FaceT
    -> Word32
    -> Word32
    -> Word32
    -> Ptr Word32
    -> Ptr (Ptr Word32)
    -> IO Word32
    hb_ot_layout_script_get_language_tags Ptr FaceT
    face' Word32
    tableTag Word32
    scriptIndex Word32
    startOffset Ptr Word32
    languageCount Ptr (Ptr Word32)
    languageTags
        Word32
    languageCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    languageCount
        Ptr Word32
    languageTags' <- Ptr (Ptr Word32) -> IO (Ptr Word32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word32)
    languageTags
        [Word32]
    languageTags'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    languageCount') Ptr Word32
    languageTags'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    languageTags'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    languageCount
        Ptr (Ptr Word32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word32)
    languageTags
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    languageTags'')

    -- function ot_layout_script_find_language
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_tag_t of the requested language"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested language"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_script_find_language" hb_ot_layout_script_find_language ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_index : TBasicType TUInt
        Word32 ->                               -- language_tag : TBasicType TUInt32
        Word32 ->                               -- language_index : TBasicType TUInt
        IO Int32

    {-# DEPRECATED otLayoutScriptFindLanguage ["??"] #-}
    -- | Fetches the index of a given language tag in the specified face\'s GSUB table
    -- or GPOS table, underneath the specified script tag.
    otLayoutScriptFindLanguage ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptIndex@/: The index of the requested script tag
        -> Word32
        -- ^ /@languageTag@/: The @/hb_tag_t/@ of the requested language
        -> Word32
        -- ^ /@languageIndex@/: The index of the requested language
        -> m Int32
        -- ^ __Returns:__ true if the language tag is found, false otherwise
    otLayoutScriptFindLanguage :: FaceT -> Word32 -> Word32 -> Word32 -> Word32 -> m Int32
    otLayoutScriptFindLanguage face :: FaceT
    face tableTag :: Word32
    tableTag scriptIndex :: Word32
    scriptIndex languageTag :: Word32
    languageTag languageIndex :: Word32
    languageIndex = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> Word32 -> Word32 -> Word32 -> Word32 -> IO Int32
    hb_ot_layout_script_find_language Ptr FaceT
    face' Word32
    tableTag Word32
    scriptIndex Word32
    languageTag Word32
    languageIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_layout_lookups_substitute_closure
    -- XXX Could not generate function ot_layout_lookups_substitute_closure

    -- Not implemented: Don't know how to allocate "glyphs" of type TInterface (Name {namespace = "HarfBuzz", name = "set_t"})

    -- function ot_layout_lookup_would_substitute
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "lookup_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the lookup to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyphs"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The sequence of glyphs to query for substitution"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyphs_length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The length of the glyph sequence"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "zero_context"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "#hb_bool_t indicating whether substitutions should be context-free"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_lookup_would_substitute" hb_ot_layout_lookup_would_substitute ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- lookup_index : TBasicType TUInt
        Word32 ->                               -- glyphs : TBasicType TUInt32
        Word32 ->                               -- glyphs_length : TBasicType TUInt
        Int32 ->                                -- zero_context : TBasicType TInt
        IO Int32

    -- | Tests whether a specified lookup in the specified face would
    -- trigger a substitution on the given glyph sequence.
    --
    -- /Since: 0.9.7/
    otLayoutLookupWouldSubstitute ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@lookupIndex@/: The index of the lookup to query
        -> Word32
        -- ^ /@glyphs@/: The sequence of glyphs to query for substitution
        -> Word32
        -- ^ /@glyphsLength@/: The length of the glyph sequence
        -> Int32
        -- ^ /@zeroContext@/: @/hb_bool_t/@ indicating whether substitutions should be context-free
        -> m Int32
        -- ^ __Returns:__ true if a substitution would be triggered, false otherwise
    otLayoutLookupWouldSubstitute :: FaceT -> Word32 -> Word32 -> Word32 -> Int32 -> m Int32
    otLayoutLookupWouldSubstitute face :: FaceT
    face lookupIndex :: Word32
    lookupIndex glyphs :: Word32
    glyphs glyphsLength :: Word32
    glyphsLength zeroContext :: Int32
    zeroContext = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> Word32 -> Word32 -> Word32 -> Int32 -> IO Int32
    hb_ot_layout_lookup_would_substitute Ptr FaceT
    face' Word32
    lookupIndex Word32
    glyphs Word32
    glyphsLength Int32
    zeroContext
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_layout_lookup_substitute_closure
    -- XXX Could not generate function ot_layout_lookup_substitute_closure

    -- Not implemented: Don't know how to allocate "glyphs" of type TInterface (Name {namespace = "HarfBuzz", name = "set_t"})

    -- function ot_layout_lookup_collect_glyphs
    -- XXX Could not generate function ot_layout_lookup_collect_glyphs

    -- Not implemented: Don't know how to allocate "glyphs_before" of type TInterface (Name {namespace = "HarfBuzz", name = "set_t"})

    -- function ot_layout_language_get_required_feature_index
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested language tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested feature"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_language_get_required_feature_index" hb_ot_layout_language_get_required_feature_index ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_index : TBasicType TUInt
        Word32 ->                               -- language_index : TBasicType TUInt
        Ptr Word32 ->                           -- feature_index : TBasicType TUInt
        IO Int32

    -- | Fetches the index of a requested feature in the given face\'s GSUB or GPOS table,
    -- underneath the specified script and language.
    otLayoutLanguageGetRequiredFeatureIndex ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptIndex@/: The index of the requested script tag
        -> Word32
        -- ^ /@languageIndex@/: The index of the requested language tag
        -> m ((Int32, Word32))
        -- ^ __Returns:__ true if the feature is found, false otherwise
    otLayoutLanguageGetRequiredFeatureIndex :: FaceT -> Word32 -> Word32 -> Word32 -> m (Int32, Word32)
    otLayoutLanguageGetRequiredFeatureIndex face :: FaceT
    face tableTag :: Word32
    tableTag scriptIndex :: Word32
    scriptIndex languageIndex :: Word32
    languageIndex = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    featureIndex <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT -> Word32 -> Word32 -> Word32 -> Ptr Word32 -> IO Int32
    hb_ot_layout_language_get_required_feature_index Ptr FaceT
    face' Word32
    tableTag Word32
    scriptIndex Word32
    languageIndex Ptr Word32
    featureIndex
        Word32
    featureIndex' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    featureIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureIndex
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    featureIndex')

    -- function ot_layout_language_get_required_feature
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested language tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested feature"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "feature_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_tag_t of the requested feature"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_language_get_required_feature" hb_ot_layout_language_get_required_feature ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_index : TBasicType TUInt
        Word32 ->                               -- language_index : TBasicType TUInt
        Ptr Word32 ->                           -- feature_index : TBasicType TUInt
        Ptr Word32 ->                           -- feature_tag : TBasicType TUInt32
        IO Int32

    -- | Fetches the tag of a requested feature index in the given face\'s GSUB or GPOS table,
    -- underneath the specified script and language.
    --
    -- /Since: 0.9.30/
    otLayoutLanguageGetRequiredFeature ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptIndex@/: The index of the requested script tag
        -> Word32
        -- ^ /@languageIndex@/: The index of the requested language tag
        -> m ((Int32, Word32, Word32))
        -- ^ __Returns:__ true if the feature is found, false otherwise
    otLayoutLanguageGetRequiredFeature :: FaceT -> Word32 -> Word32 -> Word32 -> m (Int32, Word32, Word32)
    otLayoutLanguageGetRequiredFeature face :: FaceT
    face tableTag :: Word32
    tableTag scriptIndex :: Word32
    scriptIndex languageIndex :: Word32
    languageIndex = IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32))
    -> IO (Int32, Word32, Word32) -> m (Int32, Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    featureIndex <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    featureTag <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT
    -> Word32
    -> Word32
    -> Word32
    -> Ptr Word32
    -> Ptr Word32
    -> IO Int32
    hb_ot_layout_language_get_required_feature Ptr FaceT
    face' Word32
    tableTag Word32
    scriptIndex Word32
    languageIndex Ptr Word32
    featureIndex Ptr Word32
    featureTag
        Word32
    featureIndex' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    featureIndex
        Word32
    featureTag' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    featureTag
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureIndex
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureTag
        (Int32, Word32, Word32) -> IO (Int32, Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    featureIndex', Word32
    featureTag')

    -- function ot_layout_language_get_feature_tags
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested language tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first feature tag to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of feature tags to return;\n                Output = the actual number of feature tags returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "feature_tags"
    --           , argType = TCArray False (-1) 5 (TBasicType TUInt32)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The array of #hb_tag_t feature tags found for the query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "feature_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of feature tags to return;\n                Output = the actual number of feature tags returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_language_get_feature_tags" hb_ot_layout_language_get_feature_tags ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_index : TBasicType TUInt
        Word32 ->                               -- language_index : TBasicType TUInt
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- feature_count : TBasicType TUInt
        Ptr (Ptr Word32) ->                     -- feature_tags : TCArray False (-1) 5 (TBasicType TUInt32)
        IO Word32

    -- | Fetches a list of all features in the specified face\'s GSUB table
    -- or GPOS table, underneath the specified script and language. The list
    -- returned will begin at the offset provided.
    otLayoutLanguageGetFeatureTags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptIndex@/: The index of the requested script tag
        -> Word32
        -- ^ /@languageIndex@/: The index of the requested language tag
        -> Word32
        -- ^ /@startOffset@/: offset of the first feature tag to retrieve
        -> m ((Word32, [Word32]))
    otLayoutLanguageGetFeatureTags :: FaceT
    -> Word32 -> Word32 -> Word32 -> Word32 -> m (Word32, [Word32])
    otLayoutLanguageGetFeatureTags face :: FaceT
    face tableTag :: Word32
    tableTag scriptIndex :: Word32
    scriptIndex languageIndex :: Word32
    languageIndex startOffset :: Word32
    startOffset = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    featureCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Word32)
    featureTags <- IO (Ptr (Ptr Word32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word32))
        Word32
    result <- Ptr FaceT
    -> Word32
    -> Word32
    -> Word32
    -> Word32
    -> Ptr Word32
    -> Ptr (Ptr Word32)
    -> IO Word32
    hb_ot_layout_language_get_feature_tags Ptr FaceT
    face' Word32
    tableTag Word32
    scriptIndex Word32
    languageIndex Word32
    startOffset Ptr Word32
    featureCount Ptr (Ptr Word32)
    featureTags
        Word32
    featureCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    featureCount
        Ptr Word32
    featureTags' <- Ptr (Ptr Word32) -> IO (Ptr Word32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word32)
    featureTags
        [Word32]
    featureTags'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    featureCount') Ptr Word32
    featureTags'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureTags'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureCount
        Ptr (Ptr Word32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word32)
    featureTags
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    featureTags'')

    -- function ot_layout_language_get_feature_indexes
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested language tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first feature tag to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of feature tags to return;\n                Output: the actual number of feature tags returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "feature_indexes"
    --           , argType = TCArray False (-1) 5 (TBasicType TUInt)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The array of feature indexes found for the query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "feature_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of feature tags to return;\n                Output: the actual number of feature tags returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_language_get_feature_indexes" hb_ot_layout_language_get_feature_indexes ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_index : TBasicType TUInt
        Word32 ->                               -- language_index : TBasicType TUInt
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- feature_count : TBasicType TUInt
        Ptr (Ptr Word32) ->                     -- feature_indexes : TCArray False (-1) 5 (TBasicType TUInt)
        IO Word32

    -- | Fetches a list of all features in the specified face\'s GSUB table
    -- or GPOS table, underneath the specified script and language. The list
    -- returned will begin at the offset provided.
    otLayoutLanguageGetFeatureIndexes ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptIndex@/: The index of the requested script tag
        -> Word32
        -- ^ /@languageIndex@/: The index of the requested language tag
        -> Word32
        -- ^ /@startOffset@/: offset of the first feature tag to retrieve
        -> m ((Word32, [Word32]))
    otLayoutLanguageGetFeatureIndexes :: FaceT
    -> Word32 -> Word32 -> Word32 -> Word32 -> m (Word32, [Word32])
    otLayoutLanguageGetFeatureIndexes face :: FaceT
    face tableTag :: Word32
    tableTag scriptIndex :: Word32
    scriptIndex languageIndex :: Word32
    languageIndex startOffset :: Word32
    startOffset = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    featureCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Word32)
    featureIndexes <- IO (Ptr (Ptr Word32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word32))
        Word32
    result <- Ptr FaceT
    -> Word32
    -> Word32
    -> Word32
    -> Word32
    -> Ptr Word32
    -> Ptr (Ptr Word32)
    -> IO Word32
    hb_ot_layout_language_get_feature_indexes Ptr FaceT
    face' Word32
    tableTag Word32
    scriptIndex Word32
    languageIndex Word32
    startOffset Ptr Word32
    featureCount Ptr (Ptr Word32)
    featureIndexes
        Word32
    featureCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    featureCount
        Ptr Word32
    featureIndexes' <- Ptr (Ptr Word32) -> IO (Ptr Word32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word32)
    featureIndexes
        [Word32]
    featureIndexes'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    featureCount') Ptr Word32
    featureIndexes'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureIndexes'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureCount
        Ptr (Ptr Word32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word32)
    featureIndexes
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    featureIndexes'')

    -- function ot_layout_language_find_feature
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested script tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested language tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_tag_t of the feature tag requested"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested feature"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_language_find_feature" hb_ot_layout_language_find_feature ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- script_index : TBasicType TUInt
        Word32 ->                               -- language_index : TBasicType TUInt
        Word32 ->                               -- feature_tag : TBasicType TUInt32
        Ptr Word32 ->                           -- feature_index : TBasicType TUInt
        IO Int32

    -- | Fetches the index of a given feature tag in the specified face\'s GSUB table
    -- or GPOS table, underneath the specified script and language.
    otLayoutLanguageFindFeature ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@scriptIndex@/: The index of the requested script tag
        -> Word32
        -- ^ /@languageIndex@/: The index of the requested language tag
        -> Word32
        -- ^ /@featureTag@/: @/hb_tag_t/@ of the feature tag requested
        -> m ((Int32, Word32))
        -- ^ __Returns:__ true if the feature is found, false otherwise
    otLayoutLanguageFindFeature :: FaceT -> Word32 -> Word32 -> Word32 -> Word32 -> m (Int32, Word32)
    otLayoutLanguageFindFeature face :: FaceT
    face tableTag :: Word32
    tableTag scriptIndex :: Word32
    scriptIndex languageIndex :: Word32
    languageIndex featureTag :: Word32
    featureTag = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    featureIndex <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT
    -> Word32 -> Word32 -> Word32 -> Word32 -> Ptr Word32 -> IO Int32
    hb_ot_layout_language_find_feature Ptr FaceT
    face' Word32
    tableTag Word32
    scriptIndex Word32
    languageIndex Word32
    featureTag Ptr Word32
    featureIndex
        Word32
    featureIndex' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    featureIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    featureIndex
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    featureIndex')

    -- function ot_layout_has_substitution
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_has_substitution" hb_ot_layout_has_substitution ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | Tests whether the specified face includes any GSUB substitutions.
    otLayoutHasSubstitution ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> m Int32
        -- ^ __Returns:__ true if data found, false otherwise
    otLayoutHasSubstitution :: FaceT -> m Int32
    otLayoutHasSubstitution face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_ot_layout_has_substitution Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_layout_has_positioning
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_has_positioning" hb_ot_layout_has_positioning ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | /No description available in the introspection data./
    otLayoutHasPositioning ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> m Int32
        -- ^ __Returns:__ true if the face has GPOS data, false otherwise
    otLayoutHasPositioning :: FaceT -> m Int32
    otLayoutHasPositioning face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_ot_layout_has_positioning Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_layout_has_glyph_classes
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_has_glyph_classes" hb_ot_layout_has_glyph_classes ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | Tests whether a face has any glyph classes defined in its GDEF table.
    otLayoutHasGlyphClasses ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> m Int32
        -- ^ __Returns:__ true if data found, false otherwise
    otLayoutHasGlyphClasses :: FaceT -> m Int32
    otLayoutHasGlyphClasses face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_ot_layout_has_glyph_classes Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_layout_get_size_params
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "design_size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The design size of the face"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "subfamily_id"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The identifier of the face within the font subfamily"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "subfamily_name_id"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "The \8216name\8217 table name ID of the face within the font subfamily"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "range_start"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The minimum size of the recommended size range for the face"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "range_end"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The maximum size of the recommended size range for the face"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_get_size_params" hb_ot_layout_get_size_params ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Ptr Word32 ->                           -- design_size : TBasicType TUInt
        Ptr Word32 ->                           -- subfamily_id : TBasicType TUInt
        Ptr Word32 ->                           -- subfamily_name_id : TBasicType TUInt
        Ptr Word32 ->                           -- range_start : TBasicType TUInt
        Ptr Word32 ->                           -- range_end : TBasicType TUInt
        IO Int32

    -- | Fetches optical-size feature data (i.e., the @size@ feature from GPOS). Note that
    -- the subfamily_id and the subfamily name string (accessible via the subfamily_name_id)
    -- as used here are defined as pertaining only to fonts within a font family that differ
    -- specifically in their respective size ranges; other ways to differentiate fonts within
    -- a subfamily are not covered by the @size@ feature.
    --
    -- For more information on this distinction, see the <http://developer.gnome.org/harfbuzz/stable/
    -- https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#tag-size `size` feature documentation>.
    --
    -- /Since: 0.9.10/
    otLayoutGetSizeParams ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> m ((Int32, Word32, Word32, Word32, Word32, Word32))
        -- ^ __Returns:__ true if data found, false otherwise
    otLayoutGetSizeParams :: FaceT -> m (Int32, Word32, Word32, Word32, Word32, Word32)
    otLayoutGetSizeParams face :: FaceT
    face = IO (Int32, Word32, Word32, Word32, Word32, Word32)
    -> m (Int32, Word32, Word32, Word32, Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32, Word32, Word32, Word32, Word32)
     -> m (Int32, Word32, Word32, Word32, Word32, Word32))
    -> IO (Int32, Word32, Word32, Word32, Word32, Word32)
    -> m (Int32, Word32, Word32, Word32, Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    designSize <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    subfamilyId <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    subfamilyNameId <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    rangeStart <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    rangeEnd <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT
    -> Ptr Word32
    -> Ptr Word32
    -> Ptr Word32
    -> Ptr Word32
    -> Ptr Word32
    -> IO Int32
    hb_ot_layout_get_size_params Ptr FaceT
    face' Ptr Word32
    designSize Ptr Word32
    subfamilyId Ptr Word32
    subfamilyNameId Ptr Word32
    rangeStart Ptr Word32
    rangeEnd
        Word32
    designSize' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    designSize
        Word32
    subfamilyId' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    subfamilyId
        Word32
    subfamilyNameId' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    subfamilyNameId
        Word32
    rangeStart' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    rangeStart
        Word32
    rangeEnd' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    rangeEnd
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    designSize
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    subfamilyId
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    subfamilyNameId
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    rangeStart
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    rangeEnd
        (Int32, Word32, Word32, Word32, Word32, Word32)
    -> IO (Int32, Word32, Word32, Word32, Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    designSize', Word32
    subfamilyId', Word32
    subfamilyNameId', Word32
    rangeStart', Word32
    rangeEnd')

    -- function ot_layout_get_ligature_carets
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_font_t to work on"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_direction_t text direction to use"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_codepoint_t code point to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "offset of the first caret position to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "caret_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of caret positions to return;\n              Output = the actual number of caret positions returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "caret_array"
    --           , argType = TCArray False (-1) 4 (TBasicType TInt32)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The array of caret positions found for the query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "caret_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of caret positions to return;\n              Output = the actual number of caret positions returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_get_ligature_carets" hb_ot_layout_get_ligature_carets ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- caret_count : TBasicType TUInt
        Ptr (Ptr Int32) ->                      -- caret_array : TCArray False (-1) 4 (TBasicType TInt32)
        IO Word32

    -- | Fetches a list of the caret positions defined for a ligature glyph in the GDEF
    -- table of the font. The list returned will begin at the offset provided.
    otLayoutGetLigatureCarets ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: The t'GI.HarfBuzz.Structs.FontT.FontT' to work on
        -> HarfBuzz.Enums.DirectionT
        -- ^ /@direction@/: The t'GI.HarfBuzz.Enums.DirectionT' text direction to use
        -> Word32
        -- ^ /@glyph@/: The @/hb_codepoint_t/@ code point to query
        -> Word32
        -- ^ /@startOffset@/: offset of the first caret position to retrieve
        -> m ((Word32, [Int32]))
    otLayoutGetLigatureCarets :: FontT -> DirectionT -> Word32 -> Word32 -> m (Word32, [Int32])
    otLayoutGetLigatureCarets font :: FontT
    font direction :: DirectionT
    direction glyph :: Word32
    glyph startOffset :: Word32
    startOffset = IO (Word32, [Int32]) -> m (Word32, [Int32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Int32]) -> m (Word32, [Int32]))
    -> IO (Word32, [Int32]) -> m (Word32, [Int32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr Word32
    caretCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Int32)
    caretArray <- IO (Ptr (Ptr Int32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Int32))
        Word32
    result <- Ptr FontT
    -> CUInt
    -> Word32
    -> Word32
    -> Ptr Word32
    -> Ptr (Ptr Int32)
    -> IO Word32
    hb_ot_layout_get_ligature_carets Ptr FontT
    font' CUInt
    direction' Word32
    glyph Word32
    startOffset Ptr Word32
    caretCount Ptr (Ptr Int32)
    caretArray
        Word32
    caretCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    caretCount
        Ptr Int32
    caretArray' <- Ptr (Ptr Int32) -> IO (Ptr Int32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Int32)
    caretArray
        [Int32]
    caretArray'' <- (Word32 -> Ptr Int32 -> IO [Int32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    caretCount') Ptr Int32
    caretArray'
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    caretArray'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    caretCount
        Ptr (Ptr Int32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Int32)
    caretArray
        (Word32, [Int32]) -> IO (Word32, [Int32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Int32]
    caretArray'')

    -- function ot_layout_get_glyphs_in_class
    -- XXX Could not generate function ot_layout_get_glyphs_in_class

    -- Not implemented: Don't know how to allocate "glyphs" of type TInterface (Name {namespace = "HarfBuzz", name = "set_t"})

    -- function ot_layout_get_glyph_class
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_face_t to work on"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_codepoint_t code point to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "ot_layout_glyph_class_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_get_glyph_class" hb_ot_layout_get_glyph_class ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        IO CUInt

    -- | Fetches the GDEF class of the requested glyph in the specified face.
    --
    -- /Since: 0.9.7/
    otLayoutGetGlyphClass ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: The t'GI.HarfBuzz.Structs.FaceT.FaceT' to work on
        -> Word32
        -- ^ /@glyph@/: The @/hb_codepoint_t/@ code point to query
        -> m HarfBuzz.Enums.OtLayoutGlyphClassT
        -- ^ __Returns:__ The t'GI.HarfBuzz.Enums.OtLayoutGlyphClassT' glyph class of the given code
        -- point in the GDEF table of the face.
    otLayoutGetGlyphClass :: FaceT -> Word32 -> m OtLayoutGlyphClassT
    otLayoutGetGlyphClass face :: FaceT
    face glyph :: Word32
    glyph = IO OtLayoutGlyphClassT -> m OtLayoutGlyphClassT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO OtLayoutGlyphClassT -> m OtLayoutGlyphClassT)
    -> IO OtLayoutGlyphClassT -> m OtLayoutGlyphClassT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        CUInt
    result <- Ptr FaceT -> Word32 -> IO CUInt
    hb_ot_layout_get_glyph_class Ptr FaceT
    face' Word32
    glyph
        let result' :: OtLayoutGlyphClassT
    result' = (Int -> OtLayoutGlyphClassT
    forall a. Enum a => Int -> a
    toEnum (Int -> OtLayoutGlyphClassT)
    -> (CUInt -> Int) -> CUInt -> OtLayoutGlyphClassT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        OtLayoutGlyphClassT -> IO OtLayoutGlyphClassT
    forall (m :: * -> *) a. Monad m => a -> m a
    return OtLayoutGlyphClassT
    result'

    -- function ot_layout_get_baseline
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "baseline_tag"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "ot_layout_baseline_tag_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a baseline tag" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "text direction." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "script tag." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "language tag." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coord"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "baseline value if found."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_get_baseline" hb_ot_layout_get_baseline ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- baseline_tag : TInterface (Name {namespace = "HarfBuzz", name = "ot_layout_baseline_tag_t"})
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Word32 ->                               -- script_tag : TBasicType TUInt32
        Word32 ->                               -- language_tag : TBasicType TUInt32
        Ptr Int32 ->                            -- coord : TBasicType TInt32
        IO Int32

    -- | Fetches a baseline value from the face.
    --
    -- /Since: 2.6.0/
    otLayoutGetBaseline ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font
        -> HarfBuzz.Enums.OtLayoutBaselineTagT
        -- ^ /@baselineTag@/: a baseline tag
        -> HarfBuzz.Enums.DirectionT
        -- ^ /@direction@/: text direction.
        -> Word32
        -- ^ /@scriptTag@/: script tag.
        -> Word32
        -- ^ /@languageTag@/: language tag.
        -> m ((Int32, Int32))
        -- ^ __Returns:__ if found baseline value in the font.
    otLayoutGetBaseline :: FontT
    -> OtLayoutBaselineTagT
    -> DirectionT
    -> Word32
    -> Word32
    -> m (Int32, Int32)
    otLayoutGetBaseline font :: FontT
    font baselineTag :: OtLayoutBaselineTagT
    baselineTag direction :: DirectionT
    direction scriptTag :: Word32
    scriptTag languageTag :: Word32
    languageTag = IO (Int32, Int32) -> m (Int32, Int32)
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let baselineTag' :: CUInt
    baselineTag' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt)
    -> (OtLayoutBaselineTagT -> Int) -> OtLayoutBaselineTagT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . OtLayoutBaselineTagT -> Int
    forall a. Enum a => a -> Int
    fromEnum) OtLayoutBaselineTagT
    baselineTag
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr Int32
    coord <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Int32
    result <- Ptr FontT
    -> CUInt -> CUInt -> Word32 -> Word32 -> Ptr Int32 -> IO Int32
    hb_ot_layout_get_baseline Ptr FontT
    font' CUInt
    baselineTag' CUInt
    direction' Word32
    scriptTag Word32
    languageTag Ptr Int32
    coord
        Int32
    coord' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    coord
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    coord
        (Int32, Int32) -> IO (Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Int32
    coord')

    -- function ot_layout_get_attach_points
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_face_t to work on"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_codepoint_t code point to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "offset of the first attachment point to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "point_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of attachment points to return;\n              Output = the actual number of attachment points returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "point_array"
    --           , argType = TCArray False (-1) 3 (TBasicType TUInt)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The array of attachment points found for the query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "point_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of attachment points to return;\n              Output = the actual number of attachment points returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_get_attach_points" hb_ot_layout_get_attach_points ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- point_count : TBasicType TUInt
        Ptr (Ptr Word32) ->                     -- point_array : TCArray False (-1) 3 (TBasicType TUInt)
        IO Word32

    -- | Fetches a list of all attachment points for the specified glyph in the GDEF
    -- table of the face. The list returned will begin at the offset provided.
    --
    -- Useful if the client program wishes to cache the list.
    otLayoutGetAttachPoints ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: The t'GI.HarfBuzz.Structs.FaceT.FaceT' to work on
        -> Word32
        -- ^ /@glyph@/: The @/hb_codepoint_t/@ code point to query
        -> Word32
        -- ^ /@startOffset@/: offset of the first attachment point to retrieve
        -> m ((Word32, [Word32]))
    otLayoutGetAttachPoints :: FaceT -> Word32 -> Word32 -> m (Word32, [Word32])
    otLayoutGetAttachPoints face :: FaceT
    face glyph :: Word32
    glyph startOffset :: Word32
    startOffset = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    pointCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Word32)
    pointArray <- IO (Ptr (Ptr Word32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word32))
        Word32
    result <- Ptr FaceT
    -> Word32 -> Word32 -> Ptr Word32 -> Ptr (Ptr Word32) -> IO Word32
    hb_ot_layout_get_attach_points Ptr FaceT
    face' Word32
    glyph Word32
    startOffset Ptr Word32
    pointCount Ptr (Ptr Word32)
    pointArray
        Word32
    pointCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    pointCount
        Ptr Word32
    pointArray' <- Ptr (Ptr Word32) -> IO (Ptr Word32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word32)
    pointArray
        [Word32]
    pointArray'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    pointCount') Ptr Word32
    pointArray'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    pointArray'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    pointCount
        Ptr (Ptr Word32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word32)
    pointArray
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    pointArray'')

    -- function ot_layout_feature_with_variations_get_lookups
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the feature to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variations_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the feature variation to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first lookup to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "lookup_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of lookups to return;\n               Output = the actual number of lookups returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "lookup_indexes"
    --           , argType = TCArray False (-1) 5 (TBasicType TUInt)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The array of lookups found for the query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "lookup_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of lookups to return;\n               Output = the actual number of lookups returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_feature_with_variations_get_lookups" hb_ot_layout_feature_with_variations_get_lookups ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- feature_index : TBasicType TUInt
        Word32 ->                               -- variations_index : TBasicType TUInt
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- lookup_count : TBasicType TUInt
        Ptr (Ptr Word32) ->                     -- lookup_indexes : TCArray False (-1) 5 (TBasicType TUInt)
        IO Word32

    -- | Fetches a list of all lookups enumerated for the specified feature, in
    -- the specified face\'s GSUB table or GPOS table, enabled at the specified
    -- variations index. The list returned will begin at the offset provided.
    otLayoutFeatureWithVariationsGetLookups ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@featureIndex@/: The index of the feature to query
        -> Word32
        -- ^ /@variationsIndex@/: The index of the feature variation to query
        -> Word32
        -- ^ /@startOffset@/: offset of the first lookup to retrieve
        -> m ((Word32, [Word32]))
    otLayoutFeatureWithVariationsGetLookups :: FaceT
    -> Word32 -> Word32 -> Word32 -> Word32 -> m (Word32, [Word32])
    otLayoutFeatureWithVariationsGetLookups face :: FaceT
    face tableTag :: Word32
    tableTag featureIndex :: Word32
    featureIndex variationsIndex :: Word32
    variationsIndex startOffset :: Word32
    startOffset = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    lookupCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Word32)
    lookupIndexes <- IO (Ptr (Ptr Word32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word32))
        Word32
    result <- Ptr FaceT
    -> Word32
    -> Word32
    -> Word32
    -> Word32
    -> Ptr Word32
    -> Ptr (Ptr Word32)
    -> IO Word32
    hb_ot_layout_feature_with_variations_get_lookups Ptr FaceT
    face' Word32
    tableTag Word32
    featureIndex Word32
    variationsIndex Word32
    startOffset Ptr Word32
    lookupCount Ptr (Ptr Word32)
    lookupIndexes
        Word32
    lookupCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    lookupCount
        Ptr Word32
    lookupIndexes' <- Ptr (Ptr Word32) -> IO (Ptr Word32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word32)
    lookupIndexes
        [Word32]
    lookupIndexes'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    lookupCount') Ptr Word32
    lookupIndexes'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    lookupIndexes'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    lookupCount
        Ptr (Ptr Word32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word32)
    lookupIndexes
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    lookupIndexes'')

    -- function ot_layout_feature_get_name_ids
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "table tag to query, \"GSUB\" or \"GPOS\"."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "index of feature to query."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "label_id"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "The \8216name\8217 table name ID that specifies a string\n           for a user-interface label for this feature. (May be NULL.)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "tooltip_id"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "The \8216name\8217 table name ID that specifies a string\n             that an application can use for tooltip text for this\n             feature. (May be NULL.)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "sample_id"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "The \8216name\8217 table name ID that specifies sample text\n            that illustrates the effect of this feature. (May be NULL.)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "num_named_parameters"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Number of named parameters. (May be zero.)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "first_param_id"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "The first \8216name\8217 table name ID used to specify\n                 strings for user-interface labels for the feature\n                 parameters. (Must be zero if numParameters is zero.)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_feature_get_name_ids" hb_ot_layout_feature_get_name_ids ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- feature_index : TBasicType TUInt
        Ptr Word32 ->                           -- label_id : TBasicType TUInt
        Ptr Word32 ->                           -- tooltip_id : TBasicType TUInt
        Ptr Word32 ->                           -- sample_id : TBasicType TUInt
        Ptr Word32 ->                           -- num_named_parameters : TBasicType TUInt
        Ptr Word32 ->                           -- first_param_id : TBasicType TUInt
        IO Int32

    -- | Fetches name indices from feature parameters for \"Stylistic Set\" (\'ssXX\') or
    -- \"Character Variant\" (\'cvXX\') features.
    --
    -- /Since: 2.0.0/
    otLayoutFeatureGetNameIds ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: table tag to query, \"GSUB\" or \"GPOS\".
        -> Word32
        -- ^ /@featureIndex@/: index of feature to query.
        -> m ((Int32, Word32, Word32, Word32, Word32, Word32))
        -- ^ __Returns:__ true if data found, false otherwise
    otLayoutFeatureGetNameIds :: FaceT
    -> Word32
    -> Word32
    -> m (Int32, Word32, Word32, Word32, Word32, Word32)
    otLayoutFeatureGetNameIds face :: FaceT
    face tableTag :: Word32
    tableTag featureIndex :: Word32
    featureIndex = IO (Int32, Word32, Word32, Word32, Word32, Word32)
    -> m (Int32, Word32, Word32, Word32, Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32, Word32, Word32, Word32, Word32)
     -> m (Int32, Word32, Word32, Word32, Word32, Word32))
    -> IO (Int32, Word32, Word32, Word32, Word32, Word32)
    -> m (Int32, Word32, Word32, Word32, Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    labelId <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    tooltipId <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    sampleId <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    numNamedParameters <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    firstParamId <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FaceT
    -> Word32
    -> Word32
    -> Ptr Word32
    -> Ptr Word32
    -> Ptr Word32
    -> Ptr Word32
    -> Ptr Word32
    -> IO Int32
    hb_ot_layout_feature_get_name_ids Ptr FaceT
    face' Word32
    tableTag Word32
    featureIndex Ptr Word32
    labelId Ptr Word32
    tooltipId Ptr Word32
    sampleId Ptr Word32
    numNamedParameters Ptr Word32
    firstParamId
        Word32
    labelId' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    labelId
        Word32
    tooltipId' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    tooltipId
        Word32
    sampleId' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    sampleId
        Word32
    numNamedParameters' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    numNamedParameters
        Word32
    firstParamId' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    firstParamId
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    labelId
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    tooltipId
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    sampleId
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    numNamedParameters
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    firstParamId
        (Int32, Word32, Word32, Word32, Word32, Word32)
    -> IO (Int32, Word32, Word32, Word32, Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    labelId', Word32
    tooltipId', Word32
    sampleId', Word32
    numNamedParameters', Word32
    firstParamId')

    -- function ot_layout_feature_get_lookups
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "HB_OT_TAG_GSUB or HB_OT_TAG_GPOS"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the requested feature"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first lookup to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "lookup_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of lookups to return;\n               Output = the actual number of lookups returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "lookup_indexes"
    --           , argType = TCArray False (-1) 4 (TBasicType TUInt)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "The array of lookup indexes found for the query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "lookup_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of lookups to return;\n               Output = the actual number of lookups returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_feature_get_lookups" hb_ot_layout_feature_get_lookups ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- feature_index : TBasicType TUInt
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- lookup_count : TBasicType TUInt
        Ptr (Ptr Word32) ->                     -- lookup_indexes : TCArray False (-1) 4 (TBasicType TUInt)
        IO Word32

    -- | Fetches a list of all lookups enumerated for the specified feature, in
    -- the specified face\'s GSUB table or GPOS table. The list returned will
    -- begin at the offset provided.
    --
    -- /Since: 0.9.7/
    otLayoutFeatureGetLookups ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
        -> Word32
        -- ^ /@featureIndex@/: The index of the requested feature
        -> Word32
        -- ^ /@startOffset@/: offset of the first lookup to retrieve
        -> m ((Word32, [Word32]))
    otLayoutFeatureGetLookups :: FaceT -> Word32 -> Word32 -> Word32 -> m (Word32, [Word32])
    otLayoutFeatureGetLookups face :: FaceT
    face tableTag :: Word32
    tableTag featureIndex :: Word32
    featureIndex startOffset :: Word32
    startOffset = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    lookupCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Word32)
    lookupIndexes <- IO (Ptr (Ptr Word32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word32))
        Word32
    result <- Ptr FaceT
    -> Word32
    -> Word32
    -> Word32
    -> Ptr Word32
    -> Ptr (Ptr Word32)
    -> IO Word32
    hb_ot_layout_feature_get_lookups Ptr FaceT
    face' Word32
    tableTag Word32
    featureIndex Word32
    startOffset Ptr Word32
    lookupCount Ptr (Ptr Word32)
    lookupIndexes
        Word32
    lookupCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    lookupCount
        Ptr Word32
    lookupIndexes' <- Ptr (Ptr Word32) -> IO (Ptr Word32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word32)
    lookupIndexes
        [Word32]
    lookupIndexes'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    lookupCount') Ptr Word32
    lookupIndexes'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    lookupIndexes'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    lookupCount
        Ptr (Ptr Word32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word32)
    lookupIndexes
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    lookupIndexes'')

    -- function ot_layout_feature_get_characters
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "table tag to query, \"GSUB\" or \"GPOS\"."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "index of feature to query."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first character to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "char_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of characters to return;\n             Output = the actual number of characters returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "characters"
    --           , argType = TCArray False (-1) 4 (TBasicType TUInt32)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "A buffer pointer.\n             The Unicode codepoints of the characters for which this feature provides\n              glyph variants."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "char_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = True
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of characters to return;\n             Output = the actual number of characters returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_layout_feature_get_characters" hb_ot_layout_feature_get_characters ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- table_tag : TBasicType TUInt32
        Word32 ->                               -- feature_index : TBasicType TUInt
        Word32 ->                               -- start_offset : TBasicType TUInt
        Word32 ->                               -- char_count : TBasicType TUInt
        Ptr Word32 ->                           -- characters : TCArray False (-1) 4 (TBasicType TUInt32)
        IO Word32

    -- | Fetches a list of the characters defined as having a variant under the specified
    -- \"Character Variant\" (\"cvXX\") feature tag.
    --
    -- \<note>Note: If the char_count output value is equal to its input value, then there
    --       is a chance there were more characters defined under the feature tag than were
    --       returned. This function can be called with incrementally larger start_offset
    --       until the char_count output value is lower than its input value, or the size
    --       of the characters array can be increased.\<\/note>
    --
    -- /Since: 2.0.0/
    otLayoutFeatureGetCharacters ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@tableTag@/: table tag to query, \"GSUB\" or \"GPOS\".
        -> Word32
        -- ^ /@featureIndex@/: index of feature to query.
        -> Word32
        -- ^ /@startOffset@/: offset of the first character to retrieve
        -> [Word32]
        -- ^ /@characters@/: A buffer pointer.
        --              The Unicode codepoints of the characters for which this feature provides
        --               glyph variants.
        -> m ((Word32, [Word32]))
        -- ^ __Returns:__ Number of total sample characters in the cvXX feature.
    otLayoutFeatureGetCharacters :: FaceT
    -> Word32 -> Word32 -> Word32 -> [Word32] -> m (Word32, [Word32])
    otLayoutFeatureGetCharacters face :: FaceT
    face tableTag :: Word32
    tableTag featureIndex :: Word32
    featureIndex startOffset :: Word32
    startOffset characters :: [Word32]
    characters = IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, [Word32]) -> m (Word32, [Word32]))
    -> IO (Word32, [Word32]) -> m (Word32, [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        let charCount :: Word32
    charCount = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [Word32] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Word32]
    characters
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    characters' <- [Word32] -> IO (Ptr Word32)
    forall a. Storable a => [a] -> IO (Ptr a)
    packStorableArray [Word32]
    characters
        Word32
    result <- Ptr FaceT
    -> Word32 -> Word32 -> Word32 -> Word32 -> Ptr Word32 -> IO Word32
    hb_ot_layout_feature_get_characters Ptr FaceT
    face' Word32
    tableTag Word32
    featureIndex Word32
    startOffset Word32
    charCount Ptr Word32
    characters'
        [Word32]
    characters'' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    charCount) Ptr Word32
    characters'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    characters'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        (Word32, [Word32]) -> IO (Word32, [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, [Word32]
    characters'')

    -- function ot_layout_collect_lookups
    -- XXX Could not generate function ot_layout_collect_lookups

    -- Not implemented: Don't know how to allocate "lookup_indexes" of type TInterface (Name {namespace = "HarfBuzz", name = "set_t"})

    -- function ot_layout_collect_features
    -- XXX Could not generate function ot_layout_collect_features

    -- Not implemented: Don't know how to allocate "feature_indexes" of type TInterface (Name {namespace = "HarfBuzz", name = "set_t"})

    -- function ot_font_set_funcs
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_font_set_funcs" hb_ot_font_set_funcs ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.28/
    otFontSetFuncs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> m ()
    otFontSetFuncs :: FontT -> m ()
    otFontSetFuncs font :: FontT
    font = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> IO ()
    hb_ot_font_set_funcs Ptr FontT
    font'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function ot_color_palette_get_name_id
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "palette_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the color palette"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_palette_get_name_id" hb_ot_color_palette_get_name_id ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- palette_index : TBasicType TUInt
        IO Word32

    -- | Fetches the @name@ table Name ID that provides display names for
    -- a @CPAL@ color palette.
    --
    -- Palette display names can be generic (e.g., \"Default\") or provide
    -- specific, themed names (e.g., \"Spring\", \"Summer\", \"Fall\", and \"Winter\").
    --
    -- /Since: 2.1.0/
    otColorPaletteGetNameId ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@paletteIndex@/: The index of the color palette
        -> m Word32
        -- ^ __Returns:__ the Named ID found for the palette.
        -- If the requested palette has no name the result is @/HB_OT_NAME_ID_INVALID/@.
    otColorPaletteGetNameId :: FaceT -> Word32 -> m Word32
    otColorPaletteGetNameId face :: FaceT
    face paletteIndex :: Word32
    paletteIndex = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> Word32 -> IO Word32
    hb_ot_color_palette_get_name_id Ptr FaceT
    face' Word32
    paletteIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_color_palette_get_flags
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "palette_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the color palette"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name
    --                    { namespace = "HarfBuzz" , name = "ot_color_palette_flags_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_palette_get_flags" hb_ot_color_palette_get_flags ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- palette_index : TBasicType TUInt
        IO CUInt

    -- | Fetches the flags defined for a color palette.
    --
    -- /Since: 2.1.0/
    otColorPaletteGetFlags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@paletteIndex@/: The index of the color palette
        -> m [HarfBuzz.Flags.OtColorPaletteFlagsT]
        -- ^ __Returns:__ the t'GI.HarfBuzz.Flags.OtColorPaletteFlagsT' of the requested color palette
    otColorPaletteGetFlags :: FaceT -> Word32 -> m [OtColorPaletteFlagsT]
    otColorPaletteGetFlags face :: FaceT
    face paletteIndex :: Word32
    paletteIndex = IO [OtColorPaletteFlagsT] -> m [OtColorPaletteFlagsT]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [OtColorPaletteFlagsT] -> m [OtColorPaletteFlagsT])
    -> IO [OtColorPaletteFlagsT] -> m [OtColorPaletteFlagsT]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        CUInt
    result <- Ptr FaceT -> Word32 -> IO CUInt
    hb_ot_color_palette_get_flags Ptr FaceT
    face' Word32
    paletteIndex
        let result' :: [OtColorPaletteFlagsT]
    result' = CUInt -> [OtColorPaletteFlagsT]
    forall a b. (Storable a, Integral a, Bits a, IsGFlag b) => a -> [b]
    wordToGFlags CUInt
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        [OtColorPaletteFlagsT] -> IO [OtColorPaletteFlagsT]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [OtColorPaletteFlagsT]
    result'

    -- function ot_color_palette_get_count
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_palette_get_count" hb_ot_color_palette_get_count ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Word32

    -- | Fetches the number of color palettes in a face.
    --
    -- /Since: 2.1.0/
    otColorPaletteGetCount ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> m Word32
        -- ^ __Returns:__ the number of palettes found
    otColorPaletteGetCount :: FaceT -> m Word32
    otColorPaletteGetCount face :: FaceT
    face = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> IO Word32
    hb_ot_color_palette_get_count Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_color_palette_get_colors
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "palette_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the index of the color palette to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first color to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "color_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of colors to return;\n              Output = the actual number of colors returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "colors"
    --           , argType = TCArray False (-1) 3 (TBasicType TUInt32)
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The array of #hb_color_t records found"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "color_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of colors to return;\n              Output = the actual number of colors returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_palette_get_colors" hb_ot_color_palette_get_colors ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- palette_index : TBasicType TUInt
        Word32 ->                               -- start_offset : TBasicType TUInt
        Ptr Word32 ->                           -- color_count : TBasicType TUInt
        Ptr (Ptr Word32) ->                     -- colors : TCArray False (-1) 3 (TBasicType TUInt32)
        IO Word32

    -- | Fetches a list of the colors in a color palette.
    --
    -- After calling this function, /@colors@/ will be filled with the palette
    -- colors. If /@colors@/ is NULL, the function will just return the number
    -- of total colors without storing any actual colors; this can be used
    -- for allocating a buffer of suitable size before calling
    -- 'GI.HarfBuzz.Functions.otColorPaletteGetColors' a second time.
    --
    -- /Since: 2.1.0/
    otColorPaletteGetColors ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@paletteIndex@/: the index of the color palette to query
        -> Word32
        -- ^ /@startOffset@/: offset of the first color to retrieve
        -> m ((Word32, Maybe [Word32]))
        -- ^ __Returns:__ the total number of colors in the palette
    otColorPaletteGetColors :: FaceT -> Word32 -> Word32 -> m (Word32, Maybe [Word32])
    otColorPaletteGetColors face :: FaceT
    face paletteIndex :: Word32
    paletteIndex startOffset :: Word32
    startOffset = IO (Word32, Maybe [Word32]) -> m (Word32, Maybe [Word32])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, Maybe [Word32]) -> m (Word32, Maybe [Word32]))
    -> IO (Word32, Maybe [Word32]) -> m (Word32, Maybe [Word32])
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr Word32
    colorCount <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr (Ptr Word32)
    colors <- IO (Ptr (Ptr Word32))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word32))
        Word32
    result <- Ptr FaceT
    -> Word32 -> Word32 -> Ptr Word32 -> Ptr (Ptr Word32) -> IO Word32
    hb_ot_color_palette_get_colors Ptr FaceT
    face' Word32
    paletteIndex Word32
    startOffset Ptr Word32
    colorCount Ptr (Ptr Word32)
    colors
        Word32
    colorCount' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    colorCount
        Ptr Word32
    colors' <- Ptr (Ptr Word32) -> IO (Ptr Word32)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word32)
    colors
        Maybe [Word32]
    maybeColors' <- Ptr Word32 -> (Ptr Word32 -> IO [Word32]) -> IO (Maybe [Word32])
    forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
    convertIfNonNull Ptr Word32
    colors' ((Ptr Word32 -> IO [Word32]) -> IO (Maybe [Word32]))
    -> (Ptr Word32 -> IO [Word32]) -> IO (Maybe [Word32])
    forall a b. (a -> b) -> a -> b
    $ \colors'' :: Ptr Word32
    colors'' -> do
            [Word32]
    colors''' <- (Word32 -> Ptr Word32 -> IO [Word32]
    forall a b. (Integral a, Storable b) => a -> Ptr b -> IO [b]
    unpackStorableArrayWithLength Word32
    colorCount') Ptr Word32
    colors''
            Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    colors''
            [Word32] -> IO [Word32]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [Word32]
    colors'''
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    colorCount
        Ptr (Ptr Word32) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word32)
    colors
        (Word32, Maybe [Word32]) -> IO (Word32, Maybe [Word32])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, Maybe [Word32]
    maybeColors')

    -- function ot_color_palette_color_get_name_id
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "color_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The index of the color"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_palette_color_get_name_id" hb_ot_color_palette_color_get_name_id ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- color_index : TBasicType TUInt
        IO Word32

    -- | Fetches the @name@ table Name ID that provides display names for
    -- the specificed color in a face\'s @CPAL@ color palette.
    --
    -- Display names can be generic (e.g., \"Background\") or specific
    -- (e.g., \"Eye color\").
    --
    -- /Since: 2.1.0/
    otColorPaletteColorGetNameId ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@colorIndex@/: The index of the color
        -> m Word32
        -- ^ __Returns:__ the Name ID found for the color.
    otColorPaletteColorGetNameId :: FaceT -> Word32 -> m Word32
    otColorPaletteColorGetNameId face :: FaceT
    face colorIndex :: Word32
    colorIndex = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> Word32 -> IO Word32
    hb_ot_color_palette_color_get_name_id Ptr FaceT
    face' Word32
    colorIndex
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function ot_color_has_svg
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_has_svg" hb_ot_color_has_svg ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | Tests whether a face includes any @SVG@ glyph images.
    --
    -- /Since: 2.1.0/
    otColorHasSvg ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon.
        -> m Int32
        -- ^ __Returns:__ true if data found, false otherwise.
    otColorHasSvg :: FaceT -> m Int32
    otColorHasSvg face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_ot_color_has_svg Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_color_has_png
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_has_png" hb_ot_color_has_png ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | Tests whether a face has PNG glyph images (either in @CBDT@ or @sbix@ tables).
    --
    -- /Since: 2.1.0/
    otColorHasPng ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> m Int32
        -- ^ __Returns:__ true if data found, false otherwise
    otColorHasPng :: FaceT -> m Int32
    otColorHasPng face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_ot_color_has_png Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_color_has_palettes
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_has_palettes" hb_ot_color_has_palettes ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | Tests whether a face includes a @CPAL@ color-palette table.
    --
    -- /Since: 2.1.0/
    otColorHasPalettes ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> m Int32
        -- ^ __Returns:__ true if data found, false otherwise
    otColorHasPalettes :: FaceT -> m Int32
    otColorHasPalettes face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_ot_color_has_palettes Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_color_has_layers
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_has_layers" hb_ot_color_has_layers ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | Tests whether a face includes any @COLR@ color layers.
    --
    -- /Since: 2.1.0/
    otColorHasLayers ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> m Int32
        -- ^ __Returns:__ true if data found, false otherwise
    otColorHasLayers :: FaceT -> m Int32
    otColorHasLayers face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_ot_color_has_layers Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ot_color_glyph_reference_svg
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a svg glyph index" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_glyph_reference_svg" hb_ot_color_glyph_reference_svg ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | Fetches the SVG document for a glyph. The blob may be either plain text or gzip-encoded.
    --
    -- /Since: 2.1.0/
    otColorGlyphReferenceSvg ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@glyph@/: a svg glyph index
        -> m HarfBuzz.BlobT.BlobT
        -- ^ __Returns:__ An t'GI.HarfBuzz.Structs.BlobT.BlobT' containing the SVG document of the glyph, if available
    otColorGlyphReferenceSvg :: FaceT -> Word32 -> m BlobT
    otColorGlyphReferenceSvg face :: FaceT
    face glyph :: Word32
    glyph = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr BlobT
    result <- Ptr FaceT -> Word32 -> IO (Ptr BlobT)
    hb_ot_color_glyph_reference_svg Ptr FaceT
    face' Word32
    glyph
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "otColorGlyphReferenceSvg" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'

    -- function ot_color_glyph_reference_png
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a glyph index" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_glyph_reference_png" hb_ot_color_glyph_reference_png ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | Fetches the PNG image for a glyph. This function takes a font object, not a face object,
    -- as input. To get an optimally sized PNG blob, the UPEM value must be set on the /@font@/
    -- object. If UPEM is unset, the blob returned will be the largest PNG available.
    --
    -- /Since: 2.1.0/
    otColorGlyphReferencePng ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> Word32
        -- ^ /@glyph@/: a glyph index
        -> m HarfBuzz.BlobT.BlobT
        -- ^ __Returns:__ An t'GI.HarfBuzz.Structs.BlobT.BlobT' containing the PNG image for the glyph, if available
    otColorGlyphReferencePng :: FontT -> Word32 -> m BlobT
    otColorGlyphReferencePng font :: FontT
    font glyph :: Word32
    glyph = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr BlobT
    result <- Ptr FontT -> Word32 -> IO (Ptr BlobT)
    hb_ot_color_glyph_reference_png Ptr FontT
    font' Word32
    glyph
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "otColorGlyphReferencePng" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'

    -- function ot_color_glyph_get_layers
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_face_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The glyph index to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "offset of the first layer to retrieve"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "layer_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "Input = the maximum number of layers to return;\n        Output = the actual number of layers returned (may be zero)"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "layers"
    --           , argType =
    --               TCArray
    --                 False
    --                 (-1)
    --                 3
    --                 (TInterface
    --                    Name { namespace = "HarfBuzz" , name = "ot_color_layer_t" })
    --           , direction = DirectionOut
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The array of layers found"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "layer_count"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just
    --                          "Input = the maximum number of layers to return;\n        Output = the actual number of layers returned (may be zero)"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ot_color_glyph_get_layers" hb_ot_color_glyph_get_layers ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Word32 ->                               -- start_offset : TBasicType TUInt
        Word32 ->                               -- layer_count : TBasicType TUInt
        Ptr HarfBuzz.OtColorLayerT.OtColorLayerT -> -- layers : TCArray False (-1) 3 (TInterface (Name {namespace = "HarfBuzz", name = "ot_color_layer_t"}))
        IO Word32

    -- | Fetches a list of all color layers for the specified glyph index in the specified
    -- face. The list returned will begin at the offset provided.
    --
    -- /Since: 2.1.0/
    otColorGlyphGetLayers ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: t'GI.HarfBuzz.Structs.FaceT.FaceT' to work upon
        -> Word32
        -- ^ /@glyph@/: The glyph index to query
        -> Word32
        -- ^ /@startOffset@/: offset of the first layer to retrieve
        -> Maybe ([HarfBuzz.OtColorLayerT.OtColorLayerT])
        -- ^ /@layers@/: The array of layers found
        -> m ((Word32, Maybe [HarfBuzz.OtColorLayerT.OtColorLayerT]))
        -- ^ __Returns:__ Total number of layers available for the glyph index queried
    otColorGlyphGetLayers :: FaceT
    -> Word32
    -> Word32
    -> Maybe [OtColorLayerT]
    -> m (Word32, Maybe [OtColorLayerT])
    otColorGlyphGetLayers face :: FaceT
    face glyph :: Word32
    glyph startOffset :: Word32
    startOffset layers :: Maybe [OtColorLayerT]
    layers = IO (Word32, Maybe [OtColorLayerT])
    -> m (Word32, Maybe [OtColorLayerT])
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, Maybe [OtColorLayerT])
     -> m (Word32, Maybe [OtColorLayerT]))
    -> IO (Word32, Maybe [OtColorLayerT])
    -> m (Word32, Maybe [OtColorLayerT])
    forall a b. (a -> b) -> a -> b
    $ do
        let layerCount :: Word32
    layerCount = case Maybe [OtColorLayerT]
    layers of
                Nothing -> 0
                Just jLayers :: [OtColorLayerT]
    jLayers -> Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [OtColorLayerT] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [OtColorLayerT]
    jLayers
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr OtColorLayerT
    maybeLayers <- case Maybe [OtColorLayerT]
    layers of
            Nothing -> Ptr OtColorLayerT -> IO (Ptr OtColorLayerT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr OtColorLayerT
    forall a. Ptr a
    nullPtr
            Just jLayers :: [OtColorLayerT]
    jLayers -> do
                [Ptr OtColorLayerT]
    jLayers' <- (OtColorLayerT -> IO (Ptr OtColorLayerT))
    -> [OtColorLayerT] -> IO [Ptr OtColorLayerT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM OtColorLayerT -> IO (Ptr OtColorLayerT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr [OtColorLayerT]
    jLayers
                Ptr OtColorLayerT
    jLayers'' <- Int -> [Ptr OtColorLayerT] -> IO (Ptr OtColorLayerT)
    forall a. Int -> [Ptr a] -> IO (Ptr a)
    packBlockArray 8 [Ptr OtColorLayerT]
    jLayers'
                Ptr OtColorLayerT -> IO (Ptr OtColorLayerT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr OtColorLayerT
    jLayers''
        Word32
    result <- Ptr FaceT
    -> Word32 -> Word32 -> Word32 -> Ptr OtColorLayerT -> IO Word32
    hb_ot_color_glyph_get_layers Ptr FaceT
    face' Word32
    glyph Word32
    startOffset Word32
    layerCount Ptr OtColorLayerT
    maybeLayers
        Maybe [OtColorLayerT]
    maybeMaybeLayers <- Ptr OtColorLayerT
    -> (Ptr OtColorLayerT -> IO [OtColorLayerT])
    -> IO (Maybe [OtColorLayerT])
    forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
    convertIfNonNull Ptr OtColorLayerT
    maybeLayers ((Ptr OtColorLayerT -> IO [OtColorLayerT])
     -> IO (Maybe [OtColorLayerT]))
    -> (Ptr OtColorLayerT -> IO [OtColorLayerT])
    -> IO (Maybe [OtColorLayerT])
    forall a b. (a -> b) -> a -> b
    $ \maybeLayers' :: Ptr OtColorLayerT
    maybeLayers' -> do
            [Ptr OtColorLayerT]
    maybeLayers'' <- (Int -> Word32 -> Ptr OtColorLayerT -> IO [Ptr OtColorLayerT]
    forall a b. Integral a => Int -> a -> Ptr b -> IO [Ptr b]
    unpackBlockArrayWithLength 8 Word32
    layerCount) Ptr OtColorLayerT
    maybeLayers'
            [OtColorLayerT]
    maybeLayers''' <- (Ptr OtColorLayerT -> IO OtColorLayerT)
    -> [Ptr OtColorLayerT] -> IO [OtColorLayerT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM ((ManagedPtr OtColorLayerT -> OtColorLayerT)
    -> Ptr OtColorLayerT -> IO OtColorLayerT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr OtColorLayerT -> OtColorLayerT
    HarfBuzz.OtColorLayerT.OtColorLayerT) [Ptr OtColorLayerT]
    maybeLayers''
            Ptr OtColorLayerT -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr OtColorLayerT
    maybeLayers'
            [OtColorLayerT] -> IO [OtColorLayerT]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [OtColorLayerT]
    maybeLayers'''
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Maybe [OtColorLayerT] -> ([OtColorLayerT] -> IO ()) -> IO ()
    forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
    whenJust Maybe [OtColorLayerT]
    layers ((OtColorLayerT -> IO ()) -> [OtColorLayerT] -> IO ()
    forall (t :: * -> *) (m :: * -> *) a b.
    (Foldable t, Monad m) =>
    (a -> m b) -> t a -> m ()
    mapM_ OtColorLayerT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr)
        (Word32, Maybe [OtColorLayerT])
    -> IO (Word32, Maybe [OtColorLayerT])
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, Maybe [OtColorLayerT]
    maybeMaybeLayers)

    -- function map_set
    -- Args: [ Arg
    --           { argCName = "map"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "map_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a map." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "key"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "value"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_set" hb_map_set ::
        Ptr HarfBuzz.MapT.MapT ->               -- map : TInterface (Name {namespace = "HarfBuzz", name = "map_t"})
        Word32 ->                               -- key : TBasicType TUInt32
        Word32 ->                               -- value : TBasicType TUInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapSet ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.MapT.MapT
        -- ^ /@map@/: a map.
        -> Word32
        -> Word32
        -> m ()
    mapSet :: MapT -> Word32 -> Word32 -> m ()
    mapSet map_ :: MapT
    map_ key :: Word32
    key value :: Word32
    value = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr MapT
    map_' <- MapT -> IO (Ptr MapT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr MapT
    map_
        Ptr MapT -> Word32 -> Word32 -> IO ()
    hb_map_set Ptr MapT
    map_' Word32
    key Word32
    value
        MapT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr MapT
    map_
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function map_is_empty
    -- Args: [ Arg
    --           { argCName = "map"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "map_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a map." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_is_empty" hb_map_is_empty ::
        Ptr HarfBuzz.MapT.MapT ->               -- map : TInterface (Name {namespace = "HarfBuzz", name = "map_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapIsEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.MapT.MapT
        -- ^ /@map@/: a map.
        -> m Int32
    mapIsEmpty :: MapT -> m Int32
    mapIsEmpty map_ :: MapT
    map_ = IO Int32 -> m Int32
    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 MapT
    map_' <- MapT -> IO (Ptr MapT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr MapT
    map_
        Int32
    result <- Ptr MapT -> IO Int32
    hb_map_is_empty Ptr MapT
    map_'
        MapT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr MapT
    map_
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function map_has
    -- Args: [ Arg
    --           { argCName = "map"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "map_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a map." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "key"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_has" hb_map_has ::
        Ptr HarfBuzz.MapT.MapT ->               -- map : TInterface (Name {namespace = "HarfBuzz", name = "map_t"})
        Word32 ->                               -- key : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapHas ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.MapT.MapT
        -- ^ /@map@/: a map.
        -> Word32
        -> m Int32
    mapHas :: MapT -> Word32 -> m Int32
    mapHas map_ :: MapT
    map_ key :: Word32
    key = IO Int32 -> m Int32
    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 MapT
    map_' <- MapT -> IO (Ptr MapT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr MapT
    map_
        Int32
    result <- Ptr MapT -> Word32 -> IO Int32
    hb_map_has Ptr MapT
    map_' Word32
    key
        MapT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr MapT
    map_
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function map_get_population
    -- Args: [ Arg
    --           { argCName = "map"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "map_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a map." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_get_population" hb_map_get_population ::
        Ptr HarfBuzz.MapT.MapT ->               -- map : TInterface (Name {namespace = "HarfBuzz", name = "map_t"})
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapGetPopulation ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.MapT.MapT
        -- ^ /@map@/: a map.
        -> m Word32
    mapGetPopulation :: MapT -> m Word32
    mapGetPopulation map_ :: MapT
    map_ = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr MapT
    map_' <- MapT -> IO (Ptr MapT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr MapT
    map_
        Word32
    result <- Ptr MapT -> IO Word32
    hb_map_get_population Ptr MapT
    map_'
        MapT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr MapT
    map_
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function map_get_empty
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "map_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_get_empty" hb_map_get_empty ::
        IO (Ptr HarfBuzz.MapT.MapT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapGetEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.MapT.MapT
    mapGetEmpty :: m MapT
    mapGetEmpty  = IO MapT -> m MapT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO MapT -> m MapT) -> IO MapT -> m MapT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr MapT
    result <- IO (Ptr MapT)
    hb_map_get_empty
        Text -> Ptr MapT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "mapGetEmpty" Ptr MapT
    result
        MapT
    result' <- ((ManagedPtr MapT -> MapT) -> Ptr MapT -> IO MapT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr MapT -> MapT
    HarfBuzz.MapT.MapT) Ptr MapT
    result
        MapT -> IO MapT
    forall (m :: * -> *) a. Monad m => a -> m a
    return MapT
    result'

    -- function map_get
    -- Args: [ Arg
    --           { argCName = "map"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "map_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a map." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "key"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_get" hb_map_get ::
        Ptr HarfBuzz.MapT.MapT ->               -- map : TInterface (Name {namespace = "HarfBuzz", name = "map_t"})
        Word32 ->                               -- key : TBasicType TUInt32
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapGet ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.MapT.MapT
        -- ^ /@map@/: a map.
        -> Word32
        -> m Word32
    mapGet :: MapT -> Word32 -> m Word32
    mapGet map_ :: MapT
    map_ key :: Word32
    key = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr MapT
    map_' <- MapT -> IO (Ptr MapT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr MapT
    map_
        Word32
    result <- Ptr MapT -> Word32 -> IO Word32
    hb_map_get Ptr MapT
    map_' Word32
    key
        MapT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr MapT
    map_
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function map_del
    -- Args: [ Arg
    --           { argCName = "map"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "map_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a map." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "key"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_del" hb_map_del ::
        Ptr HarfBuzz.MapT.MapT ->               -- map : TInterface (Name {namespace = "HarfBuzz", name = "map_t"})
        Word32 ->                               -- key : TBasicType TUInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapDel ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.MapT.MapT
        -- ^ /@map@/: a map.
        -> Word32
        -> m ()
    mapDel :: MapT -> Word32 -> m ()
    mapDel map_ :: MapT
    map_ key :: Word32
    key = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr MapT
    map_' <- MapT -> IO (Ptr MapT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr MapT
    map_
        Ptr MapT -> Word32 -> IO ()
    hb_map_del Ptr MapT
    map_' Word32
    key
        MapT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr MapT
    map_
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function map_create
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "map_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_create" hb_map_create ::
        IO (Ptr HarfBuzz.MapT.MapT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.MapT.MapT
    mapCreate :: m MapT
    mapCreate  = IO MapT -> m MapT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO MapT -> m MapT) -> IO MapT -> m MapT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr MapT
    result <- IO (Ptr MapT)
    hb_map_create
        Text -> Ptr MapT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "mapCreate" Ptr MapT
    result
        MapT
    result' <- ((ManagedPtr MapT -> MapT) -> Ptr MapT -> IO MapT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr MapT -> MapT
    HarfBuzz.MapT.MapT) Ptr MapT
    result
        MapT -> IO MapT
    forall (m :: * -> *) a. Monad m => a -> m a
    return MapT
    result'

    -- function map_clear
    -- Args: [ Arg
    --           { argCName = "map"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "map_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a map." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_clear" hb_map_clear ::
        Ptr HarfBuzz.MapT.MapT ->               -- map : TInterface (Name {namespace = "HarfBuzz", name = "map_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapClear ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.MapT.MapT
        -- ^ /@map@/: a map.
        -> m ()
    mapClear :: MapT -> m ()
    mapClear map_ :: MapT
    map_ = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr MapT
    map_' <- MapT -> IO (Ptr MapT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr MapT
    map_
        Ptr MapT -> IO ()
    hb_map_clear Ptr MapT
    map_'
        MapT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr MapT
    map_
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function map_allocation_successful
    -- Args: [ Arg
    --           { argCName = "map"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "map_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a map." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_map_allocation_successful" hb_map_allocation_successful ::
        Ptr HarfBuzz.MapT.MapT ->               -- map : TInterface (Name {namespace = "HarfBuzz", name = "map_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    mapAllocationSuccessful ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.MapT.MapT
        -- ^ /@map@/: a map.
        -> m Int32
    mapAllocationSuccessful :: MapT -> m Int32
    mapAllocationSuccessful map_ :: MapT
    map_ = IO Int32 -> m Int32
    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 MapT
    map_' <- MapT -> IO (Ptr MapT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr MapT
    map_
        Int32
    result <- Ptr MapT -> IO Int32
    hb_map_allocation_successful Ptr MapT
    map_'
        MapT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr MapT
    map_
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function language_to_string
    -- Args: [ Arg
    --           { argCName = "language"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "language_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_language_t to convert."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_language_to_string" hb_language_to_string ::
        Ptr HarfBuzz.LanguageT.LanguageT ->     -- language : TInterface (Name {namespace = "HarfBuzz", name = "language_t"})
        IO CString

    -- | See 'GI.HarfBuzz.Functions.languageFromString'.
    --
    -- /Since: 0.9.2/
    languageToString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.LanguageT.LanguageT
        -- ^ /@language@/: an t'GI.HarfBuzz.Structs.LanguageT.LanguageT' to convert.
        -> m T.Text
        -- ^ __Returns:__
        -- A 'P.Nothing'-terminated string representing the /@language@/. Must not be freed by
        -- the caller.
    languageToString :: LanguageT -> m Text
    languageToString language :: LanguageT
    language = IO Text -> m Text
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Text -> m Text) -> IO Text -> m Text
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr LanguageT
    language' <- LanguageT -> IO (Ptr LanguageT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr LanguageT
    language
        CString
    result <- Ptr LanguageT -> IO CString
    hb_language_to_string Ptr LanguageT
    language'
        Text -> CString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "languageToString" CString
    result
        Text
    result' <- HasCallStack => CString -> IO Text
    CString -> IO Text
    cstringToText CString
    result
        LanguageT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr LanguageT
    language
        Text -> IO Text
    forall (m :: * -> *) a. Monad m => a -> m a
    return Text
    result'

    -- function language_get_default
    -- Args: []
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "language_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_language_get_default" hb_language_get_default ::
        IO (Ptr HarfBuzz.LanguageT.LanguageT)

    -- | Get default language from current locale.
    --
    -- Note that the first time this function is called, it calls
    -- \"setlocale (LC_CTYPE, nullptr)\" to fetch current locale.  The underlying
    -- setlocale function is, in many implementations, NOT threadsafe.  To avoid
    -- problems, call this function once before multiple threads can call it.
    -- This function is only used from 'GI.HarfBuzz.Functions.bufferGuessSegmentProperties' by
    -- HarfBuzz itself.
    --
    -- /Since: 0.9.2/
    languageGetDefault ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.LanguageT.LanguageT
    languageGetDefault :: m LanguageT
    languageGetDefault  = IO LanguageT -> m LanguageT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO LanguageT -> m LanguageT) -> IO LanguageT -> m LanguageT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr LanguageT
    result <- IO (Ptr LanguageT)
    hb_language_get_default
        Text -> Ptr LanguageT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "languageGetDefault" Ptr LanguageT
    result
        LanguageT
    result' <- ((ManagedPtr LanguageT -> LanguageT)
    -> Ptr LanguageT -> IO LanguageT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newPtr ManagedPtr LanguageT -> LanguageT
    HarfBuzz.LanguageT.LanguageT) Ptr LanguageT
    result
        LanguageT -> IO LanguageT
    forall (m :: * -> *) a. Monad m => a -> m a
    return LanguageT
    result'

    -- function language_from_string
    -- Args: [ Arg
    --           { argCName = "str"
    --           , argType = TCArray False (-1) 1 (TBasicType TUInt8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "a string representing\n      a BCP 47 language tag"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "length of the @str, or -1 if it is %NULL-terminated."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "len"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just "length of the @str, or -1 if it is %NULL-terminated."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "language_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_language_from_string" hb_language_from_string ::
        Ptr Word8 ->                            -- str : TCArray False (-1) 1 (TBasicType TUInt8)
        Int32 ->                                -- len : TBasicType TInt
        IO (Ptr HarfBuzz.LanguageT.LanguageT)

    -- | Converts /@str@/ representing a BCP 47 language tag to the corresponding
    -- t'GI.HarfBuzz.Structs.LanguageT.LanguageT'.
    --
    -- /Since: 0.9.2/
    languageFromString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        ByteString
        -- ^ /@str@/: a string representing
        --       a BCP 47 language tag
        -> m HarfBuzz.LanguageT.LanguageT
        -- ^ __Returns:__
        -- The t'GI.HarfBuzz.Structs.LanguageT.LanguageT' corresponding to the BCP 47 language tag.
    languageFromString :: ByteString -> m LanguageT
    languageFromString str :: ByteString
    str = IO LanguageT -> m LanguageT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO LanguageT -> m LanguageT) -> IO LanguageT -> m LanguageT
    forall a b. (a -> b) -> a -> b
    $ do
        let len :: Int32
    len = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ ByteString -> Int
    B.length ByteString
    str
        Ptr Word8
    str' <- ByteString -> IO (Ptr Word8)
    packByteString ByteString
    str
        Ptr LanguageT
    result <- Ptr Word8 -> Int32 -> IO (Ptr LanguageT)
    hb_language_from_string Ptr Word8
    str' Int32
    len
        Text -> Ptr LanguageT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "languageFromString" Ptr LanguageT
    result
        LanguageT
    result' <- ((ManagedPtr LanguageT -> LanguageT)
    -> Ptr LanguageT -> IO LanguageT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newPtr ManagedPtr LanguageT -> LanguageT
    HarfBuzz.LanguageT.LanguageT) Ptr LanguageT
    result
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    str'
        LanguageT -> IO LanguageT
    forall (m :: * -> *) a. Monad m => a -> m a
    return LanguageT
    result'

    -- function glyph_info_get_glyph_flags
    -- Args: [ Arg
    --           { argCName = "info"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "glyph_info_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a #hb_glyph_info_t."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "glyph_flags_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_glyph_info_get_glyph_flags" hb_glyph_info_get_glyph_flags ::
        Ptr HarfBuzz.GlyphInfoT.GlyphInfoT ->   -- info : TInterface (Name {namespace = "HarfBuzz", name = "glyph_info_t"})
        IO CUInt

    -- | Returns glyph flags encoded within a t'GI.HarfBuzz.Structs.GlyphInfoT.GlyphInfoT'.
    --
    -- /Since: 1.5.0/
    glyphInfoGetGlyphFlags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.GlyphInfoT.GlyphInfoT
        -- ^ /@info@/: a t'GI.HarfBuzz.Structs.GlyphInfoT.GlyphInfoT'.
        -> m [HarfBuzz.Flags.GlyphFlagsT]
        -- ^ __Returns:__ The t'GI.HarfBuzz.Flags.GlyphFlagsT' encoded within /@info@/.
    glyphInfoGetGlyphFlags :: GlyphInfoT -> m [GlyphFlagsT]
    glyphInfoGetGlyphFlags info :: GlyphInfoT
    info = IO [GlyphFlagsT] -> m [GlyphFlagsT]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [GlyphFlagsT] -> m [GlyphFlagsT])
    -> IO [GlyphFlagsT] -> m [GlyphFlagsT]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr GlyphInfoT
    info' <- GlyphInfoT -> IO (Ptr GlyphInfoT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr GlyphInfoT
    info
        CUInt
    result <- Ptr GlyphInfoT -> IO CUInt
    hb_glyph_info_get_glyph_flags Ptr GlyphInfoT
    info'
        let result' :: [GlyphFlagsT]
    result' = CUInt -> [GlyphFlagsT]
    forall a b. (Storable a, Integral a, Bits a, IsGFlag b) => a -> [b]
    wordToGFlags CUInt
    result
        GlyphInfoT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr GlyphInfoT
    info
        [GlyphFlagsT] -> IO [GlyphFlagsT]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [GlyphFlagsT]
    result'

    -- function glib_script_to_script
    -- Args: [ Arg
    --           { argCName = "script"
    --           , argType =
    --               TInterface Name { namespace = "GLib" , name = "UnicodeScript" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The GUnicodeScript identifier to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "script_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_glib_script_to_script" hb_glib_script_to_script ::
        CInt ->                                 -- script : TInterface (Name {namespace = "GLib", name = "UnicodeScript"})
        IO CUInt

    -- | Fetches the t'GI.HarfBuzz.Enums.ScriptT' script that corresponds to the
    -- specified GUnicodeScript identifier.
    --
    -- /Since: 0.9.38/
    glibScriptToScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        GLib.Enums.UnicodeScript
        -- ^ /@script@/: The GUnicodeScript identifier to query
        -> m HarfBuzz.Enums.ScriptT
        -- ^ __Returns:__ the t'GI.HarfBuzz.Enums.ScriptT' script found
    glibScriptToScript :: UnicodeScript -> m ScriptT
    glibScriptToScript script :: UnicodeScript
    script = IO ScriptT -> m ScriptT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ScriptT -> m ScriptT) -> IO ScriptT -> m ScriptT
    forall a b. (a -> b) -> a -> b
    $ do
        let script' :: CInt
    script' = (Int -> CInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CInt) -> (UnicodeScript -> Int) -> UnicodeScript -> CInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . UnicodeScript -> Int
    forall a. Enum a => a -> Int
    fromEnum) UnicodeScript
    script
        CUInt
    result <- CInt -> IO CUInt
    hb_glib_script_to_script CInt
    script'
        let result' :: ScriptT
    result' = (Int -> ScriptT
    forall a. Enum a => Int -> a
    toEnum (Int -> ScriptT) -> (CUInt -> Int) -> CUInt -> ScriptT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        ScriptT -> IO ScriptT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ScriptT
    result'

    -- function glib_script_from_script
    -- Args: [ Arg
    --           { argCName = "script"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "script_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The #hb_script_t to query"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "GLib" , name = "UnicodeScript" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_glib_script_from_script" hb_glib_script_from_script ::
        CUInt ->                                -- script : TInterface (Name {namespace = "HarfBuzz", name = "script_t"})
        IO CInt

    -- | Fetches the GUnicodeScript identifier that corresponds to the
    -- specified t'GI.HarfBuzz.Enums.ScriptT' script.
    --
    -- /Since: 0.9.38/
    glibScriptFromScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.Enums.ScriptT
        -- ^ /@script@/: The t'GI.HarfBuzz.Enums.ScriptT' to query
        -> m GLib.Enums.UnicodeScript
        -- ^ __Returns:__ the GUnicodeScript identifier found
    glibScriptFromScript :: ScriptT -> m UnicodeScript
    glibScriptFromScript script :: ScriptT
    script = IO UnicodeScript -> m UnicodeScript
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO UnicodeScript -> m UnicodeScript)
    -> IO UnicodeScript -> m UnicodeScript
    forall a b. (a -> b) -> a -> b
    $ do
        let script' :: CUInt
    script' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (ScriptT -> Int) -> ScriptT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ScriptT -> Int
    forall a. Enum a => a -> Int
    fromEnum) ScriptT
    script
        CInt
    result <- CUInt -> IO CInt
    hb_glib_script_from_script CUInt
    script'
        let result' :: UnicodeScript
    result' = (Int -> UnicodeScript
    forall a. Enum a => Int -> a
    toEnum (Int -> UnicodeScript) -> (CInt -> Int) -> CInt -> UnicodeScript
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CInt
    result
        UnicodeScript -> IO UnicodeScript
    forall (m :: * -> *) a. Monad m => a -> m a
    return UnicodeScript
    result'

    -- function glib_get_unicode_funcs
    -- Args: []
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_glib_get_unicode_funcs" hb_glib_get_unicode_funcs ::
        IO (Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT)

    -- | Fetches a Unicode-functions structure that is populated
    -- with the appropriate GLib function for each method.
    --
    -- /Since: 0.9.38/
    glibGetUnicodeFuncs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -- ^ __Returns:__ a pointer to the t'GI.HarfBuzz.Structs.UnicodeFuncsT.UnicodeFuncsT' Unicode-functions structure
    glibGetUnicodeFuncs :: m UnicodeFuncsT
    glibGetUnicodeFuncs  = IO UnicodeFuncsT -> m UnicodeFuncsT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO UnicodeFuncsT -> m UnicodeFuncsT)
    -> IO UnicodeFuncsT -> m UnicodeFuncsT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr UnicodeFuncsT
    result <- IO (Ptr UnicodeFuncsT)
    hb_glib_get_unicode_funcs
        Text -> Ptr UnicodeFuncsT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "glibGetUnicodeFuncs" Ptr UnicodeFuncsT
    result
        UnicodeFuncsT
    result' <- ((ManagedPtr UnicodeFuncsT -> UnicodeFuncsT)
    -> Ptr UnicodeFuncsT -> IO UnicodeFuncsT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newBoxed ManagedPtr UnicodeFuncsT -> UnicodeFuncsT
    HarfBuzz.UnicodeFuncsT.UnicodeFuncsT) Ptr UnicodeFuncsT
    result
        UnicodeFuncsT -> IO UnicodeFuncsT
    forall (m :: * -> *) a. Monad m => a -> m a
    return UnicodeFuncsT
    result'

    -- function glib_blob_create
    -- Args: [ Arg
    --           { argCName = "gbytes"
    --           , argType = TInterface Name { namespace = "GLib" , name = "Bytes" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the GBytes structure to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_glib_blob_create" hb_glib_blob_create ::
        Ptr GLib.Bytes.Bytes ->                 -- gbytes : TInterface (Name {namespace = "GLib", name = "Bytes"})
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | Creates an t'GI.HarfBuzz.Structs.BlobT.BlobT' blob from the specified
    -- GBytes data structure.
    --
    -- /Since: 0.9.38/
    glibBlobCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        GLib.Bytes.Bytes
        -- ^ /@gbytes@/: the GBytes structure to work upon
        -> m HarfBuzz.BlobT.BlobT
        -- ^ __Returns:__ the new t'GI.HarfBuzz.Structs.BlobT.BlobT' blob object
    glibBlobCreate :: Bytes -> m BlobT
    glibBlobCreate gbytes :: Bytes
    gbytes = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr Bytes
    gbytes' <- Bytes -> IO (Ptr Bytes)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr Bytes
    gbytes
        Ptr BlobT
    result <- Ptr Bytes -> IO (Ptr BlobT)
    hb_glib_blob_create Ptr Bytes
    gbytes'
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "glibBlobCreate" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        Bytes -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr Bytes
    gbytes
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'

    -- function ft_font_unlock_face
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ft_font_unlock_face" hb_ft_font_unlock_face ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 2.6.5/
    ftFontUnlockFace ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> m ()
    ftFontUnlockFace :: FontT -> m ()
    ftFontUnlockFace font :: FontT
    font = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> IO ()
    hb_ft_font_unlock_face Ptr FontT
    font'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function ft_font_set_load_flags
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "load_flags"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "The FreeType load flags to set"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ft_font_set_load_flags" hb_ft_font_set_load_flags ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Int32 ->                                -- load_flags : TBasicType TInt
        IO ()

    -- | Sets the FT_Load_Glyph load flags for the specified t'GI.HarfBuzz.Structs.FontT.FontT'.
    --
    -- For more information, see
    -- https:\/\/www.freetype.org\/freetype2\/docs\/reference\/ft2-base_interface.html@/ft_load_xxx/@
    --
    -- /Since: 1.0.5/
    ftFontSetLoadFlags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> Int32
        -- ^ /@loadFlags@/: The FreeType load flags to set
        -> m ()
    ftFontSetLoadFlags :: FontT -> Int32 -> m ()
    ftFontSetLoadFlags font :: FontT
    font loadFlags :: Int32
    loadFlags = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> Int32 -> IO ()
    hb_ft_font_set_load_flags Ptr FontT
    font' Int32
    loadFlags
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function ft_font_set_funcs
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ft_font_set_funcs" hb_ft_font_set_funcs ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO ()

    -- | Configures the font-functions structure of the specified
    -- t'GI.HarfBuzz.Structs.FontT.FontT' font object to use FreeType font functions.
    --
    -- In particular, you can use this function to configure an
    -- existing t'GI.HarfBuzz.Structs.FaceT.FaceT' face object for use with FreeType font
    -- functions even if that t'GI.HarfBuzz.Structs.FaceT.FaceT' face object was initially
    -- created with 'GI.HarfBuzz.Functions.faceCreate', and therefore was not
    -- initially configured to use FreeType font functions.
    --
    -- An t'GI.HarfBuzz.Structs.FaceT.FaceT' face object created with @/hb_ft_face_create()/@
    -- is preconfigured for FreeType font functions and does not
    -- require this function to be used.
    --
    -- \<note>Note: Internally, this function creates an FT_Face.
    -- \<\/note>
    --
    -- /Since: 1.0.5/
    ftFontSetFuncs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> m ()
    ftFontSetFuncs :: FontT -> m ()
    ftFontSetFuncs font :: FontT
    font = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> IO ()
    hb_ft_font_set_funcs Ptr FontT
    font'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function ft_font_get_load_flags
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "#hb_font_t to work upon"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ft_font_get_load_flags" hb_ft_font_get_load_flags ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO Int32

    -- | Fetches the FT_Load_Glyph load flags of the specified t'GI.HarfBuzz.Structs.FontT.FontT'.
    --
    -- For more information, see
    -- https:\/\/www.freetype.org\/freetype2\/docs\/reference\/ft2-base_interface.html@/ft_load_xxx/@
    --
    -- /Since: 1.0.5/
    ftFontGetLoadFlags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: t'GI.HarfBuzz.Structs.FontT.FontT' to work upon
        -> m Int32
        -- ^ __Returns:__ FT_Load_Glyph flags found
    ftFontGetLoadFlags :: FontT -> m Int32
    ftFontGetLoadFlags font :: FontT
    font = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Int32
    result <- Ptr FontT -> IO Int32
    hb_ft_font_get_load_flags Ptr FontT
    font'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function ft_font_changed
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_ft_font_changed" hb_ft_font_changed ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO ()

    -- | /No description available in the introspection data./
    ftFontChanged ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> m ()
    ftFontChanged :: FontT -> m ()
    ftFontChanged font :: FontT
    font = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> IO ()
    hb_ft_font_changed Ptr FontT
    font'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_subtract_glyph_origin_for_direction
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_subtract_glyph_origin_for_direction" hb_font_subtract_glyph_origin_for_direction ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Ptr Int32 ->                            -- x : TBasicType TInt32
        Ptr Int32 ->                            -- y : TBasicType TInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontSubtractGlyphOriginForDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> HarfBuzz.Enums.DirectionT
        -> m ((Int32, Int32))
    fontSubtractGlyphOriginForDirection :: FontT -> Word32 -> DirectionT -> m (Int32, Int32)
    fontSubtractGlyphOriginForDirection font :: FontT
    font glyph :: Word32
    glyph direction :: DirectionT
    direction = IO (Int32, Int32) -> m (Int32, Int32)
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr Int32
    x <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    y <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr FontT -> Word32 -> CUInt -> Ptr Int32 -> Ptr Int32 -> IO ()
    hb_font_subtract_glyph_origin_for_direction Ptr FontT
    font' Word32
    glyph CUInt
    direction' Ptr Int32
    x Ptr Int32
    y
        Int32
    x' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    x
        Int32
    y' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    y
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    x
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    y
        (Int32, Int32) -> IO (Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    x', Int32
    y')

    -- function font_set_variations
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variations"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "variation_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variations_length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_variations" hb_font_set_variations ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.VariationT.VariationT ->   -- variations : TInterface (Name {namespace = "HarfBuzz", name = "variation_t"})
        Word32 ->                               -- variations_length : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    fontSetVariations ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> HarfBuzz.VariationT.VariationT
        -> Word32
        -> m ()
    fontSetVariations :: FontT -> VariationT -> Word32 -> m ()
    fontSetVariations font :: FontT
    font variations :: VariationT
    variations variationsLength :: Word32
    variationsLength = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr VariationT
    variations' <- VariationT -> IO (Ptr VariationT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr VariationT
    variations
        Ptr FontT -> Ptr VariationT -> Word32 -> IO ()
    hb_font_set_variations Ptr FontT
    font' Ptr VariationT
    variations' Word32
    variationsLength
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        VariationT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr VariationT
    variations
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_var_named_instance
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "instance_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "named instance index."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_var_named_instance" hb_font_set_var_named_instance ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- instance_index : TBasicType TUInt
        IO ()

    -- | Sets design coords of a font from a named instance index.
    --
    -- /Since: 2.6.0/
    fontSetVarNamedInstance ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -- ^ /@instanceIndex@/: named instance index.
        -> m ()
    fontSetVarNamedInstance :: FontT -> Word32 -> m ()
    fontSetVarNamedInstance font :: FontT
    font instanceIndex :: Word32
    instanceIndex = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> Word32 -> IO ()
    hb_font_set_var_named_instance Ptr FontT
    font' Word32
    instanceIndex
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_var_coords_normalized
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords_length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_var_coords_normalized" hb_font_set_var_coords_normalized ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Int32 ->                                -- coords : TBasicType TInt
        Word32 ->                               -- coords_length : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    fontSetVarCoordsNormalized ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> Int32
        -> Word32
        -> m ()
    fontSetVarCoordsNormalized :: FontT -> Int32 -> Word32 -> m ()
    fontSetVarCoordsNormalized font :: FontT
    font coords :: Int32
    coords coordsLength :: Word32
    coordsLength = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> Int32 -> Word32 -> IO ()
    hb_font_set_var_coords_normalized Ptr FontT
    font' Int32
    coords Word32
    coordsLength
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_var_coords_design
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords"
    --           , argType = TBasicType TFloat
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "coords_length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_var_coords_design" hb_font_set_var_coords_design ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CFloat ->                               -- coords : TBasicType TFloat
        Word32 ->                               -- coords_length : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.4.2/
    fontSetVarCoordsDesign ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> Float
        -> Word32
        -> m ()
    fontSetVarCoordsDesign :: FontT -> Float -> Word32 -> m ()
    fontSetVarCoordsDesign font :: FontT
    font coords :: Float
    coords coordsLength :: Word32
    coordsLength = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let coords' :: CFloat
    coords' = Float -> CFloat
    forall a b. (Real a, Fractional b) => a -> b
    realToFrac Float
    coords
        Ptr FontT -> CFloat -> Word32 -> IO ()
    hb_font_set_var_coords_design Ptr FontT
    font' CFloat
    coords' Word32
    coordsLength
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_scale
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x_scale"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "y_scale"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_scale" hb_font_set_scale ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Int32 ->                                -- x_scale : TBasicType TInt
        Int32 ->                                -- y_scale : TBasicType TInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontSetScale ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Int32
        -> Int32
        -> m ()
    fontSetScale :: FontT -> Int32 -> Int32 -> m ()
    fontSetScale font :: FontT
    font xScale :: Int32
    xScale yScale :: Int32
    yScale = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> Int32 -> Int32 -> IO ()
    hb_font_set_scale Ptr FontT
    font' Int32
    xScale Int32
    yScale
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_ptem
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "ptem"
    --           , argType = TBasicType TFloat
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font size in points."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_ptem" hb_font_set_ptem ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CFloat ->                               -- ptem : TBasicType TFloat
        IO ()

    -- | Sets \"point size\" of the font.  Set to 0 to unset.
    --
    -- There are 72 points in an inch.
    --
    -- /Since: 1.6.0/
    fontSetPtem ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Float
        -- ^ /@ptem@/: font size in points.
        -> m ()
    fontSetPtem :: FontT -> Float -> m ()
    fontSetPtem font :: FontT
    font ptem :: Float
    ptem = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let ptem' :: CFloat
    ptem' = Float -> CFloat
    forall a b. (Real a, Fractional b) => a -> b
    realToFrac Float
    ptem
        Ptr FontT -> CFloat -> IO ()
    hb_font_set_ptem Ptr FontT
    font' CFloat
    ptem'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_ppem
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x_ppem"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "y_ppem"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_ppem" hb_font_set_ppem ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- x_ppem : TBasicType TUInt
        Word32 ->                               -- y_ppem : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontSetPpem ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> m ()
    fontSetPpem :: FontT -> Word32 -> Word32 -> m ()
    fontSetPpem font :: FontT
    font xPpem :: Word32
    xPpem yPpem :: Word32
    yPpem = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> Word32 -> Word32 -> IO ()
    hb_font_set_ppem Ptr FontT
    font' Word32
    xPpem Word32
    yPpem
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_parent
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "parent"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "new parent." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_parent" hb_font_set_parent ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.FontT.FontT ->             -- parent : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO ()

    -- | Sets parent font of /@font@/.
    --
    -- /Since: 1.0.5/
    fontSetParent ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> HarfBuzz.FontT.FontT
        -- ^ /@parent@/: new parent.
        -> m ()
    fontSetParent :: FontT -> FontT -> m ()
    fontSetParent font :: FontT
    font parent :: FontT
    parent = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT
    parent' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    parent
        Ptr FontT -> Ptr FontT -> IO ()
    hb_font_set_parent Ptr FontT
    font' Ptr FontT
    parent'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    parent
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_funcs_data
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "font_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_funcs_data" hb_font_set_funcs_data ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr () ->                               -- font_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontSetFuncsData ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Ptr ()
        -> HarfBuzz.Callbacks.DestroyFuncT
        -> m ()
    fontSetFuncsData :: FontT -> Ptr () -> IO () -> m ()
    fontSetFuncsData font :: FontT
    font fontData :: Ptr ()
    fontData destroy :: IO ()
    destroy = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        FunPtr C_DestroyFuncT
    destroy' <- C_DestroyFuncT -> IO (FunPtr C_DestroyFuncT)
    HarfBuzz.Callbacks.mk_DestroyFuncT (Maybe (Ptr (FunPtr C_DestroyFuncT))
    -> C_DestroyFuncT -> C_DestroyFuncT
    HarfBuzz.Callbacks.wrap_DestroyFuncT Maybe (Ptr (FunPtr C_DestroyFuncT))
    forall a. Maybe a
    Nothing (IO () -> C_DestroyFuncT
    HarfBuzz.Callbacks.drop_closures_DestroyFuncT IO ()
    destroy))
        Ptr FontT -> Ptr () -> FunPtr C_DestroyFuncT -> IO ()
    hb_font_set_funcs_data Ptr FontT
    font' Ptr ()
    fontData FunPtr C_DestroyFuncT
    destroy'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_funcs
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "klass"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "font_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_funcs" hb_font_set_funcs ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- klass : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        Ptr () ->                               -- font_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontSetFuncs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> HarfBuzz.FontFuncsT.FontFuncsT
        -> Ptr ()
        -> HarfBuzz.Callbacks.DestroyFuncT
        -> m ()
    fontSetFuncs :: FontT -> FontFuncsT -> Ptr () -> IO () -> m ()
    fontSetFuncs font :: FontT
    font klass :: FontFuncsT
    klass fontData :: Ptr ()
    fontData destroy :: IO ()
    destroy = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontFuncsT
    klass' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    klass
        FunPtr C_DestroyFuncT
    destroy' <- C_DestroyFuncT -> IO (FunPtr C_DestroyFuncT)
    HarfBuzz.Callbacks.mk_DestroyFuncT (Maybe (Ptr (FunPtr C_DestroyFuncT))
    -> C_DestroyFuncT -> C_DestroyFuncT
    HarfBuzz.Callbacks.wrap_DestroyFuncT Maybe (Ptr (FunPtr C_DestroyFuncT))
    forall a. Maybe a
    Nothing (IO () -> C_DestroyFuncT
    HarfBuzz.Callbacks.drop_closures_DestroyFuncT IO ()
    destroy))
        Ptr FontT
    -> Ptr FontFuncsT -> Ptr () -> FunPtr C_DestroyFuncT -> IO ()
    hb_font_set_funcs Ptr FontT
    font' Ptr FontFuncsT
    klass' Ptr ()
    fontData FunPtr C_DestroyFuncT
    destroy'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    klass
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_set_face
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "new face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_set_face" hb_font_set_face ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO ()

    -- | Sets font-face of /@font@/.
    --
    -- /Since: 1.4.3/
    fontSetFace ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: new face.
        -> m ()
    fontSetFace :: FontT -> FaceT -> m ()
    fontSetFace font :: FontT
    font face :: FaceT
    face = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr FontT -> Ptr FaceT -> IO ()
    hb_font_set_face Ptr FontT
    font' Ptr FaceT
    face'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_make_immutable
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_make_immutable" hb_font_make_immutable ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontMakeImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> m ()
    fontMakeImmutable :: FontT -> m ()
    fontMakeImmutable font :: FontT
    font = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> IO ()
    hb_font_make_immutable Ptr FontT
    font'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_is_immutable
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_is_immutable" hb_font_is_immutable ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontIsImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> m Int32
    fontIsImmutable :: FontT -> m Int32
    fontIsImmutable font :: FontT
    font = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Int32
    result <- Ptr FontT -> IO Int32
    hb_font_is_immutable Ptr FontT
    font'
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function font_glyph_to_string
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "s"
    --           , argType = TCArray False (-1) 3 (TBasicType TUTF8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "size"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_glyph_to_string" hb_font_glyph_to_string ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Ptr CString ->                          -- s : TCArray False (-1) 3 (TBasicType TUTF8)
        Word32 ->                               -- size : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGlyphToString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> [T.Text]
        -> m ()
    fontGlyphToString :: FontT -> Word32 -> [Text] -> m ()
    fontGlyphToString font :: FontT
    font glyph :: Word32
    glyph s :: [Text]
    s = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        let size :: Word32
    size = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [Text] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Text]
    s
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr CString
    s' <- [Text] -> IO (Ptr CString)
    packUTF8CArray [Text]
    s
        Ptr FontT -> Word32 -> Ptr CString -> Word32 -> IO ()
    hb_font_glyph_to_string Ptr FontT
    font' Word32
    glyph Ptr CString
    s' Word32
    size
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (Word32 -> (CString -> IO ()) -> Ptr CString -> IO ()
    forall a b c.
    (Storable a, Integral b) =>
    b -> (a -> IO c) -> Ptr a -> IO ()
    mapCArrayWithLength Word32
    size) CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    s'
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    s'
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_glyph_from_string
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "s"
    --           , argType = TCArray False (-1) 2 (TBasicType TUInt8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "len"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_glyph_from_string" hb_font_glyph_from_string ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr Word8 ->                            -- s : TCArray False (-1) 2 (TBasicType TUInt8)
        Int32 ->                                -- len : TBasicType TInt
        Ptr Word32 ->                           -- glyph : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGlyphFromString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> ByteString
        -> m ((Int32, Word32))
    fontGlyphFromString :: FontT -> ByteString -> m (Int32, Word32)
    fontGlyphFromString font :: FontT
    font s :: ByteString
    s = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        let len :: Int32
    len = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ ByteString -> Int
    B.length ByteString
    s
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr Word8
    s' <- ByteString -> IO (Ptr Word8)
    packByteString ByteString
    s
        Ptr Word32
    glyph <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FontT -> Ptr Word8 -> Int32 -> Ptr Word32 -> IO Int32
    hb_font_glyph_from_string Ptr FontT
    font' Ptr Word8
    s' Int32
    len Ptr Word32
    glyph
        Word32
    glyph' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    glyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    s'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    glyph
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    glyph')

    -- function font_get_variation_glyph
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variation_selector"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_variation_glyph" hb_font_get_variation_glyph ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- unicode : TBasicType TUInt32
        Word32 ->                               -- variation_selector : TBasicType TUInt32
        Ptr Word32 ->                           -- glyph : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.2.3/
    fontGetVariationGlyph ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> m ((Int32, Word32))
    fontGetVariationGlyph :: FontT -> Word32 -> Word32 -> m (Int32, Word32)
    fontGetVariationGlyph font :: FontT
    font unicode :: Word32
    unicode variationSelector :: Word32
    variationSelector = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr Word32
    glyph <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FontT -> Word32 -> Word32 -> Ptr Word32 -> IO Int32
    hb_font_get_variation_glyph Ptr FontT
    font' Word32
    unicode Word32
    variationSelector Ptr Word32
    glyph
        Word32
    glyph' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    glyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    glyph
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    glyph')

    -- function font_get_var_coords_normalized
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_var_coords_normalized" hb_font_get_var_coords_normalized ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- length : TBasicType TUInt
        IO Int32

    -- | Return value is valid as long as variation coordinates of the font
    -- are not modified.
    --
    -- /Since: 1.4.2/
    fontGetVarCoordsNormalized ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -> Word32
        -> m Int32
    fontGetVarCoordsNormalized :: FontT -> Word32 -> m Int32
    fontGetVarCoordsNormalized font :: FontT
    font length_ :: Word32
    length_ = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Int32
    result <- Ptr FontT -> Word32 -> IO Int32
    hb_font_get_var_coords_normalized Ptr FontT
    font' Word32
    length_
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function font_get_v_extents
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "extents"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "font_extents_t" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_v_extents" hb_font_get_v_extents ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.FontExtentsT.FontExtentsT -> -- extents : TInterface (Name {namespace = "HarfBuzz", name = "font_extents_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.1.3/
    fontGetVExtents ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> m ((Int32, HarfBuzz.FontExtentsT.FontExtentsT))
    fontGetVExtents :: FontT -> m (Int32, FontExtentsT)
    fontGetVExtents font :: FontT
    font = IO (Int32, FontExtentsT) -> m (Int32, FontExtentsT)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, FontExtentsT) -> m (Int32, FontExtentsT))
    -> IO (Int32, FontExtentsT) -> m (Int32, FontExtentsT)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontExtentsT
    extents <- Int -> IO (Ptr FontExtentsT)
    forall a. Int -> IO (Ptr a)
    SP.callocBytes 48 :: IO (Ptr HarfBuzz.FontExtentsT.FontExtentsT)
        Int32
    result <- Ptr FontT -> Ptr FontExtentsT -> IO Int32
    hb_font_get_v_extents Ptr FontT
    font' Ptr FontExtentsT
    extents
        FontExtentsT
    extents' <- ((ManagedPtr FontExtentsT -> FontExtentsT)
    -> Ptr FontExtentsT -> IO FontExtentsT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr FontExtentsT -> FontExtentsT
    HarfBuzz.FontExtentsT.FontExtentsT) Ptr FontExtentsT
    extents
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (Int32, FontExtentsT) -> IO (Int32, FontExtentsT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, FontExtentsT
    extents')

    -- function font_get_scale
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x_scale"
    --           , argType = TBasicType TInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y_scale"
    --           , argType = TBasicType TInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_scale" hb_font_get_scale ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr Int32 ->                            -- x_scale : TBasicType TInt
        Ptr Int32 ->                            -- y_scale : TBasicType TInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetScale ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> m ((Int32, Int32))
    fontGetScale :: FontT -> m (Int32, Int32)
    fontGetScale font :: FontT
    font = IO (Int32, Int32) -> m (Int32, Int32)
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr Int32
    xScale <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    yScale <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr FontT -> Ptr Int32 -> Ptr Int32 -> IO ()
    hb_font_get_scale Ptr FontT
    font' Ptr Int32
    xScale Ptr Int32
    yScale
        Int32
    xScale' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    xScale
        Int32
    yScale' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    yScale
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    xScale
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    yScale
        (Int32, Int32) -> IO (Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    xScale', Int32
    yScale')

    -- function font_get_ptem
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TFloat)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_ptem" hb_font_get_ptem ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO CFloat

    -- | Gets the \"point size\" of the font.  A value of 0 means unset.
    --
    -- /Since: 0.9.2/
    fontGetPtem ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> m Float
        -- ^ __Returns:__ Point size.
    fontGetPtem :: FontT -> m Float
    fontGetPtem font :: FontT
    font = IO Float -> m Float
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Float -> m Float) -> IO Float -> m Float
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        CFloat
    result <- Ptr FontT -> IO CFloat
    hb_font_get_ptem Ptr FontT
    font'
        let result' :: Float
    result' = CFloat -> Float
    forall a b. (Real a, Fractional b) => a -> b
    realToFrac CFloat
    result
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Float -> IO Float
    forall (m :: * -> *) a. Monad m => a -> m a
    return Float
    result'

    -- function font_get_ppem
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x_ppem"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y_ppem"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_ppem" hb_font_get_ppem ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr Word32 ->                           -- x_ppem : TBasicType TUInt
        Ptr Word32 ->                           -- y_ppem : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetPpem ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> m ((Word32, Word32))
    fontGetPpem :: FontT -> m (Word32, Word32)
    fontGetPpem font :: FontT
    font = IO (Word32, Word32) -> m (Word32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, Word32) -> m (Word32, Word32))
    -> IO (Word32, Word32) -> m (Word32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr Word32
    xPpem <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    yPpem <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr FontT -> Ptr Word32 -> Ptr Word32 -> IO ()
    hb_font_get_ppem Ptr FontT
    font' Ptr Word32
    xPpem Ptr Word32
    yPpem
        Word32
    xPpem' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    xPpem
        Word32
    yPpem' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    yPpem
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    xPpem
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    yPpem
        (Word32, Word32) -> IO (Word32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    xPpem', Word32
    yPpem')

    -- function font_get_parent
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "font_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_parent" hb_font_get_parent ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO (Ptr HarfBuzz.FontT.FontT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetParent ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> m HarfBuzz.FontT.FontT
    fontGetParent :: FontT -> m FontT
    fontGetParent font :: FontT
    font = IO FontT -> m FontT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FontT -> m FontT) -> IO FontT -> m FontT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT
    result <- Ptr FontT -> IO (Ptr FontT)
    hb_font_get_parent Ptr FontT
    font'
        Text -> Ptr FontT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "fontGetParent" Ptr FontT
    result
        FontT
    result' <- ((ManagedPtr FontT -> FontT) -> Ptr FontT -> IO FontT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newBoxed ManagedPtr FontT -> FontT
    HarfBuzz.FontT.FontT) Ptr FontT
    result
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        FontT -> IO FontT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FontT
    result'

    -- function font_get_nominal_glyphs
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first_unicode"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode_stride"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph_stride"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_nominal_glyphs" hb_font_get_nominal_glyphs ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- count : TBasicType TUInt
        Word32 ->                               -- first_unicode : TBasicType TUInt32
        Word32 ->                               -- unicode_stride : TBasicType TUInt
        Word32 ->                               -- first_glyph : TBasicType TUInt32
        Word32 ->                               -- glyph_stride : TBasicType TUInt
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 2.6.3/
    fontGetNominalGlyphs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> Word32
        -> Word32
        -> Word32
        -> m Word32
    fontGetNominalGlyphs :: FontT -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> m Word32
    fontGetNominalGlyphs font :: FontT
    font count :: Word32
    count firstUnicode :: Word32
    firstUnicode unicodeStride :: Word32
    unicodeStride firstGlyph :: Word32
    firstGlyph glyphStride :: Word32
    glyphStride = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Word32
    result <- Ptr FontT
    -> Word32 -> Word32 -> Word32 -> Word32 -> Word32 -> IO Word32
    hb_font_get_nominal_glyphs Ptr FontT
    font' Word32
    count Word32
    firstUnicode Word32
    unicodeStride Word32
    firstGlyph Word32
    glyphStride
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function font_get_nominal_glyph
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_nominal_glyph" hb_font_get_nominal_glyph ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- unicode : TBasicType TUInt32
        Ptr Word32 ->                           -- glyph : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.2.3/
    fontGetNominalGlyph ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> m ((Int32, Word32))
    fontGetNominalGlyph :: FontT -> Word32 -> m (Int32, Word32)
    fontGetNominalGlyph font :: FontT
    font unicode :: Word32
    unicode = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr Word32
    glyph <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FontT -> Word32 -> Ptr Word32 -> IO Int32
    hb_font_get_nominal_glyph Ptr FontT
    font' Word32
    unicode Ptr Word32
    glyph
        Word32
    glyph' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    glyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    glyph
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    glyph')

    -- function font_get_h_extents
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "extents"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "font_extents_t" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_h_extents" hb_font_get_h_extents ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr HarfBuzz.FontExtentsT.FontExtentsT -> -- extents : TInterface (Name {namespace = "HarfBuzz", name = "font_extents_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.1.3/
    fontGetHExtents ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> m ((Int32, HarfBuzz.FontExtentsT.FontExtentsT))
    fontGetHExtents :: FontT -> m (Int32, FontExtentsT)
    fontGetHExtents font :: FontT
    font = IO (Int32, FontExtentsT) -> m (Int32, FontExtentsT)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, FontExtentsT) -> m (Int32, FontExtentsT))
    -> IO (Int32, FontExtentsT) -> m (Int32, FontExtentsT)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontExtentsT
    extents <- Int -> IO (Ptr FontExtentsT)
    forall a. Int -> IO (Ptr a)
    SP.callocBytes 48 :: IO (Ptr HarfBuzz.FontExtentsT.FontExtentsT)
        Int32
    result <- Ptr FontT -> Ptr FontExtentsT -> IO Int32
    hb_font_get_h_extents Ptr FontT
    font' Ptr FontExtentsT
    extents
        FontExtentsT
    extents' <- ((ManagedPtr FontExtentsT -> FontExtentsT)
    -> Ptr FontExtentsT -> IO FontExtentsT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr FontExtentsT -> FontExtentsT
    HarfBuzz.FontExtentsT.FontExtentsT) Ptr FontExtentsT
    extents
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (Int32, FontExtentsT) -> IO (Int32, FontExtentsT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, FontExtentsT
    extents')

    -- function font_get_glyph_v_origin
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_v_origin" hb_font_get_glyph_v_origin ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Ptr Int32 ->                            -- x : TBasicType TInt32
        Ptr Int32 ->                            -- y : TBasicType TInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphVOrigin ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> m ((Int32, Int32, Int32))
    fontGetGlyphVOrigin :: FontT -> Word32 -> m (Int32, Int32, Int32)
    fontGetGlyphVOrigin font :: FontT
    font glyph :: Word32
    glyph = IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32))
    -> IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr Int32
    x <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    y <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Int32
    result <- Ptr FontT -> Word32 -> Ptr Int32 -> Ptr Int32 -> IO Int32
    hb_font_get_glyph_v_origin Ptr FontT
    font' Word32
    glyph Ptr Int32
    x Ptr Int32
    y
        Int32
    x' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    x
        Int32
    y' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    y
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    x
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    y
        (Int32, Int32, Int32) -> IO (Int32, Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Int32
    x', Int32
    y')

    -- function font_get_glyph_v_kerning
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "top_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "bottom_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_v_kerning" hb_font_get_glyph_v_kerning ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- top_glyph : TBasicType TUInt32
        Word32 ->                               -- bottom_glyph : TBasicType TUInt32
        IO Int32

    {-# DEPRECATED fontGetGlyphVKerning ["(Since version 2.0.0)"] #-}
    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphVKerning ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> m Int32
    fontGetGlyphVKerning :: FontT -> Word32 -> Word32 -> m Int32
    fontGetGlyphVKerning font :: FontT
    font topGlyph :: Word32
    topGlyph bottomGlyph :: Word32
    bottomGlyph = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Int32
    result <- Ptr FontT -> Word32 -> Word32 -> IO Int32
    hb_font_get_glyph_v_kerning Ptr FontT
    font' Word32
    topGlyph Word32
    bottomGlyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function font_get_glyph_v_advances
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph_stride"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first_advance"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "advance_stride"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_v_advances" hb_font_get_glyph_v_advances ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- count : TBasicType TUInt
        Word32 ->                               -- first_glyph : TBasicType TUInt32
        Word32 ->                               -- glyph_stride : TBasicType TUInt
        Int32 ->                                -- first_advance : TBasicType TInt32
        Word32 ->                               -- advance_stride : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.8.6/
    fontGetGlyphVAdvances ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> Word32
        -> Int32
        -> Word32
        -> m ()
    fontGetGlyphVAdvances :: FontT -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> m ()
    fontGetGlyphVAdvances font :: FontT
    font count :: Word32
    count firstGlyph :: Word32
    firstGlyph glyphStride :: Word32
    glyphStride firstAdvance :: Int32
    firstAdvance advanceStride :: Word32
    advanceStride = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()
    hb_font_get_glyph_v_advances Ptr FontT
    font' Word32
    count Word32
    firstGlyph Word32
    glyphStride Int32
    firstAdvance Word32
    advanceStride
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_get_glyph_v_advance
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_v_advance" hb_font_get_glyph_v_advance ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphVAdvance ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> m Int32
    fontGetGlyphVAdvance :: FontT -> Word32 -> m Int32
    fontGetGlyphVAdvance font :: FontT
    font glyph :: Word32
    glyph = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Int32
    result <- Ptr FontT -> Word32 -> IO Int32
    hb_font_get_glyph_v_advance Ptr FontT
    font' Word32
    glyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function font_get_glyph_origin_for_direction
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_origin_for_direction" hb_font_get_glyph_origin_for_direction ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Ptr Int32 ->                            -- x : TBasicType TInt32
        Ptr Int32 ->                            -- y : TBasicType TInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphOriginForDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> HarfBuzz.Enums.DirectionT
        -> m ((Int32, Int32))
    fontGetGlyphOriginForDirection :: FontT -> Word32 -> DirectionT -> m (Int32, Int32)
    fontGetGlyphOriginForDirection font :: FontT
    font glyph :: Word32
    glyph direction :: DirectionT
    direction = IO (Int32, Int32) -> m (Int32, Int32)
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr Int32
    x <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    y <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr FontT -> Word32 -> CUInt -> Ptr Int32 -> Ptr Int32 -> IO ()
    hb_font_get_glyph_origin_for_direction Ptr FontT
    font' Word32
    glyph CUInt
    direction' Ptr Int32
    x Ptr Int32
    y
        Int32
    x' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    x
        Int32
    y' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    y
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    x
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    y
        (Int32, Int32) -> IO (Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    x', Int32
    y')

    -- function font_get_glyph_name
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "name"
    --           , argType = TCArray False (-1) 3 (TBasicType TUTF8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "size"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_name" hb_font_get_glyph_name ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Ptr CString ->                          -- name : TCArray False (-1) 3 (TBasicType TUTF8)
        Word32 ->                               -- size : TBasicType TUInt
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphName ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> [T.Text]
        -> m Int32
    fontGetGlyphName :: FontT -> Word32 -> [Text] -> m Int32
    fontGetGlyphName font :: FontT
    font glyph :: Word32
    glyph name :: [Text]
    name = IO Int32 -> m Int32
    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
        let size :: Word32
    size = Int -> Word32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Word32) -> Int -> Word32
    forall a b. (a -> b) -> a -> b
    $ [Text] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Text]
    name
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr CString
    name' <- [Text] -> IO (Ptr CString)
    packUTF8CArray [Text]
    name
        Int32
    result <- Ptr FontT -> Word32 -> Ptr CString -> Word32 -> IO Int32
    hb_font_get_glyph_name Ptr FontT
    font' Word32
    glyph Ptr CString
    name' Word32
    size
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (Word32 -> (CString -> IO ()) -> Ptr CString -> IO ()
    forall a b c.
    (Storable a, Integral b) =>
    b -> (a -> IO c) -> Ptr a -> IO ()
    mapCArrayWithLength Word32
    size) CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    name'
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    name'
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function font_get_glyph_kerning_for_direction
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "second_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_kerning_for_direction" hb_font_get_glyph_kerning_for_direction ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- first_glyph : TBasicType TUInt32
        Word32 ->                               -- second_glyph : TBasicType TUInt32
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Ptr Int32 ->                            -- x : TBasicType TInt32
        Ptr Int32 ->                            -- y : TBasicType TInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphKerningForDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> HarfBuzz.Enums.DirectionT
        -> m ((Int32, Int32))
    fontGetGlyphKerningForDirection :: FontT -> Word32 -> Word32 -> DirectionT -> m (Int32, Int32)
    fontGetGlyphKerningForDirection font :: FontT
    font firstGlyph :: Word32
    firstGlyph secondGlyph :: Word32
    secondGlyph direction :: DirectionT
    direction = IO (Int32, Int32) -> m (Int32, Int32)
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr Int32
    x <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    y <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr FontT
    -> Word32 -> Word32 -> CUInt -> Ptr Int32 -> Ptr Int32 -> IO ()
    hb_font_get_glyph_kerning_for_direction Ptr FontT
    font' Word32
    firstGlyph Word32
    secondGlyph CUInt
    direction' Ptr Int32
    x Ptr Int32
    y
        Int32
    x' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    x
        Int32
    y' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    y
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    x
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    y
        (Int32, Int32) -> IO (Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    x', Int32
    y')

    -- function font_get_glyph_h_origin
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_h_origin" hb_font_get_glyph_h_origin ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Ptr Int32 ->                            -- x : TBasicType TInt32
        Ptr Int32 ->                            -- y : TBasicType TInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphHOrigin ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> m ((Int32, Int32, Int32))
    fontGetGlyphHOrigin :: FontT -> Word32 -> m (Int32, Int32, Int32)
    fontGetGlyphHOrigin font :: FontT
    font glyph :: Word32
    glyph = IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32))
    -> IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr Int32
    x <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    y <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Int32
    result <- Ptr FontT -> Word32 -> Ptr Int32 -> Ptr Int32 -> IO Int32
    hb_font_get_glyph_h_origin Ptr FontT
    font' Word32
    glyph Ptr Int32
    x Ptr Int32
    y
        Int32
    x' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    x
        Int32
    y' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    y
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    x
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    y
        (Int32, Int32, Int32) -> IO (Int32, Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Int32
    x', Int32
    y')

    -- function font_get_glyph_h_kerning
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "left_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "right_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_h_kerning" hb_font_get_glyph_h_kerning ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- left_glyph : TBasicType TUInt32
        Word32 ->                               -- right_glyph : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphHKerning ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> m Int32
    fontGetGlyphHKerning :: FontT -> Word32 -> Word32 -> m Int32
    fontGetGlyphHKerning font :: FontT
    font leftGlyph :: Word32
    leftGlyph rightGlyph :: Word32
    rightGlyph = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Int32
    result <- Ptr FontT -> Word32 -> Word32 -> IO Int32
    hb_font_get_glyph_h_kerning Ptr FontT
    font' Word32
    leftGlyph Word32
    rightGlyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function font_get_glyph_h_advances
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph_stride"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first_advance"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "advance_stride"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_h_advances" hb_font_get_glyph_h_advances ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- count : TBasicType TUInt
        Word32 ->                               -- first_glyph : TBasicType TUInt32
        Word32 ->                               -- glyph_stride : TBasicType TUInt
        Int32 ->                                -- first_advance : TBasicType TInt32
        Word32 ->                               -- advance_stride : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.8.6/
    fontGetGlyphHAdvances ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> Word32
        -> Int32
        -> Word32
        -> m ()
    fontGetGlyphHAdvances :: FontT -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> m ()
    fontGetGlyphHAdvances font :: FontT
    font count :: Word32
    count firstGlyph :: Word32
    firstGlyph glyphStride :: Word32
    glyphStride firstAdvance :: Int32
    firstAdvance advanceStride :: Word32
    advanceStride = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FontT -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()
    hb_font_get_glyph_h_advances Ptr FontT
    font' Word32
    count Word32
    firstGlyph Word32
    glyphStride Int32
    firstAdvance Word32
    advanceStride
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_get_glyph_h_advance
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_h_advance" hb_font_get_glyph_h_advance ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphHAdvance ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> m Int32
    fontGetGlyphHAdvance :: FontT -> Word32 -> m Int32
    fontGetGlyphHAdvance font :: FontT
    font glyph :: Word32
    glyph = IO Int32 -> m Int32
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Int32
    result <- Ptr FontT -> Word32 -> IO Int32
    hb_font_get_glyph_h_advance Ptr FontT
    font' Word32
    glyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function font_get_glyph_from_name
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "name"
    --           , argType = TCArray False (-1) 2 (TBasicType TUTF8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "len"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_from_name" hb_font_get_glyph_from_name ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Ptr CString ->                          -- name : TCArray False (-1) 2 (TBasicType TUTF8)
        Int32 ->                                -- len : TBasicType TInt
        Ptr Word32 ->                           -- glyph : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphFromName ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> [T.Text]
        -> m ((Int32, Word32))
    fontGetGlyphFromName :: FontT -> [Text] -> m (Int32, Word32)
    fontGetGlyphFromName font :: FontT
    font name :: [Text]
    name = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        let len :: Int32
    len = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ [Text] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Text]
    name
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr CString
    name' <- [Text] -> IO (Ptr CString)
    packUTF8CArray [Text]
    name
        Ptr Word32
    glyph <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FontT -> Ptr CString -> Int32 -> Ptr Word32 -> IO Int32
    hb_font_get_glyph_from_name Ptr FontT
    font' Ptr CString
    name' Int32
    len Ptr Word32
    glyph
        Word32
    glyph' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    glyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (Int32 -> (CString -> IO ()) -> Ptr CString -> IO ()
    forall a b c.
    (Storable a, Integral b) =>
    b -> (a -> IO c) -> Ptr a -> IO ()
    mapCArrayWithLength Int32
    len) CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    name'
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    name'
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    glyph
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    glyph')

    -- function font_get_glyph_extents_for_origin
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "extents"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "glyph_extents_t" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_extents_for_origin" hb_font_get_glyph_extents_for_origin ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Ptr HarfBuzz.GlyphExtentsT.GlyphExtentsT -> -- extents : TInterface (Name {namespace = "HarfBuzz", name = "glyph_extents_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphExtentsForOrigin ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> HarfBuzz.Enums.DirectionT
        -> m ((Int32, HarfBuzz.GlyphExtentsT.GlyphExtentsT))
    fontGetGlyphExtentsForOrigin :: FontT -> Word32 -> DirectionT -> m (Int32, GlyphExtentsT)
    fontGetGlyphExtentsForOrigin font :: FontT
    font glyph :: Word32
    glyph direction :: DirectionT
    direction = IO (Int32, GlyphExtentsT) -> m (Int32, GlyphExtentsT)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, GlyphExtentsT) -> m (Int32, GlyphExtentsT))
    -> IO (Int32, GlyphExtentsT) -> m (Int32, GlyphExtentsT)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr GlyphExtentsT
    extents <- Int -> IO (Ptr GlyphExtentsT)
    forall a. Int -> IO (Ptr a)
    SP.callocBytes 16 :: IO (Ptr HarfBuzz.GlyphExtentsT.GlyphExtentsT)
        Int32
    result <- Ptr FontT -> Word32 -> CUInt -> Ptr GlyphExtentsT -> IO Int32
    hb_font_get_glyph_extents_for_origin Ptr FontT
    font' Word32
    glyph CUInt
    direction' Ptr GlyphExtentsT
    extents
        GlyphExtentsT
    extents' <- ((ManagedPtr GlyphExtentsT -> GlyphExtentsT)
    -> Ptr GlyphExtentsT -> IO GlyphExtentsT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr GlyphExtentsT -> GlyphExtentsT
    HarfBuzz.GlyphExtentsT.GlyphExtentsT) Ptr GlyphExtentsT
    extents
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (Int32, GlyphExtentsT) -> IO (Int32, GlyphExtentsT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, GlyphExtentsT
    extents')

    -- function font_get_glyph_extents
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "extents"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "glyph_extents_t" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_extents" hb_font_get_glyph_extents ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Ptr HarfBuzz.GlyphExtentsT.GlyphExtentsT -> -- extents : TInterface (Name {namespace = "HarfBuzz", name = "glyph_extents_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphExtents ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> m ((Int32, HarfBuzz.GlyphExtentsT.GlyphExtentsT))
    fontGetGlyphExtents :: FontT -> Word32 -> m (Int32, GlyphExtentsT)
    fontGetGlyphExtents font :: FontT
    font glyph :: Word32
    glyph = IO (Int32, GlyphExtentsT) -> m (Int32, GlyphExtentsT)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, GlyphExtentsT) -> m (Int32, GlyphExtentsT))
    -> IO (Int32, GlyphExtentsT) -> m (Int32, GlyphExtentsT)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr GlyphExtentsT
    extents <- Int -> IO (Ptr GlyphExtentsT)
    forall a. Int -> IO (Ptr a)
    SP.callocBytes 16 :: IO (Ptr HarfBuzz.GlyphExtentsT.GlyphExtentsT)
        Int32
    result <- Ptr FontT -> Word32 -> Ptr GlyphExtentsT -> IO Int32
    hb_font_get_glyph_extents Ptr FontT
    font' Word32
    glyph Ptr GlyphExtentsT
    extents
        GlyphExtentsT
    extents' <- ((ManagedPtr GlyphExtentsT -> GlyphExtentsT)
    -> Ptr GlyphExtentsT -> IO GlyphExtentsT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr GlyphExtentsT -> GlyphExtentsT
    HarfBuzz.GlyphExtentsT.GlyphExtentsT) Ptr GlyphExtentsT
    extents
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (Int32, GlyphExtentsT) -> IO (Int32, GlyphExtentsT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, GlyphExtentsT
    extents')

    -- function font_get_glyph_contour_point_for_origin
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "point_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_contour_point_for_origin" hb_font_get_glyph_contour_point_for_origin ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Word32 ->                               -- point_index : TBasicType TUInt
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Ptr Int32 ->                            -- x : TBasicType TInt32
        Ptr Int32 ->                            -- y : TBasicType TInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphContourPointForOrigin ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> HarfBuzz.Enums.DirectionT
        -> m ((Int32, Int32, Int32))
    fontGetGlyphContourPointForOrigin :: FontT -> Word32 -> Word32 -> DirectionT -> m (Int32, Int32, Int32)
    fontGetGlyphContourPointForOrigin font :: FontT
    font glyph :: Word32
    glyph pointIndex :: Word32
    pointIndex direction :: DirectionT
    direction = IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32))
    -> IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr Int32
    x <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    y <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Int32
    result <- Ptr FontT
    -> Word32 -> Word32 -> CUInt -> Ptr Int32 -> Ptr Int32 -> IO Int32
    hb_font_get_glyph_contour_point_for_origin Ptr FontT
    font' Word32
    glyph Word32
    pointIndex CUInt
    direction' Ptr Int32
    x Ptr Int32
    y
        Int32
    x' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    x
        Int32
    y' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    y
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    x
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    y
        (Int32, Int32, Int32) -> IO (Int32, Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Int32
    x', Int32
    y')

    -- function font_get_glyph_contour_point
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "point_index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_contour_point" hb_font_get_glyph_contour_point ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        Word32 ->                               -- point_index : TBasicType TUInt
        Ptr Int32 ->                            -- x : TBasicType TInt32
        Ptr Int32 ->                            -- y : TBasicType TInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphContourPoint ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> m ((Int32, Int32, Int32))
    fontGetGlyphContourPoint :: FontT -> Word32 -> Word32 -> m (Int32, Int32, Int32)
    fontGetGlyphContourPoint font :: FontT
    font glyph :: Word32
    glyph pointIndex :: Word32
    pointIndex = IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32))
    -> IO (Int32, Int32, Int32) -> m (Int32, Int32, Int32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr Int32
    x <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    y <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Int32
    result <- Ptr FontT -> Word32 -> Word32 -> Ptr Int32 -> Ptr Int32 -> IO Int32
    hb_font_get_glyph_contour_point Ptr FontT
    font' Word32
    glyph Word32
    pointIndex Ptr Int32
    x Ptr Int32
    y
        Int32
    x' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    x
        Int32
    y' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    y
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    x
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    y
        (Int32, Int32, Int32) -> IO (Int32, Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Int32
    x', Int32
    y')

    -- function font_get_glyph_advances_for_direction
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph_stride"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "first_advance"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "advance_stride"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_advances_for_direction" hb_font_get_glyph_advances_for_direction ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Word32 ->                               -- count : TBasicType TUInt
        Word32 ->                               -- first_glyph : TBasicType TUInt32
        Word32 ->                               -- glyph_stride : TBasicType TUInt
        Int32 ->                                -- first_advance : TBasicType TInt32
        Word32 ->                               -- advance_stride : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.8.6/
    fontGetGlyphAdvancesForDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> HarfBuzz.Enums.DirectionT
        -> Word32
        -> Word32
        -> Word32
        -> Int32
        -> Word32
        -> m ()
    fontGetGlyphAdvancesForDirection :: FontT
    -> DirectionT
    -> Word32
    -> Word32
    -> Word32
    -> Int32
    -> Word32
    -> m ()
    fontGetGlyphAdvancesForDirection font :: FontT
    font direction :: DirectionT
    direction count :: Word32
    count firstGlyph :: Word32
    firstGlyph glyphStride :: Word32
    glyphStride firstAdvance :: Int32
    firstAdvance advanceStride :: Word32
    advanceStride = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr FontT
    -> CUInt -> Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()
    hb_font_get_glyph_advances_for_direction Ptr FontT
    font' CUInt
    direction' Word32
    count Word32
    firstGlyph Word32
    glyphStride Int32
    firstAdvance Word32
    advanceStride
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_get_glyph_advance_for_direction
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph_advance_for_direction" hb_font_get_glyph_advance_for_direction ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Ptr Int32 ->                            -- x : TBasicType TInt32
        Ptr Int32 ->                            -- y : TBasicType TInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyphAdvanceForDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> HarfBuzz.Enums.DirectionT
        -> m ((Int32, Int32))
    fontGetGlyphAdvanceForDirection :: FontT -> Word32 -> DirectionT -> m (Int32, Int32)
    fontGetGlyphAdvanceForDirection font :: FontT
    font glyph :: Word32
    glyph direction :: DirectionT
    direction = IO (Int32, Int32) -> m (Int32, Int32)
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr Int32
    x <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    y <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr FontT -> Word32 -> CUInt -> Ptr Int32 -> Ptr Int32 -> IO ()
    hb_font_get_glyph_advance_for_direction Ptr FontT
    font' Word32
    glyph CUInt
    direction' Ptr Int32
    x Ptr Int32
    y
        Int32
    x' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    x
        Int32
    y' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    y
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    x
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    y
        (Int32, Int32) -> IO (Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    x', Int32
    y')

    -- function font_get_glyph
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variation_selector"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_glyph" hb_font_get_glyph ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- unicode : TBasicType TUInt32
        Word32 ->                               -- variation_selector : TBasicType TUInt32
        Ptr Word32 ->                           -- glyph : TBasicType TUInt32
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetGlyph ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> Word32
        -> m ((Int32, Word32))
    fontGetGlyph :: FontT -> Word32 -> Word32 -> m (Int32, Word32)
    fontGetGlyph font :: FontT
    font unicode :: Word32
    unicode variationSelector :: Word32
    variationSelector = IO (Int32, Word32) -> m (Int32, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Word32) -> m (Int32, Word32))
    -> IO (Int32, Word32) -> m (Int32, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr Word32
    glyph <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Int32
    result <- Ptr FontT -> Word32 -> Word32 -> Ptr Word32 -> IO Int32
    hb_font_get_glyph Ptr FontT
    font' Word32
    unicode Word32
    variationSelector Ptr Word32
    glyph
        Word32
    glyph' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    glyph
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    glyph
        (Int32, Word32) -> IO (Int32, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Word32
    glyph')

    -- function font_get_face
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "face_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_face" hb_font_get_face ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO (Ptr HarfBuzz.FaceT.FaceT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetFace ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> m HarfBuzz.FaceT.FaceT
    fontGetFace :: FontT -> m FaceT
    fontGetFace font :: FontT
    font = IO FaceT -> m FaceT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FaceT -> m FaceT) -> IO FaceT -> m FaceT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        Ptr FaceT
    result <- Ptr FontT -> IO (Ptr FaceT)
    hb_font_get_face Ptr FontT
    font'
        Text -> Ptr FaceT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "fontGetFace" Ptr FaceT
    result
        FaceT
    result' <- ((ManagedPtr FaceT -> FaceT) -> Ptr FaceT -> IO FaceT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newBoxed ManagedPtr FaceT -> FaceT
    HarfBuzz.FaceT.FaceT) Ptr FaceT
    result
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        FaceT -> IO FaceT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FaceT
    result'

    -- function font_get_extents_for_direction
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "extents"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "font_extents_t" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_extents_for_direction" hb_font_get_extents_for_direction ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Ptr HarfBuzz.FontExtentsT.FontExtentsT -> -- extents : TInterface (Name {namespace = "HarfBuzz", name = "font_extents_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.1.3/
    fontGetExtentsForDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> HarfBuzz.Enums.DirectionT
        -> m (HarfBuzz.FontExtentsT.FontExtentsT)
    fontGetExtentsForDirection :: FontT -> DirectionT -> m FontExtentsT
    fontGetExtentsForDirection font :: FontT
    font direction :: DirectionT
    direction = IO FontExtentsT -> m FontExtentsT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FontExtentsT -> m FontExtentsT)
    -> IO FontExtentsT -> m FontExtentsT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr FontExtentsT
    extents <- Int -> IO (Ptr FontExtentsT)
    forall a. Int -> IO (Ptr a)
    SP.callocBytes 48 :: IO (Ptr HarfBuzz.FontExtentsT.FontExtentsT)
        Ptr FontT -> CUInt -> Ptr FontExtentsT -> IO ()
    hb_font_get_extents_for_direction Ptr FontT
    font' CUInt
    direction' Ptr FontExtentsT
    extents
        FontExtentsT
    extents' <- ((ManagedPtr FontExtentsT -> FontExtentsT)
    -> Ptr FontExtentsT -> IO FontExtentsT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapPtr ManagedPtr FontExtentsT -> FontExtentsT
    HarfBuzz.FontExtentsT.FontExtentsT) Ptr FontExtentsT
    extents
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        FontExtentsT -> IO FontExtentsT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FontExtentsT
    extents'

    -- function font_get_empty
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "font_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_get_empty" hb_font_get_empty ::
        IO (Ptr HarfBuzz.FontT.FontT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontGetEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.FontT.FontT
    fontGetEmpty :: m FontT
    fontGetEmpty  = IO FontT -> m FontT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FontT -> m FontT) -> IO FontT -> m FontT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    result <- IO (Ptr FontT)
    hb_font_get_empty
        Text -> Ptr FontT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "fontGetEmpty" Ptr FontT
    result
        FontT
    result' <- ((ManagedPtr FontT -> FontT) -> Ptr FontT -> IO FontT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FontT -> FontT
    HarfBuzz.FontT.FontT) Ptr FontT
    result
        FontT -> IO FontT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FontT
    result'

    -- function font_funcs_set_variation_glyph_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "font_get_variation_glyph_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_variation_glyph_func" hb_font_funcs_set_variation_glyph_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetVariationGlyphFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_variation_glyph_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.2.3/
    fontFuncsSetVariationGlyphFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetVariationGlyphFuncT
        -> m ()
    fontFuncsSetVariationGlyphFunc :: FontFuncsT -> FontGetVariationGlyphFuncT -> m ()
    fontFuncsSetVariationGlyphFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetVariationGlyphFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetVariationGlyphFuncT
    func' <- C_FontGetVariationGlyphFuncT
    -> IO (FunPtr C_FontGetVariationGlyphFuncT)
    HarfBuzz.Callbacks.mk_FontGetVariationGlyphFuncT (Maybe (Ptr (FunPtr C_FontGetVariationGlyphFuncT))
    -> FontGetVariationGlyphFuncT_WithClosures
    -> C_FontGetVariationGlyphFuncT
    HarfBuzz.Callbacks.wrap_FontGetVariationGlyphFuncT Maybe (Ptr (FunPtr C_FontGetVariationGlyphFuncT))
    forall a. Maybe a
    Nothing (FontGetVariationGlyphFuncT
    -> FontGetVariationGlyphFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetVariationGlyphFuncT FontGetVariationGlyphFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetVariationGlyphFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetVariationGlyphFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetVariationGlyphFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_variation_glyph_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetVariationGlyphFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_nominal_glyphs_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "font_get_nominal_glyphs_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_nominal_glyphs_func" hb_font_funcs_set_nominal_glyphs_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetNominalGlyphsFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_nominal_glyphs_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 2.0.0/
    fontFuncsSetNominalGlyphsFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetNominalGlyphsFuncT
        -> m ()
    fontFuncsSetNominalGlyphsFunc :: FontFuncsT -> FontGetNominalGlyphsFuncT -> m ()
    fontFuncsSetNominalGlyphsFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetNominalGlyphsFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetNominalGlyphsFuncT
    func' <- C_FontGetNominalGlyphsFuncT
    -> IO (FunPtr C_FontGetNominalGlyphsFuncT)
    HarfBuzz.Callbacks.mk_FontGetNominalGlyphsFuncT (Maybe (Ptr (FunPtr C_FontGetNominalGlyphsFuncT))
    -> FontGetNominalGlyphsFuncT_WithClosures
    -> C_FontGetNominalGlyphsFuncT
    HarfBuzz.Callbacks.wrap_FontGetNominalGlyphsFuncT Maybe (Ptr (FunPtr C_FontGetNominalGlyphsFuncT))
    forall a. Maybe a
    Nothing (FontGetNominalGlyphsFuncT -> FontGetNominalGlyphsFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetNominalGlyphsFuncT FontGetNominalGlyphsFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetNominalGlyphsFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetNominalGlyphsFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetNominalGlyphsFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_nominal_glyphs_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetNominalGlyphsFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_nominal_glyph_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_nominal_glyph_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_nominal_glyph_func" hb_font_funcs_set_nominal_glyph_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetNominalGlyphFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_nominal_glyph_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.2.3/
    fontFuncsSetNominalGlyphFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetNominalGlyphFuncT
        -> m ()
    fontFuncsSetNominalGlyphFunc :: FontFuncsT -> FontGetNominalGlyphFuncT -> m ()
    fontFuncsSetNominalGlyphFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetNominalGlyphFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetNominalGlyphFuncT
    func' <- C_FontGetNominalGlyphFuncT
    -> IO (FunPtr C_FontGetNominalGlyphFuncT)
    HarfBuzz.Callbacks.mk_FontGetNominalGlyphFuncT (Maybe (Ptr (FunPtr C_FontGetNominalGlyphFuncT))
    -> FontGetNominalGlyphFuncT_WithClosures
    -> C_FontGetNominalGlyphFuncT
    HarfBuzz.Callbacks.wrap_FontGetNominalGlyphFuncT Maybe (Ptr (FunPtr C_FontGetNominalGlyphFuncT))
    forall a. Maybe a
    Nothing (FontGetNominalGlyphFuncT -> FontGetNominalGlyphFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetNominalGlyphFuncT FontGetNominalGlyphFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetNominalGlyphFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetNominalGlyphFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetNominalGlyphFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_nominal_glyph_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetNominalGlyphFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_v_origin_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_glyph_origin_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_v_origin_func" hb_font_funcs_set_glyph_v_origin_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphOriginFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_origin_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphVOriginFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphOriginFuncT
        -> m ()
    fontFuncsSetGlyphVOriginFunc :: FontFuncsT -> FontGetGlyphOriginFuncT -> m ()
    fontFuncsSetGlyphVOriginFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphOriginFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphOriginFuncT
    func' <- C_FontGetGlyphOriginFuncT -> IO (FunPtr C_FontGetGlyphOriginFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphOriginFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphOriginFuncT))
    -> FontGetGlyphOriginFuncT_WithClosures
    -> C_FontGetGlyphOriginFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphOriginFuncT Maybe (Ptr (FunPtr C_FontGetGlyphOriginFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphOriginFuncT -> FontGetGlyphOriginFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphOriginFuncT FontGetGlyphOriginFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphOriginFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphOriginFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphOriginFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_v_origin_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphOriginFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_v_kerning_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_glyph_kerning_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_v_kerning_func" hb_font_funcs_set_glyph_v_kerning_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphKerningFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_kerning_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    {-# DEPRECATED fontFuncsSetGlyphVKerningFunc ["(Since version 2.0.0)"] #-}
    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphVKerningFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphKerningFuncT
        -> m ()
    fontFuncsSetGlyphVKerningFunc :: FontFuncsT -> FontGetNominalGlyphFuncT -> m ()
    fontFuncsSetGlyphVKerningFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetNominalGlyphFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetNominalGlyphFuncT
    func' <- C_FontGetNominalGlyphFuncT
    -> IO (FunPtr C_FontGetNominalGlyphFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphKerningFuncT (Maybe (Ptr (FunPtr C_FontGetNominalGlyphFuncT))
    -> FontGetNominalGlyphFuncT_WithClosures
    -> C_FontGetNominalGlyphFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphKerningFuncT Maybe (Ptr (FunPtr C_FontGetNominalGlyphFuncT))
    forall a. Maybe a
    Nothing (FontGetNominalGlyphFuncT -> FontGetNominalGlyphFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphKerningFuncT FontGetNominalGlyphFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetNominalGlyphFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetNominalGlyphFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetNominalGlyphFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_v_kerning_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetNominalGlyphFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_v_advances_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "font_get_glyph_advances_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_v_advances_func" hb_font_funcs_set_glyph_v_advances_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphAdvancesFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_advances_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.8.6/
    fontFuncsSetGlyphVAdvancesFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphAdvancesFuncT
        -> m ()
    fontFuncsSetGlyphVAdvancesFunc :: FontFuncsT -> FontGetGlyphAdvancesFuncT -> m ()
    fontFuncsSetGlyphVAdvancesFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphAdvancesFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphAdvancesFuncT
    func' <- C_FontGetGlyphAdvancesFuncT
    -> IO (FunPtr C_FontGetGlyphAdvancesFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphAdvancesFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphAdvancesFuncT))
    -> FontGetGlyphAdvancesFuncT_WithClosures
    -> C_FontGetGlyphAdvancesFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphAdvancesFuncT Maybe (Ptr (FunPtr C_FontGetGlyphAdvancesFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphAdvancesFuncT -> FontGetGlyphAdvancesFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphAdvancesFuncT FontGetGlyphAdvancesFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphAdvancesFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphAdvancesFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphAdvancesFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_v_advances_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphAdvancesFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_v_advance_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_glyph_advance_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_v_advance_func" hb_font_funcs_set_glyph_v_advance_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphAdvanceFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_advance_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphVAdvanceFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphAdvanceFuncT
        -> m ()
    fontFuncsSetGlyphVAdvanceFunc :: FontFuncsT -> FontGetGlyphAdvanceFuncT -> m ()
    fontFuncsSetGlyphVAdvanceFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphAdvanceFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphAdvanceFuncT
    func' <- C_FontGetGlyphAdvanceFuncT
    -> IO (FunPtr C_FontGetGlyphAdvanceFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphAdvanceFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphAdvanceFuncT))
    -> FontGetGlyphAdvanceFuncT_WithClosures
    -> C_FontGetGlyphAdvanceFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphAdvanceFuncT Maybe (Ptr (FunPtr C_FontGetGlyphAdvanceFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphAdvanceFuncT -> FontGetGlyphAdvanceFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphAdvanceFuncT FontGetGlyphAdvanceFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphAdvanceFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphAdvanceFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphAdvanceFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_v_advance_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphAdvanceFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_name_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_glyph_name_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_name_func" hb_font_funcs_set_glyph_name_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphNameFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_name_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphNameFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphNameFuncT
        -> m ()
    fontFuncsSetGlyphNameFunc :: FontFuncsT -> FontGetGlyphNameFuncT -> m ()
    fontFuncsSetGlyphNameFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphNameFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphNameFuncT
    func' <- C_FontGetGlyphNameFuncT -> IO (FunPtr C_FontGetGlyphNameFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphNameFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphNameFuncT))
    -> FontGetGlyphNameFuncT_WithClosures -> C_FontGetGlyphNameFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphNameFuncT Maybe (Ptr (FunPtr C_FontGetGlyphNameFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphNameFuncT -> FontGetGlyphNameFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphNameFuncT FontGetGlyphNameFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphNameFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphNameFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphNameFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_name_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphNameFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_h_origin_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_glyph_origin_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_h_origin_func" hb_font_funcs_set_glyph_h_origin_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphOriginFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_origin_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphHOriginFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphOriginFuncT
        -> m ()
    fontFuncsSetGlyphHOriginFunc :: FontFuncsT -> FontGetGlyphOriginFuncT -> m ()
    fontFuncsSetGlyphHOriginFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphOriginFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphOriginFuncT
    func' <- C_FontGetGlyphOriginFuncT -> IO (FunPtr C_FontGetGlyphOriginFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphOriginFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphOriginFuncT))
    -> FontGetGlyphOriginFuncT_WithClosures
    -> C_FontGetGlyphOriginFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphOriginFuncT Maybe (Ptr (FunPtr C_FontGetGlyphOriginFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphOriginFuncT -> FontGetGlyphOriginFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphOriginFuncT FontGetGlyphOriginFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphOriginFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphOriginFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphOriginFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_h_origin_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphOriginFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_h_kerning_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_glyph_kerning_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_h_kerning_func" hb_font_funcs_set_glyph_h_kerning_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphKerningFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_kerning_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphHKerningFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphKerningFuncT
        -> m ()
    fontFuncsSetGlyphHKerningFunc :: FontFuncsT -> FontGetNominalGlyphFuncT -> m ()
    fontFuncsSetGlyphHKerningFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetNominalGlyphFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetNominalGlyphFuncT
    func' <- C_FontGetNominalGlyphFuncT
    -> IO (FunPtr C_FontGetNominalGlyphFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphKerningFuncT (Maybe (Ptr (FunPtr C_FontGetNominalGlyphFuncT))
    -> FontGetNominalGlyphFuncT_WithClosures
    -> C_FontGetNominalGlyphFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphKerningFuncT Maybe (Ptr (FunPtr C_FontGetNominalGlyphFuncT))
    forall a. Maybe a
    Nothing (FontGetNominalGlyphFuncT -> FontGetNominalGlyphFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphKerningFuncT FontGetNominalGlyphFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetNominalGlyphFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetNominalGlyphFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetNominalGlyphFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_h_kerning_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetNominalGlyphFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_h_advances_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "font_get_glyph_advances_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_h_advances_func" hb_font_funcs_set_glyph_h_advances_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphAdvancesFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_advances_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.8.6/
    fontFuncsSetGlyphHAdvancesFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphAdvancesFuncT
        -> m ()
    fontFuncsSetGlyphHAdvancesFunc :: FontFuncsT -> FontGetGlyphAdvancesFuncT -> m ()
    fontFuncsSetGlyphHAdvancesFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphAdvancesFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphAdvancesFuncT
    func' <- C_FontGetGlyphAdvancesFuncT
    -> IO (FunPtr C_FontGetGlyphAdvancesFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphAdvancesFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphAdvancesFuncT))
    -> FontGetGlyphAdvancesFuncT_WithClosures
    -> C_FontGetGlyphAdvancesFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphAdvancesFuncT Maybe (Ptr (FunPtr C_FontGetGlyphAdvancesFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphAdvancesFuncT -> FontGetGlyphAdvancesFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphAdvancesFuncT FontGetGlyphAdvancesFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphAdvancesFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphAdvancesFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphAdvancesFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_h_advances_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphAdvancesFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_h_advance_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_glyph_advance_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_h_advance_func" hb_font_funcs_set_glyph_h_advance_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphAdvanceFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_advance_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphHAdvanceFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphAdvanceFuncT
        -> m ()
    fontFuncsSetGlyphHAdvanceFunc :: FontFuncsT -> FontGetGlyphAdvanceFuncT -> m ()
    fontFuncsSetGlyphHAdvanceFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphAdvanceFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphAdvanceFuncT
    func' <- C_FontGetGlyphAdvanceFuncT
    -> IO (FunPtr C_FontGetGlyphAdvanceFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphAdvanceFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphAdvanceFuncT))
    -> FontGetGlyphAdvanceFuncT_WithClosures
    -> C_FontGetGlyphAdvanceFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphAdvanceFuncT Maybe (Ptr (FunPtr C_FontGetGlyphAdvanceFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphAdvanceFuncT -> FontGetGlyphAdvanceFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphAdvanceFuncT FontGetGlyphAdvanceFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphAdvanceFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphAdvanceFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphAdvanceFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_h_advance_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphAdvanceFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "font_get_glyph_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "callback function." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "data to pass to @func."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "function to call when @user_data is not needed anymore."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_func" hb_font_funcs_set_glyph_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    {-# DEPRECATED fontFuncsSetGlyphFunc ["(Since version 1.2.3)"] #-}
    -- | Deprecated.  Use 'GI.HarfBuzz.Functions.fontFuncsSetNominalGlyphFunc' and
    -- 'GI.HarfBuzz.Functions.fontFuncsSetVariationGlyphFunc' instead.
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphFuncT
        -- ^ /@func@/: callback function.
        -> m ()
    fontFuncsSetGlyphFunc :: FontFuncsT -> FontGetVariationGlyphFuncT -> m ()
    fontFuncsSetGlyphFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetVariationGlyphFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetVariationGlyphFuncT
    func' <- C_FontGetVariationGlyphFuncT
    -> IO (FunPtr C_FontGetVariationGlyphFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphFuncT (Maybe (Ptr (FunPtr C_FontGetVariationGlyphFuncT))
    -> FontGetVariationGlyphFuncT_WithClosures
    -> C_FontGetVariationGlyphFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphFuncT Maybe (Ptr (FunPtr C_FontGetVariationGlyphFuncT))
    forall a. Maybe a
    Nothing (FontGetVariationGlyphFuncT
    -> FontGetVariationGlyphFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphFuncT FontGetVariationGlyphFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetVariationGlyphFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetVariationGlyphFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetVariationGlyphFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetVariationGlyphFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_from_name_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "font_get_glyph_from_name_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_from_name_func" hb_font_funcs_set_glyph_from_name_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphFromNameFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_from_name_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphFromNameFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphFromNameFuncT
        -> m ()
    fontFuncsSetGlyphFromNameFunc :: FontFuncsT -> FontGetGlyphFromNameFuncT -> m ()
    fontFuncsSetGlyphFromNameFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphFromNameFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphFromNameFuncT
    func' <- C_FontGetGlyphFromNameFuncT
    -> IO (FunPtr C_FontGetGlyphFromNameFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphFromNameFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphFromNameFuncT))
    -> FontGetGlyphFromNameFuncT_WithClosures
    -> C_FontGetGlyphFromNameFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphFromNameFuncT Maybe (Ptr (FunPtr C_FontGetGlyphFromNameFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphFromNameFuncT -> FontGetGlyphFromNameFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphFromNameFuncT FontGetGlyphFromNameFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphFromNameFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphFromNameFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphFromNameFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_from_name_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphFromNameFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_extents_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_glyph_extents_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_extents_func" hb_font_funcs_set_glyph_extents_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphExtentsFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_extents_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphExtentsFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphExtentsFuncT
        -> m ()
    fontFuncsSetGlyphExtentsFunc :: FontFuncsT -> FontGetGlyphExtentsFuncT -> m ()
    fontFuncsSetGlyphExtentsFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphExtentsFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphExtentsFuncT
    func' <- C_FontGetGlyphExtentsFuncT
    -> IO (FunPtr C_FontGetGlyphExtentsFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphExtentsFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphExtentsFuncT))
    -> FontGetGlyphExtentsFuncT_WithClosures
    -> C_FontGetGlyphExtentsFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphExtentsFuncT Maybe (Ptr (FunPtr C_FontGetGlyphExtentsFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphExtentsFuncT -> FontGetGlyphExtentsFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphExtentsFuncT FontGetGlyphExtentsFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphExtentsFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphExtentsFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphExtentsFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_extents_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphExtentsFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_glyph_contour_point_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz"
    --                   , name = "font_get_glyph_contour_point_func_t"
    --                   }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_glyph_contour_point_func" hb_font_funcs_set_glyph_contour_point_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetGlyphContourPointFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_glyph_contour_point_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsSetGlyphContourPointFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetGlyphContourPointFuncT
        -> m ()
    fontFuncsSetGlyphContourPointFunc :: FontFuncsT -> FontGetGlyphContourPointFuncT -> m ()
    fontFuncsSetGlyphContourPointFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetGlyphContourPointFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetGlyphContourPointFuncT
    func' <- C_FontGetGlyphContourPointFuncT
    -> IO (FunPtr C_FontGetGlyphContourPointFuncT)
    HarfBuzz.Callbacks.mk_FontGetGlyphContourPointFuncT (Maybe (Ptr (FunPtr C_FontGetGlyphContourPointFuncT))
    -> FontGetGlyphContourPointFuncT_WithClosures
    -> C_FontGetGlyphContourPointFuncT
    HarfBuzz.Callbacks.wrap_FontGetGlyphContourPointFuncT Maybe (Ptr (FunPtr C_FontGetGlyphContourPointFuncT))
    forall a. Maybe a
    Nothing (FontGetGlyphContourPointFuncT
    -> FontGetGlyphContourPointFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetGlyphContourPointFuncT FontGetGlyphContourPointFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetGlyphContourPointFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetGlyphContourPointFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetGlyphContourPointFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_glyph_contour_point_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetGlyphContourPointFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_font_v_extents_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_font_extents_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_font_v_extents_func" hb_font_funcs_set_font_v_extents_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetFontExtentsFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_font_extents_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.1.2/
    fontFuncsSetFontVExtentsFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetFontExtentsFuncT
        -> m ()
    fontFuncsSetFontVExtentsFunc :: FontFuncsT -> FontGetFontExtentsFuncT -> m ()
    fontFuncsSetFontVExtentsFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetFontExtentsFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetFontExtentsFuncT
    func' <- C_FontGetFontExtentsFuncT -> IO (FunPtr C_FontGetFontExtentsFuncT)
    HarfBuzz.Callbacks.mk_FontGetFontExtentsFuncT (Maybe (Ptr (FunPtr C_FontGetFontExtentsFuncT))
    -> FontGetFontExtentsFuncT_WithClosures
    -> C_FontGetFontExtentsFuncT
    HarfBuzz.Callbacks.wrap_FontGetFontExtentsFuncT Maybe (Ptr (FunPtr C_FontGetFontExtentsFuncT))
    forall a. Maybe a
    Nothing (FontGetFontExtentsFuncT -> FontGetFontExtentsFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetFontExtentsFuncT FontGetFontExtentsFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetFontExtentsFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetFontExtentsFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetFontExtentsFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_font_v_extents_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetFontExtentsFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_set_font_h_extents_func
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "font_get_font_extents_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_set_font_h_extents_func" hb_font_funcs_set_font_h_extents_func ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        FunPtr HarfBuzz.Callbacks.C_FontGetFontExtentsFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "font_get_font_extents_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.1.2/
    fontFuncsSetFontHExtentsFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> HarfBuzz.Callbacks.FontGetFontExtentsFuncT
        -> m ()
    fontFuncsSetFontHExtentsFunc :: FontFuncsT -> FontGetFontExtentsFuncT -> m ()
    fontFuncsSetFontHExtentsFunc ffuncs :: FontFuncsT
    ffuncs func :: FontGetFontExtentsFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        FunPtr C_FontGetFontExtentsFuncT
    func' <- C_FontGetFontExtentsFuncT -> IO (FunPtr C_FontGetFontExtentsFuncT)
    HarfBuzz.Callbacks.mk_FontGetFontExtentsFuncT (Maybe (Ptr (FunPtr C_FontGetFontExtentsFuncT))
    -> FontGetFontExtentsFuncT_WithClosures
    -> C_FontGetFontExtentsFuncT
    HarfBuzz.Callbacks.wrap_FontGetFontExtentsFuncT Maybe (Ptr (FunPtr C_FontGetFontExtentsFuncT))
    forall a. Maybe a
    Nothing (FontGetFontExtentsFuncT -> FontGetFontExtentsFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_FontGetFontExtentsFuncT FontGetFontExtentsFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_FontGetFontExtentsFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_FontGetFontExtentsFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FontFuncsT
    -> FunPtr C_FontGetFontExtentsFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_font_funcs_set_font_h_extents_func Ptr FontFuncsT
    ffuncs' FunPtr C_FontGetFontExtentsFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_make_immutable
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_make_immutable" hb_font_funcs_make_immutable ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsMakeImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> m ()
    fontFuncsMakeImmutable :: FontFuncsT -> m ()
    fontFuncsMakeImmutable ffuncs :: FontFuncsT
    ffuncs = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        Ptr FontFuncsT -> IO ()
    hb_font_funcs_make_immutable Ptr FontFuncsT
    ffuncs'
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function font_funcs_is_immutable
    -- Args: [ Arg
    --           { argCName = "ffuncs"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font functions." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_is_immutable" hb_font_funcs_is_immutable ::
        Ptr HarfBuzz.FontFuncsT.FontFuncsT ->   -- ffuncs : TInterface (Name {namespace = "HarfBuzz", name = "font_funcs_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsIsImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontFuncsT.FontFuncsT
        -- ^ /@ffuncs@/: font functions.
        -> m Int32
    fontFuncsIsImmutable :: FontFuncsT -> m Int32
    fontFuncsIsImmutable ffuncs :: FontFuncsT
    ffuncs = IO Int32 -> m Int32
    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 FontFuncsT
    ffuncs' <- FontFuncsT -> IO (Ptr FontFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontFuncsT
    ffuncs
        Int32
    result <- Ptr FontFuncsT -> IO Int32
    hb_font_funcs_is_immutable Ptr FontFuncsT
    ffuncs'
        FontFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontFuncsT
    ffuncs
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function font_funcs_get_empty
    -- Args: []
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "font_funcs_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_get_empty" hb_font_funcs_get_empty ::
        IO (Ptr HarfBuzz.FontFuncsT.FontFuncsT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsGetEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.FontFuncsT.FontFuncsT
    fontFuncsGetEmpty :: m FontFuncsT
    fontFuncsGetEmpty  = IO FontFuncsT -> m FontFuncsT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FontFuncsT -> m FontFuncsT) -> IO FontFuncsT -> m FontFuncsT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    result <- IO (Ptr FontFuncsT)
    hb_font_funcs_get_empty
        Text -> Ptr FontFuncsT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "fontFuncsGetEmpty" Ptr FontFuncsT
    result
        FontFuncsT
    result' <- ((ManagedPtr FontFuncsT -> FontFuncsT)
    -> Ptr FontFuncsT -> IO FontFuncsT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FontFuncsT -> FontFuncsT
    HarfBuzz.FontFuncsT.FontFuncsT) Ptr FontFuncsT
    result
        FontFuncsT -> IO FontFuncsT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FontFuncsT
    result'

    -- function font_funcs_create
    -- Args: []
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "font_funcs_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_funcs_create" hb_font_funcs_create ::
        IO (Ptr HarfBuzz.FontFuncsT.FontFuncsT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontFuncsCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.FontFuncsT.FontFuncsT
    fontFuncsCreate :: m FontFuncsT
    fontFuncsCreate  = IO FontFuncsT -> m FontFuncsT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FontFuncsT -> m FontFuncsT) -> IO FontFuncsT -> m FontFuncsT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontFuncsT
    result <- IO (Ptr FontFuncsT)
    hb_font_funcs_create
        Text -> Ptr FontFuncsT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "fontFuncsCreate" Ptr FontFuncsT
    result
        FontFuncsT
    result' <- ((ManagedPtr FontFuncsT -> FontFuncsT)
    -> Ptr FontFuncsT -> IO FontFuncsT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FontFuncsT -> FontFuncsT
    HarfBuzz.FontFuncsT.FontFuncsT) Ptr FontFuncsT
    result
        FontFuncsT -> IO FontFuncsT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FontFuncsT
    result'

    -- function font_create_sub_font
    -- Args: [ Arg
    --           { argCName = "parent"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "parent font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "font_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_create_sub_font" hb_font_create_sub_font ::
        Ptr HarfBuzz.FontT.FontT ->             -- parent : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        IO (Ptr HarfBuzz.FontT.FontT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontCreateSubFont ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@parent@/: parent font.
        -> m HarfBuzz.FontT.FontT
    fontCreateSubFont :: FontT -> m FontT
    fontCreateSubFont parent :: FontT
    parent = IO FontT -> m FontT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FontT -> m FontT) -> IO FontT -> m FontT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FontT
    parent' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    parent
        Ptr FontT
    result <- Ptr FontT -> IO (Ptr FontT)
    hb_font_create_sub_font Ptr FontT
    parent'
        Text -> Ptr FontT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "fontCreateSubFont" Ptr FontT
    result
        FontT
    result' <- ((ManagedPtr FontT -> FontT) -> Ptr FontT -> IO FontT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FontT -> FontT
    HarfBuzz.FontT.FontT) Ptr FontT
    result
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    parent
        FontT -> IO FontT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FontT
    result'

    -- function font_create
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "font_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_create" hb_font_create ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO (Ptr HarfBuzz.FontT.FontT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> m HarfBuzz.FontT.FontT
    fontCreate :: FaceT -> m FontT
    fontCreate face :: FaceT
    face = IO FontT -> m FontT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FontT -> m FontT) -> IO FontT -> m FontT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr FontT
    result <- Ptr FaceT -> IO (Ptr FontT)
    hb_font_create Ptr FaceT
    face'
        Text -> Ptr FontT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "fontCreate" Ptr FontT
    result
        FontT
    result' <- ((ManagedPtr FontT -> FontT) -> Ptr FontT -> IO FontT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FontT -> FontT
    HarfBuzz.FontT.FontT) Ptr FontT
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        FontT -> IO FontT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FontT
    result'

    -- function font_add_glyph_origin_for_direction
    -- Args: [ Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a font." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "x"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "y"
    --           , argType = TBasicType TInt32
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_font_add_glyph_origin_for_direction" hb_font_add_glyph_origin_for_direction ::
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        Word32 ->                               -- glyph : TBasicType TUInt32
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        Ptr Int32 ->                            -- x : TBasicType TInt32
        Ptr Int32 ->                            -- y : TBasicType TInt32
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    fontAddGlyphOriginForDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FontT.FontT
        -- ^ /@font@/: a font.
        -> Word32
        -> HarfBuzz.Enums.DirectionT
        -> m ((Int32, Int32))
    fontAddGlyphOriginForDirection :: FontT -> Word32 -> DirectionT -> m (Int32, Int32)
    fontAddGlyphOriginForDirection font :: FontT
    font glyph :: Word32
    glyph direction :: DirectionT
    direction = IO (Int32, Int32) -> m (Int32, Int32)
    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 FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr Int32
    x <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr Int32
    y <- IO (Ptr Int32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Int32)
        Ptr FontT -> Word32 -> CUInt -> Ptr Int32 -> Ptr Int32 -> IO ()
    hb_font_add_glyph_origin_for_direction Ptr FontT
    font' Word32
    glyph CUInt
    direction' Ptr Int32
    x Ptr Int32
    y
        Int32
    x' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    x
        Int32
    y' <- Ptr Int32 -> IO Int32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Int32
    y
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    x
        Ptr Int32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Int32
    y
        (Int32, Int32) -> IO (Int32, Int32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    x', Int32
    y')

    -- function feature_to_string
    -- Args: [ Arg
    --           { argCName = "feature"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "feature_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_feature_t to convert"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "buf"
    --           , argType = TCArray False (-1) 2 (TBasicType TUTF8)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "output string" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the allocated size of @buf"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "size"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText = Just "the allocated size of @buf"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_feature_to_string" hb_feature_to_string ::
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- feature : TInterface (Name {namespace = "HarfBuzz", name = "feature_t"})
        Ptr (Ptr CString) ->                    -- buf : TCArray False (-1) 2 (TBasicType TUTF8)
        Ptr Word32 ->                           -- size : TBasicType TUInt
        IO ()

    -- | Converts a t'GI.HarfBuzz.Structs.FeatureT.FeatureT' into a 'P.Nothing'-terminated string in the format
    -- understood by 'GI.HarfBuzz.Functions.featureFromString'. The client in responsible for
    -- allocating big enough size for /@buf@/, 128 bytes is more than enough.
    --
    -- /Since: 0.9.5/
    featureToString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FeatureT.FeatureT
        -- ^ /@feature@/: an t'GI.HarfBuzz.Structs.FeatureT.FeatureT' to convert
        -> m ([T.Text])
    featureToString :: FeatureT -> m [Text]
    featureToString feature :: FeatureT
    feature = IO [Text] -> m [Text]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [Text] -> m [Text]) -> IO [Text] -> m [Text]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FeatureT
    feature' <- FeatureT -> IO (Ptr FeatureT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FeatureT
    feature
        Ptr (Ptr CString)
    buf <- IO (Ptr (Ptr CString))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr CString))
        Ptr Word32
    size <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr FeatureT -> Ptr (Ptr CString) -> Ptr Word32 -> IO ()
    hb_feature_to_string Ptr FeatureT
    feature' Ptr (Ptr CString)
    buf Ptr Word32
    size
        Word32
    size' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    size
        Ptr CString
    buf' <- Ptr (Ptr CString) -> IO (Ptr CString)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr CString)
    buf
        [Text]
    buf'' <- (Word32 -> Ptr CString -> IO [Text]
    forall a.
    (HasCallStack, Integral a) =>
    a -> Ptr CString -> IO [Text]
    unpackUTF8CArrayWithLength Word32
    size') Ptr CString
    buf'
        (Word32 -> (CString -> IO ()) -> Ptr CString -> IO ()
    forall a b c.
    (Storable a, Integral b) =>
    b -> (a -> IO c) -> Ptr a -> IO ()
    mapCArrayWithLength Word32
    size') CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    buf'
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    buf'
        FeatureT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FeatureT
    feature
        Ptr (Ptr CString) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr CString)
    buf
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    size
        [Text] -> IO [Text]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [Text]
    buf''

    -- function feature_from_string
    -- Args: [ Arg
    --           { argCName = "str"
    --           , argType = TCArray False (-1) 1 (TBasicType TUInt8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a string to parse" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "length of @str, or -1 if string is %NULL terminated"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "feature"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "feature_t" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the #hb_feature_t to initialize with the parsed values"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "len"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just "length of @str, or -1 if string is %NULL terminated"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_feature_from_string" hb_feature_from_string ::
        Ptr Word8 ->                            -- str : TCArray False (-1) 1 (TBasicType TUInt8)
        Int32 ->                                -- len : TBasicType TInt
        Ptr HarfBuzz.FeatureT.FeatureT ->       -- feature : TInterface (Name {namespace = "HarfBuzz", name = "feature_t"})
        IO Int32

    -- | Parses a string into a t'GI.HarfBuzz.Structs.FeatureT.FeatureT'.
    --
    -- The format for specifying feature strings follows. All valid CSS
    -- font-feature-settings values other than \'normal\' and the global values are
    -- also accepted, though not documented below. CSS string escapes are not
    -- supported.
    --
    -- The range indices refer to the positions between Unicode characters. The
    -- position before the first character is always 0.
    --
    -- The format is Python-esque.  Here is how it all works:
    --
    -- \<informaltable pgwide=\'1\' align=\'left\' frame=\'none\'>
    -- \<tgroup cols=\'5\'>
    -- \<thead>
    -- \<row>\<entry>Syntax\<\/entry>    \<entry>Value\<\/entry> \<entry>Start\<\/entry> \<entry>End\<\/entry>\<\/row>
    -- \<\/thead>
    -- \<tbody>
    -- \<row>\<entry>Setting value:\<\/entry>\<\/row>
    -- \<row>\<entry>kern\<\/entry>      \<entry>1\<\/entry>     \<entry>0\<\/entry>      \<entry>∞\<\/entry>   \<entry>Turn feature on\<\/entry>\<\/row>
    -- \<row>\<entry>+kern\<\/entry>     \<entry>1\<\/entry>     \<entry>0\<\/entry>      \<entry>∞\<\/entry>   \<entry>Turn feature on\<\/entry>\<\/row>
    -- \<row>\<entry>-kern\<\/entry>     \<entry>0\<\/entry>     \<entry>0\<\/entry>      \<entry>∞\<\/entry>   \<entry>Turn feature off\<\/entry>\<\/row>
    -- \<row>\<entry>kern=0\<\/entry>    \<entry>0\<\/entry>     \<entry>0\<\/entry>      \<entry>∞\<\/entry>   \<entry>Turn feature off\<\/entry>\<\/row>
    -- \<row>\<entry>kern=1\<\/entry>    \<entry>1\<\/entry>     \<entry>0\<\/entry>      \<entry>∞\<\/entry>   \<entry>Turn feature on\<\/entry>\<\/row>
    -- \<row>\<entry>aalt=2\<\/entry>    \<entry>2\<\/entry>     \<entry>0\<\/entry>      \<entry>∞\<\/entry>   \<entry>Choose 2nd alternate\<\/entry>\<\/row>
    -- \<row>\<entry>Setting index:\<\/entry>\<\/row>
    -- \<row>\<entry>kern[]\<\/entry>    \<entry>1\<\/entry>     \<entry>0\<\/entry>      \<entry>∞\<\/entry>   \<entry>Turn feature on\<\/entry>\<\/row>
    -- \<row>\<entry>kern[:]\<\/entry>   \<entry>1\<\/entry>     \<entry>0\<\/entry>      \<entry>∞\<\/entry>   \<entry>Turn feature on\<\/entry>\<\/row>
    -- \<row>\<entry>kern[5:]\<\/entry>  \<entry>1\<\/entry>     \<entry>5\<\/entry>      \<entry>∞\<\/entry>   \<entry>Turn feature on, partial\<\/entry>\<\/row>
    -- \<row>\<entry>kern[:5]\<\/entry>  \<entry>1\<\/entry>     \<entry>0\<\/entry>      \<entry>5\<\/entry>   \<entry>Turn feature on, partial\<\/entry>\<\/row>
    -- \<row>\<entry>kern[3:5]\<\/entry> \<entry>1\<\/entry>     \<entry>3\<\/entry>      \<entry>5\<\/entry>   \<entry>Turn feature on, range\<\/entry>\<\/row>
    -- \<row>\<entry>kern[3]\<\/entry>   \<entry>1\<\/entry>     \<entry>3\<\/entry>      \<entry>3+1\<\/entry> \<entry>Turn feature on, single char\<\/entry>\<\/row>
    -- \<row>\<entry>Mixing it all:\<\/entry>\<\/row>
    -- \<row>\<entry>aalt[3:5]=2\<\/entry> \<entry>2\<\/entry>   \<entry>3\<\/entry>      \<entry>5\<\/entry>   \<entry>Turn 2nd alternate on for range\<\/entry>\<\/row>
    -- \<\/tbody>
    -- \<\/tgroup>
    -- \<\/informaltable>
    --
    -- /Since: 0.9.5/
    featureFromString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        ByteString
        -- ^ /@str@/: a string to parse
        -> m ((Int32, HarfBuzz.FeatureT.FeatureT))
        -- ^ __Returns:__ @/true/@ if /@str@/ is successfully parsed, @/false/@ otherwise.
    featureFromString :: ByteString -> m (Int32, FeatureT)
    featureFromString str :: ByteString
    str = IO (Int32, FeatureT) -> m (Int32, FeatureT)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, FeatureT) -> m (Int32, FeatureT))
    -> IO (Int32, FeatureT) -> m (Int32, FeatureT)
    forall a b. (a -> b) -> a -> b
    $ do
        let len :: Int32
    len = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ ByteString -> Int
    B.length ByteString
    str
        Ptr Word8
    str' <- ByteString -> IO (Ptr Word8)
    packByteString ByteString
    str
        Ptr FeatureT
    feature <- Int -> IO (Ptr FeatureT)
    forall a. GBoxed a => Int -> IO (Ptr a)
    SP.callocBoxedBytes 16 :: IO (Ptr HarfBuzz.FeatureT.FeatureT)
        Int32
    result <- Ptr Word8 -> Int32 -> Ptr FeatureT -> IO Int32
    hb_feature_from_string Ptr Word8
    str' Int32
    len Ptr FeatureT
    feature
        FeatureT
    feature' <- ((ManagedPtr FeatureT -> FeatureT) -> Ptr FeatureT -> IO FeatureT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FeatureT -> FeatureT
    HarfBuzz.FeatureT.FeatureT) Ptr FeatureT
    feature
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    str'
        (Int32, FeatureT) -> IO (Int32, FeatureT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, FeatureT
    feature')

    -- function face_set_upem
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "upem"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_set_upem" hb_face_set_upem ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- upem : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceSetUpem ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> Word32
        -> m ()
    faceSetUpem :: FaceT -> Word32 -> m ()
    faceSetUpem face :: FaceT
    face upem :: Word32
    upem = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr FaceT -> Word32 -> IO ()
    hb_face_set_upem Ptr FaceT
    face' Word32
    upem
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function face_set_index
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_set_index" hb_face_set_index ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- index : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceSetIndex ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> Word32
        -> m ()
    faceSetIndex :: FaceT -> Word32 -> m ()
    faceSetIndex face :: FaceT
    face index :: Word32
    index = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr FaceT -> Word32 -> IO ()
    hb_face_set_index Ptr FaceT
    face' Word32
    index
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function face_set_glyph_count
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "glyph_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_set_glyph_count" hb_face_set_glyph_count ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- glyph_count : TBasicType TUInt
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    faceSetGlyphCount ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> Word32
        -> m ()
    faceSetGlyphCount :: FaceT -> Word32 -> m ()
    faceSetGlyphCount face :: FaceT
    face glyphCount :: Word32
    glyphCount = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr FaceT -> Word32 -> IO ()
    hb_face_set_glyph_count Ptr FaceT
    face' Word32
    glyphCount
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function face_reference_table
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_reference_table" hb_face_reference_table ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- tag : TBasicType TUInt32
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceReferenceTable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> Word32
        -> m HarfBuzz.BlobT.BlobT
    faceReferenceTable :: FaceT -> Word32 -> m BlobT
    faceReferenceTable face :: FaceT
    face tag :: Word32
    tag = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr BlobT
    result <- Ptr FaceT -> Word32 -> IO (Ptr BlobT)
    hb_face_reference_table Ptr FaceT
    face' Word32
    tag
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "faceReferenceTable" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'

    -- function face_reference_blob
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_reference_blob" hb_face_reference_blob ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceReferenceBlob ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> m HarfBuzz.BlobT.BlobT
    faceReferenceBlob :: FaceT -> m BlobT
    faceReferenceBlob face :: FaceT
    face = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr BlobT
    result <- Ptr FaceT -> IO (Ptr BlobT)
    hb_face_reference_blob Ptr FaceT
    face'
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "faceReferenceBlob" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'

    -- function face_make_immutable
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_make_immutable" hb_face_make_immutable ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceMakeImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> m ()
    faceMakeImmutable :: FaceT -> m ()
    faceMakeImmutable face :: FaceT
    face = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr FaceT -> IO ()
    hb_face_make_immutable Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function face_is_immutable
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_is_immutable" hb_face_is_immutable ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceIsImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> m Int32
    faceIsImmutable :: FaceT -> m Int32
    faceIsImmutable face :: FaceT
    face = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Int32
    result <- Ptr FaceT -> IO Int32
    hb_face_is_immutable Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function face_get_upem
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_get_upem" hb_face_get_upem ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceGetUpem ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> m Word32
    faceGetUpem :: FaceT -> m Word32
    faceGetUpem face :: FaceT
    face = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> IO Word32
    hb_face_get_upem Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function face_get_table_tags
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "index of first tag to return."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_count"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "input length of @table_tags array, output number of items written."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "table_tags"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "array to write tags into."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_get_table_tags" hb_face_get_table_tags ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- start_offset : TBasicType TUInt
        Word32 ->                               -- table_count : TBasicType TUInt
        Word32 ->                               -- table_tags : TBasicType TUInt32
        IO Word32

    -- | Retrieves table tags for a face, if possible.
    --
    -- /Since: 1.6.0/
    faceGetTableTags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> Word32
        -- ^ /@startOffset@/: index of first tag to return.
        -> Word32
        -- ^ /@tableCount@/: input length of /@tableTags@/ array, output number of items written.
        -> Word32
        -- ^ /@tableTags@/: array to write tags into.
        -> m Word32
        -- ^ __Returns:__ total number of tables, or 0 if not possible to list.
    faceGetTableTags :: FaceT -> Word32 -> Word32 -> Word32 -> m Word32
    faceGetTableTags face :: FaceT
    face startOffset :: Word32
    startOffset tableCount :: Word32
    tableCount tableTags :: Word32
    tableTags = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> Word32 -> Word32 -> Word32 -> IO Word32
    hb_face_get_table_tags Ptr FaceT
    face' Word32
    startOffset Word32
    tableCount Word32
    tableTags
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function face_get_index
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_get_index" hb_face_get_index ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceGetIndex ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> m Word32
    faceGetIndex :: FaceT -> m Word32
    faceGetIndex face :: FaceT
    face = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> IO Word32
    hb_face_get_index Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function face_get_glyph_count
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_get_glyph_count" hb_face_get_glyph_count ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    faceGetGlyphCount ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: a face.
        -> m Word32
    faceGetGlyphCount :: FaceT -> m Word32
    faceGetGlyphCount face :: FaceT
    face = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Word32
    result <- Ptr FaceT -> IO Word32
    hb_face_get_glyph_count Ptr FaceT
    face'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function face_get_empty
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "face_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_get_empty" hb_face_get_empty ::
        IO (Ptr HarfBuzz.FaceT.FaceT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceGetEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.FaceT.FaceT
    faceGetEmpty :: m FaceT
    faceGetEmpty  = IO FaceT -> m FaceT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FaceT -> m FaceT) -> IO FaceT -> m FaceT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    result <- IO (Ptr FaceT)
    hb_face_get_empty
        Text -> Ptr FaceT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "faceGetEmpty" Ptr FaceT
    result
        FaceT
    result' <- ((ManagedPtr FaceT -> FaceT) -> Ptr FaceT -> IO FaceT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FaceT -> FaceT
    HarfBuzz.FaceT.FaceT) Ptr FaceT
    result
        FaceT -> IO FaceT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FaceT
    result'

    -- function face_create_for_tables
    -- Args: [ Arg
    --           { argCName = "reference_table_func"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "reference_table_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 1
    --           , argDestroy = 2
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "face_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_create_for_tables" hb_face_create_for_tables ::
        FunPtr HarfBuzz.Callbacks.C_ReferenceTableFuncT -> -- reference_table_func : TInterface (Name {namespace = "HarfBuzz", name = "reference_table_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO (Ptr HarfBuzz.FaceT.FaceT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceCreateForTables ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.Callbacks.ReferenceTableFuncT
        -> m HarfBuzz.FaceT.FaceT
    faceCreateForTables :: ReferenceTableFuncT -> m FaceT
    faceCreateForTables referenceTableFunc :: ReferenceTableFuncT
    referenceTableFunc = IO FaceT -> m FaceT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FaceT -> m FaceT) -> IO FaceT -> m FaceT
    forall a b. (a -> b) -> a -> b
    $ do
        FunPtr C_ReferenceTableFuncT
    referenceTableFunc' <- C_ReferenceTableFuncT -> IO (FunPtr C_ReferenceTableFuncT)
    HarfBuzz.Callbacks.mk_ReferenceTableFuncT (Maybe (Ptr (FunPtr C_ReferenceTableFuncT))
    -> ReferenceTableFuncT_WithClosures -> C_ReferenceTableFuncT
    HarfBuzz.Callbacks.wrap_ReferenceTableFuncT Maybe (Ptr (FunPtr C_ReferenceTableFuncT))
    forall a. Maybe a
    Nothing (ReferenceTableFuncT -> ReferenceTableFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_ReferenceTableFuncT ReferenceTableFuncT
    referenceTableFunc))
        let userData :: Ptr ()
    userData = FunPtr C_ReferenceTableFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_ReferenceTableFuncT
    referenceTableFunc'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr FaceT
    result <- FunPtr C_ReferenceTableFuncT
    -> Ptr () -> FunPtr C_DestroyFuncT -> IO (Ptr FaceT)
    hb_face_create_for_tables FunPtr C_ReferenceTableFuncT
    referenceTableFunc' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        Text -> Ptr FaceT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "faceCreateForTables" Ptr FaceT
    result
        FaceT
    result' <- ((ManagedPtr FaceT -> FaceT) -> Ptr FaceT -> IO FaceT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FaceT -> FaceT
    HarfBuzz.FaceT.FaceT) Ptr FaceT
    result
        FaceT -> IO FaceT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FaceT
    result'

    -- function face_create
    -- Args: [ Arg
    --           { argCName = "blob"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "index"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "face_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_create" hb_face_create ::
        Ptr HarfBuzz.BlobT.BlobT ->             -- blob : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        Word32 ->                               -- index : TBasicType TUInt
        IO (Ptr HarfBuzz.FaceT.FaceT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    faceCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BlobT.BlobT
        -> Word32
        -> m HarfBuzz.FaceT.FaceT
    faceCreate :: BlobT -> Word32 -> m FaceT
    faceCreate blob :: BlobT
    blob index :: Word32
    index = IO FaceT -> m FaceT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FaceT -> m FaceT) -> IO FaceT -> m FaceT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BlobT
    blob' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    blob
        Ptr FaceT
    result <- Ptr BlobT -> Word32 -> IO (Ptr FaceT)
    hb_face_create Ptr BlobT
    blob' Word32
    index
        Text -> Ptr FaceT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "faceCreate" Ptr FaceT
    result
        FaceT
    result' <- ((ManagedPtr FaceT -> FaceT) -> Ptr FaceT -> IO FaceT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FaceT -> FaceT
    HarfBuzz.FaceT.FaceT) Ptr FaceT
    result
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    blob
        FaceT -> IO FaceT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FaceT
    result'

    -- function face_count
    -- Args: [ Arg
    --           { argCName = "blob"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a blob." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_count" hb_face_count ::
        Ptr HarfBuzz.BlobT.BlobT ->             -- blob : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        IO Word32

    -- | Get number of faces in a blob.
    --
    -- /Since: 1.7.7/
    faceCount ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BlobT.BlobT
        -- ^ /@blob@/: a blob.
        -> m Word32
        -- ^ __Returns:__ Number of faces in /@blob@/
    faceCount :: BlobT -> m Word32
    faceCount blob :: BlobT
    blob = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BlobT
    blob' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    blob
        Word32
    result <- Ptr BlobT -> IO Word32
    hb_face_count Ptr BlobT
    blob'
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    blob
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function face_collect_variation_unicodes
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "variation_selector"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "out"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "set to add Unicode characters for @variation_selector covered by @face to."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_collect_variation_unicodes" hb_face_collect_variation_unicodes ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- variation_selector : TBasicType TUInt32
        Ptr HarfBuzz.SetT.SetT ->               -- out : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.9.0/
    faceCollectVariationUnicodes ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: font face.
        -> Word32
        -> HarfBuzz.SetT.SetT
        -- ^ /@out@/: set to add Unicode characters for /@variationSelector@/ covered by /@face@/ to.
        -> m ()
    faceCollectVariationUnicodes :: FaceT -> Word32 -> SetT -> m ()
    faceCollectVariationUnicodes face :: FaceT
    face variationSelector :: Word32
    variationSelector out :: SetT
    out = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr SetT
    out' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    out
        Ptr FaceT -> Word32 -> Ptr SetT -> IO ()
    hb_face_collect_variation_unicodes Ptr FaceT
    face' Word32
    variationSelector Ptr SetT
    out'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    out
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function face_collect_variation_selectors
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "out"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "set to add Variation Selector characters covered by @face to."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_collect_variation_selectors" hb_face_collect_variation_selectors ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Ptr HarfBuzz.SetT.SetT ->               -- out : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.9.0/
    faceCollectVariationSelectors ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: font face.
        -> HarfBuzz.SetT.SetT
        -- ^ /@out@/: set to add Variation Selector characters covered by /@face@/ to.
        -> m ()
    faceCollectVariationSelectors :: FaceT -> SetT -> m ()
    faceCollectVariationSelectors face :: FaceT
    face out :: SetT
    out = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr SetT
    out' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    out
        Ptr FaceT -> Ptr SetT -> IO ()
    hb_face_collect_variation_selectors Ptr FaceT
    face' Ptr SetT
    out'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    out
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function face_collect_unicodes
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font face." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "out"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "set_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "set to add Unicode characters covered by @face to."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_collect_unicodes" hb_face_collect_unicodes ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Ptr HarfBuzz.SetT.SetT ->               -- out : TInterface (Name {namespace = "HarfBuzz", name = "set_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.9.0/
    faceCollectUnicodes ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -- ^ /@face@/: font face.
        -> HarfBuzz.SetT.SetT
        -- ^ /@out@/: set to add Unicode characters covered by /@face@/ to.
        -> m ()
    faceCollectUnicodes :: FaceT -> SetT -> m ()
    faceCollectUnicodes face :: FaceT
    face out :: SetT
    out = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr SetT
    out' <- SetT -> IO (Ptr SetT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SetT
    out
        Ptr FaceT -> Ptr SetT -> IO ()
    hb_face_collect_unicodes Ptr FaceT
    face' Ptr SetT
    out'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        SetT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SetT
    out
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function face_builder_create
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "face_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_builder_create" hb_face_builder_create ::
        IO (Ptr HarfBuzz.FaceT.FaceT)

    -- | Creates a t'GI.HarfBuzz.Structs.FaceT.FaceT' that can be used with 'GI.HarfBuzz.Functions.faceBuilderAddTable'.
    -- After tables are added to the face, it can be compiled to a binary
    -- font file by calling 'GI.HarfBuzz.Functions.faceReferenceBlob'.
    --
    -- /Since: 1.9.0/
    faceBuilderCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.FaceT.FaceT
        -- ^ __Returns:__ New face.
    faceBuilderCreate :: m FaceT
    faceBuilderCreate  = IO FaceT -> m FaceT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO FaceT -> m FaceT) -> IO FaceT -> m FaceT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr FaceT
    result <- IO (Ptr FaceT)
    hb_face_builder_create
        Text -> Ptr FaceT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "faceBuilderCreate" Ptr FaceT
    result
        FaceT
    result' <- ((ManagedPtr FaceT -> FaceT) -> Ptr FaceT -> IO FaceT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr FaceT -> FaceT
    HarfBuzz.FaceT.FaceT) Ptr FaceT
    result
        FaceT -> IO FaceT
    forall (m :: * -> *) a. Monad m => a -> m a
    return FaceT
    result'

    -- function face_builder_add_table
    -- Args: [ Arg
    --           { argCName = "face"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "face_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "tag"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "blob"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_face_builder_add_table" hb_face_builder_add_table ::
        Ptr HarfBuzz.FaceT.FaceT ->             -- face : TInterface (Name {namespace = "HarfBuzz", name = "face_t"})
        Word32 ->                               -- tag : TBasicType TUInt32
        Ptr HarfBuzz.BlobT.BlobT ->             -- blob : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        IO Int32

    -- | Add table for /@tag@/ with data provided by /@blob@/ to the face.  /@face@/ must
    -- be created using 'GI.HarfBuzz.Functions.faceBuilderCreate'.
    --
    -- /Since: 1.9.0/
    faceBuilderAddTable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.FaceT.FaceT
        -> Word32
        -> HarfBuzz.BlobT.BlobT
        -> m Int32
    faceBuilderAddTable :: FaceT -> Word32 -> BlobT -> m Int32
    faceBuilderAddTable face :: FaceT
    face tag :: Word32
    tag blob :: BlobT
    blob = IO Int32 -> m Int32
    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 FaceT
    face' <- FaceT -> IO (Ptr FaceT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FaceT
    face
        Ptr BlobT
    blob' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    blob
        Int32
    result <- Ptr FaceT -> Word32 -> Ptr BlobT -> IO Int32
    hb_face_builder_add_table Ptr FaceT
    face' Word32
    tag Ptr BlobT
    blob'
        FaceT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FaceT
    face
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    blob
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function direction_to_string
    -- Args: [ Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_direction_to_string" hb_direction_to_string ::
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        IO CString

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    directionToString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.Enums.DirectionT
        -> m T.Text
    directionToString :: DirectionT -> m Text
    directionToString direction :: DirectionT
    direction = IO Text -> m Text
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Text -> m Text) -> IO Text -> m Text
    forall a b. (a -> b) -> a -> b
    $ do
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        CString
    result <- CUInt -> IO CString
    hb_direction_to_string CUInt
    direction'
        Text -> CString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "directionToString" CString
    result
        Text
    result' <- HasCallStack => CString -> IO Text
    CString -> IO Text
    cstringToText CString
    result
        Text -> IO Text
    forall (m :: * -> *) a. Monad m => a -> m a
    return Text
    result'

    -- function direction_from_string
    -- Args: [ Arg
    --           { argCName = "str"
    --           , argType = TCArray False (-1) 1 (TBasicType TUInt8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "len"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "direction_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_direction_from_string" hb_direction_from_string ::
        Ptr Word8 ->                            -- str : TCArray False (-1) 1 (TBasicType TUInt8)
        Int32 ->                                -- len : TBasicType TInt
        IO CUInt

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    directionFromString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        ByteString
        -> m HarfBuzz.Enums.DirectionT
    directionFromString :: ByteString -> m DirectionT
    directionFromString str :: ByteString
    str = IO DirectionT -> m DirectionT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO DirectionT -> m DirectionT) -> IO DirectionT -> m DirectionT
    forall a b. (a -> b) -> a -> b
    $ do
        let len :: Int32
    len = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ ByteString -> Int
    B.length ByteString
    str
        Ptr Word8
    str' <- ByteString -> IO (Ptr Word8)
    packByteString ByteString
    str
        CUInt
    result <- Ptr Word8 -> Int32 -> IO CUInt
    hb_direction_from_string Ptr Word8
    str' Int32
    len
        let result' :: DirectionT
    result' = (Int -> DirectionT
    forall a. Enum a => Int -> a
    toEnum (Int -> DirectionT) -> (CUInt -> Int) -> CUInt -> DirectionT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    str'
        DirectionT -> IO DirectionT
    forall (m :: * -> *) a. Monad m => a -> m a
    return DirectionT
    result'

    -- function color_get_red
    -- Args: [ Arg
    --           { argCName = "color"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_color_get_red" hb_color_get_red ::
        Word32 ->                               -- color : TBasicType TUInt32
        IO Word8

    -- | color: a @/hb_color_t/@ we are interested in its channels.
    --
    -- /Since: 2.1.0/
    colorGetRed ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Word32
        -> m Word8
        -- ^ __Returns:__ Red channel value of the given color
    colorGetRed :: Word32 -> m Word8
    colorGetRed color :: Word32
    color = IO Word8 -> m Word8
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word8 -> m Word8) -> IO Word8 -> m Word8
    forall a b. (a -> b) -> a -> b
    $ do
        Word8
    result <- Word32 -> IO Word8
    hb_color_get_red Word32
    color
        Word8 -> IO Word8
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word8
    result

    -- function color_get_green
    -- Args: [ Arg
    --           { argCName = "color"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_color_get_green" hb_color_get_green ::
        Word32 ->                               -- color : TBasicType TUInt32
        IO Word8

    -- | color: a @/hb_color_t/@ we are interested in its channels.
    --
    -- /Since: 2.1.0/
    colorGetGreen ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Word32
        -> m Word8
        -- ^ __Returns:__ Green channel value of the given color
    colorGetGreen :: Word32 -> m Word8
    colorGetGreen color :: Word32
    color = IO Word8 -> m Word8
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word8 -> m Word8) -> IO Word8 -> m Word8
    forall a b. (a -> b) -> a -> b
    $ do
        Word8
    result <- Word32 -> IO Word8
    hb_color_get_green Word32
    color
        Word8 -> IO Word8
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word8
    result

    -- function color_get_blue
    -- Args: [ Arg
    --           { argCName = "color"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_color_get_blue" hb_color_get_blue ::
        Word32 ->                               -- color : TBasicType TUInt32
        IO Word8

    -- | color: a @/hb_color_t/@ we are interested in its channels.
    --
    -- /Since: 2.1.0/
    colorGetBlue ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Word32
        -> m Word8
        -- ^ __Returns:__ Blue channel value of the given color
    colorGetBlue :: Word32 -> m Word8
    colorGetBlue color :: Word32
    color = IO Word8 -> m Word8
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word8 -> m Word8) -> IO Word8 -> m Word8
    forall a b. (a -> b) -> a -> b
    $ do
        Word8
    result <- Word32 -> IO Word8
    hb_color_get_blue Word32
    color
        Word8 -> IO Word8
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word8
    result

    -- function color_get_alpha
    -- Args: [ Arg
    --           { argCName = "color"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_color_get_alpha" hb_color_get_alpha ::
        Word32 ->                               -- color : TBasicType TUInt32
        IO Word8

    -- | color: a @/hb_color_t/@ we are interested in its channels.
    --
    -- /Since: 2.1.0/
    colorGetAlpha ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        Word32
        -> m Word8
        -- ^ __Returns:__ Alpha channel value of the given color
    colorGetAlpha :: Word32 -> m Word8
    colorGetAlpha color :: Word32
    color = IO Word8 -> m Word8
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word8 -> m Word8) -> IO Word8 -> m Word8
    forall a b. (a -> b) -> a -> b
    $ do
        Word8
    result <- Word32 -> IO Word8
    hb_color_get_alpha Word32
    color
        Word8 -> IO Word8
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word8
    result

    -- function buffer_set_unicode_funcs
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "unicode_funcs"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_unicode_funcs" hb_buffer_set_unicode_funcs ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT -> -- unicode_funcs : TInterface (Name {namespace = "HarfBuzz", name = "unicode_funcs_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    bufferSetUnicodeFuncs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
        -> m ()
    bufferSetUnicodeFuncs :: BufferT -> UnicodeFuncsT -> m ()
    bufferSetUnicodeFuncs buffer :: BufferT
    buffer unicodeFuncs :: UnicodeFuncsT
    unicodeFuncs = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr UnicodeFuncsT
    unicodeFuncs' <- UnicodeFuncsT -> IO (Ptr UnicodeFuncsT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr UnicodeFuncsT
    unicodeFuncs
        Ptr BufferT -> Ptr UnicodeFuncsT -> IO ()
    hb_buffer_set_unicode_funcs Ptr BufferT
    buffer' Ptr UnicodeFuncsT
    unicodeFuncs'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        UnicodeFuncsT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr UnicodeFuncsT
    unicodeFuncs
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_segment_properties
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "props"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "segment_properties_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_segment_properties_t to use."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_segment_properties" hb_buffer_set_segment_properties ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT -> -- props : TInterface (Name {namespace = "HarfBuzz", name = "segment_properties_t"})
        IO ()

    -- | Sets the segment properties of the buffer, a shortcut for calling
    -- 'GI.HarfBuzz.Functions.bufferSetDirection', 'GI.HarfBuzz.Functions.bufferSetScript' and
    -- 'GI.HarfBuzz.Functions.bufferSetLanguage' individually.
    --
    -- /Since: 0.9.7/
    bufferSetSegmentProperties ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> HarfBuzz.SegmentPropertiesT.SegmentPropertiesT
        -- ^ /@props@/: an t'GI.HarfBuzz.Structs.SegmentPropertiesT.SegmentPropertiesT' to use.
        -> m ()
    bufferSetSegmentProperties :: BufferT -> SegmentPropertiesT -> m ()
    bufferSetSegmentProperties buffer :: BufferT
    buffer props :: SegmentPropertiesT
    props = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr SegmentPropertiesT
    props' <- SegmentPropertiesT -> IO (Ptr SegmentPropertiesT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr SegmentPropertiesT
    props
        Ptr BufferT -> Ptr SegmentPropertiesT -> IO ()
    hb_buffer_set_segment_properties Ptr BufferT
    buffer' Ptr SegmentPropertiesT
    props'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        SegmentPropertiesT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr SegmentPropertiesT
    props
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_script
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "script"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "script_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_script_t to set."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_script" hb_buffer_set_script ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        CUInt ->                                -- script : TInterface (Name {namespace = "HarfBuzz", name = "script_t"})
        IO ()

    -- | Sets the script of /@buffer@/ to /@script@/.
    --
    -- Script is crucial for choosing the proper shaping behaviour for scripts that
    -- require it (e.g. Arabic) and the which OpenType features defined in the font
    -- to be applied.
    --
    -- You can pass one of the predefined t'GI.HarfBuzz.Enums.ScriptT' values, or use
    -- 'GI.HarfBuzz.Functions.scriptFromString' or 'GI.HarfBuzz.Functions.scriptFromIso15924Tag' to get the
    -- corresponding script from an ISO 15924 script tag.
    --
    -- /Since: 0.9.2/
    bufferSetScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> HarfBuzz.Enums.ScriptT
        -- ^ /@script@/: an t'GI.HarfBuzz.Enums.ScriptT' to set.
        -> m ()
    bufferSetScript :: BufferT -> ScriptT -> m ()
    bufferSetScript buffer :: BufferT
    buffer script :: ScriptT
    script = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        let script' :: CUInt
    script' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (ScriptT -> Int) -> ScriptT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ScriptT -> Int
    forall a. Enum a => a -> Int
    fromEnum) ScriptT
    script
        Ptr BufferT -> CUInt -> IO ()
    hb_buffer_set_script Ptr BufferT
    buffer' CUInt
    script'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_replacement_codepoint
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "replacement"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the replacement #hb_codepoint_t"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_replacement_codepoint" hb_buffer_set_replacement_codepoint ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Word32 ->                               -- replacement : TBasicType TUInt32
        IO ()

    -- | Sets the @/hb_codepoint_t/@ that replaces invalid entries for a given encoding
    -- when adding text to /@buffer@/.
    --
    -- Default is 'GI.HarfBuzz.Constants.BUFFER_REPLACEMENT_CODEPOINT_DEFAULT'.
    --
    -- /Since: 0.9.31/
    bufferSetReplacementCodepoint ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> Word32
        -- ^ /@replacement@/: the replacement @/hb_codepoint_t/@
        -> m ()
    bufferSetReplacementCodepoint :: BufferT -> Word32 -> m ()
    bufferSetReplacementCodepoint buffer :: BufferT
    buffer replacement :: Word32
    replacement = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> Word32 -> IO ()
    hb_buffer_set_replacement_codepoint Ptr BufferT
    buffer' Word32
    replacement
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_message_func
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "func"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "buffer_message_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = 2
    --           , argDestroy = 3
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "user_data"
    --           , argType = TBasicType TPtr
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "destroy"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "destroy_func_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeNotified
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_message_func" hb_buffer_set_message_func ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        FunPtr HarfBuzz.Callbacks.C_BufferMessageFuncT -> -- func : TInterface (Name {namespace = "HarfBuzz", name = "buffer_message_func_t"})
        Ptr () ->                               -- user_data : TBasicType TPtr
        FunPtr HarfBuzz.Callbacks.C_DestroyFuncT -> -- destroy : TInterface (Name {namespace = "HarfBuzz", name = "destroy_func_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.1.3/
    bufferSetMessageFunc ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> HarfBuzz.Callbacks.BufferMessageFuncT
        -> m ()
    bufferSetMessageFunc :: BufferT -> BufferMessageFuncT -> m ()
    bufferSetMessageFunc buffer :: BufferT
    buffer func :: BufferMessageFuncT
    func = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        FunPtr C_BufferMessageFuncT
    func' <- C_BufferMessageFuncT -> IO (FunPtr C_BufferMessageFuncT)
    HarfBuzz.Callbacks.mk_BufferMessageFuncT (Maybe (Ptr (FunPtr C_BufferMessageFuncT))
    -> BufferMessageFuncT_WithClosures -> C_BufferMessageFuncT
    HarfBuzz.Callbacks.wrap_BufferMessageFuncT Maybe (Ptr (FunPtr C_BufferMessageFuncT))
    forall a. Maybe a
    Nothing (BufferMessageFuncT -> BufferMessageFuncT_WithClosures
    HarfBuzz.Callbacks.drop_closures_BufferMessageFuncT BufferMessageFuncT
    func))
        let userData :: Ptr ()
    userData = FunPtr C_BufferMessageFuncT -> Ptr ()
    forall a b. FunPtr a -> Ptr b
    castFunPtrToPtr FunPtr C_BufferMessageFuncT
    func'
        let destroy :: FunPtr (Ptr a -> IO ())
    destroy = FunPtr (Ptr a -> IO ())
    forall a. FunPtr (Ptr a -> IO ())
    safeFreeFunPtrPtr
        Ptr BufferT
    -> FunPtr C_BufferMessageFuncT
    -> Ptr ()
    -> FunPtr C_DestroyFuncT
    -> IO ()
    hb_buffer_set_message_func Ptr BufferT
    buffer' FunPtr C_BufferMessageFuncT
    func' Ptr ()
    userData FunPtr C_DestroyFuncT
    forall a. FunPtr (Ptr a -> IO ())
    destroy
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_length
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the new length of @buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_length" hb_buffer_set_length ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Word32 ->                               -- length : TBasicType TUInt
        IO Int32

    -- | Similar to 'GI.HarfBuzz.Functions.bufferPreAllocate', but clears any new items added at the
    -- end.
    --
    -- /Since: 0.9.2/
    bufferSetLength ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> Word32
        -- ^ /@length@/: the new length of /@buffer@/.
        -> m Int32
        -- ^ __Returns:__ @/true/@ if /@buffer@/ memory allocation succeeded, @/false/@ otherwise.
    bufferSetLength :: BufferT -> Word32 -> m Int32
    bufferSetLength buffer :: BufferT
    buffer length_ :: Word32
    length_ = IO Int32 -> m Int32
    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 BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Int32
    result <- Ptr BufferT -> Word32 -> IO Int32
    hb_buffer_set_length Ptr BufferT
    buffer' Word32
    length_
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function buffer_set_language
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "language"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "language_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an hb_language_t to set."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_language" hb_buffer_set_language ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.LanguageT.LanguageT ->     -- language : TInterface (Name {namespace = "HarfBuzz", name = "language_t"})
        IO ()

    -- | Sets the language of /@buffer@/ to /@language@/.
    --
    -- Languages are crucial for selecting which OpenType feature to apply to the
    -- buffer which can result in applying language-specific behaviour. Languages
    -- are orthogonal to the scripts, and though they are related, they are
    -- different concepts and should not be confused with each other.
    --
    -- Use 'GI.HarfBuzz.Functions.languageFromString' to convert from BCP 47 language tags to
    -- t'GI.HarfBuzz.Structs.LanguageT.LanguageT'.
    --
    -- /Since: 0.9.2/
    bufferSetLanguage ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> HarfBuzz.LanguageT.LanguageT
        -- ^ /@language@/: an hb_language_t to set.
        -> m ()
    bufferSetLanguage :: BufferT -> LanguageT -> m ()
    bufferSetLanguage buffer :: BufferT
    buffer language :: LanguageT
    language = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr LanguageT
    language' <- LanguageT -> IO (Ptr LanguageT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr LanguageT
    language
        Ptr BufferT -> Ptr LanguageT -> IO ()
    hb_buffer_set_language Ptr BufferT
    buffer' Ptr LanguageT
    language'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        LanguageT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr LanguageT
    language
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_invisible_glyph
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "invisible"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the invisible #hb_codepoint_t"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_invisible_glyph" hb_buffer_set_invisible_glyph ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Word32 ->                               -- invisible : TBasicType TUInt32
        IO ()

    -- | Sets the @/hb_codepoint_t/@ that replaces invisible characters in
    -- the shaping result.  If set to zero (default), the glyph for the
    -- U+0020 SPACE character is used.  Otherwise, this value is used
    -- verbatim.
    --
    -- /Since: 2.0.0/
    bufferSetInvisibleGlyph ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> Word32
        -- ^ /@invisible@/: the invisible @/hb_codepoint_t/@
        -> m ()
    bufferSetInvisibleGlyph :: BufferT -> Word32 -> m ()
    bufferSetInvisibleGlyph buffer :: BufferT
    buffer invisible :: Word32
    invisible = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> Word32 -> IO ()
    hb_buffer_set_invisible_glyph Ptr BufferT
    buffer' Word32
    invisible
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_flags
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "flags"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "buffer_flags_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the buffer flags to set."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_flags" hb_buffer_set_flags ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        CUInt ->                                -- flags : TInterface (Name {namespace = "HarfBuzz", name = "buffer_flags_t"})
        IO ()

    -- | Sets /@buffer@/ flags to /@flags@/. See t'GI.HarfBuzz.Flags.BufferFlagsT'.
    --
    -- /Since: 0.9.7/
    bufferSetFlags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> [HarfBuzz.Flags.BufferFlagsT]
        -- ^ /@flags@/: the buffer flags to set.
        -> m ()
    bufferSetFlags :: BufferT -> [BufferFlagsT] -> m ()
    bufferSetFlags buffer :: BufferT
    buffer flags :: [BufferFlagsT]
    flags = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        let flags' :: CUInt
    flags' = [BufferFlagsT] -> CUInt
    forall b a. (Num b, IsGFlag a) => [a] -> b
    gflagsToWord [BufferFlagsT]
    flags
        Ptr BufferT -> CUInt -> IO ()
    hb_buffer_set_flags Ptr BufferT
    buffer' CUInt
    flags'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_direction
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "direction"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "direction_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the #hb_direction_t of the @buffer"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_direction" hb_buffer_set_direction ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        CUInt ->                                -- direction : TInterface (Name {namespace = "HarfBuzz", name = "direction_t"})
        IO ()

    -- | Set the text flow direction of the buffer. No shaping can happen without
    -- setting /@buffer@/ direction, and it controls the visual direction for the
    -- output glyphs; for RTL direction the glyphs will be reversed. Many layout
    -- features depend on the proper setting of the direction, for example,
    -- reversing RTL text before shaping, then shaping with LTR direction is not
    -- the same as keeping the text in logical order and shaping with RTL
    -- direction.
    --
    -- /Since: 0.9.2/
    bufferSetDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> HarfBuzz.Enums.DirectionT
        -- ^ /@direction@/: the t'GI.HarfBuzz.Enums.DirectionT' of the /@buffer@/
        -> m ()
    bufferSetDirection :: BufferT -> DirectionT -> m ()
    bufferSetDirection buffer :: BufferT
    buffer direction :: DirectionT
    direction = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        let direction' :: CUInt
    direction' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt) -> (DirectionT -> Int) -> DirectionT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . DirectionT -> Int
    forall a. Enum a => a -> Int
    fromEnum) DirectionT
    direction
        Ptr BufferT -> CUInt -> IO ()
    hb_buffer_set_direction Ptr BufferT
    buffer' CUInt
    direction'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_content_type
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "content_type"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "buffer_content_type_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the type of buffer contents to set"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_content_type" hb_buffer_set_content_type ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        CUInt ->                                -- content_type : TInterface (Name {namespace = "HarfBuzz", name = "buffer_content_type_t"})
        IO ()

    -- | Sets the type of /@buffer@/ contents, buffers are either empty, contain
    -- characters (before shaping) or glyphs (the result of shaping).
    --
    -- /Since: 0.9.5/
    bufferSetContentType ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> HarfBuzz.Enums.BufferContentTypeT
        -- ^ /@contentType@/: the type of buffer contents to set
        -> m ()
    bufferSetContentType :: BufferT -> BufferContentTypeT -> m ()
    bufferSetContentType buffer :: BufferT
    buffer contentType :: BufferContentTypeT
    contentType = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        let contentType' :: CUInt
    contentType' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt)
    -> (BufferContentTypeT -> Int) -> BufferContentTypeT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . BufferContentTypeT -> Int
    forall a. Enum a => a -> Int
    fromEnum) BufferContentTypeT
    contentType
        Ptr BufferT -> CUInt -> IO ()
    hb_buffer_set_content_type Ptr BufferT
    buffer' CUInt
    contentType'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_set_cluster_level
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "cluster_level"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "buffer_cluster_level_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_set_cluster_level" hb_buffer_set_cluster_level ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        CUInt ->                                -- cluster_level : TInterface (Name {namespace = "HarfBuzz", name = "buffer_cluster_level_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.42/
    bufferSetClusterLevel ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> HarfBuzz.Enums.BufferClusterLevelT
        -> m ()
    bufferSetClusterLevel :: BufferT -> BufferClusterLevelT -> m ()
    bufferSetClusterLevel buffer :: BufferT
    buffer clusterLevel :: BufferClusterLevelT
    clusterLevel = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        let clusterLevel' :: CUInt
    clusterLevel' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt)
    -> (BufferClusterLevelT -> Int) -> BufferClusterLevelT -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . BufferClusterLevelT -> Int
    forall a. Enum a => a -> Int
    fromEnum) BufferClusterLevelT
    clusterLevel
        Ptr BufferT -> CUInt -> IO ()
    hb_buffer_set_cluster_level Ptr BufferT
    buffer' CUInt
    clusterLevel'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_serialize_list_formats
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TCArray True (-1) (-1) (TBasicType TUTF8))
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_serialize_list_formats" hb_buffer_serialize_list_formats ::
        IO (Ptr CString)

    -- | Returns a list of supported buffer serialization formats.
    --
    -- /Since: 0.9.7/
    bufferSerializeListFormats ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m [T.Text]
        -- ^ __Returns:__
        -- A string array of buffer serialization formats. Should not be freed.
    bufferSerializeListFormats :: m [Text]
    bufferSerializeListFormats  = IO [Text] -> m [Text]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [Text] -> m [Text]) -> IO [Text] -> m [Text]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr CString
    result <- IO (Ptr CString)
    hb_buffer_serialize_list_formats
        Text -> Ptr CString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "bufferSerializeListFormats" Ptr CString
    result
        [Text]
    result' <- HasCallStack => Ptr CString -> IO [Text]
    Ptr CString -> IO [Text]
    unpackZeroTerminatedUTF8CArray Ptr CString
    result
        [Text] -> IO [Text]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [Text]
    result'

    -- function buffer_serialize_glyphs
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the first item in @buffer to serialize."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "end"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the last item in @buffer to serialize."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "buf"
    --           , argType = TCArray False (-1) 4 (TBasicType TUInt8)
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "output string to\n      write serialized buffer into."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "buf_size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the size of @buf." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "buf_consumed"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "if not %NULL, will be set to the number of byes written into @buf."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = True
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "the #hb_font_t used to shape this buffer, needed to\n       read glyph names and extents. If %NULL, and empty font will be used."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "format"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "buffer_serialize_format_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "the #hb_buffer_serialize_format_t to use for formatting the output."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "flags"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "buffer_serialize_flags_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "the #hb_buffer_serialize_flags_t that control what glyph properties\n        to serialize."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "buf_size"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText = Just "the size of @buf." , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_serialize_glyphs" hb_buffer_serialize_glyphs ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Word32 ->                               -- start : TBasicType TUInt
        Word32 ->                               -- end : TBasicType TUInt
        Ptr (Ptr Word8) ->                      -- buf : TCArray False (-1) 4 (TBasicType TUInt8)
        Ptr Word32 ->                           -- buf_size : TBasicType TUInt
        Ptr Word32 ->                           -- buf_consumed : TBasicType TUInt
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- format : TInterface (Name {namespace = "HarfBuzz", name = "buffer_serialize_format_t"})
        CUInt ->                                -- flags : TInterface (Name {namespace = "HarfBuzz", name = "buffer_serialize_flags_t"})
        IO Word32

    -- | Serializes /@buffer@/ into a textual representation of its glyph content,
    -- useful for showing the contents of the buffer, for example during debugging.
    -- There are currently two supported serialization formats:
    --
    -- == text
    -- A human-readable, plain text format.
    -- The serialized glyphs will look something like:
    --
    -- \`\`@
    -- [uni0651=0\@518,0+0|uni0628=0+1897]
    -- @\`@
    -- - The serialized glyphs are delimited with @[@ and @]@.
    -- - Glyphs are separated with @|@
    -- - Each glyph starts with glyph name, or glyph index if
    --   #HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES flag is set. Then,
    --   - If #HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS is not set, @=@ then #hb_glyph_info_t.cluster.
    --   - If #HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS is not set, the #hb_glyph_position_t in the format:
    --     - If both #hb_glyph_position_t.x_offset and #hb_glyph_position_t.y_offset are not 0, @/@xOffset@/,y_offset@. Then,
    --     - @+x_advance@, then @,y_advance@ if #hb_glyph_position_t.y_advance is not 0. Then,
    --   - If #HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS is set, the
    --     #hb_glyph_extents_t in the format
    --     @&lt;x_bearing,y_bearing,width,height&gt;\`
    --
    -- == json
    -- TODO.
    --
    -- /Since: 0.9.7/
    bufferSerializeGlyphs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT' buffer.
        -> Word32
        -- ^ /@start@/: the first item in /@buffer@/ to serialize.
        -> Word32
        -- ^ /@end@/: the last item in /@buffer@/ to serialize.
        -> Maybe (HarfBuzz.FontT.FontT)
        -- ^ /@font@/: the t'GI.HarfBuzz.Structs.FontT.FontT' used to shape this buffer, needed to
        --        read glyph names and extents. If 'P.Nothing', and empty font will be used.
        -> HarfBuzz.Enums.BufferSerializeFormatT
        -- ^ /@format@/: the t'GI.HarfBuzz.Enums.BufferSerializeFormatT' to use for formatting the output.
        -> [HarfBuzz.Flags.BufferSerializeFlagsT]
        -- ^ /@flags@/: the t'GI.HarfBuzz.Flags.BufferSerializeFlagsT' that control what glyph properties
        --         to serialize.
        -> m ((Word32, ByteString, Word32))
        -- ^ __Returns:__ The number of serialized items.
    bufferSerializeGlyphs :: BufferT
    -> Word32
    -> Word32
    -> Maybe FontT
    -> BufferSerializeFormatT
    -> [BufferSerializeFlagsT]
    -> m (Word32, ByteString, Word32)
    bufferSerializeGlyphs buffer :: BufferT
    buffer start :: Word32
    start end :: Word32
    end font :: Maybe FontT
    font format :: BufferSerializeFormatT
    format flags :: [BufferSerializeFlagsT]
    flags = IO (Word32, ByteString, Word32) -> m (Word32, ByteString, Word32)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Word32, ByteString, Word32) -> m (Word32, ByteString, Word32))
    -> IO (Word32, ByteString, Word32)
    -> m (Word32, ByteString, Word32)
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr (Ptr Word8)
    buf <- IO (Ptr (Ptr Word8))
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr (Ptr Word8))
        Ptr Word32
    bufSize <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr Word32
    bufConsumed <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr FontT
    maybeFont <- case Maybe FontT
    font of
            Nothing -> Ptr FontT -> IO (Ptr FontT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr FontT
    forall a. Ptr a
    nullPtr
            Just jFont :: FontT
    jFont -> do
                Ptr FontT
    jFont' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    jFont
                Ptr FontT -> IO (Ptr FontT)
    forall (m :: * -> *) a. Monad m => a -> m a
    return Ptr FontT
    jFont'
        let format' :: CUInt
    format' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt)
    -> (BufferSerializeFormatT -> Int)
    -> BufferSerializeFormatT
    -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . BufferSerializeFormatT -> Int
    forall a. Enum a => a -> Int
    fromEnum) BufferSerializeFormatT
    format
        let flags' :: CUInt
    flags' = [BufferSerializeFlagsT] -> CUInt
    forall b a. (Num b, IsGFlag a) => [a] -> b
    gflagsToWord [BufferSerializeFlagsT]
    flags
        Word32
    result <- Ptr BufferT
    -> Word32
    -> Word32
    -> Ptr (Ptr Word8)
    -> Ptr Word32
    -> Ptr Word32
    -> Ptr FontT
    -> CUInt
    -> CUInt
    -> IO Word32
    hb_buffer_serialize_glyphs Ptr BufferT
    buffer' Word32
    start Word32
    end Ptr (Ptr Word8)
    buf Ptr Word32
    bufSize Ptr Word32
    bufConsumed Ptr FontT
    maybeFont CUInt
    format' CUInt
    flags'
        Word32
    bufSize' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    bufSize
        Ptr Word8
    buf' <- Ptr (Ptr Word8) -> IO (Ptr Word8)
    forall a. Storable a => Ptr a -> IO a
    peek Ptr (Ptr Word8)
    buf
        ByteString
    buf'' <- (Word32 -> Ptr Word8 -> IO ByteString
    forall a. Integral a => a -> Ptr Word8 -> IO ByteString
    unpackByteStringWithLength Word32
    bufSize') Ptr Word8
    buf'
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    buf'
        Word32
    bufConsumed' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    bufConsumed
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Maybe FontT -> (FontT -> IO ()) -> IO ()
    forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
    whenJust Maybe FontT
    font FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr
        Ptr (Ptr Word8) -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr (Ptr Word8)
    buf
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    bufSize
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    bufConsumed
        (Word32, ByteString, Word32) -> IO (Word32, ByteString, Word32)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Word32
    result, ByteString
    buf'', Word32
    bufConsumed')

    -- function buffer_serialize_format_to_string
    -- Args: [ Arg
    --           { argCName = "format"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "buffer_serialize_format_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_serialize_format_t to convert."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUTF8)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_serialize_format_to_string" hb_buffer_serialize_format_to_string ::
        CUInt ->                                -- format : TInterface (Name {namespace = "HarfBuzz", name = "buffer_serialize_format_t"})
        IO CString

    -- | Converts /@format@/ to the string corresponding it, or 'P.Nothing' if it is not a valid
    -- t'GI.HarfBuzz.Enums.BufferSerializeFormatT'.
    --
    -- /Since: 0.9.7/
    bufferSerializeFormatToString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.Enums.BufferSerializeFormatT
        -- ^ /@format@/: an t'GI.HarfBuzz.Enums.BufferSerializeFormatT' to convert.
        -> m T.Text
        -- ^ __Returns:__
        -- A 'P.Nothing' terminated string corresponding to /@format@/. Should not be freed.
    bufferSerializeFormatToString :: BufferSerializeFormatT -> m Text
    bufferSerializeFormatToString format :: BufferSerializeFormatT
    format = IO Text -> m Text
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Text -> m Text) -> IO Text -> m Text
    forall a b. (a -> b) -> a -> b
    $ do
        let format' :: CUInt
    format' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt)
    -> (BufferSerializeFormatT -> Int)
    -> BufferSerializeFormatT
    -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . BufferSerializeFormatT -> Int
    forall a. Enum a => a -> Int
    fromEnum) BufferSerializeFormatT
    format
        CString
    result <- CUInt -> IO CString
    hb_buffer_serialize_format_to_string CUInt
    format'
        Text -> CString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "bufferSerializeFormatToString" CString
    result
        Text
    result' <- HasCallStack => CString -> IO Text
    CString -> IO Text
    cstringToText CString
    result
        Text -> IO Text
    forall (m :: * -> *) a. Monad m => a -> m a
    return Text
    result'

    -- function buffer_serialize_format_from_string
    -- Args: [ Arg
    --           { argCName = "str"
    --           , argType = TCArray False (-1) 1 (TBasicType TUInt8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a string to parse" , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "length of @str, or -1 if string is %NULL terminated"
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "len"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just "length of @str, or -1 if string is %NULL terminated"
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just
    --               (TInterface
    --                  Name
    --                    { namespace = "HarfBuzz" , name = "buffer_serialize_format_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_serialize_format_from_string" hb_buffer_serialize_format_from_string ::
        Ptr Word8 ->                            -- str : TCArray False (-1) 1 (TBasicType TUInt8)
        Int32 ->                                -- len : TBasicType TInt
        IO CUInt

    -- | Parses a string into an t'GI.HarfBuzz.Enums.BufferSerializeFormatT'. Does not check if
    -- /@str@/ is a valid buffer serialization format, use
    -- 'GI.HarfBuzz.Functions.bufferSerializeListFormats' to get the list of supported formats.
    --
    -- /Since: 0.9.7/
    bufferSerializeFormatFromString ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        ByteString
        -- ^ /@str@/: a string to parse
        -> m HarfBuzz.Enums.BufferSerializeFormatT
        -- ^ __Returns:__ The parsed t'GI.HarfBuzz.Enums.BufferSerializeFormatT'.
    bufferSerializeFormatFromString :: ByteString -> m BufferSerializeFormatT
    bufferSerializeFormatFromString str :: ByteString
    str = IO BufferSerializeFormatT -> m BufferSerializeFormatT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BufferSerializeFormatT -> m BufferSerializeFormatT)
    -> IO BufferSerializeFormatT -> m BufferSerializeFormatT
    forall a b. (a -> b) -> a -> b
    $ do
        let len :: Int32
    len = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ ByteString -> Int
    B.length ByteString
    str
        Ptr Word8
    str' <- ByteString -> IO (Ptr Word8)
    packByteString ByteString
    str
        CUInt
    result <- Ptr Word8 -> Int32 -> IO CUInt
    hb_buffer_serialize_format_from_string Ptr Word8
    str' Int32
    len
        let result' :: BufferSerializeFormatT
    result' = (Int -> BufferSerializeFormatT
    forall a. Enum a => Int -> a
    toEnum (Int -> BufferSerializeFormatT)
    -> (CUInt -> Int) -> CUInt -> BufferSerializeFormatT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    str'
        BufferSerializeFormatT -> IO BufferSerializeFormatT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BufferSerializeFormatT
    result'

    -- function buffer_reverse_range
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "start index." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "end"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "end index." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_reverse_range" hb_buffer_reverse_range ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Word32 ->                               -- start : TBasicType TUInt
        Word32 ->                               -- end : TBasicType TUInt
        IO ()

    -- | Reverses buffer contents between start to end.
    --
    -- /Since: 0.9.41/
    bufferReverseRange ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> Word32
        -- ^ /@start@/: start index.
        -> Word32
        -- ^ /@end@/: end index.
        -> m ()
    bufferReverseRange :: BufferT -> Word32 -> Word32 -> m ()
    bufferReverseRange buffer :: BufferT
    buffer start :: Word32
    start end :: Word32
    end = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> Word32 -> Word32 -> IO ()
    hb_buffer_reverse_range Ptr BufferT
    buffer' Word32
    start Word32
    end
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_reverse_clusters
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_reverse_clusters" hb_buffer_reverse_clusters ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO ()

    -- | Reverses buffer clusters.  That is, the buffer contents are
    -- reversed, then each cluster (consecutive items having the
    -- same cluster number) are reversed again.
    --
    -- /Since: 0.9.2/
    bufferReverseClusters ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m ()
    bufferReverseClusters :: BufferT -> m ()
    bufferReverseClusters buffer :: BufferT
    buffer = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> IO ()
    hb_buffer_reverse_clusters Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_reverse
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_reverse" hb_buffer_reverse ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO ()

    -- | Reverses buffer contents.
    --
    -- /Since: 0.9.2/
    bufferReverse ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m ()
    bufferReverse :: BufferT -> m ()
    bufferReverse buffer :: BufferT
    buffer = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> IO ()
    hb_buffer_reverse Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_reset
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_reset" hb_buffer_reset ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO ()

    -- | Resets the buffer to its initial status, as if it was just newly created
    -- with 'GI.HarfBuzz.Functions.bufferCreate'.
    --
    -- /Since: 0.9.2/
    bufferReset ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m ()
    bufferReset :: BufferT -> m ()
    bufferReset buffer :: BufferT
    buffer = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> IO ()
    hb_buffer_reset Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_pre_allocate
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "size"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "number of items to pre allocate."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_pre_allocate" hb_buffer_pre_allocate ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Word32 ->                               -- size : TBasicType TUInt
        IO Int32

    -- | Pre allocates memory for /@buffer@/ to fit at least /@size@/ number of items.
    --
    -- /Since: 0.9.2/
    bufferPreAllocate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> Word32
        -- ^ /@size@/: number of items to pre allocate.
        -> m Int32
        -- ^ __Returns:__ @/true/@ if /@buffer@/ memory allocation succeeded, @/false/@ otherwise.
    bufferPreAllocate :: BufferT -> Word32 -> m Int32
    bufferPreAllocate buffer :: BufferT
    buffer size :: Word32
    size = IO Int32 -> m Int32
    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 BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Int32
    result <- Ptr BufferT -> Word32 -> IO Int32
    hb_buffer_pre_allocate Ptr BufferT
    buffer' Word32
    size
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function buffer_normalize_glyphs
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_normalize_glyphs" hb_buffer_normalize_glyphs ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO ()

    -- | Reorders a glyph buffer to have canonical in-cluster glyph order \/ position.
    -- The resulting clusters should behave identical to pre-reordering clusters.
    --
    -- \<note>This has nothing to do with Unicode normalization.\<\/note>
    --
    -- /Since: 0.9.2/
    bufferNormalizeGlyphs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m ()
    bufferNormalizeGlyphs :: BufferT -> m ()
    bufferNormalizeGlyphs buffer :: BufferT
    buffer = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> IO ()
    hb_buffer_normalize_glyphs Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_guess_segment_properties
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_guess_segment_properties" hb_buffer_guess_segment_properties ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO ()

    -- | Sets unset buffer segment properties based on buffer Unicode
    -- contents.  If buffer is not empty, it must have content type
    -- 'GI.HarfBuzz.Enums.BufferContentTypeTUnicode'.
    --
    -- If buffer script is not set (ie. is 'GI.HarfBuzz.Enums.ScriptTInvalid'), it
    -- will be set to the Unicode script of the first character in
    -- the buffer that has a script other than 'GI.HarfBuzz.Enums.ScriptTCommon',
    -- 'GI.HarfBuzz.Enums.ScriptTInherited', and 'GI.HarfBuzz.Enums.ScriptTUnknown'.
    --
    -- Next, if buffer direction is not set (ie. is 'GI.HarfBuzz.Enums.DirectionTInvalid'),
    -- it will be set to the natural horizontal direction of the
    -- buffer script as returned by 'GI.HarfBuzz.Functions.scriptGetHorizontalDirection'.
    -- If 'GI.HarfBuzz.Functions.scriptGetHorizontalDirection' returns 'GI.HarfBuzz.Enums.DirectionTInvalid',
    -- then 'GI.HarfBuzz.Enums.DirectionTLtr' is used.
    --
    -- Finally, if buffer language is not set (ie. is 'GI.HarfBuzz.Constants.LANGUAGE_INVALID'),
    -- it will be set to the process\'s default language as returned by
    -- 'GI.HarfBuzz.Functions.languageGetDefault'.  This may change in the future by
    -- taking buffer script into consideration when choosing a language.
    -- Note that 'GI.HarfBuzz.Functions.languageGetDefault' is NOT threadsafe the first time
    -- it is called.  See documentation for that function for details.
    --
    -- /Since: 0.9.7/
    bufferGuessSegmentProperties ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m ()
    bufferGuessSegmentProperties :: BufferT -> m ()
    bufferGuessSegmentProperties buffer :: BufferT
    buffer = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> IO ()
    hb_buffer_guess_segment_properties Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_get_unicode_funcs
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "unicode_funcs_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_unicode_funcs" hb_buffer_get_unicode_funcs ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO (Ptr HarfBuzz.UnicodeFuncsT.UnicodeFuncsT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    bufferGetUnicodeFuncs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m HarfBuzz.UnicodeFuncsT.UnicodeFuncsT
    bufferGetUnicodeFuncs :: BufferT -> m UnicodeFuncsT
    bufferGetUnicodeFuncs buffer :: BufferT
    buffer = IO UnicodeFuncsT -> m UnicodeFuncsT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO UnicodeFuncsT -> m UnicodeFuncsT)
    -> IO UnicodeFuncsT -> m UnicodeFuncsT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr UnicodeFuncsT
    result <- Ptr BufferT -> IO (Ptr UnicodeFuncsT)
    hb_buffer_get_unicode_funcs Ptr BufferT
    buffer'
        Text -> Ptr UnicodeFuncsT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "bufferGetUnicodeFuncs" Ptr UnicodeFuncsT
    result
        UnicodeFuncsT
    result' <- ((ManagedPtr UnicodeFuncsT -> UnicodeFuncsT)
    -> Ptr UnicodeFuncsT -> IO UnicodeFuncsT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr UnicodeFuncsT -> UnicodeFuncsT
    HarfBuzz.UnicodeFuncsT.UnicodeFuncsT) Ptr UnicodeFuncsT
    result
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        UnicodeFuncsT -> IO UnicodeFuncsT
    forall (m :: * -> *) a. Monad m => a -> m a
    return UnicodeFuncsT
    result'

    -- function buffer_get_segment_properties
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "props"
    --           , argType =
    --               TInterface
    --                 Name { namespace = "HarfBuzz" , name = "segment_properties_t" }
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the output #hb_segment_properties_t."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = True
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_segment_properties" hb_buffer_get_segment_properties ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT -> -- props : TInterface (Name {namespace = "HarfBuzz", name = "segment_properties_t"})
        IO ()

    -- | Sets /@props@/ to the t'GI.HarfBuzz.Structs.SegmentPropertiesT.SegmentPropertiesT' of /@buffer@/.
    --
    -- /Since: 0.9.7/
    bufferGetSegmentProperties ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m (HarfBuzz.SegmentPropertiesT.SegmentPropertiesT)
    bufferGetSegmentProperties :: BufferT -> m SegmentPropertiesT
    bufferGetSegmentProperties buffer :: BufferT
    buffer = IO SegmentPropertiesT -> m SegmentPropertiesT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO SegmentPropertiesT -> m SegmentPropertiesT)
    -> IO SegmentPropertiesT -> m SegmentPropertiesT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr SegmentPropertiesT
    props <- Int -> IO (Ptr SegmentPropertiesT)
    forall a. GBoxed a => Int -> IO (Ptr a)
    SP.callocBoxedBytes 32 :: IO (Ptr HarfBuzz.SegmentPropertiesT.SegmentPropertiesT)
        Ptr BufferT -> Ptr SegmentPropertiesT -> IO ()
    hb_buffer_get_segment_properties Ptr BufferT
    buffer' Ptr SegmentPropertiesT
    props
        SegmentPropertiesT
    props' <- ((ManagedPtr SegmentPropertiesT -> SegmentPropertiesT)
    -> Ptr SegmentPropertiesT -> IO SegmentPropertiesT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr SegmentPropertiesT -> SegmentPropertiesT
    HarfBuzz.SegmentPropertiesT.SegmentPropertiesT) Ptr SegmentPropertiesT
    props
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        SegmentPropertiesT -> IO SegmentPropertiesT
    forall (m :: * -> *) a. Monad m => a -> m a
    return SegmentPropertiesT
    props'

    -- function buffer_get_script
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "script_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_script" hb_buffer_get_script ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO CUInt

    -- | See 'GI.HarfBuzz.Functions.bufferSetScript'.
    --
    -- /Since: 0.9.2/
    bufferGetScript ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m HarfBuzz.Enums.ScriptT
        -- ^ __Returns:__ The t'GI.HarfBuzz.Enums.ScriptT' of the /@buffer@/.
    bufferGetScript :: BufferT -> m ScriptT
    bufferGetScript buffer :: BufferT
    buffer = IO ScriptT -> m ScriptT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO ScriptT -> m ScriptT) -> IO ScriptT -> m ScriptT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        CUInt
    result <- Ptr BufferT -> IO CUInt
    hb_buffer_get_script Ptr BufferT
    buffer'
        let result' :: ScriptT
    result' = (Int -> ScriptT
    forall a. Enum a => Int -> a
    toEnum (Int -> ScriptT) -> (CUInt -> Int) -> CUInt -> ScriptT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        ScriptT -> IO ScriptT
    forall (m :: * -> *) a. Monad m => a -> m a
    return ScriptT
    result'

    -- function buffer_get_replacement_codepoint
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_replacement_codepoint" hb_buffer_get_replacement_codepoint ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO Word32

    -- | See 'GI.HarfBuzz.Functions.bufferSetReplacementCodepoint'.
    --
    -- /Since: 0.9.31/
    bufferGetReplacementCodepoint ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m Word32
        -- ^ __Returns:__ The /@buffer@/ replacement @/hb_codepoint_t/@.
    bufferGetReplacementCodepoint :: BufferT -> m Word32
    bufferGetReplacementCodepoint buffer :: BufferT
    buffer = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Word32
    result <- Ptr BufferT -> IO Word32
    hb_buffer_get_replacement_codepoint Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function buffer_get_length
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_length" hb_buffer_get_length ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO Word32

    -- | Returns the number of items in the buffer.
    --
    -- /Since: 0.9.2/
    bufferGetLength ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m Word32
        -- ^ __Returns:__ The /@buffer@/ length.
        -- The value valid as long as buffer has not been modified.
    bufferGetLength :: BufferT -> m Word32
    bufferGetLength buffer :: BufferT
    buffer = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Word32
    result <- Ptr BufferT -> IO Word32
    hb_buffer_get_length Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function buffer_get_language
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "language_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_language" hb_buffer_get_language ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO (Ptr HarfBuzz.LanguageT.LanguageT)

    -- | See 'GI.HarfBuzz.Functions.bufferSetLanguage'.
    --
    -- /Since: 0.9.2/
    bufferGetLanguage ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m HarfBuzz.LanguageT.LanguageT
        -- ^ __Returns:__
        -- The t'GI.HarfBuzz.Structs.LanguageT.LanguageT' of the buffer. Must not be freed by the caller.
    bufferGetLanguage :: BufferT -> m LanguageT
    bufferGetLanguage buffer :: BufferT
    buffer = IO LanguageT -> m LanguageT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO LanguageT -> m LanguageT) -> IO LanguageT -> m LanguageT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr LanguageT
    result <- Ptr BufferT -> IO (Ptr LanguageT)
    hb_buffer_get_language Ptr BufferT
    buffer'
        Text -> Ptr LanguageT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "bufferGetLanguage" Ptr LanguageT
    result
        LanguageT
    result' <- ((ManagedPtr LanguageT -> LanguageT)
    -> Ptr LanguageT -> IO LanguageT
    forall a.
    (HasCallStack, BoxedPtr a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newPtr ManagedPtr LanguageT -> LanguageT
    HarfBuzz.LanguageT.LanguageT) Ptr LanguageT
    result
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        LanguageT -> IO LanguageT
    forall (m :: * -> *) a. Monad m => a -> m a
    return LanguageT
    result'

    -- function buffer_get_invisible_glyph
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt32)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_invisible_glyph" hb_buffer_get_invisible_glyph ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO Word32

    -- | See 'GI.HarfBuzz.Functions.bufferSetInvisibleGlyph'.
    --
    -- /Since: 2.0.0/
    bufferGetInvisibleGlyph ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m Word32
        -- ^ __Returns:__ The /@buffer@/ invisible @/hb_codepoint_t/@.
    bufferGetInvisibleGlyph :: BufferT -> m Word32
    bufferGetInvisibleGlyph buffer :: BufferT
    buffer = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Word32
    result <- Ptr BufferT -> IO Word32
    hb_buffer_get_invisible_glyph Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function buffer_get_glyph_positions
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "output length." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "length"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText = Just "output length." , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just
    --               (TCArray
    --                  False
    --                  (-1)
    --                  1
    --                  (TInterface
    --                     Name { namespace = "HarfBuzz" , name = "glyph_position_t" }))
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_glyph_positions" hb_buffer_get_glyph_positions ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr Word32 ->                           -- length : TBasicType TUInt
        IO (Ptr HarfBuzz.GlyphPositionT.GlyphPositionT)

    -- | Returns /@buffer@/ glyph position array.  Returned pointer
    -- is valid as long as /@buffer@/ contents are not modified.
    --
    -- /Since: 0.9.2/
    bufferGetGlyphPositions ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m [HarfBuzz.GlyphPositionT.GlyphPositionT]
        -- ^ __Returns:__
        -- The /@buffer@/ glyph position array.
        -- The value valid as long as buffer has not been modified.
    bufferGetGlyphPositions :: BufferT -> m [GlyphPositionT]
    bufferGetGlyphPositions buffer :: BufferT
    buffer = IO [GlyphPositionT] -> m [GlyphPositionT]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [GlyphPositionT] -> m [GlyphPositionT])
    -> IO [GlyphPositionT] -> m [GlyphPositionT]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr Word32
    length_ <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr GlyphPositionT
    result <- Ptr BufferT -> Ptr Word32 -> IO (Ptr GlyphPositionT)
    hb_buffer_get_glyph_positions Ptr BufferT
    buffer' Ptr Word32
    length_
        Word32
    length_' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    length_
        Text -> Ptr GlyphPositionT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "bufferGetGlyphPositions" Ptr GlyphPositionT
    result
        [Ptr GlyphPositionT]
    result' <- (Int -> Word32 -> Ptr GlyphPositionT -> IO [Ptr GlyphPositionT]
    forall a b.
    (Integral a, GBoxed b) =>
    Int -> a -> Ptr b -> IO [Ptr b]
    unpackBoxedArrayWithLength 20 Word32
    length_') Ptr GlyphPositionT
    result
        [GlyphPositionT]
    result'' <- (Ptr GlyphPositionT -> IO GlyphPositionT)
    -> [Ptr GlyphPositionT] -> IO [GlyphPositionT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM ((ManagedPtr GlyphPositionT -> GlyphPositionT)
    -> Ptr GlyphPositionT -> IO GlyphPositionT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newBoxed ManagedPtr GlyphPositionT -> GlyphPositionT
    HarfBuzz.GlyphPositionT.GlyphPositionT) [Ptr GlyphPositionT]
    result'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    length_
        [GlyphPositionT] -> IO [GlyphPositionT]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [GlyphPositionT]
    result''

    -- function buffer_get_glyph_infos
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "output array length."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "length"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText = Just "output array length."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just
    --               (TCArray
    --                  False
    --                  (-1)
    --                  1
    --                  (TInterface
    --                     Name { namespace = "HarfBuzz" , name = "glyph_info_t" }))
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_glyph_infos" hb_buffer_get_glyph_infos ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr Word32 ->                           -- length : TBasicType TUInt
        IO (Ptr HarfBuzz.GlyphInfoT.GlyphInfoT)

    -- | Returns /@buffer@/ glyph information array.  Returned pointer
    -- is valid as long as /@buffer@/ contents are not modified.
    --
    -- /Since: 0.9.2/
    bufferGetGlyphInfos ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m [HarfBuzz.GlyphInfoT.GlyphInfoT]
        -- ^ __Returns:__
        -- The /@buffer@/ glyph information array.
        -- The value valid as long as buffer has not been modified.
    bufferGetGlyphInfos :: BufferT -> m [GlyphInfoT]
    bufferGetGlyphInfos buffer :: BufferT
    buffer = IO [GlyphInfoT] -> m [GlyphInfoT]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [GlyphInfoT] -> m [GlyphInfoT])
    -> IO [GlyphInfoT] -> m [GlyphInfoT]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr Word32
    length_ <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr GlyphInfoT
    result <- Ptr BufferT -> Ptr Word32 -> IO (Ptr GlyphInfoT)
    hb_buffer_get_glyph_infos Ptr BufferT
    buffer' Ptr Word32
    length_
        Word32
    length_' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    length_
        Text -> Ptr GlyphInfoT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "bufferGetGlyphInfos" Ptr GlyphInfoT
    result
        [Ptr GlyphInfoT]
    result' <- (Int -> Word32 -> Ptr GlyphInfoT -> IO [Ptr GlyphInfoT]
    forall a b.
    (Integral a, GBoxed b) =>
    Int -> a -> Ptr b -> IO [Ptr b]
    unpackBoxedArrayWithLength 20 Word32
    length_') Ptr GlyphInfoT
    result
        [GlyphInfoT]
    result'' <- (Ptr GlyphInfoT -> IO GlyphInfoT)
    -> [Ptr GlyphInfoT] -> IO [GlyphInfoT]
    forall (t :: * -> *) (m :: * -> *) a b.
    (Traversable t, Monad m) =>
    (a -> m b) -> t a -> m (t b)
    mapM ((ManagedPtr GlyphInfoT -> GlyphInfoT)
    -> Ptr GlyphInfoT -> IO GlyphInfoT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    newBoxed ManagedPtr GlyphInfoT -> GlyphInfoT
    HarfBuzz.GlyphInfoT.GlyphInfoT) [Ptr GlyphInfoT]
    result'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    length_
        [GlyphInfoT] -> IO [GlyphInfoT]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [GlyphInfoT]
    result''

    -- function buffer_get_flags
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "buffer_flags_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_flags" hb_buffer_get_flags ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO CUInt

    -- | See 'GI.HarfBuzz.Functions.bufferSetFlags'.
    --
    -- /Since: 0.9.7/
    bufferGetFlags ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m [HarfBuzz.Flags.BufferFlagsT]
        -- ^ __Returns:__ The /@buffer@/ flags.
    bufferGetFlags :: BufferT -> m [BufferFlagsT]
    bufferGetFlags buffer :: BufferT
    buffer = IO [BufferFlagsT] -> m [BufferFlagsT]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [BufferFlagsT] -> m [BufferFlagsT])
    -> IO [BufferFlagsT] -> m [BufferFlagsT]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        CUInt
    result <- Ptr BufferT -> IO CUInt
    hb_buffer_get_flags Ptr BufferT
    buffer'
        let result' :: [BufferFlagsT]
    result' = CUInt -> [BufferFlagsT]
    forall a b. (Storable a, Integral a, Bits a, IsGFlag b) => a -> [b]
    wordToGFlags CUInt
    result
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        [BufferFlagsT] -> IO [BufferFlagsT]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [BufferFlagsT]
    result'

    -- function buffer_get_empty
    -- Args: []
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_empty" hb_buffer_get_empty ::
        IO (Ptr HarfBuzz.BufferT.BufferT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    bufferGetEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.BufferT.BufferT
    bufferGetEmpty :: m BufferT
    bufferGetEmpty  = IO BufferT -> m BufferT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BufferT -> m BufferT) -> IO BufferT -> m BufferT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    result <- IO (Ptr BufferT)
    hb_buffer_get_empty
        Text -> Ptr BufferT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "bufferGetEmpty" Ptr BufferT
    result
        BufferT
    result' <- ((ManagedPtr BufferT -> BufferT) -> Ptr BufferT -> IO BufferT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BufferT -> BufferT
    HarfBuzz.BufferT.BufferT) Ptr BufferT
    result
        BufferT -> IO BufferT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BufferT
    result'

    -- function buffer_get_direction
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "direction_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_direction" hb_buffer_get_direction ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO CUInt

    -- | See 'GI.HarfBuzz.Functions.bufferSetDirection'
    --
    -- /Since: 0.9.2/
    bufferGetDirection ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m HarfBuzz.Enums.DirectionT
        -- ^ __Returns:__ The direction of the /@buffer@/.
    bufferGetDirection :: BufferT -> m DirectionT
    bufferGetDirection buffer :: BufferT
    buffer = IO DirectionT -> m DirectionT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO DirectionT -> m DirectionT) -> IO DirectionT -> m DirectionT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        CUInt
    result <- Ptr BufferT -> IO CUInt
    hb_buffer_get_direction Ptr BufferT
    buffer'
        let result' :: DirectionT
    result' = (Int -> DirectionT
    forall a. Enum a => Int -> a
    toEnum (Int -> DirectionT) -> (CUInt -> Int) -> CUInt -> DirectionT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        DirectionT -> IO DirectionT
    forall (m :: * -> *) a. Monad m => a -> m a
    return DirectionT
    result'

    -- function buffer_get_content_type
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "buffer_content_type_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_content_type" hb_buffer_get_content_type ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO CUInt

    -- | see 'GI.HarfBuzz.Functions.bufferSetContentType'.
    --
    -- /Since: 0.9.5/
    bufferGetContentType ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m HarfBuzz.Enums.BufferContentTypeT
        -- ^ __Returns:__ The type of /@buffer@/ contents.
    bufferGetContentType :: BufferT -> m BufferContentTypeT
    bufferGetContentType buffer :: BufferT
    buffer = IO BufferContentTypeT -> m BufferContentTypeT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BufferContentTypeT -> m BufferContentTypeT)
    -> IO BufferContentTypeT -> m BufferContentTypeT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        CUInt
    result <- Ptr BufferT -> IO CUInt
    hb_buffer_get_content_type Ptr BufferT
    buffer'
        let result' :: BufferContentTypeT
    result' = (Int -> BufferContentTypeT
    forall a. Enum a => Int -> a
    toEnum (Int -> BufferContentTypeT)
    -> (CUInt -> Int) -> CUInt -> BufferContentTypeT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        BufferContentTypeT -> IO BufferContentTypeT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BufferContentTypeT
    result'

    -- function buffer_get_cluster_level
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "buffer_cluster_level_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_get_cluster_level" hb_buffer_get_cluster_level ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO CUInt

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.42/
    bufferGetClusterLevel ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m HarfBuzz.Enums.BufferClusterLevelT
    bufferGetClusterLevel :: BufferT -> m BufferClusterLevelT
    bufferGetClusterLevel buffer :: BufferT
    buffer = IO BufferClusterLevelT -> m BufferClusterLevelT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BufferClusterLevelT -> m BufferClusterLevelT)
    -> IO BufferClusterLevelT -> m BufferClusterLevelT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        CUInt
    result <- Ptr BufferT -> IO CUInt
    hb_buffer_get_cluster_level Ptr BufferT
    buffer'
        let result' :: BufferClusterLevelT
    result' = (Int -> BufferClusterLevelT
    forall a. Enum a => Int -> a
    toEnum (Int -> BufferClusterLevelT)
    -> (CUInt -> Int) -> CUInt -> BufferClusterLevelT
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . CUInt -> Int
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral) CUInt
    result
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        BufferClusterLevelT -> IO BufferClusterLevelT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BufferClusterLevelT
    result'

    -- function buffer_diff
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a buffer." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "reference"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "other buffer to compare to."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "dottedcircle_glyph"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "glyph id of U+25CC DOTTED CIRCLE, or (hb_codepont_t) -1."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "position_fuzz"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "allowed absolute difference in position values."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just
    --               (TInterface
    --                  Name { namespace = "HarfBuzz" , name = "buffer_diff_flags_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_diff" hb_buffer_diff ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.BufferT.BufferT ->         -- reference : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Word32 ->                               -- dottedcircle_glyph : TBasicType TUInt32
        Word32 ->                               -- position_fuzz : TBasicType TUInt
        IO CUInt

    -- | If dottedcircle_glyph is (hb_codepoint_t) -1 then 'GI.HarfBuzz.Flags.BufferDiffFlagsTDottedCirclePresent'
    -- and 'GI.HarfBuzz.Flags.BufferDiffFlagsTNotdefPresent' are never returned.  This should be used by most
    -- callers if just comparing two buffers is needed.
    --
    -- /Since: 1.5.0/
    bufferDiff ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: a buffer.
        -> HarfBuzz.BufferT.BufferT
        -- ^ /@reference@/: other buffer to compare to.
        -> Word32
        -- ^ /@dottedcircleGlyph@/: glyph id of U+25CC DOTTED CIRCLE, or (hb_codepont_t) -1.
        -> Word32
        -- ^ /@positionFuzz@/: allowed absolute difference in position values.
        -> m [HarfBuzz.Flags.BufferDiffFlagsT]
    bufferDiff :: BufferT -> BufferT -> Word32 -> Word32 -> m [BufferDiffFlagsT]
    bufferDiff buffer :: BufferT
    buffer reference :: BufferT
    reference dottedcircleGlyph :: Word32
    dottedcircleGlyph positionFuzz :: Word32
    positionFuzz = IO [BufferDiffFlagsT] -> m [BufferDiffFlagsT]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [BufferDiffFlagsT] -> m [BufferDiffFlagsT])
    -> IO [BufferDiffFlagsT] -> m [BufferDiffFlagsT]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT
    reference' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    reference
        CUInt
    result <- Ptr BufferT -> Ptr BufferT -> Word32 -> Word32 -> IO CUInt
    hb_buffer_diff Ptr BufferT
    buffer' Ptr BufferT
    reference' Word32
    dottedcircleGlyph Word32
    positionFuzz
        let result' :: [BufferDiffFlagsT]
    result' = CUInt -> [BufferDiffFlagsT]
    forall a b. (Storable a, Integral a, Bits a, IsGFlag b) => a -> [b]
    wordToGFlags CUInt
    result
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    reference
        [BufferDiffFlagsT] -> IO [BufferDiffFlagsT]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [BufferDiffFlagsT]
    result'

    -- function buffer_deserialize_glyphs
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "buf"
    --           , argType = TCArray False (-1) 2 (TBasicType TUTF8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "buf_len"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "end_ptr"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       , Arg
    --           { argCName = "font"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "font_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "format"
    --           , argType =
    --               TInterface
    --                 Name
    --                   { namespace = "HarfBuzz" , name = "buffer_serialize_format_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "buf_len"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_deserialize_glyphs" hb_buffer_deserialize_glyphs ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr CString ->                          -- buf : TCArray False (-1) 2 (TBasicType TUTF8)
        Int32 ->                                -- buf_len : TBasicType TInt
        Ptr CString ->                          -- end_ptr : TBasicType TUTF8
        Ptr HarfBuzz.FontT.FontT ->             -- font : TInterface (Name {namespace = "HarfBuzz", name = "font_t"})
        CUInt ->                                -- format : TInterface (Name {namespace = "HarfBuzz", name = "buffer_serialize_format_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.7/
    bufferDeserializeGlyphs ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT' buffer.
        -> [T.Text]
        -> HarfBuzz.FontT.FontT
        -> HarfBuzz.Enums.BufferSerializeFormatT
        -> m ((Int32, T.Text))
    bufferDeserializeGlyphs :: BufferT
    -> [Text] -> FontT -> BufferSerializeFormatT -> m (Int32, Text)
    bufferDeserializeGlyphs buffer :: BufferT
    buffer buf :: [Text]
    buf font :: FontT
    font format :: BufferSerializeFormatT
    format = IO (Int32, Text) -> m (Int32, Text)
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO (Int32, Text) -> m (Int32, Text))
    -> IO (Int32, Text) -> m (Int32, Text)
    forall a b. (a -> b) -> a -> b
    $ do
        let bufLen :: Int32
    bufLen = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ [Text] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Text]
    buf
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr CString
    buf' <- [Text] -> IO (Ptr CString)
    packUTF8CArray [Text]
    buf
        Ptr CString
    endPtr <- IO (Ptr CString)
    forall a. Storable a => IO (Ptr a)
    callocMem :: IO (Ptr CString)
        Ptr FontT
    font' <- FontT -> IO (Ptr FontT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr FontT
    font
        let format' :: CUInt
    format' = (Int -> CUInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> CUInt)
    -> (BufferSerializeFormatT -> Int)
    -> BufferSerializeFormatT
    -> CUInt
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . BufferSerializeFormatT -> Int
    forall a. Enum a => a -> Int
    fromEnum) BufferSerializeFormatT
    format
        Int32
    result <- Ptr BufferT
    -> Ptr CString
    -> Int32
    -> Ptr CString
    -> Ptr FontT
    -> CUInt
    -> IO Int32
    hb_buffer_deserialize_glyphs Ptr BufferT
    buffer' Ptr CString
    buf' Int32
    bufLen Ptr CString
    endPtr Ptr FontT
    font' CUInt
    format'
        CString
    endPtr' <- Ptr CString -> IO CString
    forall a. Storable a => Ptr a -> IO a
    peek Ptr CString
    endPtr
        Text
    endPtr'' <- HasCallStack => CString -> IO Text
    CString -> IO Text
    cstringToText CString
    endPtr'
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    endPtr'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        FontT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr FontT
    font
        (Int32 -> (CString -> IO ()) -> Ptr CString -> IO ()
    forall a b c.
    (Storable a, Integral b) =>
    b -> (a -> IO c) -> Ptr a -> IO ()
    mapCArrayWithLength Int32
    bufLen) CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    buf'
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    buf'
        Ptr CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr CString
    endPtr
        (Int32, Text) -> IO (Int32, Text)
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Int32
    result, Text
    endPtr'')

    -- function buffer_create
    -- Args: []
    -- Lengths: []
    -- returnType: Just
    --               (TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_create" hb_buffer_create ::
        IO (Ptr HarfBuzz.BufferT.BufferT)

    -- | Creates a new t'GI.HarfBuzz.Structs.BufferT.BufferT' with all properties to defaults.
    --
    -- /Since: 0.9.2/
    bufferCreate ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.BufferT.BufferT
        -- ^ __Returns:__
        -- A newly allocated t'GI.HarfBuzz.Structs.BufferT.BufferT' with a reference count of 1. The initial
        -- reference count should be released with @/hb_buffer_destroy()/@ when you are done
        -- using the t'GI.HarfBuzz.Structs.BufferT.BufferT'. This function never returns 'P.Nothing'. If memory cannot
        -- be allocated, a special t'GI.HarfBuzz.Structs.BufferT.BufferT' object will be returned on which
        -- 'GI.HarfBuzz.Functions.bufferAllocationSuccessful' returns @/false/@.
    bufferCreate :: m BufferT
    bufferCreate  = IO BufferT -> m BufferT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BufferT -> m BufferT) -> IO BufferT -> m BufferT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    result <- IO (Ptr BufferT)
    hb_buffer_create
        Text -> Ptr BufferT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "bufferCreate" Ptr BufferT
    result
        BufferT
    result' <- ((ManagedPtr BufferT -> BufferT) -> Ptr BufferT -> IO BufferT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BufferT -> BufferT
    HarfBuzz.BufferT.BufferT) Ptr BufferT
    result
        BufferT -> IO BufferT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BufferT
    result'

    -- function buffer_clear_contents
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_clear_contents" hb_buffer_clear_contents ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO ()

    -- | Similar to 'GI.HarfBuzz.Functions.bufferReset', but does not clear the Unicode functions and
    -- the replacement code point.
    --
    -- /Since: 0.9.11/
    bufferClearContents ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m ()
    bufferClearContents :: BufferT -> m ()
    bufferClearContents buffer :: BufferT
    buffer = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> IO ()
    hb_buffer_clear_contents Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_append
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "source"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "source #hb_buffer_t."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "start"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "start index into source buffer to copy.  Use 0 to copy from start of buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "end"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "end index into source buffer to copy.  Use @HB_FEATURE_GLOBAL_END to copy to end of buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_append" hb_buffer_append ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr HarfBuzz.BufferT.BufferT ->         -- source : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Word32 ->                               -- start : TBasicType TUInt
        Word32 ->                               -- end : TBasicType TUInt
        IO ()

    -- | Append (part of) contents of another buffer to this buffer.
    --
    -- /Since: 1.5.0/
    bufferAppend ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> HarfBuzz.BufferT.BufferT
        -- ^ /@source@/: source t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> Word32
        -- ^ /@start@/: start index into source buffer to copy.  Use 0 to copy from start of buffer.
        -> Word32
        -- ^ /@end@/: end index into source buffer to copy.  Use /@hBFEATUREGLOBALEND@/ to copy to end of buffer.
        -> m ()
    bufferAppend :: BufferT -> BufferT -> Word32 -> Word32 -> m ()
    bufferAppend buffer :: BufferT
    buffer source :: BufferT
    source start :: Word32
    start end :: Word32
    end = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT
    source' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    source
        Ptr BufferT -> Ptr BufferT -> Word32 -> Word32 -> IO ()
    hb_buffer_append Ptr BufferT
    buffer' Ptr BufferT
    source' Word32
    start Word32
    end
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    source
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_allocation_successful
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_allocation_successful" hb_buffer_allocation_successful ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        IO Int32

    -- | Check if allocating memory for the buffer succeeded.
    --
    -- /Since: 0.9.2/
    bufferAllocationSuccessful ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> m Int32
        -- ^ __Returns:__ @/true/@ if /@buffer@/ memory allocation succeeded, @/false/@ otherwise.
    bufferAllocationSuccessful :: BufferT -> m Int32
    bufferAllocationSuccessful buffer :: BufferT
    buffer = IO Int32 -> m Int32
    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 BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Int32
    result <- Ptr BufferT -> IO Int32
    hb_buffer_allocation_successful Ptr BufferT
    buffer'
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function buffer_add_utf8
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TCArray False (-1) 2 (TBasicType TUInt8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "an array of UTF-8\n              characters to append."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the length of the @text, or -1 if it is %NULL terminated."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the offset of the first character to add to the @buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "the number of characters to add to the @buffer, or -1 for the\n              end of @text (assuming it is %NULL terminated)."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "text_length"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just "the length of the @text, or -1 if it is %NULL terminated."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_add_utf8" hb_buffer_add_utf8 ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr Word8 ->                            -- text : TCArray False (-1) 2 (TBasicType TUInt8)
        Int32 ->                                -- text_length : TBasicType TInt
        Word32 ->                               -- item_offset : TBasicType TUInt
        Int32 ->                                -- item_length : TBasicType TInt
        IO ()

    -- | See 'GI.HarfBuzz.Functions.bufferAddCodepoints'.
    --
    -- Replaces invalid UTF-8 characters with the /@buffer@/ replacement code point,
    -- see 'GI.HarfBuzz.Functions.bufferSetReplacementCodepoint'.
    --
    -- /Since: 0.9.2/
    bufferAddUtf8 ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> ByteString
        -- ^ /@text@/: an array of UTF-8
        --               characters to append.
        -> Word32
        -- ^ /@itemOffset@/: the offset of the first character to add to the /@buffer@/.
        -> Int32
        -- ^ /@itemLength@/: the number of characters to add to the /@buffer@/, or -1 for the
        --               end of /@text@/ (assuming it is 'P.Nothing' terminated).
        -> m ()
    bufferAddUtf8 :: BufferT -> ByteString -> Word32 -> Int32 -> m ()
    bufferAddUtf8 buffer :: BufferT
    buffer text :: ByteString
    text itemOffset :: Word32
    itemOffset itemLength :: Int32
    itemLength = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        let textLength :: Int32
    textLength = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ ByteString -> Int
    B.length ByteString
    text
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr Word8
    text' <- ByteString -> IO (Ptr Word8)
    packByteString ByteString
    text
        Ptr BufferT -> Ptr Word8 -> Int32 -> Word32 -> Int32 -> IO ()
    hb_buffer_add_utf8 Ptr BufferT
    buffer' Ptr Word8
    text' Int32
    textLength Word32
    itemOffset Int32
    itemLength
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    text'
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_add_utf32
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TCArray False (-1) 2 (TBasicType TUInt32)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an array of UTF-32 characters to append."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the length of the @text, or -1 if it is %NULL terminated."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the offset of the first character to add to the @buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "the number of characters to add to the @buffer, or -1 for the\n              end of @text (assuming it is %NULL terminated)."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "text_length"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just "the length of the @text, or -1 if it is %NULL terminated."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_add_utf32" hb_buffer_add_utf32 ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr Word32 ->                           -- text : TCArray False (-1) 2 (TBasicType TUInt32)
        Int32 ->                                -- text_length : TBasicType TInt
        Word32 ->                               -- item_offset : TBasicType TUInt
        Int32 ->                                -- item_length : TBasicType TInt
        IO ()

    -- | See 'GI.HarfBuzz.Functions.bufferAddCodepoints'.
    --
    -- Replaces invalid UTF-32 characters with the /@buffer@/ replacement code point,
    -- see 'GI.HarfBuzz.Functions.bufferSetReplacementCodepoint'.
    --
    -- /Since: 0.9.2/
    bufferAddUtf32 ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> [Word32]
        -- ^ /@text@/: an array of UTF-32 characters to append.
        -> Word32
        -- ^ /@itemOffset@/: the offset of the first character to add to the /@buffer@/.
        -> Int32
        -- ^ /@itemLength@/: the number of characters to add to the /@buffer@/, or -1 for the
        --               end of /@text@/ (assuming it is 'P.Nothing' terminated).
        -> m ()
    bufferAddUtf32 :: BufferT -> [Word32] -> Word32 -> Int32 -> m ()
    bufferAddUtf32 buffer :: BufferT
    buffer text :: [Word32]
    text itemOffset :: Word32
    itemOffset itemLength :: Int32
    itemLength = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        let textLength :: Int32
    textLength = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ [Word32] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Word32]
    text
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr Word32
    text' <- [Word32] -> IO (Ptr Word32)
    forall a. Storable a => [a] -> IO (Ptr a)
    packStorableArray [Word32]
    text
        Ptr BufferT -> Ptr Word32 -> Int32 -> Word32 -> Int32 -> IO ()
    hb_buffer_add_utf32 Ptr BufferT
    buffer' Ptr Word32
    text' Int32
    textLength Word32
    itemOffset Int32
    itemLength
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    text'
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_add_utf16
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TCArray False (-1) 2 (TBasicType TUInt16)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an array of UTF-16 characters to append."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the length of the @text, or -1 if it is %NULL terminated."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the offset of the first character to add to the @buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "the number of characters to add to the @buffer, or -1 for the\n              end of @text (assuming it is %NULL terminated)."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "text_length"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just "the length of the @text, or -1 if it is %NULL terminated."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_add_utf16" hb_buffer_add_utf16 ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr Word16 ->                           -- text : TCArray False (-1) 2 (TBasicType TUInt16)
        Int32 ->                                -- text_length : TBasicType TInt
        Word32 ->                               -- item_offset : TBasicType TUInt
        Int32 ->                                -- item_length : TBasicType TInt
        IO ()

    -- | See 'GI.HarfBuzz.Functions.bufferAddCodepoints'.
    --
    -- Replaces invalid UTF-16 characters with the /@buffer@/ replacement code point,
    -- see 'GI.HarfBuzz.Functions.bufferSetReplacementCodepoint'.
    --
    -- /Since: 0.9.2/
    bufferAddUtf16 ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> [Word16]
        -- ^ /@text@/: an array of UTF-16 characters to append.
        -> Word32
        -- ^ /@itemOffset@/: the offset of the first character to add to the /@buffer@/.
        -> Int32
        -- ^ /@itemLength@/: the number of characters to add to the /@buffer@/, or -1 for the
        --               end of /@text@/ (assuming it is 'P.Nothing' terminated).
        -> m ()
    bufferAddUtf16 :: BufferT -> [Word16] -> Word32 -> Int32 -> m ()
    bufferAddUtf16 buffer :: BufferT
    buffer text :: [Word16]
    text itemOffset :: Word32
    itemOffset itemLength :: Int32
    itemLength = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        let textLength :: Int32
    textLength = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ [Word16] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Word16]
    text
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr Word16
    text' <- [Word16] -> IO (Ptr Word16)
    forall a. Storable a => [a] -> IO (Ptr a)
    packStorableArray [Word16]
    text
        Ptr BufferT -> Ptr Word16 -> Int32 -> Word32 -> Int32 -> IO ()
    hb_buffer_add_utf16 Ptr BufferT
    buffer' Ptr Word16
    text' Int32
    textLength Word32
    itemOffset Int32
    itemLength
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Ptr Word16 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word16
    text'
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_add_latin1
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TCArray False (-1) 2 (TBasicType TUInt8)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "an array of UTF-8\n              characters to append."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the length of the @text, or -1 if it is %NULL terminated."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the offset of the first character to add to the @buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "the number of characters to add to the @buffer, or -1 for the\n              end of @text (assuming it is %NULL terminated)."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "text_length"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just "the length of the @text, or -1 if it is %NULL terminated."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_add_latin1" hb_buffer_add_latin1 ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr Word8 ->                            -- text : TCArray False (-1) 2 (TBasicType TUInt8)
        Int32 ->                                -- text_length : TBasicType TInt
        Word32 ->                               -- item_offset : TBasicType TUInt
        Int32 ->                                -- item_length : TBasicType TInt
        IO ()

    -- | Similar to 'GI.HarfBuzz.Functions.bufferAddCodepoints', but allows only access to first 256
    -- Unicode code points that can fit in 8-bit strings.
    --
    -- \<note>Has nothing to do with non-Unicode Latin-1 encoding.\<\/note>
    --
    -- /Since: 0.9.39/
    bufferAddLatin1 ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> ByteString
        -- ^ /@text@/: an array of UTF-8
        --               characters to append.
        -> Word32
        -- ^ /@itemOffset@/: the offset of the first character to add to the /@buffer@/.
        -> Int32
        -- ^ /@itemLength@/: the number of characters to add to the /@buffer@/, or -1 for the
        --               end of /@text@/ (assuming it is 'P.Nothing' terminated).
        -> m ()
    bufferAddLatin1 :: BufferT -> ByteString -> Word32 -> Int32 -> m ()
    bufferAddLatin1 buffer :: BufferT
    buffer text :: ByteString
    text itemOffset :: Word32
    itemOffset itemLength :: Int32
    itemLength = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        let textLength :: Int32
    textLength = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ ByteString -> Int
    B.length ByteString
    text
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr Word8
    text' <- ByteString -> IO (Ptr Word8)
    packByteString ByteString
    text
        Ptr BufferT -> Ptr Word8 -> Int32 -> Word32 -> Int32 -> IO ()
    hb_buffer_add_latin1 Ptr BufferT
    buffer' Ptr Word8
    text' Int32
    textLength Word32
    itemOffset Int32
    itemLength
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Ptr Word8 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word8
    text'
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_add_codepoints
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a #hb_buffer_t to append characters to."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text"
    --           , argType = TCArray False (-1) 2 (TBasicType TUInt32)
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an array of Unicode code points to append."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "text_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the length of the @text, or -1 if it is %NULL terminated."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "the offset of the first code point to add to the @buffer."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "item_length"
    --           , argType = TBasicType TInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just
    --                       "the number of code points to add to the @buffer, or -1 for the\n              end of @text (assuming it is %NULL terminated)."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "text_length"
    --              , argType = TBasicType TInt
    --              , direction = DirectionIn
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText =
    --                        Just "the length of the @text, or -1 if it is %NULL terminated."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferNothing
    --              }
    --          ]
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_add_codepoints" hb_buffer_add_codepoints ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Ptr Word32 ->                           -- text : TCArray False (-1) 2 (TBasicType TUInt32)
        Int32 ->                                -- text_length : TBasicType TInt
        Word32 ->                               -- item_offset : TBasicType TUInt
        Int32 ->                                -- item_length : TBasicType TInt
        IO ()

    -- | Appends characters from /@text@/ array to /@buffer@/. The /@itemOffset@/ is the
    -- position of the first character from /@text@/ that will be appended, and
    -- /@itemLength@/ is the number of character. When shaping part of a larger text
    -- (e.g. a run of text from a paragraph), instead of passing just the substring
    -- corresponding to the run, it is preferable to pass the whole
    -- paragraph and specify the run start and length as /@itemOffset@/ and
    -- /@itemLength@/, respectively, to give HarfBuzz the full context to be able,
    -- for example, to do cross-run Arabic shaping or properly handle combining
    -- marks at stat of run.
    --
    -- This function does not check the validity of /@text@/, it is up to the caller
    -- to ensure it contains a valid Unicode code points.
    --
    -- /Since: 0.9.31/
    bufferAddCodepoints ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: a t'GI.HarfBuzz.Structs.BufferT.BufferT' to append characters to.
        -> [Word32]
        -- ^ /@text@/: an array of Unicode code points to append.
        -> Word32
        -- ^ /@itemOffset@/: the offset of the first code point to add to the /@buffer@/.
        -> Int32
        -- ^ /@itemLength@/: the number of code points to add to the /@buffer@/, or -1 for the
        --               end of /@text@/ (assuming it is 'P.Nothing' terminated).
        -> m ()
    bufferAddCodepoints :: BufferT -> [Word32] -> Word32 -> Int32 -> m ()
    bufferAddCodepoints buffer :: BufferT
    buffer text :: [Word32]
    text itemOffset :: Word32
    itemOffset itemLength :: Int32
    itemLength = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        let textLength :: Int32
    textLength = Int -> Int32
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral (Int -> Int32) -> Int -> Int32
    forall a b. (a -> b) -> a -> b
    $ [Word32] -> Int
    forall (t :: * -> *) a. Foldable t => t a -> Int
    P.length [Word32]
    text
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr Word32
    text' <- [Word32] -> IO (Ptr Word32)
    forall a. Storable a => [a] -> IO (Ptr a)
    packStorableArray [Word32]
    text
        Ptr BufferT -> Ptr Word32 -> Int32 -> Word32 -> Int32 -> IO ()
    hb_buffer_add_codepoints Ptr BufferT
    buffer' Ptr Word32
    text' Int32
    textLength Word32
    itemOffset Int32
    itemLength
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    text'
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function buffer_add
    -- Args: [ Arg
    --           { argCName = "buffer"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "buffer_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "an #hb_buffer_t." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "codepoint"
    --           , argType = TBasicType TUInt32
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a Unicode code point."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "cluster"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "the cluster value of @codepoint."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_buffer_add" hb_buffer_add ::
        Ptr HarfBuzz.BufferT.BufferT ->         -- buffer : TInterface (Name {namespace = "HarfBuzz", name = "buffer_t"})
        Word32 ->                               -- codepoint : TBasicType TUInt32
        Word32 ->                               -- cluster : TBasicType TUInt
        IO ()

    -- | Appends a character with the Unicode value of /@codepoint@/ to /@buffer@/, and
    -- gives it the initial cluster value of /@cluster@/. Clusters can be any thing
    -- the client wants, they are usually used to refer to the index of the
    -- character in the input text stream and are output in
    -- t'GI.HarfBuzz.Structs.GlyphInfoT.GlyphInfoT'.@/cluster/@ field.
    --
    -- This function does not check the validity of /@codepoint@/, it is up to the
    -- caller to ensure it is a valid Unicode code point.
    --
    -- /Since: 0.9.7/
    bufferAdd ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BufferT.BufferT
        -- ^ /@buffer@/: an t'GI.HarfBuzz.Structs.BufferT.BufferT'.
        -> Word32
        -- ^ /@codepoint@/: a Unicode code point.
        -> Word32
        -- ^ /@cluster@/: the cluster value of /@codepoint@/.
        -> m ()
    bufferAdd :: BufferT -> Word32 -> Word32 -> m ()
    bufferAdd buffer :: BufferT
    buffer codepoint :: Word32
    codepoint cluster :: Word32
    cluster = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BufferT
    buffer' <- BufferT -> IO (Ptr BufferT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BufferT
    buffer
        Ptr BufferT -> Word32 -> Word32 -> IO ()
    hb_buffer_add Ptr BufferT
    buffer' Word32
    codepoint Word32
    cluster
        BufferT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BufferT
    buffer
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function blob_make_immutable
    -- Args: [ Arg
    --           { argCName = "blob"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a blob." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Nothing
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_blob_make_immutable" hb_blob_make_immutable ::
        Ptr HarfBuzz.BlobT.BlobT ->             -- blob : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        IO ()

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    blobMakeImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BlobT.BlobT
        -- ^ /@blob@/: a blob.
        -> m ()
    blobMakeImmutable :: BlobT -> m ()
    blobMakeImmutable blob :: BlobT
    blob = IO () -> m ()
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO () -> m ()) -> IO () -> m ()
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BlobT
    blob' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    blob
        Ptr BlobT -> IO ()
    hb_blob_make_immutable Ptr BlobT
    blob'
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    blob
        () -> IO ()
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    -- function blob_is_immutable
    -- Args: [ Arg
    --           { argCName = "blob"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a blob." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_blob_is_immutable" hb_blob_is_immutable ::
        Ptr HarfBuzz.BlobT.BlobT ->             -- blob : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        IO Int32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    blobIsImmutable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BlobT.BlobT
        -- ^ /@blob@/: a blob.
        -> m Int32
        -- ^ __Returns:__ TODO
    blobIsImmutable :: BlobT -> m Int32
    blobIsImmutable blob :: BlobT
    blob = IO Int32 -> m Int32
    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 BlobT
    blob' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    blob
        Int32
    result <- Ptr BlobT -> IO Int32
    hb_blob_is_immutable Ptr BlobT
    blob'
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    blob
        Int32 -> IO Int32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Int32
    result

    -- function blob_get_length
    -- Args: [ Arg
    --           { argCName = "blob"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a blob." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TBasicType TUInt)
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_blob_get_length" hb_blob_get_length ::
        Ptr HarfBuzz.BlobT.BlobT ->             -- blob : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        IO Word32

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    blobGetLength ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BlobT.BlobT
        -- ^ /@blob@/: a blob.
        -> m Word32
        -- ^ __Returns:__ the length of blob data in bytes.
    blobGetLength :: BlobT -> m Word32
    blobGetLength blob :: BlobT
    blob = IO Word32 -> m Word32
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BlobT
    blob' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    blob
        Word32
    result <- Ptr BlobT -> IO Word32
    hb_blob_get_length Ptr BlobT
    blob'
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    blob
        Word32 -> IO Word32
    forall (m :: * -> *) a. Monad m => a -> m a
    return Word32
    result

    -- function blob_get_empty
    -- Args: []
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_blob_get_empty" hb_blob_get_empty ::
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | Returns the singleton empty blob.
    --
    -- See TODO:link object types for more information.
    --
    -- /Since: 0.9.2/
    blobGetEmpty ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        m HarfBuzz.BlobT.BlobT
        -- ^ __Returns:__ the empty blob.
    blobGetEmpty :: m BlobT
    blobGetEmpty  = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BlobT
    result <- IO (Ptr BlobT)
    hb_blob_get_empty
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "blobGetEmpty" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'

    -- function blob_get_data_writable
    -- Args: [ Arg
    --           { argCName = "blob"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a blob." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "output length of the writable data."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "length"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation
    --                    { rawDocText = Just "output length of the writable data."
    --                    , sinceVersion = Nothing
    --                    }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TCArray False (-1) 1 (TBasicType TUTF8))
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_blob_get_data_writable" hb_blob_get_data_writable ::
        Ptr HarfBuzz.BlobT.BlobT ->             -- blob : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        Ptr Word32 ->                           -- length : TBasicType TUInt
        IO (Ptr CString)

    -- | Tries to make blob data writable (possibly copying it) and
    -- return pointer to data.
    --
    -- Fails if blob has been made immutable, or if memory allocation
    -- fails.
    --
    -- /Since: 0.9.2/
    blobGetDataWritable ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BlobT.BlobT
        -- ^ /@blob@/: a blob.
        -> m [T.Text]
        -- ^ __Returns:__ Writable blob data,
        -- or 'P.Nothing' if failed.
    blobGetDataWritable :: BlobT -> m [Text]
    blobGetDataWritable blob :: BlobT
    blob = IO [Text] -> m [Text]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [Text] -> m [Text]) -> IO [Text] -> m [Text]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BlobT
    blob' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    blob
        Ptr Word32
    length_ <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr CString
    result <- Ptr BlobT -> Ptr Word32 -> IO (Ptr CString)
    hb_blob_get_data_writable Ptr BlobT
    blob' Ptr Word32
    length_
        Word32
    length_' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    length_
        Text -> Ptr CString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "blobGetDataWritable" Ptr CString
    result
        [Text]
    result' <- (Word32 -> Ptr CString -> IO [Text]
    forall a.
    (HasCallStack, Integral a) =>
    a -> Ptr CString -> IO [Text]
    unpackUTF8CArrayWithLength Word32
    length_') Ptr CString
    result
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    blob
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    length_
        [Text] -> IO [Text]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [Text]
    result'

    -- function blob_get_data
    -- Args: [ Arg
    --           { argCName = "blob"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "a blob." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionOut
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferEverything
    --           }
    --       ]
    -- Lengths: [ Arg
    --              { argCName = "length"
    --              , argType = TBasicType TUInt
    --              , direction = DirectionOut
    --              , mayBeNull = False
    --              , argDoc =
    --                  Documentation { rawDocText = Nothing , sinceVersion = Nothing }
    --              , argScope = ScopeTypeInvalid
    --              , argClosure = -1
    --              , argDestroy = -1
    --              , argCallerAllocates = False
    --              , transfer = TransferEverything
    --              }
    --          ]
    -- returnType: Just (TCArray False (-1) 1 (TBasicType TUTF8))
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_blob_get_data" hb_blob_get_data ::
        Ptr HarfBuzz.BlobT.BlobT ->             -- blob : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        Ptr Word32 ->                           -- length : TBasicType TUInt
        IO (Ptr CString)

    -- | /No description available in the introspection data./
    --
    -- /Since: 0.9.2/
    blobGetData ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BlobT.BlobT
        -- ^ /@blob@/: a blob.
        -> m [T.Text]
    blobGetData :: BlobT -> m [Text]
    blobGetData blob :: BlobT
    blob = IO [Text] -> m [Text]
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO [Text] -> m [Text]) -> IO [Text] -> m [Text]
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BlobT
    blob' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    blob
        Ptr Word32
    length_ <- IO (Ptr Word32)
    forall a. Storable a => IO (Ptr a)
    allocMem :: IO (Ptr Word32)
        Ptr CString
    result <- Ptr BlobT -> Ptr Word32 -> IO (Ptr CString)
    hb_blob_get_data Ptr BlobT
    blob' Ptr Word32
    length_
        Word32
    length_' <- Ptr Word32 -> IO Word32
    forall a. Storable a => Ptr a -> IO a
    peek Ptr Word32
    length_
        Text -> Ptr CString -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "blobGetData" Ptr CString
    result
        [Text]
    result' <- (Word32 -> Ptr CString -> IO [Text]
    forall a.
    (HasCallStack, Integral a) =>
    a -> Ptr CString -> IO [Text]
    unpackUTF8CArrayWithLength Word32
    length_') Ptr CString
    result
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    blob
        Ptr Word32 -> IO ()
    forall a. Ptr a -> IO ()
    freeMem Ptr Word32
    length_
        [Text] -> IO [Text]
    forall (m :: * -> *) a. Monad m => a -> m a
    return [Text]
    result'

    -- function blob_create_sub_blob
    -- Args: [ Arg
    --           { argCName = "parent"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Parent blob." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "offset"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText =
    --                     Just "Start offset of sub-blob within @parent, in bytes."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       , Arg
    --           { argCName = "length"
    --           , argType = TBasicType TUInt
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "Length of sub-blob."
    --                 , sinceVersion = Nothing
    --                 }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_blob_create_sub_blob" hb_blob_create_sub_blob ::
        Ptr HarfBuzz.BlobT.BlobT ->             -- parent : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        Word32 ->                               -- offset : TBasicType TUInt
        Word32 ->                               -- length : TBasicType TUInt
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | Returns a blob that represents a range of bytes in /@parent@/.  The new
    -- blob is always created with 'GI.HarfBuzz.Enums.MemoryModeTReadonly', meaning that it
    -- will never modify data in the parent blob.  The parent data is not
    -- expected to be modified, and will result in undefined behavior if it
    -- is.
    --
    -- Makes /@parent@/ immutable.
    --
    -- /Since: 0.9.2/
    blobCreateSubBlob ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BlobT.BlobT
        -- ^ /@parent@/: Parent blob.
        -> Word32
        -- ^ /@offset@/: Start offset of sub-blob within /@parent@/, in bytes.
        -> Word32
        -- ^ /@length@/: Length of sub-blob.
        -> m HarfBuzz.BlobT.BlobT
        -- ^ __Returns:__ New blob, or the empty blob if something failed or if
        -- /@length@/ is zero or /@offset@/ is beyond the end of /@parent@/\'s data.  Destroy
        -- with @/hb_blob_destroy()/@.
    blobCreateSubBlob :: BlobT -> Word32 -> Word32 -> m BlobT
    blobCreateSubBlob parent :: BlobT
    parent offset :: Word32
    offset length_ :: Word32
    length_ = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BlobT
    parent' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    parent
        Ptr BlobT
    result <- Ptr BlobT -> Word32 -> Word32 -> IO (Ptr BlobT)
    hb_blob_create_sub_blob Ptr BlobT
    parent' Word32
    offset Word32
    length_
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "blobCreateSubBlob" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    parent
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'

    -- function blob_create_from_file
    -- Args: [ Arg
    --           { argCName = "file_name"
    --           , argType = TBasicType TUTF8
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "font filename." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_blob_create_from_file" hb_blob_create_from_file ::
        CString ->                              -- file_name : TBasicType TUTF8
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | /No description available in the introspection data./
    --
    -- /Since: 1.7.7/
    blobCreateFromFile ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        T.Text
        -- ^ /@fileName@/: font filename.
        -> m HarfBuzz.BlobT.BlobT
        -- ^ __Returns:__ A hb_blob_t pointer with the content of the file
    blobCreateFromFile :: Text -> m BlobT
    blobCreateFromFile fileName :: Text
    fileName = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        CString
    fileName' <- Text -> IO CString
    textToCString Text
    fileName
        Ptr BlobT
    result <- CString -> IO (Ptr BlobT)
    hb_blob_create_from_file CString
    fileName'
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "blobCreateFromFile" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        CString -> IO ()
    forall a. Ptr a -> IO ()
    freeMem CString
    fileName'
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'

    -- function blob_copy_writable_or_fail
    -- Args: [ Arg
    --           { argCName = "blob"
    --           , argType =
    --               TInterface Name { namespace = "HarfBuzz" , name = "blob_t" }
    --           , direction = DirectionIn
    --           , mayBeNull = False
    --           , argDoc =
    --               Documentation
    --                 { rawDocText = Just "A blob." , sinceVersion = Nothing }
    --           , argScope = ScopeTypeInvalid
    --           , argClosure = -1
    --           , argDestroy = -1
    --           , argCallerAllocates = False
    --           , transfer = TransferNothing
    --           }
    --       ]
    -- Lengths: []
    -- returnType: Just (TInterface Name { namespace = "HarfBuzz" , name = "blob_t" })
    -- throws : False
    -- Skip return : False

    foreign import ccall "hb_blob_copy_writable_or_fail" hb_blob_copy_writable_or_fail ::
        Ptr HarfBuzz.BlobT.BlobT ->             -- blob : TInterface (Name {namespace = "HarfBuzz", name = "blob_t"})
        IO (Ptr HarfBuzz.BlobT.BlobT)

    -- | Makes a writable copy of /@blob@/.
    --
    -- /Since: 1.8.0/
    blobCopyWritableOrFail ::
        (B.CallStack.HasCallStack, MonadIO m) =>
        HarfBuzz.BlobT.BlobT
        -- ^ /@blob@/: A blob.
        -> m HarfBuzz.BlobT.BlobT
        -- ^ __Returns:__ New blob, or nullptr if allocation failed.
    blobCopyWritableOrFail :: BlobT -> m BlobT
    blobCopyWritableOrFail blob :: BlobT
    blob = IO BlobT -> m BlobT
    forall (m :: * -> *) a. MonadIO m => IO a -> m a
    liftIO (IO BlobT -> m BlobT) -> IO BlobT -> m BlobT
    forall a b. (a -> b) -> a -> b
    $ do
        Ptr BlobT
    blob' <- BlobT -> IO (Ptr BlobT)
    forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr a)
    unsafeManagedPtrGetPtr BlobT
    blob
        Ptr BlobT
    result <- Ptr BlobT -> IO (Ptr BlobT)
    hb_blob_copy_writable_or_fail Ptr BlobT
    blob'
        Text -> Ptr BlobT -> IO ()
    forall a. HasCallStack => Text -> Ptr a -> IO ()
    checkUnexpectedReturnNULL "blobCopyWritableOrFail" Ptr BlobT
    result
        BlobT
    result' <- ((ManagedPtr BlobT -> BlobT) -> Ptr BlobT -> IO BlobT
    forall a.
    (HasCallStack, GBoxed a) =>
    (ManagedPtr a -> a) -> Ptr a -> IO a
    wrapBoxed ManagedPtr BlobT -> BlobT
    HarfBuzz.BlobT.BlobT) Ptr BlobT
    result
        BlobT -> IO ()
    forall a. ManagedPtrNewtype a => a -> IO ()
    touchManagedPtr BlobT
    blob
        BlobT -> IO BlobT
    forall (m :: * -> *) a. Monad m => a -> m a
    return BlobT
    result'