Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Перенос по слогам (https://javascript.ru/forum/misc/84303-perenos-po-slogam.html)

рони 10.08.2022 12:15

Alikberov,
:) :thanks:

Сергей Ракипов 10.08.2022 13:51

Alikberov,
А как понять интерактивной, то есть это можно выбирать или что значит?

Alikberov 10.08.2022 16:25

Цитата:

Сообщение от Сергей Ракипов (Сообщение 547307)
Alikberov,
А как понять интерактивной, то есть это можно выбирать или что значит?

Ставитe галочку и включаете режим «Активный перенос», чтобы каждое слово текста принудительно разделилось переносом…
В этом режиме хорошо просматриваются все грехи отработки моего алгоритма.
(Иначе всё это бессмысленно.)

Для качественного улучшения переносов тaм есть четыре поля - «Правило №1»…«Правило №4 .
Они интерактивные: Корректируете их, нажимаете «Enter», они вступают в силу и изучаете весь текст на предмет переносов.
Если регулярное выражение не прошло валидацию, поле покраснеет - просто вводите корректное регулярное выражение…

Сергей Ракипов 11.08.2022 06:12

Alikberov,
Я в это не досточно образован мне просто понять нужно вот ваш последний скрипт он содержит разные правила а что из нельзя просто включить по умолчанию все и пользоваться ну хоть чем то.

Alikberov 11.08.2022 12:19

Цитата:

Сообщение от Сергей Ракипов (Сообщение 547361)
вот ваш последний скрипт он содержит разные правила а что из нельзя просто включить по умолчанию все и пользоваться ну хоть чем то.

Пo умолчанию - это поддержка переноса со стороны браузера. А она - отсутствует.
Эти четыре правила - регулярные выражения, на которых и держится вся суть функции. Правила взяты буквально с потолка, чтобы скрипт хоть как-то работал. А правил «по умолчанию» в сети не найдёшь. Человеческий язык, сам по себе, субстанция сложная и стандартными машинными механизмамии парсится со скрипом…

P.S.: Однако, всё не так плохо, если использовать мой скрипт для колонок нормальной ширины.:yes:
Изъяны видны, в основном, если форсировать перенос на каждом слоге…

Сергей Ракипов 11.08.2022 12:38

Alikberov,
Я запутался я просто хочу спросить. Если я скопирую ваш скрипт но вот без этого

Правило №1<input type=text style=width:99% maxlength=128 onchange='Separatory(); Separatism()' value='^[бвгджзклмнпрстфхцчшщ]+[ъь]?[аеёиоуыьэюя](й|[бвгджзклмнпрстфхцчшщ]+[ъь]?$)'><br>
Правило №2<input type=text style=width:99% maxlength=128 onchange='Separatory(); Separatism()' value='^[бвгджзклмнпрстфхцчшщ]+[аеёиоуыьэюя]?'><br>
Правило №3<input type=text style=width:99% maxlength=128 onchange='Separatory(); Separatism()' value='^([бвгджзклмнпрстфхцчшщь]+)[бвгджзклмнпрстфхцчшщ][ъь]?[аеёиоуыэюя]?'><br>
Правило №4<input type=text style=width:99% maxlength=128 onchange='Separatory(); Separatism()' value='^[аеёиоуыэюя][бвгджзклмнпрстфхцчшщь]*'><br>
<input type=checkbox onchange='this.nextSibling.textContent = this.checked ? "Активный" : "Мягкий"; Separatism()'><span></span>


он будет работать в полную меру?

То есть в моей голове есть какой скрипт который работает в 4 разных вариантов и что бы работал один нужно нажат на 1 правило 2 на втрое правило и т.д.

А мне вот просто хочется взять скрипт и пользоваться в полную меру.

Alikberov 11.08.2022 14:00

Правилa не работают сами по отдельности:
while(part.length) {
		if(slab = part.match(Regulars[0])) { // Правило №1
			seps.push(slab[0]);
			part = part.substr(slab[0].length);
		} else
		if(slab = part.match(Regulars[1])) { // Правила №2 и №3
			if(next = part.substr(slab[0].length).match(Regulars[2]))
				slab[0] += next[1];
			seps.push(slab[0]);
			part = part.substr(slab[0].length);
		} else
		if(slab = part.match(Regulars[3])) { // Правило №4
			if(slab[0].length > 1 && part.charAt(slab[0].length).match(/[аеёиоуыэюя]/i))
				slab[0] = slab[0].substr(0, slab[0].length - 1);
			seps.push(slab[0]);
			part = part.substr(slab[0].length);
		} else {
			seps.push(part);
			part = "";
		}
	}
Види е здесь каскад условий, где все правила используются в комплексе?
Их я вынес из тела программы в INPUT-поля, чтобы можно было отладить и, добившись реально гораздо лучшего результата, вставить назад в тело алгоритма.
(Однако, эксперименты показали, что первоначальный исходный свод правил, хоть не идеальный, но редактированием мало что улучшает.)

Сам алгоритм, как можно видеть, практически никакой: Там просто идёт срабатывание одного из трёх правил (№1, №2 и №4) и одного подправила (№3 - №2.1).;)
Есть ещё подправило №4.1, но там одни гласные и его редактировать бессмысленно.

Сравните тела условий правил №2 и №4: Они практически одинаковы.
То есть, Вы сами можете удлинить цепь условий и добавить ещё больше правил.
(Я обошёлся именно тремя звеньями, так как это, ИМХО, оптимально в данной логике)

P.S.: Как выше я говорил, не плохо было бы добавить разбор суффиксов и окончаний (как и приставок, их ограниченное множество и в несколько регулярок вместить можно) перед данным циклом.
(Но в результате, лично я, сомневаюсь и не стал усложнять свою функцию.)

рони 11.08.2022 14:55

Сергей Ракипов,
не заморачивайтесь))) есть вариант рабочий, им и пользуйтесь, Alikberov, думаю если захочет и будут значительные изменения, выкатит новый готовый вариант, а пока #40 это для тех, кто съел собаку на морфологии, для поиска и проверки RegExp.

Сергей Ракипов 11.08.2022 19:22

рони,
Так более понятно, успокоили


Часовой пояс GMT +3, время: 09:50.