Files
anb_python_components/anb_python_components/extensions/string_extension.py
2025-10-01 23:10:49 +03:00

98 lines
3.6 KiB
Python

# anb_python_components/extensions/string_extension.py
from string_extension_constant import StringExtensionConstants
class StringExtension:
"""
Расширение строк.
"""
def __init__(self):
"""
Конструктор.
"""
pass
@classmethod
def is_null_or_empty(cls, text: str) -> bool:
"""
Проверяет, пуста ли строка.
:param text: Проверяемая строка.
:return: Результат проверки.
"""
return text is None or text == ""
@classmethod
def is_null_or_whitespace(cls, text: str) -> bool:
"""
Проверяет, пуста ли строка, содержит ли вместо текста только пробелы.
:param text: Проверяемая строка.
:return: Bool Результат проверки.
"""
return cls.is_null_or_empty(text) or text.strip() == ''
@classmethod
def is_russian_letter(cls, letter: str) -> bool:
"""
Проверяет, является ли символ русским буквой.
:param letter: Проверяемый символ.
:return: Результат проверки.
"""
return letter in StringExtensionConstants.russian_letters
@classmethod
def get_russian_letter_transliteration(cls, letter: str) -> bool | None:
"""
Получаю транслитерированную букву русского алфавита.
:param letter: Буква русского алфавита.
:return: Транслитерированная буква.
"""
# Если размерность массивов разная
if (len(StringExtensionConstants.russian_letters) !=
len(StringExtensionConstants.russian_letters_transliteration)):
# - то вывожу ошибку
return None
# Получаю индекс буквы
ind = StringExtensionConstants.russian_letters.find(letter)
# Если индекс буквы не найден
if ind == -1:
# - то вывожу ошибку
return None
# Получаю транслитерированную букву
return StringExtensionConstants.russian_letters[ind]
@classmethod
def convert_to_latin(cls, source: str) -> str:
"""
Конвертация в латиницу.
:param source: Исходная строка.
:return: Результат перевода.
"""
# Создаю результат
result = ""
# Получаю длину строкиДля каждой буквы или символа из слова
for i, letter in enumerate(source):
if cls.is_russian_letter(letter):
# - транслитерирую эту букву
result_transliteration = cls.get_russian_letter_transliteration(letter)
# - если транслитерация не удалась
if result_transliteration is None:
# -- вывожу оригинальную букву
result += letter
else:
# -- вывожу транслитерированную букву
result += result_transliteration
else:
# - иначе вывожу букву или символ
result += letter
# Вывожу результат
return result