def transform_i_to_j_optional(self, line: str) -> str: """Sometimes for the demands of meter a more permissive i to j transformation is warranted. :param line: :return: >>> print(HexameterScanner().transform_i_to_j_optional("Italiam")) Italjam >>> print(HexameterScanner().transform_i_to_j_optional("Lāvīniaque")) Lāvīnjaque >>> print(HexameterScanner().transform_i_to_j_optional("omnium")) omnjum """ words = line.split(" ") space_list = StringUtils.space_list(line) corrected_words = [] for word in words: found = False for prefix in self.constants.PREFIXES: if word.startswith(prefix) and word != prefix: corrected_words.append( self.syllabifier.convert_consonantal_i(prefix)) corrected_words.append( self.syllabifier.convert_consonantal_i( word[len(prefix):])) found = True break if not found: corrected_words.append( self.syllabifier.convert_consonantal_i(word)) new_line = StringUtils.join_syllables_spaces(corrected_words, space_list) # the following two may be tunable and subject to improvement char_list = StringUtils.overwrite( list(new_line), "[bcdfgjkmpqrstvwxzBCDFGHJKMPQRSTVWXZ][i][{}]".format( self.constants.VOWELS_WO_I), "j", 1) char_list = StringUtils.overwrite( char_list, "[{}][iI][{}]".format(self.constants.LIQUIDS, self.constants.VOWELS_WO_I), "j", 1) return "".join(char_list)
def transform_i_to_j(self, line: str) -> str: """Transform instances of consonantal i to j :param line: :return: >>> print(HexameterScanner().transform_i_to_j("iactātus")) jactātus >>> print(HexameterScanner().transform_i_to_j("bracchia")) bracchia """ words = line.split(" ") space_list = StringUtils.space_list(line) corrected_words = [] for word in words: found = False for prefix in self.constants.PREFIXES: if word.startswith(prefix) and word != prefix: corrected_words.append( self.syllabifier.convert_consonantal_i(prefix)) corrected_words.append( self.syllabifier.convert_consonantal_i( word[len(prefix):])) found = True break if not found: corrected_words.append( self.syllabifier.convert_consonantal_i(word)) new_line = StringUtils.join_syllables_spaces(corrected_words, space_list) char_list = StringUtils.overwrite( list(new_line), r"\b[iī][{}]".format(self.constants.VOWELS + self.constants.ACCENTED_VOWELS), "j") char_list = StringUtils.overwrite( char_list, r"\b[I][{}]".format(self.constants.VOWELS_WO_I), "J") char_list = StringUtils.overwrite( char_list, r"[{}][i][{}]".format(self.constants.VOWELS_WO_I, self.constants.VOWELS), "j", 1) return "".join(char_list)
def transform_i_to_j_optional(self, line: str) -> str: """Sometimes for the demands of meter a more permissive i to j transformation is warranted. :param line: :return: >>> print(VerseScanner().transform_i_to_j_optional("Italiam")) Italjam >>> print(VerseScanner().transform_i_to_j_optional("Lāvīniaque")) Lāvīnjaque >>> print(VerseScanner().transform_i_to_j_optional("omnium")) omnjum """ words = line.split(" ") space_list = StringUtils.space_list(line) corrected_words = [] for word in words: found = False for prefix in self.constants.PREFIXES: if word.startswith(prefix) and word != prefix: corrected_words.append(self.syllabifier.convert_consonantal_i(prefix)) corrected_words.append( self.syllabifier.convert_consonantal_i(word[len(prefix):])) found = True break if not found: corrected_words.append(self.syllabifier.convert_consonantal_i(word)) new_line = StringUtils.join_syllables_spaces(corrected_words, space_list) # the following two may be tunable and subject to improvement char_list = StringUtils.overwrite(list(new_line), "[bcdfgjkmpqrstvwxzBCDFGHJKMPQRSTVWXZ][i][{}]".format( self.constants.VOWELS_WO_I), "j", 1) char_list = StringUtils.overwrite(char_list, "[{}][iI][{}]".format(self.constants.LIQUIDS, self.constants.VOWELS_WO_I), "j", 1) return "".join(char_list)
def transform_i_to_j(self, line: str) -> str: """Transform instances of consonantal i to j :param line: :return: >>> print(VerseScanner().transform_i_to_j("iactātus")) jactātus >>> print(VerseScanner().transform_i_to_j("bracchia")) bracchia """ words = line.split(" ") space_list = StringUtils.space_list(line) corrected_words = [] for word in words: found = False for prefix in self.constants.PREFIXES: if word.startswith(prefix) and word != prefix: corrected_words.append(self.syllabifier.convert_consonantal_i(prefix)) corrected_words.append( self.syllabifier.convert_consonantal_i(word[len(prefix):])) found = True break if not found: corrected_words.append(self.syllabifier.convert_consonantal_i(word)) new_line = StringUtils.join_syllables_spaces(corrected_words, space_list) char_list = StringUtils.overwrite(list(new_line), r"\b[iī][{}]".format( self.constants.VOWELS + self.constants.ACCENTED_VOWELS), "j") char_list = StringUtils.overwrite(char_list, r"\b[I][{}]".format(self.constants.VOWELS_WO_I), "J") char_list = StringUtils.overwrite(char_list, r"[{}][i][{}]".format( self.constants.VOWELS_WO_I, self.constants.VOWELS), "j", 1) return "".join(char_list)