def startWithVowelorConsonantDrops(self) -> bool:
     if TurkishLanguage.isConsonantDrop(self.withFirstChar()) and self.__with != "ylA" and self.__with != "ysA" \
             and self.__with != "ymHs" and self.__with != "yDH" and self.__with != "yken":
         return True
     if self.withFirstChar() == "A" or self.withFirstChar(
     ) == "H" or TurkishLanguage.isVowel(self.withFirstChar()):
         return True
     return False
    def __startWithVowelorConsonantDrops(self) -> bool:
        """
        The startWithVowelorConsonantDrops method checks for some cases. If the first character of with variable is
        "nsy", and with variable does not equal to one of the Strings; "ylA, ysA, ymHs, yDH, yken", it returns true. If

        Or, if the first character of with variable is 'A, H: or any other vowels, it returns true.

        RETURNS
        -------
        bool
            True if it starts with vowel or consonant drops, false otherwise.
        """
        if TurkishLanguage.isConsonantDrop(self.__withFirstChar()) and self.__with != "ylA" and self.__with != "ysA" \
                and self.__with != "ymHs" and self.__with != "yDH" and self.__with != "yken":
            return True
        if self.__withFirstChar() == "A" or self.__withFirstChar() == "H" or \
                TurkishLanguage.isVowel(self.__withFirstChar()):
            return True
        return False
 def makeTransition(self, root: TxtWord, stem: str, startState: State) -> str:
     rootWord = root.getName() == stem or (root.getName() + "'") == stem
     formation = stem
     i = 0
     if self.__with == "0":
         return stem
     if (stem == "bu" or stem == "şu" or stem == "o") and rootWord and self.__with == "ylA":
         return stem + "nunla"
     if self.__with == "yA":
         if stem == "ben":
             return "bana"
     self.__formationToCheck = stem
     if rootWord and self.__withFirstChar() == "y" and root.vowelEChangesToIDuringYSuffixation() \
             and self.__with[1] != "H":
         formation = stem[:len(stem) - 1] + "i"
         self.__formationToCheck = formation
     else:
         if rootWord and (self.__with == "Hl" or self.__with == "Hn") and root.lastIdropsDuringPassiveSuffixation():
             formation = stem[:len(stem) - 2] + stem[len(stem) - 1]
             self.__formationToCheck = stem
         else:
             if rootWord and root.showsSuRegularities() and self.__startWithVowelorConsonantDrops() and \
                     not self.__with.startswith("y"):
                 formation = stem + 'y'
                 self.__formationToCheck = formation
             else:
                 if rootWord and root.duplicatesDuringSuffixation() and TurkishLanguage.isConsonantDrop(
                         self.__with[0]):
                     if self.softenDuringSuffixation(root):
                         if self.__lastPhoneme(stem) == "p":
                             formation = stem[:len(stem) - 1] + "bb"
                         elif self.__lastPhoneme(stem) == "t":
                             formation = stem[:len(stem) - 1] + "dd"
                     else:
                         formation = stem + stem[len(stem) - 1]
                     self.__formationToCheck = formation
                 else:
                     if rootWord and root.lastIdropsDuringSuffixation() and \
                             not startState.getName().startswith(
                                 "VerbalRoot") and not startState.getName().startswith("ProperRoot") \
                             and self.__startWithVowelorConsonantDrops():
                         if self.softenDuringSuffixation(root):
                             if self.__lastPhoneme(stem) == "p":
                                 formation = stem[:len(stem) - 2] + 'b'
                             elif self.__lastPhoneme(stem) == "t":
                                 formation = stem[:len(stem) - 2] + 'd'
                             elif self.__lastPhoneme(stem) == "ç":
                                 formation = stem[:len(stem) - 2] + 'c'
                         else:
                             formation = stem[:len(stem) - 2] + stem[len(stem) - 1]
                         self.__formationToCheck = stem
                     else:
                         if self.__lastPhoneme(stem) == "p":
                             if self.__startWithVowelorConsonantDrops() and rootWord and \
                                     self.softenDuringSuffixation(root):
                                 formation = stem[:len(stem) - 1] + 'b'
                         elif self.__lastPhoneme(stem) == "t":
                             if self.__startWithVowelorConsonantDrops() and rootWord and \
                                     self.softenDuringSuffixation(root):
                                 formation = stem[:len(stem) - 1] + 'd'
                         elif self.__lastPhoneme(stem) == "ç":
                             if self.__startWithVowelorConsonantDrops() and rootWord and \
                                     self.softenDuringSuffixation(root):
                                 formation = stem[:len(stem) - 1] + 'c'
                         elif self.__lastPhoneme(stem) == "g":
                             if self.__startWithVowelorConsonantDrops() and rootWord and \
                                     self.softenDuringSuffixation(root):
                                 formation = stem[:len(stem) - 1] + 'ğ'
                         elif self.__lastPhoneme(stem) == "k":
                             if self.__startWithVowelorConsonantDrops() and rootWord and root.endingKChangesIntoG() \
                                     and not root.isProperNoun():
                                 formation = stem[:len(stem) - 1] + 'g'
                             else:
                                 if self.__startWithVowelorConsonantDrops() and (not rootWord or (
                                         self.softenDuringSuffixation(root) and (
                                         not root.isProperNoun() or startState.__str__() != "ProperRoot"))):
                                     formation = stem[:len(stem) - 1] + 'ğ'
                         self.__formationToCheck = formation
     if TurkishLanguage.isConsonantDrop(self.__withFirstChar()) and not TurkishLanguage.isVowel(stem[len(stem) - 1])\
             and (root.isNumeral() or root.isReal() or root.isFraction() or root.isTime() or root.isDate()
                  or root.isPercent() or root.isRange()) \
             and (root.getName().endswith("1") or root.getName().endswith("3") or root.getName().endswith("4")
                  or root.getName().endswith("5") or root.getName().endswith("8") or root.getName().endswith("9")
                  or root.getName().endswith("10") or root.getName().endswith("30") or root.getName().endswith("40")
                  or root.getName().endswith("60") or root.getName().endswith("70") or root.getName().endswith("80")
                  or root.getName().endswith("90") or root.getName().endswith("00")):
         if self.__with[0] == "'":
             formation = formation + "'"
             i = 2
         else:
             i = 1
     else:
         if (TurkishLanguage.isConsonantDrop(self.__withFirstChar()) and TurkishLanguage.isConsonant(
                 self.__lastPhoneme(stem))) or (rootWord and root.consonantSMayInsertedDuringPossesiveSuffixation()):
             if self.__with[0] == "'":
                 formation = formation + "'"
                 if root.isAbbreviation():
                     i = 1
                 else:
                     i = 2
             else:
                 i = 1
     while i < len(self.__with):
         if self.__with[i] == "D":
             formation = self.__resolveD(root, formation)
         elif self.__with[i] == "A":
             formation = self.__resolveA(root, formation, rootWord)
         elif self.__with[i] == "H":
             if self.__with[0] != "'":
                 formation = self.__resolveH(root, formation, i == 0, self.__with.startswith("Hyor"), rootWord)
             else:
                 formation = self.__resolveH(root, formation, i == 1, False, rootWord)
         elif self.__with[i] == "C":
             formation = self.__resolveC(formation)
         elif self.__with[i] == "S":
             formation = self.__resolveS(formation)
         elif self.__with[i] == "Ş":
             formation = self.__resolveSh(formation)
         else:
             if i == len(self.__with) - 1 and self.__with[i] == "s":
                 formation += "ş"
             else:
                 formation += self.__with[i]
         self.__formationToCheck = formation
         i = i + 1
     return formation