phpHypher
quittance.ru
документы
прочее

Реализация расстановки переносов phpHypher

phpHypher

Назва­ние:phpHypher
Вер­сия:0.1.2
Дата:01.09.2010
Ста­тус:beta
Автор:Сер­гей Кура­кин
Лицен­зия:LGPL v.3
Опи­са­ние:Класс php5 для рас­ста­нов­ки мяг­ких пе­ре­но­сов по ал­го­рит­му Ляна-Кну­та. Вклю­ча­ет сво­бод­но рас­про­стра­ня­е­мый на­бор пра­вил пе­ре­но­сов для рус­ско­го языка.
Download:phphypher-0.1.2.tar.gz 

Класс phpHypher пред­на­зна­чен для рас­ста­нов­ки мяг­ких пе­ре­но­сов на web-стра­ни­цах. Исполь­зу­ет­ся ал­го­ритм Ляна-Кну­та, из­вест­ный так­же как «ал­го­ритм TeX». Во мно­гих слу­ча­ях про­из­во­ди­тель­но­сти хва­та­ет да­же для рас­ста­нов­ки пе­ре­но­сов «на лету».

Рабо­ту phpHypher мож­но про­ве­рить в раз­де­ле «Рас­ста­нов­ка мяг­ких пе­ре­но­сов». Неко­то­рые прак­ти­че­ские во­про­сы рас­смот­ре­ны в под­раз­де­ле «Прак­ти­ка рас­ста­нов­ки мяг­ких пе­ре­но­сов на веб-стра­ни­цах»; бо­лее об­щие во­про­сы  в под­раз­де­ле «Алго­ритм Ляна-Кну­та для рас­ста­нов­ки мяг­ких пе­ре­но­сов».

Послед­няя вер­сия phpHypher с клас­си­че­ским API в ви­де на­бо­ра функ­ций до­ступ­на без под­держки: phphypher-0.0.8.tar.gz

комментариев: 4 01/09/2010

Quickstart

<?php
 
// Подключение библиотеки
require_once 'libs/hypher.php';
 
// Создание объекта, загрузка файла описания и набора правил
$hy_ru = new phpHypher('libs/hyph_ru_RU.conf');
 
// Расстановка переносов
echo $hy_ru->hyphenate('Текст, в котором надо расставить переносы', 'UTF-8');
echo $hy_ru->hyphenate('Текст для расстановки переносов', 'UTF-8');
echo $hy_ru->hyphenate('...и так далее...', 'UTF-8');
 
?>
В этом при­ме­ре пред­по­ла­га­ет­ся, что все фай­лы биб­лио­те­ки, вклю­чая файл опи­са­ния язы­ка и на­бо­ры пра­вил, на­хо­дят­ся в ди­рек­то­рии libs/. Коди­ров­ка тек­ста для рас­ста­нов­ки пе­ре­но­сов мо­жет быть utf-8 или лю­бая од­но­бай­то­вая; ука­зы­ва­ет­ся вто­рым па­ра­мет­ром ме­то­да hyphenate().

комментариев: 3 30/05/2010

Особенности и преимущества phpHypher

Кон­фи­гу­ра­ци­он­ный файл опи­са­ния язы­ка. Мно­го­чис­лен­ные па­ра­мет­ры рас­ста­нов­ки пе­ре­но­сов для каж­до­го кон­крет­но­го язы­ка за­да­ют­ся ди­рек­ти­ва­ми в фай­ле опи­са­ния язы­ка, имя ко­то­ро­го яв­ля­ет­ся обя­за­тель­ным па­ра­мет­ром при со­зда­нии эк­зем­пля­ра объ­ек­та phpHypher.

Кеши­ро­ва­ние об­ра­бо­тан­ных сло­ва­рей со встро­ен­ным ме­ха­низ­мом про­вер­ки их ак­ту­аль­но­сти. В про­цес­се со­зда­ния эк­зем­пля­ра объ­ек­та phpHypher про­ис­хо­дит за­груз­ка и об­ра­бот­ка на­бо­ров пра­вил (пат­тер­нов) и дру­гих дан­ных, необ­хо­ди­мых для рас­ста­нов­ки пе­ре­но­сов. Про­цесс об­ра­бот­ки и оп­ти­ми­за­ции дан­ных за­ни­ма­ет до­ли се­кун­ды, но эти до­ли се­кун­ды мо­гут ока­зать­ся кри­тич­ны­ми для про­из­во­ди­тель­но­сти на­гру­жен­ной си­сте­мы. Поэто­му об­ра­бо­тан­ные дан­ные со­хра­ня­ют­ся для даль­ней­ше­го ис­поль­зо­ва­ния в файл, имя ко­то­ро­го за­да­но ди­рек­ти­вой compiled.

