add: русская дореволюционная орфография для переносов
This commit is contained in:
parent
5390e0583e
commit
b593c0148b
@ -1,6 +1,6 @@
|
|||||||
| in progress // в процессе разработки |
|
| in progress // в процессе разработки |
|
||||||
|--------------------------------------|
|
|--------------------------------------|
|
||||||
| -----4 |
|
| ------5 |
|
||||||
|
|
||||||
# Типограф для Web
|
# Типограф для Web
|
||||||
|
|
||||||
|
@ -9,8 +9,9 @@ MODE_MIXED = "mixed"
|
|||||||
|
|
||||||
# Языки, поддерживаемые библиотекой
|
# Языки, поддерживаемые библиотекой
|
||||||
LANG_RU = 'ru' # Русский
|
LANG_RU = 'ru' # Русский
|
||||||
|
LANG_RU_OLD = 'ru-old' # Русская дореволюционная орфография
|
||||||
LANG_EN = 'en' # Английский
|
LANG_EN = 'en' # Английский
|
||||||
SUPPORTED_LANGS = frozenset([LANG_RU, LANG_EN])
|
SUPPORTED_LANGS = frozenset([LANG_RU, LANG_RU_OLD, LANG_EN])
|
||||||
# Язык(и) по умолчанию, если не указаны пользователем и не заданы через ETPGRF_DEFAULT_LANGS_MODULE
|
# Язык(и) по умолчанию, если не указаны пользователем и не заданы через ETPGRF_DEFAULT_LANGS_MODULE
|
||||||
# DEFAULT_LANGS = LANG_RU
|
# DEFAULT_LANGS = LANG_RU
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import regex
|
import regex
|
||||||
from etpgrf.config import LANG_RU, LANG_EN, SHY_ENTITIES, MODE_UNICODE
|
from etpgrf.config import LANG_RU, LANG_RU_OLD, LANG_EN, SHY_ENTITIES, MODE_UNICODE
|
||||||
from etpgrf.defaults import etpgrf_settings
|
from etpgrf.defaults import etpgrf_settings
|
||||||
from etpgrf.comutil import parse_and_validate_mode, parse_and_validate_langs
|
from etpgrf.comutil import parse_and_validate_mode, parse_and_validate_langs
|
||||||
|
|
||||||
@ -7,10 +7,10 @@ _RU_VOWELS_UPPER = frozenset(['А', 'О', 'И', 'Е', 'Ё', 'Э', 'Ы', 'У', '
|
|||||||
_RU_CONSONANTS_UPPER = frozenset(['Б', 'В', 'Г', 'Д', 'Ж', 'З', 'К', 'Л', 'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ'])
|
_RU_CONSONANTS_UPPER = frozenset(['Б', 'В', 'Г', 'Д', 'Ж', 'З', 'К', 'Л', 'М', 'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ'])
|
||||||
_RU_J_SOUND_UPPER = frozenset(['Й'])
|
_RU_J_SOUND_UPPER = frozenset(['Й'])
|
||||||
_RU_SIGNS_UPPER = frozenset(['Ь', 'Ъ'])
|
_RU_SIGNS_UPPER = frozenset(['Ь', 'Ъ'])
|
||||||
_RU_OLD_I_DESYAT = frozenset(['І']) # И-десятеричное
|
_RU_OLD_VOWELS_UPPER = frozenset(['І', # И-десятеричное (гласная)
|
||||||
_RU_OLD_YAT = frozenset(['Ѣ']) # Ять
|
'Ѣ']) # Ять (гласная)
|
||||||
_RU_OLD_FITA = frozenset(['Ѳ']) # Фита
|
_RU_OLD_CONSONANTS_UPPER = frozenset(['Ѳ', # Фита (согласная)
|
||||||
_RU_OLD_IZHITSA = frozenset(['Ѵ']) # Ижица (может быть и гласной, и согласной - сложный случай!)
|
'Ѵ']) # Ижица (может быть и гласной, и согласной - сложный случай!)
|
||||||
|
|
||||||
|
|
||||||
_EN_VOWELS_UPPER = frozenset(['A', 'E', 'I', 'O', 'U', 'Æ', 'Œ'])
|
_EN_VOWELS_UPPER = frozenset(['A', 'E', 'I', 'O', 'U', 'Æ', 'Œ'])
|
||||||
@ -51,7 +51,13 @@ class Hyphenator:
|
|||||||
self._consonants |= _RU_CONSONANTS_UPPER
|
self._consonants |= _RU_CONSONANTS_UPPER
|
||||||
self._j_sound_upper |= _RU_J_SOUND_UPPER
|
self._j_sound_upper |= _RU_J_SOUND_UPPER
|
||||||
self._signs_upper |= _RU_SIGNS_UPPER
|
self._signs_upper |= _RU_SIGNS_UPPER
|
||||||
self._ru_alphabet_upper |= _RU_VOWELS_UPPER | _RU_CONSONANTS_UPPER | _RU_SIGNS_UPPER | _RU_J_SOUND_UPPER
|
self._ru_alphabet_upper |= self._vowels | self._consonants | self._j_sound_upper | self._signs_upper
|
||||||
|
if LANG_RU_OLD in self.langs:
|
||||||
|
self._vowels |= _RU_VOWELS_UPPER | _RU_OLD_VOWELS_UPPER
|
||||||
|
self._consonants |= _RU_CONSONANTS_UPPER | _RU_OLD_CONSONANTS_UPPER
|
||||||
|
self._j_sound_upper |= _RU_J_SOUND_UPPER
|
||||||
|
self._signs_upper |= _RU_SIGNS_UPPER
|
||||||
|
self._ru_alphabet_upper |= self._vowels | self._consonants | self._j_sound_upper | self._signs_upper
|
||||||
if LANG_EN in self.langs:
|
if LANG_EN in self.langs:
|
||||||
self._vowels |= _EN_VOWELS_UPPER
|
self._vowels |= _EN_VOWELS_UPPER
|
||||||
self._consonants |= _EN_CONSONANTS_UPPER
|
self._consonants |= _EN_CONSONANTS_UPPER
|
||||||
@ -97,8 +103,8 @@ class Hyphenator:
|
|||||||
print("слово:", word, " // mode:", self.mode, " // langs:", self.langs)
|
print("слово:", word, " // mode:", self.mode, " // langs:", self.langs)
|
||||||
# 2. ОБНАРУЖЕНИЕ ЯЗЫКА И ПОДКЛЮЧЕНИЕ ЯЗЫКОВОЙ ЛОГИКИ
|
# 2. ОБНАРУЖЕНИЕ ЯЗЫКА И ПОДКЛЮЧЕНИЕ ЯЗЫКОВОЙ ЛОГИКИ
|
||||||
# Поиск вхождения букв строки (слова) через `frozenset` -- O(1). Это быстрее регулярного выражения -- O(n)
|
# Поиск вхождения букв строки (слова) через `frozenset` -- O(1). Это быстрее регулярного выражения -- O(n)
|
||||||
# 2.1. Проверяем RU
|
# 2.1. Проверяем RU и RU_OLD (правила одинаковые, но разные наборы букв)
|
||||||
if LANG_RU in self.langs and frozenset(word.upper()) <= self._ru_alphabet_upper:
|
if (LANG_RU in self.langs or LANG_RU_OLD in self.langs) and frozenset(word.upper()) <= self._ru_alphabet_upper:
|
||||||
# Пользователь подключил русскую логику, и слово содержит только русские буквы
|
# Пользователь подключил русскую логику, и слово содержит только русские буквы
|
||||||
print(f"#### Applying Russian rules to: {word}")
|
print(f"#### Applying Russian rules to: {word}")
|
||||||
# Поиск допустимой позиции для переноса около заданного индекса
|
# Поиск допустимой позиции для переноса около заданного индекса
|
||||||
|
Loading…
x
Reference in New Issue
Block a user