//! This file has been automatically generated by `objc2`'s `header-translator`.
//! DO NOT EDIT
use objc2::__framework_prelude::*;

use crate::*;

// NS_TYPED_EXTENSIBLE_ENUM
#[cfg(feature = "NSString")]
pub type NSLinguisticTagScheme = NSString;

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagSchemeTokenType: &'static NSLinguisticTagScheme;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagSchemeLexicalClass: &'static NSLinguisticTagScheme;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagSchemeNameType: &'static NSLinguisticTagScheme;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagSchemeNameTypeOrLexicalClass: &'static NSLinguisticTagScheme;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagSchemeLemma: &'static NSLinguisticTagScheme;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagSchemeLanguage: &'static NSLinguisticTagScheme;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagSchemeScript: &'static NSLinguisticTagScheme;
}

// NS_TYPED_EXTENSIBLE_ENUM
#[cfg(feature = "NSString")]
pub type NSLinguisticTag = NSString;

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagWord: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagPunctuation: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagWhitespace: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagOther: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagNoun: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagVerb: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagAdjective: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagAdverb: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagPronoun: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagDeterminer: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagParticle: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagPreposition: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagNumber: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagConjunction: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagInterjection: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagClassifier: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagIdiom: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagOtherWord: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagSentenceTerminator: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagOpenQuote: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagCloseQuote: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagOpenParenthesis: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagCloseParenthesis: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagWordJoiner: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagDash: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagOtherPunctuation: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagParagraphBreak: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagOtherWhitespace: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagPersonalName: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagPlaceName: &'static NSLinguisticTag;
}

extern "C" {
    #[cfg(feature = "NSString")]
    pub static NSLinguisticTagOrganizationName: &'static NSLinguisticTag;
}

// NS_ENUM
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSLinguisticTaggerUnit(pub NSInteger);
impl NSLinguisticTaggerUnit {
    #[doc(alias = "NSLinguisticTaggerUnitWord")]
    pub const Word: Self = Self(0);
    #[doc(alias = "NSLinguisticTaggerUnitSentence")]
    pub const Sentence: Self = Self(1);
    #[doc(alias = "NSLinguisticTaggerUnitParagraph")]
    pub const Paragraph: Self = Self(2);
    #[doc(alias = "NSLinguisticTaggerUnitDocument")]
    pub const Document: Self = Self(3);
}

unsafe impl Encode for NSLinguisticTaggerUnit {
    const ENCODING: Encoding = NSInteger::ENCODING;
}