В даль­ней­шем об­ра­бо­тан­ные и оп­ти­ми­зи­ро­ван­ные сло­ва­ри бу­дут за­гру­жать­ся непо­сред­ствен­но из compiled-фай­ла с обя­за­тель­ным кон­тро­лем его ак­ту­аль­но­сти. В слу­чае по­те­ри ак­ту­аль­но­сти (или от­сут­ствия), compiled-файл бу­дет ав­то­ма­ти­че­ски об­нов­лен (или со­здан за­но­во) из ис­ход­ных фай­лов пра­вил.

Таким об­ра­зом, вре­мя за­груз­ки сло­ва­рей и дру­гих необ­хо­ди­мых для рас­ста­нов­ки пе­ре­но­сов дан­ных све­де­но к ми­ни­му­му. С дру­гой сто­ро­ны, phpHypher поз­во­ля­ет опе­ра­тив­но вно­сить из­ме­не­ния в файл опи­са­ния язы­ка и в фай­лы пра­вил пе­ре­но­сов  из­ме­не­ния бу­дут учте­ны при пер­вом же вы­зо­ве кон­струк­то­ра класса.

Рас­ши­рен­ные на­строй­ки усло­вий пе­ре­но­са слов. Обыч­но си­сте­мы рас­ста­нов­ки пе­ре­но­сов в тек­сте поз­во­ля­ют за­да­вать три стан­дарт­ных усло­вия пе­ре­но­сов: огра­ни­че­ние сле­ва  ми­ни­маль­ное ко­ли­че­ство сим­во­лов, ко­то­рое до­пу­сти­мо от­де­лять от сло­ва спе­ре­ди; огра­ни­че­ние спра­ва  ми­ни­маль­ное ко­ли­че­ство букв, ко­то­рое мож­но пе­ре­но­сить на дру­гую стро­ку; огра­ни­че­ние по длине  ми­ни­маль­ная дли­на сло­ва, до­пус­ка­ю­щая пе­ре­носы.

Поми­мо стан­дарт­ных, phpHypher предо­став­ля­ет воз­мож­ность от­дель­но за­дать еще два до­пол­ни­тель­ных усло­вия: огра­ни­че­ние сле­ва для слов, на­чи­на­ю­щих­ся с за­глав­ной бук­вы и огра­ни­че­ние спра­ва для по­след­не­го сло­ва аб­за­ца. Рас­ши­рен­ные усло­вия пе­ре­но­са слов поз­во­ля­ют бо­лее тон­ко на­стро­ить си­сте­му ав­то­ма­ти­че­ской рас­ста­нов­ки мяг­ких пе­ре­но­сов в осо­бых слу­ча­ях для раз­лич­ных спо­со­бов вы­ключ­ки тек­ста.

Запрет пе­ре­но­са слов. Пере­но­сы не бу­дут рас­став­ле­ны в сло­вах, экра­ни­ро­ван­ных при по­мо­щи об­рат­ной ко­сой чер­ты "\" (код сим­во­ла 0x5C), ко­то­рая долж­на рас­по­ла­гать­ся непо­сред­ствен­но пе­ред пер­вой бук­вой экра­ни­ру­е­мо­го слова.

Напри­мер, для рас­ста­нов­ки пе­ре­но­сов в ан­гло­языч­ном тек­сте, вклю­ча­ю­щем в се­бя те­ги раз­мет­ки, необ­хо­ди­мо экра­ни­ро­вать те­ги, чтобы из­бе­жать рас­ста­нов­ки пе­ре­но­сов внут­ри них. Но та­кой необ­хо­ди­мо­сти нет при рас­ста­нов­ке пе­ре­но­сов на рус­ском язы­ке, по­сколь­ку рус­ско­языч­ный текст не пе­ре­се­ка­ет­ся по ал­фа­ви­ту с те­га­ми, за­пи­сан­ны­ми ла­тин­ски­ми бук­вами.

