Русские переносы на javascript
Dec. 20th, 2012 11:16 pmВдруг пригодится кому, я не нашёл в сети русские переносы более-менее автоматические ни два года назад, ни сейчас. Ни на javascript, ни по-другому, так что может ещё кому пригодится.
Оно неидеальное, конечно. Пропускает слова с дефисами и цифрами, граничащие с тэгами, в скобках. Но в целом вполне приличные результаты. Расставляются символы мягкого переноса, это которые ­ в HTML. Их не видно если в консоли запустить, зато хорошо видно в вёрстке.
var shy = function (s) {
return s
.replace(/\s+/g," ")
.replace(/^\s|\s$/g,"")
.replace(/([а-яё])([\.,;])([а-яё])/gi,"$1$2 $3")
.split(" ").map(function(w) {
return w
.replace(/^(верх|ниж|зад)(не)/i,"$1ᴥ$2ᴥ")
.replace(/^(су|ги)(пер)/i,"$1ᴥ$2ᴥ")
.replace(/^(над|под|пара|без|раз|суб|бес|за|пере)/i,"$1ᴥ")
.replace(/^([а-яё]+?[б-джзй-нп-тф-щ][аеёиоуыэюя])([аеёиоуыэюя][а-яё]+)/gi,"$1ᴥ$2")
.replace(/([аеёоуыэюя][б-джзй-нп-тф-щ][ъь])([б-джзй-нп-тф-щ][а-яё])/gi,"$1ᴥ$2")
.replace(/([аеёиоуыэюяйᴥ][б-джзй-нп-тф-щъь])([б-джзй-нп-тф-щ][б-джзй-нп-тф-щ]*?[аеёиоуыэюяй][а-яёᴥ]*?)/gi,"$1ᴥ$2")
.replace(/([а-яё]{2}[аеёиоуыэюя])([б-джзк-нп-тф-щ][а-щыэ-яё])/gi,"$1ᴥ$2")
.replace(/([а-яё]{2}[б-джзк-нп-тф-щ])([аеёиоуыэюя][а-яё])/gi,"$1ᴥ$2")
.replace(/(ᴥ)([б-джзй-нп-тф-щъь]+)$/i,"$2")
.replace(/(ᴥ)([ъьы])/gi,"$2")
.replace(/ᴥᴥ/gi,"ᴥ")
.replace(/ᴥ/g,"\u00ad")
}).join(" ")
};
Получается примерно так (тут мягкий перенос на дефис заменён, чтобы было видно):
Оп-реде-лить в п. 12 нас-то-яще-го дого-вора от-ветств-ен-ное лицо от За-каз-чика (в даль-ней-шем – От-ветств-ен-ное лицо), кото-рое име-ет ис-клю-чит-ель-ное пра-во под-писы-вать про-меж-уточ-ные рез-уль-таты раб-от, ука-зан-ных в Гра-фике.
Фото-сес-сия дос-топри-меч-атель-ность ад-верго-тик-ом вели-кол-епие объек-то-ориен-тиро-ван-ный су-пер-объек-тив вер-х-не-тоем-ский пара-олим-пийс-кий мани-лов-щина поло-теныш-ко над-нац-ио-наль-ный без-ус-ловный
Буду уточнять ещё.
no subject
Date: 2013-11-09 03:58 pm (UTC)