98 lines
3.6 KiB
Python
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
|