Алгоритм переноса OpenOffice — что означают параметры?

Я ищу аглорифм расстановки переносов, загруженный с сайта OpenOffice, но я не мог понять, для чего нужны параметры rep, pos и cut после просмотра комментария. Может ли кто-нибудь со знанием сказать мне, что делают эти параметры? Вот комментарии.

Из примера кажется, что ff можно заменить одним f, но какое это имеет отношение к переносу?

Спасибо,


/*

int hnj_hyphen_hyphenate2(): non-standard hyphenation.

(It supports Catalan, Dutch, German, Hungarian, Norwegian, Swedish etc. orthography, see documentation.)

input data: word: input word word_size: byte length of the input word

hyphens: allocated character buffer (size = word_size + 5) hyphenated_word: allocated character buffer (size ~ word_size * 2) or NULL rep, pos, cut: pointers (point to the allocated and zeroed buffers (size=word_size) or with NULL value) or NULL

output data: hyphens: hyphenation vector (hyphenation points signed with odd numbers) hyphenated_word: hyphenated input word (hyphens signed with ='), optional (NULL input) rep: NULL (only standard hyph.), or replacements (hyphenation points signed with=' в заменах); pos: NULL, или разница между фактической позицией и начальными позициями изменения во входных словах; cut: NULL или количество удаленных символов исходных слов при переносе,

Примечание: rep, pos, cut — это массивы, дополняющие дефисы, индексированные позициями символов входного слова.

Например: Schiffahrt -> Schiff=fahrt, шаблон: f1f/ff=f,1,2 вывод: rep[5]="ff=f", pos[5] = 1, cut[5] = 2

Примечание: hnj_hyphen_hyphenate2() может выделять rep, pos, cut (массивы длины word_size):

символ ** повтор = NULL; интервал * позиция = NULL; интервал * вырезать = NULL; символьные дефисы[MAXWORDLEN]; hnj_hyphen_hyphenate2(dict, "example", 7, дефисы, NULL, &rep, &pos, &cut);

См. пример в исходном дистрибутиве.

*/

int hnj_hyphen_hyphenate2 (HyphenDict *dict, const char *word, int word_size, char * hyphens, char *hyphenated_word, char * rep, int ** pos, int ** cut);


person Ray Zhou    schedule 11.11.2010    source источник


Ответы (1)


Я полагаю, что вы имеете в виду следующий комментарий:

// For example:
//  Schiffahrt -> Schiff=fahrt,
//  pattern: f1f/ff=f,1,2
//  output: rep[5]="ff=f", pos[5] = 1, cut[5] = 2

Пример относится к немецким правилам расстановки переносов, какими они были до реформы правописания 1990-х годов. Сложные существительные в немецком языке пишутся как одно слово, и по старым правилам третья согласная, такая как «f» в слове «Schifffahrt» (состоит из «Schiff» и «Fahrt») опускалась в случае, если за ней следует гласная. («Шифффарт» писалось как «Шиффахрт»), но пропущенная буква все еще писалась при переносе.

Таким образом, смысл примера не в том, что «ff» можно заменить одним «f», а в том, что «ff» можно заменить на «ff-f».

Таким образом, значение параметров будет следующим:

  • rep: содержит замену «ff-f», которая используется вместо «ff».
  • pos: значение 1 означает, что замена начинается за одну букву до позиции переноса 5
  • cut: значение 2 означает, что из входного слова необходимо удалить 2 символа.

Эти параметры, по-видимому, используются только в том редком случае, когда слово пишется по-разному при переносе через дефис.

person Dirk Vollmar    schedule 11.11.2010
comment
Большое тебе спасибо! Отличный ответ. - person Ray Zhou; 12.11.2010