Воз­мож­ность од­новре­мен­но­го ис­поль­зо­ва­ния несколь­ких на­бо­ров пра­вил пе­ре­но­сов. Кон­фи­гу­ра­ци­он­ный файл опи­са­ния язы­ка поз­во­ля­ет под­клю­чать од­новре­мен­но несколь­ко на­бо­ров пра­вил, что при­да­ет си­сте­ме до­пол­ни­тель­ную гиб­кость. Мож­но иметь один ос­нов­ной на­бор пра­вил, а ис­прав­ле­ния и до­пол­не­ния вно­сить в до­пол­ни­тель­ный на­бор, не ме­няя ос­нов­но­го. Или рас­став­лять пе­ре­но­сы в тек­сте сра­зу на двух язы­ках, ес­ли эти язы­ки не пе­ре­се­ка­ют­ся по ал­фа­ви­ту  на­при­мер, на рус­ском и ан­глий­ском.

Дру­гие пре­иму­ще­ства: об­ра­бот­ка тек­ста в ко­ди­ров­ке utf-8 и во всех од­но­бай­то­вых; от­сут­ствие по­терь при пе­ре­ко­ди­ров­ках; вы­со­кая про­из­во­ди­тель­ность; от­сут­ствие за­ви­си­мо­сти от уста­но­вок си­стем­ной ло­кали.

комментировать 18/06/2010

Разъяснение работы phpHypher с различными кодировками

Немно­го за­бе­гая впе­ред, необ­хо­ди­мо сде­лать два за­яв­ле­ния. Класс phpHypher кор­рект­но ра­бо­та­ет с тек­стом в ко­ди­ров­ке utf-8, а так­же с лю­бы­ми од­но­байт­ны­ми ко­до­вы­ми стра­ни­ца­ми. Класс phpHypher не по­те­ря­ет ни од­но­го сим­во­ла при пе­ре­ко­ди­ров­ке тек­ста.

Поня­тие ба­зо­вой ко­ди­ров­ки. Базо­вая ко­ди­ров­ка  это ра­бо­чая ко­до­вая стра­ни­ца, непо­сред­ствен­но ис­поль­зу­е­мая внут­ри phpHypher в про­цес­се рас­ста­нов­ки пе­ре­но­сов. Зада­ет­ся в фай­ле опи­са­ния язы­ка. С це­лью до­сти­же­ния вы­со­кой про­из­во­ди­тель­но­сти, в ка­че­стве ба­зо­вой ра­бо­чей ко­ди­ров­ки до­пус­ка­ют­ся толь­ко од­но­байт­ные (в ори­ги­наль­ном на­бо­ре для рус­ско­го язы­ка ис­поль­зу­ет­ся ко­до­вая стра­ни­ца CP1251).

Базо­вая ко­ди­ров­ка не име­ет от­но­ше­ния к ко­до­вой стра­ни­це об­ра­ба­ты­ва­е­мо­го тек­ста.

Коди­ров­ка об­ра­ба­ты­ва­е­мо­го тек­ста. Кодо­вая стра­ни­ца об­ра­ба­ты­ва­е­мо­го тек­ста мо­жет быть utf-8 или лю­бой од­но­байт­ной. Она ни­как не за­ви­сит от ба­зо­вой ко­ди­ров­ки. Зада­ет­ся вто­рым па­ра­мет­ром при вы­зо­ве ме­то­да hyphenate().

Выска­зы­ва­лись опа­се­ния, что внут­ри phpHypher пре­об­ра­зо­ва­ние об­ра­ба­ты­ва­е­мо­го тек­ста в ба­зо­вую ко­ди­ров­ку при­ве­дет к по­те­ре от­сут­ству­ю­щих в ней сим­во­лов. Спе­шим раз­ве­ять эти опа­се­ния, ни один сим­вол не бу­дет по­те­рян!

Отсут­ствие по­терь га­ран­ти­ру­ет­ся в си­лу то­го, что phpHypher ни­ко­гда не пе­ре­ко­ди­ру­ет весь текст пол­но­стью. Вме­сто это­го в ба­зо­вую ко­ди­ров­ку и об­рат­но пре­об­ра­зу­ют­ся толь­ко от­дель­ные сло­ва, вы­чле­нен­ные из тек­ста для рас­ста­нов­ки пе­ре­но­сов. Сло­ва пол­но­стью со­сто­ят из букв за­дан­но­го ал­фа­ви­та, по­это­му за­ве­до­мо не мо­гут со­дер­жать сим­во­лов, несов­ме­сти­мых с ра­бо­чей ко­до­вой стра­ни­цей.

