Xpoint
   [напомнить пароль]

Расстановка переносов

Данный алгоритм предназначен для автоматической расстановки переносов в русских текстах. Точное его происхождение неизвестно, по сети он бродит под именем «алгоритм П. Хpистова в модификации Дымченко и Ваpсанофьева».

Словесное описание:

«х» — одна из «ьъй», «c» — согласная, «г» — гласная, «-» — вставляемый знак переноса
К тексту последовательно применяются шесть правил-замен:
  • х → х-
  • гг → г-г
  • гссг → гс-сг
  • сгсг → сг-сг
  • гсссг → гс-ссг
  • гссссг → гсс-ссг

Реализация на JavaScript

var RusA = "[абвгдеёжзийклмнопрстуфхцчшщъыьэюя]";
var RusV = "[аеёиоуыэю]";
var RusN = "[бвгджзклмнпрстфхцчшщ]";
var RusX = "[йъь]";
var Hyphen = "\xAD";

var re1 = new RegExp("("+RusX+")("+RusA+RusA+")","ig");
var re2 = new RegExp("("+RusV+")("+RusV+RusA+")","ig");
var re3 = new RegExp("("+RusV+RusN+")("+RusN+RusV+")","ig");
var re4 = new RegExp("("+RusN+RusV+")("+RusN+RusV+")","ig");
var re5 = new RegExp("("+RusV+RusN+")("+RusN+RusN+RusV+")","ig");
var re6 = new RegExp("("+RusV+RusN+RusN+")("+RusN+RusN+RusV+")","ig");

text = text.replace(re1, "$1"+Hyphen+"$2");
text = text.replace(re2, "$1"+Hyphen+"$2");
text = text.replace(re3, "$1"+Hyphen+"$2");
text = text.replace(re4, "$1"+Hyphen+"$2");
text = text.replace(re5, "$1"+Hyphen+"$2");
text = text.replace(re6, "$1"+Hyphen+"$2");

Реализация на Perl

$RusAll = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
$RusV = "аеёиоуыэюя";
$RusN = "бвгджзклмнпрстфхцчшщ";
$RusX = "ьъй";
$Hyphen = "-";

$text =~ s/(?<=[$RusAll])([$RusX])(?=[$RusAll]{2})/\1$Hyphen/ig;
$text =~ s/(?<=[$RusAll])([$RusV])(?=[$RusV][$RusAll])/\1$Hyphen/ig;
$text =~ s/(?<=[$RusV])([$RusN])(?=[$RusN][$RusV])/\1$Hyphen/ig;
$text =~ s/(?<=[$RusN])([$RusV])(?=[$RusN][$RusV])/\1$Hyphen/ig;
$text =~ s/(?<=[$RusV])([$RusN])(?=[$RusN][$RusN][$RusV])/\1$Hyphen/ig;
$text =~ s/(?<=[$RusV][$RusN])([$RusN])(?=[$RusN][$RusN][$RusV])/\1$Hyphen/ig;

Возможные проблемы в браузерах

В стандарте Unicode предусмотрен специальный символ для обозначения мягкого (т.е. отображаемого только в случае необходимости) переноса — 0x00AD (SOFT HYPHEN). Ему соответствует HTML-entity &shy;. Однако правильная интерпретация этого символа неоднозначна, и на данный момент только IE поддерживает такие переносы в текстах (и соответствующим образом форматирует колонки). Многие старые браузеры отображают &shy; как обязательный знак дефиса. Кроме того, в IE возникают проблемы при попытке скопировать текст с переносами в буфер обмена (туда добавляются и дефисы). Способ обхода этого недостатка можно посмотреть, например, здесь: http://shy.dklab.ru/newest/.

Powered by POEM™ Engine Copyright © 2002-2005