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

/No description available in the introspection data./
-}

#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))

module GI.GtkSource.Objects.Language
    (

-- * Exported types
    Language(..)                            ,
    IsLanguage                              ,
    toLanguage                              ,
    noLanguage                              ,


 -- * Methods
-- ** getGlobs #method:getGlobs#

#if ENABLE_OVERLOADING
    LanguageGetGlobsMethodInfo              ,
#endif
    languageGetGlobs                        ,


-- ** getHidden #method:getHidden#

#if ENABLE_OVERLOADING
    LanguageGetHiddenMethodInfo             ,
#endif
    languageGetHidden                       ,


-- ** getId #method:getId#

#if ENABLE_OVERLOADING
    LanguageGetIdMethodInfo                 ,
#endif
    languageGetId                           ,


-- ** getMetadata #method:getMetadata#

#if ENABLE_OVERLOADING
    LanguageGetMetadataMethodInfo           ,
#endif
    languageGetMetadata                     ,


-- ** getMimeTypes #method:getMimeTypes#

#if ENABLE_OVERLOADING
    LanguageGetMimeTypesMethodInfo          ,
#endif
    languageGetMimeTypes                    ,


-- ** getName #method:getName#

#if ENABLE_OVERLOADING
    LanguageGetNameMethodInfo               ,
#endif
    languageGetName                         ,


-- ** getSection #method:getSection#

#if ENABLE_OVERLOADING
    LanguageGetSectionMethodInfo            ,
#endif
    languageGetSection                      ,


-- ** getStyleFallback #method:getStyleFallback#

#if ENABLE_OVERLOADING
    LanguageGetStyleFallbackMethodInfo      ,
#endif
    languageGetStyleFallback                ,


-- ** getStyleIds #method:getStyleIds#

#if ENABLE_OVERLOADING
    LanguageGetStyleIdsMethodInfo           ,
#endif
    languageGetStyleIds                     ,


-- ** getStyleName #method:getStyleName#

#if ENABLE_OVERLOADING
    LanguageGetStyleNameMethodInfo          ,
#endif
    languageGetStyleName                    ,




 -- * Properties
-- ** hidden #attr:hidden#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    LanguageHiddenPropertyInfo              ,
#endif
    getLanguageHidden                       ,
#if ENABLE_OVERLOADING
    languageHidden                          ,
#endif


-- ** id #attr:id#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    LanguageIdPropertyInfo                  ,
#endif
    getLanguageId                           ,
#if ENABLE_OVERLOADING
    languageId                              ,
#endif


-- ** name #attr:name#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    LanguageNamePropertyInfo                ,
#endif
    getLanguageName                         ,
#if ENABLE_OVERLOADING
    languageName                            ,
#endif


-- ** section #attr:section#
{- | /No description available in the introspection data./
-}
#if ENABLE_OVERLOADING
    LanguageSectionPropertyInfo             ,
#endif
    getLanguageSection                      ,
#if ENABLE_OVERLOADING
    languageSection                         ,
#endif




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL

import qualified GI.GObject.Objects.Object as GObject.Object

-- | Memory-managed wrapper type.
newtype Language = Language (ManagedPtr Language)
foreign import ccall "gtk_source_language_get_type"
    c_gtk_source_language_get_type :: IO GType

instance GObject Language where
    gobjectType = c_gtk_source_language_get_type


-- | Type class for types which can be safely cast to `Language`, for instance with `toLanguage`.
class (GObject o, O.IsDescendantOf Language o) => IsLanguage o
instance (GObject o, O.IsDescendantOf Language o) => IsLanguage o

instance O.HasParentTypes Language
type instance O.ParentTypes Language = '[GObject.Object.Object]

-- | Cast to `Language`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toLanguage :: (MonadIO m, IsLanguage o) => o -> m Language
toLanguage = liftIO . unsafeCastTo Language

-- | A convenience alias for `Nothing` :: `Maybe` `Language`.
noLanguage :: Maybe Language
noLanguage = Nothing

#if ENABLE_OVERLOADING
type family ResolveLanguageMethod (t :: Symbol) (o :: *) :: * where
    ResolveLanguageMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveLanguageMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveLanguageMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveLanguageMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveLanguageMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveLanguageMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveLanguageMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveLanguageMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveLanguageMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveLanguageMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveLanguageMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveLanguageMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveLanguageMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveLanguageMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveLanguageMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveLanguageMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveLanguageMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveLanguageMethod "getGlobs" o = LanguageGetGlobsMethodInfo
    ResolveLanguageMethod "getHidden" o = LanguageGetHiddenMethodInfo
    ResolveLanguageMethod "getId" o = LanguageGetIdMethodInfo
    ResolveLanguageMethod "getMetadata" o = LanguageGetMetadataMethodInfo
    ResolveLanguageMethod "getMimeTypes" o = LanguageGetMimeTypesMethodInfo
    ResolveLanguageMethod "getName" o = LanguageGetNameMethodInfo
    ResolveLanguageMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveLanguageMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveLanguageMethod "getSection" o = LanguageGetSectionMethodInfo
    ResolveLanguageMethod "getStyleFallback" o = LanguageGetStyleFallbackMethodInfo
    ResolveLanguageMethod "getStyleIds" o = LanguageGetStyleIdsMethodInfo
    ResolveLanguageMethod "getStyleName" o = LanguageGetStyleNameMethodInfo
    ResolveLanguageMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveLanguageMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveLanguageMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveLanguageMethod t Language, O.MethodInfo info Language p) => OL.IsLabel t (Language -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

#endif

-- VVV Prop "hidden"
   -- Type: TBasicType TBoolean
   -- Flags: [PropertyReadable]
   -- Nullable: (Just False,Nothing)

{- |
Get the value of the “@hidden@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' language #hidden
@
-}
getLanguageHidden :: (MonadIO m, IsLanguage o) => o -> m Bool
getLanguageHidden obj = liftIO $ B.Properties.getObjectPropertyBool obj "hidden"

#if ENABLE_OVERLOADING
data LanguageHiddenPropertyInfo
instance AttrInfo LanguageHiddenPropertyInfo where
    type AttrAllowedOps LanguageHiddenPropertyInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint LanguageHiddenPropertyInfo = (~) ()
    type AttrBaseTypeConstraint LanguageHiddenPropertyInfo = IsLanguage
    type AttrGetType LanguageHiddenPropertyInfo = Bool
    type AttrLabel LanguageHiddenPropertyInfo = "hidden"
    type AttrOrigin LanguageHiddenPropertyInfo = Language
    attrGet _ = getLanguageHidden
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined
#endif

-- VVV Prop "id"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable]
   -- Nullable: (Just False,Nothing)