Алго­ритм вы­чле­не­ния слов из тек­ста вы­би­ра­ет непре­рыв­ные фраг­мен­ты, со­сто­я­щие толь­ко из сим­во­лов ал­фа­ви­та опре­де­лен­но­го язы­ка, и по-от­дель­но­сти на­прав­ля­ет их на рас­ста­нов­ку пе­ре­но­сов в за­щи­щен­ный ме­тод hyphenate_word(). Таким об­ра­зом га­ран­ти­ру­ет­ся, что ме­тод hyphenate_word() ни­ко­гда не по­лу­чит сим­во­лов, от­сут­ству­ю­щих в ра­бо­чей ко­до­вой стра­ни­це, и все­гда мо­жет без­опас­но, то есть без по­терь, вы­пол­нить пре­об­ра­зо­ва­ние сло­ва в ба­зо­вую ко­ди­ров­ку и об­ратно.

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

Уста­нов­ки си­стем­ной ло­ка­ли. Внут­ри phpHypher не ис­поль­зу­ют­ся за­ви­си­мые от ло­ка­ли функ­ции и шаб­ло­ны ре­гу­ляр­ных вы­ра­же­ний, по­это­му ре­зуль­тат его ра­бо­ты ни­как не свя­зан с уста­нов­ка­ми ло­кали.

Вычле­не­ние слов из тек­ста и пре­об­ра­зо­ва­ния ре­ги­стра букв про­из­во­дят­ся при по­мо­щи со­от­вет­ству­ю­щих па­ра­мет­ров фай­ла опи­са­ния язы­ка, ко­то­рые со­дер­жат все сим­во­лы ал­фа­ви­та в верх­нем и ниж­нем ре­ги­стре.

Уни­каль­ный ди­зайн phpHypher обес­пе­чи­ва­ет кор­рект­ную ра­бо­ту да­же в са­мых эк­зо­ти­че­ских си­ту­а­ци­ях. Напри­мер, мо­жет ис­поль­зо­вать­ся CP1251 в ка­че­стве ба­зо­вой ко­ди­ров­ки, два фай­ла пра­вил в ко­до­вых стра­ни­цах koi8-r и ISO-8859–5, уста­нов­ле­на ки­тай­ская ло­каль, а ис­ход­ный рус­ский текст мо­жет по­да­вать­ся в ко­ди­ров­ке utf-8… И да­же в та­кой си­ту­а­ции phpHypher рас­ста­вит пе­ре­но­сы и не по­те­ря­ет ни од­но­го сим­во­ла из об­ра­ба­ты­ва­е­мо­го тек­ста.

комментировать 28/01/2011

Описание методов и свойств класса phpHypher

// Constructor
__construct ( string $conffile [, int $recompile] )
Созда­ет эк­зем­пляр объ­ек­та phpHypher и за­гру­жа­ет ин­фор­ма­цию, необ­хо­ди­мую для рас­ста­нов­ки пе­ре­но­сов.

$conffile путь и имя фай­ла опи­са­ния
$recompile па­ра­метр, опре­де­ля­ю­щий необ­хо­ди­мость об­нов­ле­ния compiled-файла

// Public properties
public $proceed_uppercase = false
public $left_limit; // current left hyphenation limit
public $right_limit; // current right hyphenation limit
public $length_limit; // minimum word length allowing hyphenation
public $left_limit_uc; // current left hyphenation limit
// for words with first letter in upper case
public $right_limit_last; // current right hyphenation limit
// for the last word in paragraph
$proceed_uppercase  свой­ство, поз­во­ля­ю­щее при необ­хо­ди­мо­сти рас­став­лять пе­ре­но­сы в сло­вах, со­дер­жа­щих за­глав­ные бук­вы кро­ме пер­вой. По умол­ча­нию пе­ре­но­сы рас­став­ля­ют­ся толь­ко в сло­вах, пол­но­стью со­сто­я­щих из строч­ных букв или на­чи­на­ю­щих­ся с за­глав­ной буквы.