unsafe impl RefEncode for NSLinguisticTaggerUnit {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

// NS_OPTIONS
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct NSLinguisticTaggerOptions(pub NSUInteger);
bitflags::bitflags! {
    impl NSLinguisticTaggerOptions: NSUInteger {
        const NSLinguisticTaggerOmitWords = 1<<0;
        const NSLinguisticTaggerOmitPunctuation = 1<<1;
        const NSLinguisticTaggerOmitWhitespace = 1<<2;
        const NSLinguisticTaggerOmitOther = 1<<3;
        const NSLinguisticTaggerJoinNames = 1<<4;
    }
}

unsafe impl Encode for NSLinguisticTaggerOptions {
    const ENCODING: Encoding = NSUInteger::ENCODING;
}

unsafe impl RefEncode for NSLinguisticTaggerOptions {
    const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}

extern_class!(
    #[derive(Debug, PartialEq, Eq, Hash)]
    #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
    pub struct NSLinguisticTagger;

    unsafe impl ClassType for NSLinguisticTagger {
        type Super = NSObject;
        type Mutability = InteriorMutable;
    }
);

unsafe impl NSObjectProtocol for NSLinguisticTagger {}

extern_methods!(
    unsafe impl NSLinguisticTagger {
        #[cfg(all(feature = "NSArray", feature = "NSString"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Init initWithTagSchemes:options:)]
        pub unsafe fn initWithTagSchemes_options(
            this: Allocated<Self>,
            tag_schemes: &NSArray<NSLinguisticTagScheme>,
            opts: NSUInteger,
        ) -> Retained<Self>;

        #[cfg(all(feature = "NSArray", feature = "NSString"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other tagSchemes)]
        pub unsafe fn tagSchemes(&self) -> Retained<NSArray<NSLinguisticTagScheme>>;

        #[cfg(feature = "NSString")]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other string)]
        pub unsafe fn string(&self) -> Option<Retained<NSString>>;

        #[cfg(feature = "NSString")]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method(setString:)]
        pub unsafe fn setString(&self, string: Option<&NSString>);

        #[cfg(all(feature = "NSArray", feature = "NSString"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other availableTagSchemesForUnit:language:)]
        pub unsafe fn availableTagSchemesForUnit_language(
            unit: NSLinguisticTaggerUnit,
            language: &NSString,
        ) -> Retained<NSArray<NSLinguisticTagScheme>>;

        #[cfg(all(feature = "NSArray", feature = "NSString"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other availableTagSchemesForLanguage:)]
        pub unsafe fn availableTagSchemesForLanguage(
            language: &NSString,
        ) -> Retained<NSArray<NSLinguisticTagScheme>>;

        #[cfg(all(feature = "NSOrthography", feature = "NSRange"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method(setOrthography:range:)]
        pub unsafe fn setOrthography_range(
            &self,
            orthography: Option<&NSOrthography>,
            range: NSRange,
        );

        #[cfg(all(feature = "NSOrthography", feature = "NSRange"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other orthographyAtIndex:effectiveRange:)]
        pub unsafe fn orthographyAtIndex_effectiveRange(
            &self,
            char_index: NSUInteger,
            effective_range: NSRangePointer,
        ) -> Option<Retained<NSOrthography>>;

        #[cfg(feature = "NSRange")]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method(stringEditedInRange:changeInLength:)]
        pub unsafe fn stringEditedInRange_changeInLength(
            &self,
            new_range: NSRange,
            delta: NSInteger,
        );

        #[cfg(feature = "NSRange")]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method(tokenRangeAtIndex:unit:)]
        pub unsafe fn tokenRangeAtIndex_unit(
            &self,
            char_index: NSUInteger,
            unit: NSLinguisticTaggerUnit,
        ) -> NSRange;

        #[cfg(feature = "NSRange")]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method(sentenceRangeForRange:)]
        pub unsafe fn sentenceRangeForRange(&self, range: NSRange) -> NSRange;

        #[cfg(all(feature = "NSRange", feature = "NSString", feature = "block2"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method(enumerateTagsInRange:unit:scheme:options:usingBlock:)]
        pub unsafe fn enumerateTagsInRange_unit_scheme_options_usingBlock(
            &self,
            range: NSRange,
            unit: NSLinguisticTaggerUnit,
            scheme: &NSLinguisticTagScheme,
            options: NSLinguisticTaggerOptions,
            block: &block2::Block<dyn Fn(*mut NSLinguisticTag, NSRange, NonNull<Bool>) + '_>,
        );

        #[cfg(all(feature = "NSRange", feature = "NSString"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other tagAtIndex:unit:scheme:tokenRange:)]
        pub unsafe fn tagAtIndex_unit_scheme_tokenRange(
            &self,
            char_index: NSUInteger,
            unit: NSLinguisticTaggerUnit,
            scheme: &NSLinguisticTagScheme,
            token_range: NSRangePointer,
        ) -> Option<Retained<NSLinguisticTag>>;

        #[cfg(all(
            feature = "NSArray",
            feature = "NSRange",
            feature = "NSString",
            feature = "NSValue"
        ))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other tagsInRange:unit:scheme:options:tokenRanges:)]
        pub unsafe fn tagsInRange_unit_scheme_options_tokenRanges(
            &self,
            range: NSRange,
            unit: NSLinguisticTaggerUnit,
            scheme: &NSLinguisticTagScheme,
            options: NSLinguisticTaggerOptions,
            token_ranges: Option<&mut Option<Retained<NSArray<NSValue>>>>,
        ) -> Retained<NSArray<NSLinguisticTag>>;

        #[cfg(all(feature = "NSRange", feature = "NSString", feature = "block2"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method(enumerateTagsInRange:scheme:options:usingBlock:)]
        pub unsafe fn enumerateTagsInRange_scheme_options_usingBlock(
            &self,
            range: NSRange,
            tag_scheme: &NSLinguisticTagScheme,
            opts: NSLinguisticTaggerOptions,
            block: &block2::Block<
                dyn Fn(*mut NSLinguisticTag, NSRange, NSRange, NonNull<Bool>) + '_,
            >,
        );

        #[cfg(all(feature = "NSRange", feature = "NSString"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other tagAtIndex:scheme:tokenRange:sentenceRange:)]
        pub unsafe fn tagAtIndex_scheme_tokenRange_sentenceRange(
            &self,
            char_index: NSUInteger,
            scheme: &NSLinguisticTagScheme,
            token_range: NSRangePointer,
            sentence_range: NSRangePointer,
        ) -> Option<Retained<NSLinguisticTag>>;

        #[cfg(all(
            feature = "NSArray",
            feature = "NSRange",
            feature = "NSString",
            feature = "NSValue"
        ))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other tagsInRange:scheme:options:tokenRanges:)]
        pub unsafe fn tagsInRange_scheme_options_tokenRanges(
            &self,
            range: NSRange,
            tag_scheme: &NSString,
            opts: NSLinguisticTaggerOptions,
            token_ranges: Option<&mut Option<Retained<NSArray<NSValue>>>>,
        ) -> Retained<NSArray<NSString>>;

        #[cfg(feature = "NSString")]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other dominantLanguage)]
        pub unsafe fn dominantLanguage(&self) -> Option<Retained<NSString>>;

        #[cfg(feature = "NSString")]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other dominantLanguageForString:)]
        pub unsafe fn dominantLanguageForString(string: &NSString) -> Option<Retained<NSString>>;

        #[cfg(all(feature = "NSOrthography", feature = "NSRange", feature = "NSString"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other tagForString:atIndex:unit:scheme:orthography:tokenRange:)]
        pub unsafe fn tagForString_atIndex_unit_scheme_orthography_tokenRange(
            string: &NSString,
            char_index: NSUInteger,
            unit: NSLinguisticTaggerUnit,
            scheme: &NSLinguisticTagScheme,
            orthography: Option<&NSOrthography>,
            token_range: NSRangePointer,
        ) -> Option<Retained<NSLinguisticTag>>;

        #[cfg(all(
            feature = "NSArray",
            feature = "NSOrthography",
            feature = "NSRange",
            feature = "NSString",
            feature = "NSValue"
        ))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other tagsForString:range:unit:scheme:options:orthography:tokenRanges:)]
        pub unsafe fn tagsForString_range_unit_scheme_options_orthography_tokenRanges(
            string: &NSString,
            range: NSRange,
            unit: NSLinguisticTaggerUnit,
            scheme: &NSLinguisticTagScheme,
            options: NSLinguisticTaggerOptions,
            orthography: Option<&NSOrthography>,
            token_ranges: Option<&mut Option<Retained<NSArray<NSValue>>>>,
        ) -> Retained<NSArray<NSLinguisticTag>>;

        #[cfg(all(
            feature = "NSOrthography",
            feature = "NSRange",
            feature = "NSString",
            feature = "block2"
        ))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method(enumerateTagsForString:range:unit:scheme:options:orthography:usingBlock:)]
        pub unsafe fn enumerateTagsForString_range_unit_scheme_options_orthography_usingBlock(
            string: &NSString,
            range: NSRange,
            unit: NSLinguisticTaggerUnit,
            scheme: &NSLinguisticTagScheme,
            options: NSLinguisticTaggerOptions,
            orthography: Option<&NSOrthography>,
            block: &block2::Block<dyn Fn(*mut NSLinguisticTag, NSRange, NonNull<Bool>) + '_>,
        );

        #[cfg(all(
            feature = "NSArray",
            feature = "NSRange",
            feature = "NSString",
            feature = "NSValue"
        ))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other possibleTagsAtIndex:scheme:tokenRange:sentenceRange:scores:)]
        pub unsafe fn possibleTagsAtIndex_scheme_tokenRange_sentenceRange_scores(
            &self,
            char_index: NSUInteger,
            tag_scheme: &NSString,
            token_range: NSRangePointer,
            sentence_range: NSRangePointer,
            scores: Option<&mut Option<Retained<NSArray<NSValue>>>>,
        ) -> Option<Retained<NSArray<NSString>>>;
    }
);

