mod: +приоритет языков (ru+en -- кто первый, у того и приоритет)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
|
# etpgrf/comutil.py
|
||||||
# Общие функции для типографа etpgrf
|
# Общие функции для типографа etpgrf
|
||||||
from etpgrf.config import MODE_UNICODE, MODE_MNEMONIC, MODE_MIXED, SUPPORTED_LANGS
|
from etpgrf.config import MODE_UNICODE, MODE_MNEMONIC, MODE_MIXED, SUPPORTED_LANGS, DEFAULT_LANGS
|
||||||
from etpgrf.defaults import etpgrf_settings
|
from etpgrf.defaults import etpgrf_settings
|
||||||
import os
|
import os
|
||||||
import regex
|
import regex
|
||||||
@@ -37,7 +38,7 @@ def parse_and_validate_mode(
|
|||||||
|
|
||||||
def parse_and_validate_langs(
|
def parse_and_validate_langs(
|
||||||
langs: str | list[str] | tuple[str, ...] | frozenset[str] | None = None,
|
langs: str | list[str] | tuple[str, ...] | frozenset[str] | None = None,
|
||||||
) -> frozenset[str]:
|
) -> list[str]:
|
||||||
"""
|
"""
|
||||||
Обрабатывает и валидирует входной параметр языков.
|
Обрабатывает и валидирует входной параметр языков.
|
||||||
Если langs_input не предоставлен (None), используются языки по умолчанию
|
Если langs_input не предоставлен (None), используются языки по умолчанию
|
||||||
@@ -57,11 +58,9 @@ def parse_and_validate_langs(
|
|||||||
if env_default_langs:
|
if env_default_langs:
|
||||||
# Нашли язык для библиотеки в переменных окружения
|
# Нашли язык для библиотеки в переменных окружения
|
||||||
_langs = env_default_langs
|
_langs = env_default_langs
|
||||||
# print(f"Using ETPGRF_DEFAULT_LANGS from environment: {env_default_langs}") # Для отладки
|
|
||||||
else:
|
else:
|
||||||
# Если в переменной окружения нет, используем то что есть в конфиге `etpgrf/config.py`
|
# Если в переменной окружения нет, используем то, что есть в конфиге `etpgrf/config.py`
|
||||||
_langs = etpgrf_settings.DEFAULT_LANGS
|
_langs = DEFAULT_LANGS
|
||||||
# print(f"Using library internal default langs: {DEFAULT_LANGS}") # Для отладки
|
|
||||||
|
|
||||||
if isinstance(_langs, str):
|
if isinstance(_langs, str):
|
||||||
# Разделяем строку по любым небуквенным символам, приводим к нижнему регистру
|
# Разделяем строку по любым небуквенным символам, приводим к нижнему регистру
|
||||||
@@ -80,20 +79,22 @@ def parse_and_validate_langs(
|
|||||||
"etpgrf: параметр 'langs' не может быть пустым или приводить к пустому списку языков после обработки."
|
"etpgrf: параметр 'langs' не может быть пустым или приводить к пустому списку языков после обработки."
|
||||||
)
|
)
|
||||||
|
|
||||||
validated_langs_set = set()
|
# Валидируем языки, сохраняя порядок и удаляя дубликаты
|
||||||
|
validated_langs = []
|
||||||
|
seen_langs = set()
|
||||||
for code in parsed_lang_codes_list:
|
for code in parsed_lang_codes_list:
|
||||||
if code not in SUPPORTED_LANGS:
|
if code not in SUPPORTED_LANGS:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"etpgrf: код языка '{code}' не поддерживается. Поддерживаемые языки: {list(SUPPORTED_LANGS)}"
|
f"etpgrf: код языка '{code}' не поддерживается. Поддерживаемые языки: {list(SUPPORTED_LANGS)}"
|
||||||
)
|
)
|
||||||
validated_langs_set.add(code)
|
if code not in seen_langs:
|
||||||
|
validated_langs.append(code)
|
||||||
|
seen_langs.add(code)
|
||||||
|
|
||||||
# Эта проверка на случай если parsed_lang_codes_list был не пуст, но все коды оказались невалидными
|
if not validated_langs:
|
||||||
# (хотя предыдущее исключение должно было сработать раньше для каждого невалидного кода).
|
|
||||||
if not validated_langs_set:
|
|
||||||
raise ValueError("etpgrf: не предоставлено ни одного валидного кода языка.")
|
raise ValueError("etpgrf: не предоставлено ни одного валидного кода языка.")
|
||||||
|
|
||||||
return frozenset(validated_langs_set)
|
return validated_langs
|
||||||
|
|
||||||
|
|
||||||
def is_inside_unbreakable_segment(
|
def is_inside_unbreakable_segment(
|
||||||
@@ -137,4 +138,3 @@ def is_inside_unbreakable_segment(
|
|||||||
# Нашли 'unbreakable', и split_index находится внутри него.
|
# Нашли 'unbreakable', и split_index находится внутри него.
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user