Осталь­ные от­кры­тые свой­ства клас­са опре­де­ля­ют усло­вия пе­ре­но­са. Для их уста­нов­ки сле­ду­ет ис­поль­зо­вать пуб­лич­ный ме­тод set_limits(), ко­то­рый до­пол­ни­тель­но про­ве­ря­ет кор­рект­ность ус­ло­вий.
// Method
set_limits([, int $left_limit [, int $right_limit [, int $length_limit [,
int $right_limit_last [, int $left_limit_uc]]]]] )
Уста­нав­ли­ва­ет усло­вия пе­ре­но­са с про­вер­кой их кор­рект­но­сти.

$left_limit огра­ни­че­ние сле­ва  ми­ни­маль­ное ко­ли­че­ство сим­во­лов, ко­то­рое мож­но остав­лять на стро­ке; зна­че­ние по умол­ча­нию бе­рет­ся из фай­ла опи­са­ния языка
$right_limit огра­ни­че­ние спра­ва  ми­ни­маль­ное ко­ли­че­ство сим­во­лов, ко­то­рое мож­но пе­ре­но­сить на дру­гую стро­ку; зна­че­ние по умол­ча­нию бе­рет­ся из фай­ла опи­са­ния языка
$length_limit ми­ни­маль­ная дли­на сло­ва, в ко­то­ром мож­но рас­став­лять пе­ре­но­сы; зна­че­ние по умол­ча­нию вы­чис­ля­ет­ся как сум­ма двух преды­ду­щих па­ра­мет­ров
$right_limit_last ми­ни­маль­ное ко­ли­че­ство сим­во­лов, ко­то­рое мож­но пе­ре­но­сить на дру­гую стро­ку в по­след­нем сло­ве аб­за­ца; по умол­ча­нию рав­но огра­ни­че­нию справа
$left_limit_uc ми­ни­маль­ное ко­ли­че­ство сим­во­лов, ко­то­рое мож­но остав­лять на стро­ке в сло­вах, на­чи­на­ю­щих­ся с за­глав­ной бук­вы; по умол­ча­нию рав­но огра­ни­че­нию слева

// Method
string hyphenate(string $instr [, string $encoding [, string $shy]] )
Рас­став­ля­ет мяг­кие пе­ре­но­сы в тек­сте.

возвращает стро­ку с рас­став­лен­ны­ми мяг­ки­ми пе­ре­но­сами
$instr текст для рас­ста­нов­ки пе­ре­но­сов
$encoding ко­ди­ров­ка вход­но­го и вы­ход­но­го тек­ста в ви­де стро­ки, рас­по­зна­ва­е­мой функ­ци­ей iconv; по умол­ча­нию: ба­зо­вая ко­ди­ров­ка из фай­ла опи­са­ния языка
$shy стро­ка, ис­поль­зу­е­мая для обо­зна­че­ния мяг­ко­го пе­ре­но­са; по умол­ча­нию: "&shy;" 
комментировать 29/05/2010

Директивы файла описания языка

Кон­фи­гу­ра­ци­он­ный файл опи­са­ния язы­ка со­дер­жит ди­рек­ти­вы, необ­хо­ди­мые для рас­ста­нов­ки пе­ре­но­сов в дан­ном язы­ке. Имя фай­ла опи­са­ния язы­ка за­да­ет­ся обя­за­тель­ным па­ра­мет­ром при вы­зо­ве кон­струк­то­ра клас­са phpHypher. Все ди­рек­ти­вы, кро­ме по­след­ней, яв­ля­ют­ся обя­за­тель­ными.

Ниже при­ве­де­ны зна­че­ния ди­рек­тив, опи­сы­ва­ю­щие рас­ста­нов­ку пе­ре­но­сов для рус­ско­го языка.

internal_encoding = CP1251
Внут­рен­няя ба­зо­вая (ра­бо­чая) ко­ди­ров­ка, ис­поль­зу­е­мая в про­цес­се рас­ста­нов­ки пе­ре­но­сов, а так­же в дан­ном фай­ле опи­са­ния язы­ка. Ука­зы­ва­ет­ся в фор­ме стро­ки, рас­по­зна­ва­е­мой си­стем­ной функ­ци­ей iconv(). Вви­ду осо­бен­но­стей ар­хи­тек­ту­ры и с це­лью до­сти­же­ния вы­со­кой про­из­во­ди­тель­но­сти, в ка­че­стве ба­зо­вой до­пус­ка­ет­ся ис­поль­зо­ва­ние толь­ко од­но­бай­то­вых ко­ди­ро­вок. Одна­ко, ба­зо­вая ко­до­вая стра­ни­ца не на­кла­ды­ва­ет ни­ка­ких огра­ни­че­ний на ра­бо­ту phpHypher с тек­ста­ми в дру­гих ко­ди­ров­ках, вклю­чая utf-8. Ука­зы­ва­ет­ся обя­за­тельно.