extern_methods!(
    /// Methods declared on superclass `NSObject`
    unsafe impl NSLinguisticTagger {
        #[method_id(@__retain_semantics Init init)]
        pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>;

        #[method_id(@__retain_semantics New new)]
        pub unsafe fn new() -> Retained<Self>;
    }
);

extern_methods!(
    /// NSLinguisticAnalysis
    #[cfg(feature = "NSString")]
    unsafe impl NSString {
        #[cfg(all(
            feature = "NSArray",
            feature = "NSOrthography",
            feature = "NSRange",
            feature = "NSValue"
        ))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method_id(@__retain_semantics Other linguisticTagsInRange:scheme:options:orthography:tokenRanges:)]
        pub unsafe fn linguisticTagsInRange_scheme_options_orthography_tokenRanges(
            &self,
            range: NSRange,
            scheme: &NSLinguisticTagScheme,
            options: NSLinguisticTaggerOptions,
            orthography: Option<&NSOrthography>,
            token_ranges: Option<&mut Option<Retained<NSArray<NSValue>>>>,
        ) -> Retained<NSArray<NSLinguisticTag>>;

        #[cfg(all(feature = "NSOrthography", feature = "NSRange", feature = "block2"))]
        #[deprecated = "All NSLinguisticTagger API should be replaced with NaturalLanguage.framework API"]
        #[method(enumerateLinguisticTagsInRange:scheme:options:orthography:usingBlock:)]
        pub unsafe fn enumerateLinguisticTagsInRange_scheme_options_orthography_usingBlock(
            &self,
            range: NSRange,
            scheme: &NSLinguisticTagScheme,
            options: NSLinguisticTaggerOptions,
            orthography: Option<&NSOrthography>,
            block: &block2::Block<
                dyn Fn(*mut NSLinguisticTag, NSRange, NSRange, NonNull<Bool>) + '_,
            >,
        );
    }
);