{- |
Get the value of the “@id@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' language #id
@
-}
getLanguageId :: (MonadIO m, IsLanguage o) => o -> m T.Text
getLanguageId obj = liftIO $ checkUnexpectedNothing "getLanguageId" $ B.Properties.getObjectPropertyString obj "id"

#if ENABLE_OVERLOADING
data LanguageIdPropertyInfo
instance AttrInfo LanguageIdPropertyInfo where
    type AttrAllowedOps LanguageIdPropertyInfo = '[ 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint LanguageIdPropertyInfo = (~) ()
    type AttrBaseTypeConstraint LanguageIdPropertyInfo = IsLanguage
    type AttrGetType LanguageIdPropertyInfo = T.Text
    type AttrLabel LanguageIdPropertyInfo = "id"
    type AttrOrigin LanguageIdPropertyInfo = Language
    attrGet _ = getLanguageId
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined
#endif

-- VVV Prop "name"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable]
   -- Nullable: (Just False,Nothing)

{- |
Get the value of the “@name@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' language #name
@
-}
getLanguageName :: (MonadIO m, IsLanguage o) => o -> m T.Text
getLanguageName obj = liftIO $ checkUnexpectedNothing "getLanguageName" $ B.Properties.getObjectPropertyString obj "name"

#if ENABLE_OVERLOADING
data LanguageNamePropertyInfo
instance AttrInfo LanguageNamePropertyInfo where
    type AttrAllowedOps LanguageNamePropertyInfo = '[ 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint LanguageNamePropertyInfo = (~) ()
    type AttrBaseTypeConstraint LanguageNamePropertyInfo = IsLanguage
    type AttrGetType LanguageNamePropertyInfo = T.Text
    type AttrLabel LanguageNamePropertyInfo = "name"
    type AttrOrigin LanguageNamePropertyInfo = Language
    attrGet _ = getLanguageName
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined
#endif