left_limit = 2
Огра­ни­че­ние сле­ва  ми­ни­маль­ное ко­ли­че­ство букв, ко­то­рое в дан­ном язы­ке до­пу­сти­мо остав­лять на стро­ке. Ука­зы­ва­ет­ся обя­за­тель­но. При рас­ста­нов­ке пе­ре­но­сов дан­ное зна­че­ние мо­жет быть уве­ли­че­но (но не умень­ше­но!) при по­мо­щи со­от­вет­ству­ю­ще­го свой­ства.

right_limit = 2
Огра­ни­че­ние спра­ва  ми­ни­маль­ное ко­ли­че­ство букв, ко­то­рое в дан­ном язы­ке до­пу­сти­мо пе­ре­но­сить на дру­гую стро­ку. Ука­зы­ва­ет­ся обя­за­тель­но. При рас­ста­нов­ке пе­ре­но­сов дан­ное зна­че­ние мо­жет быть уве­ли­че­но (но не умень­ше­но!) при по­мо­щи со­от­вет­ству­ю­ще­го свой­ства.

alphabet = абв­где(ё>е)жзийклмнопрстуфхцчшщъыьэюя
Пере­чис­ле­ние букв язы­ка в ниж­нем ре­ги­стре. Ука­зы­ва­ет­ся обя­за­тельно.

Кон­струк­ция (ё>е) за­да­ет пра­ви­ло: при рас­ста­нов­ке пе­ре­но­сов бук­ву «ё» сле­ду­ет вос­при­ни­мать как «е». Это не зна­чит, что все «ё» бу­дут за­ме­не­ны на «е». Нет, бук­вы «ё» оста­нут­ся на сво­их ме­стах, но при рас­ста­нов­ке пе­ре­но­сов не от­ли­ча­ют­ся от «е».

alphabetUC = АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
Пере­чис­ле­ние букв язы­ка в верх­нем ре­ги­стре. Заглав­ные бук­вы долж­ны быть пе­ре­чис­ле­ны точ­но в том же по­ряд­ке, в ко­то­ром бы­ли пе­ре­чис­ле­ны строч­ные. Ука­зы­ва­ет­ся обя­за­тель­но. Дирек­ти­ва поз­во­ля­ет сде­лать ра­бо­ту phpHypher пол­но­стью неза­ви­си­мой от уста­но­вок си­стем­ной ло­кали.

rules = hyph_ru_RU.al
rules = hyph_ru_RU.addition
rules = hyph_ru_RU.perfect

Имя и путь фай­ла с шаб­ло­на­ми пе­ре­но­сов. Для под­клю­че­ния несколь­ких на­бо­ров пра­вил ди­рек­ти­ва мо­жет встре­чать­ся неод­но­крат­но. При об­на­ру­же­нии несколь­ких оди­на­ко­вых шаб­ло­нов с раз­ны­ми циф­ро­вы­ми зна­че­ни­я­ми, при­о­ри­тет­ным бу­дет встре­тив­ший­ся поз­же. При от­сут­ствии пу­ти к фай­лу шаб­ло­нов, он бу­дет взят из ди­рек­то­рии, в ко­то­рой на­хо­дит­ся опи­са­ние язы­ка. Ука­зы­ва­ет­ся обя­за­тель­но как ми­ни­мум один раз.

compiled = hyph_ru_RU.compiled
Путь и имя фай­ла для со­хра­не­ния об­ра­бо­тан­ных и оп­ти­ми­зи­ро­ван­ных дан­ных. При от­сут­ствии пу­ти файл бу­дет со­хра­нен в той же ди­рек­то­рии, в ко­то­рой на­хо­дит­ся опи­са­ние язы­ка. Эта ди­рек­ти­ва мо­жет от­сут­ство­вать, в та­ком слу­чае compiled-файл не бу­дет со­здан.

