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

module GI.GtkSource.Objects.Language
    ( 

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


 -- * Methods
-- ** getGlobs #method:getGlobs#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetGlobsMethodInfo              ,
#endif
    languageGetGlobs                        ,


-- ** getHidden #method:getHidden#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetHiddenMethodInfo             ,
#endif
    languageGetHidden                       ,


-- ** getId #method:getId#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetIdMethodInfo                 ,
#endif
    languageGetId                           ,


-- ** getMetadata #method:getMetadata#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetMetadataMethodInfo           ,
#endif
    languageGetMetadata                     ,


-- ** getMimeTypes #method:getMimeTypes#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetMimeTypesMethodInfo          ,
#endif
    languageGetMimeTypes                    ,


-- ** getName #method:getName#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetNameMethodInfo               ,
#endif
    languageGetName                         ,


-- ** getSection #method:getSection#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetSectionMethodInfo            ,
#endif
    languageGetSection                      ,


-- ** getStyleFallback #method:getStyleFallback#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetStyleFallbackMethodInfo      ,
#endif
    languageGetStyleFallback                ,


-- ** getStyleIds #method:getStyleIds#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetStyleIdsMethodInfo           ,
#endif
    languageGetStyleIds                     ,


-- ** getStyleName #method:getStyleName#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageGetStyleNameMethodInfo          ,
#endif
    languageGetStyleName                    ,




 -- * Properties
-- ** hidden #attr:hidden#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageHiddenPropertyInfo              ,
#endif
    getLanguageHidden                       ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    languageHidden                          ,
#endif


-- ** id #attr:id#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageIdPropertyInfo                  ,
#endif
    getLanguageId                           ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    languageId                              ,
#endif


-- ** name #attr:name#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageNamePropertyInfo                ,
#endif
    getLanguageName                         ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    languageName                            ,
#endif


-- ** section #attr:section#
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    LanguageSectionPropertyInfo             ,
#endif
    getLanguageSection                      ,
#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
    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.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP

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

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
    

class GObject o => IsLanguage o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError Language a) =>
    IsLanguage a
#endif
instance IsLanguage Language
instance GObject.Object.IsObject Language

toLanguage :: (MonadIO m, IsLanguage o) => o -> m Language
toLanguage = liftIO . unsafeCastTo Language

noLanguage :: Maybe Language
noLanguage = Nothing

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 "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 "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveLanguageMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    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) => O.IsLabelProxy t (Language -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

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

#endif

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

getLanguageHidden :: (MonadIO m, IsLanguage o) => o -> m Bool
getLanguageHidden obj = liftIO $ getObjectPropertyBool obj "hidden"

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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)

getLanguageId :: (MonadIO m, IsLanguage o) => o -> m T.Text
getLanguageId obj = liftIO $ checkUnexpectedNothing "getLanguageId" $ getObjectPropertyString obj "id"

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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)

getLanguageName :: (MonadIO m, IsLanguage o) => o -> m T.Text
getLanguageName obj = liftIO $ checkUnexpectedNothing "getLanguageName" $ getObjectPropertyString obj "name"

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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)

getLanguageSection :: (MonadIO m, IsLanguage o) => o -> m T.Text
getLanguageSection obj = liftIO $ checkUnexpectedNothing "getLanguageSection" $ getObjectPropertyString obj "section"

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
instance O.HasAttributeList Language
type instance O.AttributeList Language = LanguageAttributeList
type LanguageAttributeList = ('[ '("hidden", LanguageHiddenPropertyInfo), '("id", LanguageIdPropertyInfo), '("name", LanguageNamePropertyInfo), '("section", LanguageSectionPropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
languageHidden :: AttrLabelProxy "hidden"
languageHidden = AttrLabelProxy

languageId :: AttrLabelProxy "id"
languageId = AttrLabelProxy

languageName :: AttrLabelProxy "name"
languageName = AttrLabelProxy

languageSection :: AttrLabelProxy "section"
languageSection = AttrLabelProxy

#endif

#if defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
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 defined(ENABLE_OVERLOADING) && !defined(__HADDOCK_VERSION__)
data LanguageGetStyleNameMethodInfo
instance (signature ~ (T.Text -> m (Maybe T.Text)), MonadIO m, IsLanguage a) => O.MethodInfo LanguageGetStyleNameMethodInfo a signature where
    overloadedMethod _ = languageGetStyleName

#endif