-- VVV Prop "section"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable]
   -- Nullable: (Just False,Nothing)

{- |
Get the value of the “@section@” property.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' language #section
@
-}
getLanguageSection :: (MonadIO m, IsLanguage o) => o -> m T.Text
getLanguageSection obj = liftIO $ checkUnexpectedNothing "getLanguageSection" $ B.Properties.getObjectPropertyString obj "section"

#if ENABLE_OVERLOADING
data LanguageSectionPropertyInfo
instance AttrInfo LanguageSectionPropertyInfo where
    type AttrAllowedOps LanguageSectionPropertyInfo = '[ 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint LanguageSectionPropertyInfo = (~) ()
    type AttrBaseTypeConstraint LanguageSectionPropertyInfo = IsLanguage
    type AttrGetType LanguageSectionPropertyInfo = T.Text
    type AttrLabel LanguageSectionPropertyInfo = "section"
    type AttrOrigin LanguageSectionPropertyInfo = Language
    attrGet _ = getLanguageSection
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined
#endif

#if ENABLE_OVERLOADING
instance O.HasAttributeList Language
type instance O.AttributeList Language = LanguageAttributeList
type LanguageAttributeList = ('[ '("hidden", LanguageHiddenPropertyInfo), '("id", LanguageIdPropertyInfo), '("name", LanguageNamePropertyInfo), '("section", LanguageSectionPropertyInfo)] :: [(Symbol, *)])
#endif

#if ENABLE_OVERLOADING
languageHidden :: AttrLabelProxy "hidden"
languageHidden = AttrLabelProxy

languageId :: AttrLabelProxy "id"
languageId = AttrLabelProxy

languageName :: AttrLabelProxy "name"
languageName = AttrLabelProxy

languageSection :: AttrLabelProxy "section"
languageSection = AttrLabelProxy

#endif

#if ENABLE_OVERLOADING
type instance O.SignalList Language = LanguageSignalList
type LanguageSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

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

foreign import ccall "gtk_source_language_get_globs" gtk_source_language_get_globs ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    IO (Ptr CString)

{- |
Returns the globs associated to this language. This is just
an utility wrapper around 'GI.GtkSource.Objects.Language.languageGetMetadata' to
retrieve the \"globs\" metadata property and split it into an array.
-}
languageGetGlobs ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language'. -}
    -> m (Maybe [T.Text])
    {- ^ __Returns:__ 
a newly-allocated 'Nothing' terminated array containing the globs or 'Nothing'
if no globs are found.
The returned array must be freed with 'GI.GLib.Functions.strfreev'. -}
languageGetGlobs language = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    result <- gtk_source_language_get_globs language'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- unpackZeroTerminatedUTF8CArray result'
        mapZeroTerminatedCArray freeMem result'
        freeMem result'
        return result''
    touchManagedPtr language
    return maybeResult

#if ENABLE_OVERLOADING
data LanguageGetGlobsMethodInfo
instance (signature ~ (m (Maybe [T.Text])), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetGlobsMethodInfo a signature where
    overloadedMethod _ = languageGetGlobs

#endif

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

foreign import ccall "gtk_source_language_get_hidden" gtk_source_language_get_hidden ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    IO CInt

{- |
Returns whether the language should be hidden from the user.
-}
languageGetHidden ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language' -}
    -> m Bool
    {- ^ __Returns:__ 'True' if the language should be hidden, 'False' otherwise. -}
languageGetHidden language = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    result <- gtk_source_language_get_hidden language'
    let result' = (/= 0) result
    touchManagedPtr language
    return result'

#if ENABLE_OVERLOADING
data LanguageGetHiddenMethodInfo
instance (signature ~ (m Bool), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetHiddenMethodInfo a signature where
    overloadedMethod _ = languageGetHidden

#endif

-- method Language::get_id
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "language", argType = TInterface (Name {namespace = "GtkSource", name = "Language"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceLanguage.", 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 "gtk_source_language_get_id" gtk_source_language_get_id ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    IO CString

{- |
Returns the ID of the language. The ID is not locale-dependent.
The returned string is owned by /@language@/ and should not be freed
or modified.
-}
languageGetId ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language'. -}
    -> m T.Text
    {- ^ __Returns:__ the ID of /@language@/. -}
languageGetId language = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    result <- gtk_source_language_get_id language'
    checkUnexpectedReturnNULL "languageGetId" result
    result' <- cstringToText result
    touchManagedPtr language
    return result'

#if ENABLE_OVERLOADING
data LanguageGetIdMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetIdMethodInfo a signature where
    overloadedMethod _ = languageGetId

#endif

-- method Language::get_metadata
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "language", argType = TInterface (Name {namespace = "GtkSource", name = "Language"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceLanguage.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "metadata property name.", 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 "gtk_source_language_get_metadata" gtk_source_language_get_metadata ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    CString ->                              -- name : TBasicType TUTF8
    IO CString

{- |
/No description available in the introspection data./
-}
languageGetMetadata ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language'. -}
    -> T.Text
    {- ^ /@name@/: metadata property name. -}
    -> m (Maybe T.Text)
    {- ^ __Returns:__ value of property /@name@/ stored in
the metadata of /@language@/ or 'Nothing' if language does not contain the
specified metadata property.
The returned string is owned by /@language@/ and should not be freed
or modified. -}
languageGetMetadata language name = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    name' <- textToCString name
    result <- gtk_source_language_get_metadata language' name'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- cstringToText result'
        return result''
    touchManagedPtr language
    freeMem name'
    return maybeResult

#if ENABLE_OVERLOADING
data LanguageGetMetadataMethodInfo
instance (signature ~ (T.Text -> m (Maybe T.Text)), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetMetadataMethodInfo a signature where
    overloadedMethod _ = languageGetMetadata

#endif

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

foreign import ccall "gtk_source_language_get_mime_types" gtk_source_language_get_mime_types ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    IO (Ptr CString)

{- |
Returns the mime types associated to this language. This is just
an utility wrapper around 'GI.GtkSource.Objects.Language.languageGetMetadata' to
retrieve the \"mimetypes\" metadata property and split it into an
array.
-}
languageGetMimeTypes ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language'. -}
    -> m (Maybe [T.Text])
    {- ^ __Returns:__ 
a newly-allocated 'Nothing' terminated array containing the mime types
or 'Nothing' if no mime types are found.
The returned array must be freed with 'GI.GLib.Functions.strfreev'. -}
languageGetMimeTypes language = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    result <- gtk_source_language_get_mime_types language'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- unpackZeroTerminatedUTF8CArray result'
        mapZeroTerminatedCArray freeMem result'
        freeMem result'
        return result''
    touchManagedPtr language
    return maybeResult

#if ENABLE_OVERLOADING
data LanguageGetMimeTypesMethodInfo
instance (signature ~ (m (Maybe [T.Text])), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetMimeTypesMethodInfo a signature where
    overloadedMethod _ = languageGetMimeTypes

#endif

-- method Language::get_name
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "language", argType = TInterface (Name {namespace = "GtkSource", name = "Language"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceLanguage.", 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 "gtk_source_language_get_name" gtk_source_language_get_name ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    IO CString

{- |
Returns the localized name of the language.
The returned string is owned by /@language@/ and should not be freed
or modified.
-}
languageGetName ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language'. -}
    -> m T.Text
    {- ^ __Returns:__ the name of /@language@/. -}
languageGetName language = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    result <- gtk_source_language_get_name language'
    checkUnexpectedReturnNULL "languageGetName" result
    result' <- cstringToText result
    touchManagedPtr language
    return result'

#if ENABLE_OVERLOADING
data LanguageGetNameMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetNameMethodInfo a signature where
    overloadedMethod _ = languageGetName

#endif

-- method Language::get_section
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "language", argType = TInterface (Name {namespace = "GtkSource", name = "Language"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceLanguage.", 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 "gtk_source_language_get_section" gtk_source_language_get_section ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    IO CString

{- |
Returns the localized section of the language.
Each language belong to a section (ex. HTML belogs to the
Markup section).
The returned string is owned by /@language@/ and should not be freed
or modified.
-}
languageGetSection ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language'. -}
    -> m T.Text
    {- ^ __Returns:__ the section of /@language@/. -}
languageGetSection language = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    result <- gtk_source_language_get_section language'
    checkUnexpectedReturnNULL "languageGetSection" result
    result' <- cstringToText result
    touchManagedPtr language
    return result'

#if ENABLE_OVERLOADING
data LanguageGetSectionMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetSectionMethodInfo a signature where
    overloadedMethod _ = languageGetSection

#endif

-- method Language::get_style_fallback
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "language", argType = TInterface (Name {namespace = "GtkSource", name = "Language"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceLanguage.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "style_id", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a style ID.", 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 "gtk_source_language_get_style_fallback" gtk_source_language_get_style_fallback ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    CString ->                              -- style_id : TBasicType TUTF8
    IO CString

{- |
Returns the ID of the style to use if the specified /@styleId@/
is not present in the current style scheme.

/Since: 3.4/
-}
languageGetStyleFallback ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language'. -}
    -> T.Text
    {- ^ /@styleId@/: a style ID. -}
    -> m (Maybe T.Text)
    {- ^ __Returns:__ the ID of the style to use if the
specified /@styleId@/ is not present in the current style scheme or 'Nothing'
if the style has no fallback defined.
The returned string is owned by the /@language@/ and must not be modified. -}
languageGetStyleFallback language styleId = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    styleId' <- textToCString styleId
    result <- gtk_source_language_get_style_fallback language' styleId'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- cstringToText result'
        return result''
    touchManagedPtr language
    freeMem styleId'
    return maybeResult

#if ENABLE_OVERLOADING
data LanguageGetStyleFallbackMethodInfo
instance (signature ~ (T.Text -> m (Maybe T.Text)), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetStyleFallbackMethodInfo a signature where
    overloadedMethod _ = languageGetStyleFallback

#endif

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

foreign import ccall "gtk_source_language_get_style_ids" gtk_source_language_get_style_ids ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    IO (Ptr CString)

{- |
Returns the ids of the styles defined by this /@language@/.
-}
languageGetStyleIds ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language'. -}
    -> m (Maybe [T.Text])
    {- ^ __Returns:__ 
a newly-allocated 'Nothing' terminated array containing ids of the
styles defined by this /@language@/ or 'Nothing' if no style is defined.
The returned array must be freed with 'GI.GLib.Functions.strfreev'. -}
languageGetStyleIds language = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    result <- gtk_source_language_get_style_ids language'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- unpackZeroTerminatedUTF8CArray result'
        mapZeroTerminatedCArray freeMem result'
        freeMem result'
        return result''
    touchManagedPtr language
    return maybeResult

#if ENABLE_OVERLOADING
data LanguageGetStyleIdsMethodInfo
instance (signature ~ (m (Maybe [T.Text])), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetStyleIdsMethodInfo a signature where
    overloadedMethod _ = languageGetStyleIds

#endif

-- method Language::get_style_name
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "language", argType = TInterface (Name {namespace = "GtkSource", name = "Language"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GtkSourceLanguage.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "style_id", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a style ID.", 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 "gtk_source_language_get_style_name" gtk_source_language_get_style_name ::
    Ptr Language ->                         -- language : TInterface (Name {namespace = "GtkSource", name = "Language"})
    CString ->                              -- style_id : TBasicType TUTF8
    IO CString

{- |
Returns the name of the style with ID /@styleId@/ defined by this /@language@/.
-}
languageGetStyleName ::
    (B.CallStack.HasCallStack, MonadIO m, IsLanguage a) =>
    a
    {- ^ /@language@/: a 'GI.GtkSource.Objects.Language.Language'. -}
    -> T.Text
    {- ^ /@styleId@/: a style ID. -}
    -> m (Maybe T.Text)
    {- ^ __Returns:__ the name of the style with ID /@styleId@/
defined by this /@language@/ or 'Nothing' if the style has no name or there is no
style with ID /@styleId@/ defined by this /@language@/.
The returned string is owned by the /@language@/ and must not be modified. -}
languageGetStyleName language styleId = liftIO $ do
    language' <- unsafeManagedPtrCastPtr language
    styleId' <- textToCString styleId
    result <- gtk_source_language_get_style_name language' styleId'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- cstringToText result'
        return result''
    touchManagedPtr language
    freeMem styleId'
    return maybeResult

#if ENABLE_OVERLOADING
data LanguageGetStyleNameMethodInfo
instance (signature ~ (T.Text -> m (Maybe T.Text)), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetStyleNameMethodInfo a signature where
    overloadedMethod _ = languageGetStyleName

#endif