|
|
|
| Попалась реализация алгоритма расстановки переносов адаптированная к windows-1251
Может кому пригодится.
<?php
function hyphen_words($text)
{
#буква (letter)
$l = '(?:[ёЁА-я] #ё Ё А-я (все)
| [a-zA-Z]
)';
#гласная (vowel)
$v = '(?:[аеиоуыэюяё] #аеиоуыэюяё (гласные)
| [АЕИОУЫЭЮЯЁ] #АЕИОУЫЭЮЯЁ (гласные)
| (?i:[aeiouy])
)';
#согласная (consonant)
$c = '(?:[бвгджзклмнпрстфхцчшщ] #бвгджзклмнпрстфхцчшщ (согласные)
| [БВГДЖЗКЛМНПРСТФХЦЧШЩ] #БВГДЖЗКЛМНПРСТФХЦЧШЩ (согласные)
| (?i:sh|ch|qu|[bcdfghjklmnpqrstvwxz])
)';
#специальные
$x = '(?:[ЙЪЬйъь])'; #ЙЪЬйъь (специальные)
/*
#алгоpитм П.Хpистова в модификации Дымченко и Ваpсанофьева
$rules = array(
# $1 $2
"/($x) ($l$l)/sx",
"/($v) ($v$l)/sx",
"/($v$c) ($c$v)/sx",
"/($c$v) ($c$v)/sx",
"/($v$c) ($c$c$v)/sx",
"/($v$c$c) ($c$c$v)/sx"
);
*/
#improved rules by D. Koteroff
$rules = array(
# $1 $2
"/($x) ($l$l)/sx",
"/($v$c$c) ($c$c$v)/sx",
"/($v$c$c) ($c$v)/sx",
"/($v$c) ($c$c$v)/sx",
"/($c$v) ($c$v)/sx",
"/($v$c) ($c$v)/sx",
"/($c$v) ($v$l)/sx",
);
#\xad = ­
$text = preg_replace($rules, "$1\xad$2", $text); // не \xc2\xad
return $text;
}
echo hyphen_words("Проверка алгоpитма");
?>
|
| |
|
|