Реа­ли­зо­ван ав­то­ма­ти­че­ский кон­троль ак­ту­аль­но­сти compiled-фай­ла, ко­то­рый со­зда­ет­ся за­но­во в сле­ду­ю­щих слу­ча­ях: (1) ес­ли от­сут­ству­ет; (2) ес­ли хо­тя бы один из сло­ва­рей име­ет бо­лее позд­нее вре­мя по­след­не­го из­ме­не­ния; (3) ес­ли файл опи­са­ния име­ет бо­лее позд­нее вре­мя по­след­не­го из­ме­не­ния; (4) ес­ли не со­от­вет­ству­ет по но­ме­ру вер­сии; (5) ес­ли на необ­хо­ди­мость об­нов­ле­ния пря­мо ука­зы­ва­ет вто­рой необя­за­тель­ный па­ра­метр кон­струк­то­ра класса.

комментировать 30/05/2010

Формат файлов правил переносов phpHypher

Фор­мат фай­лов с шаб­ло­на­ми phpHypher пре­дель­но прост и име­ет мно­го об­ще­го с со­от­вет­ству­ю­щи­ми фай­ла­ми си­сте­мы TeX.

Пустые стро­ки и про­бель­ные сим­во­лы в на­ча­ле и кон­це стро­ки иг­но­ри­ру­ют­ся. Допус­ка­ют­ся ком­мен­та­рии в стиле:

// комментарий

Если фай­лы шаб­ло­нов из­го­тав­ли­ва­лись из фай­лов TeX, убе­ди­тесь, что уда­ле­ны все эле­мен­ты раз­мет­ки TeX  зна­ки про­цен­та, фигур­ные скоб­ки, на­зва­ния сек­ций…

В пер­вой зна­ча­щей стро­ке фай­ла шаб­ло­нов долж­но на­хо­дить­ся обо­зна­че­ние его ко­ди­ров­ки. Она мо­жет от­ли­чать­ся от ба­зо­вой ко­ди­ров­ки, мо­жет сов­па­дать с нею, но долж­на быть ука­за­на в лю­бом слу­чае.

Осно­ву фай­ла пра­вил пе­ре­но­сов со­став­ля­ет спи­сок шаб­ло­нов, по од­но­му шаб­ло­ну в стро­ке, ана­ло­гич­но сек­ции patterns в си­сте­ме TeX.

Кро­ме шаб­ло­нов, в фай­ле мо­гут на­хо­дить­ся сло­вар­ные сло­ва, в ко­то­рых ме­ста воз­мож­ных пе­ре­но­сов обо­зна­че­ны де­фи­са­ми, ана­ло­гич­но сек­ции hyphenation в си­сте­ме TeX.

Если стро­ка не со­дер­жит ни од­ной циф­ры, то она вос­при­ни­ма­ет­ся как сло­вар­ное сло­во. При за­груз­ке фай­ла пра­вил пе­ре­но­сов сло­вар­ные сло­ва ав­то­ма­ти­че­ски пре­об­ра­зу­ют­ся в шаб­ло­ны сле­ду­ю­щим об­ра­зом:

сло-во >> .с8л8о9в8о.

комментировать 25/05/2010

Файлы phpHypher

hypher.php класс phpHypher 
sk_lib_i.php слу­жеб­ные функ­ции, ис­поль­зу­е­мые в phpHypher 
hyph_ru_RU.conf файл опи­са­ния для рус­ско­го языка
hyph_ru_RU.al ба­зо­вый на­бор пра­вил пе­ре­но­сов для рус­ско­го язы­ка, по­лу­чен из сво­бод­но рас­про­стра­ня­е­мо­го на­бо­ра пра­вил проф. Алек­сандра Ива­но­ви­ча Лебе­де­ва ruhyphal-030310 
hyph_ru_RU.addition до­пол­ни­тель­ный на­бор пра­вил, ис­прав­ля­ю­щий неко­то­рые ошиб­ки и неточ­но­сти ос­нов­но­го на­бора
hyph_ru_RU.perfect до­пол­ни­тель­ный на­бор пра­вил, поз­во­ля­ю­щий из­бе­жать неко­то­рых небла­го­звуч­ных или ис­ка­жа­ю­щих смысл пе­ре­но­сов
README.ru до­ку­мен­та­ция на рус­ском языке
комментировать 25/05/2010

Changelog

phpHypher 0.1.2 (01.09.2010)

  • Исправ­ле­на ошиб­ка об­ра­бот­ки слов, пе­ре­нос ко­то­рых за­пре­щен экра­ни­ру­ю­щей об­рат­ной ко­сой чер­той.

Полный список изменений…

комментировать 28/01/2011
Copyright 2008–2010 Sergey Kurakin