Алгоритм переноса OpenOffice - что означают параметры? - PullRequest
3 голосов
/ 12 ноября 2010

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

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

Спасибо,

<code>
/*</p>

<p>int hnj_hyphen_hyphenate2(): non-standard hyphenation.</p>

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

<p>input data:
 word:      input word
 word_size: byte length of the input word</p>

<p>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 <em>zeroed</em> buffers
                (size=word_size) or with NULL value) or NULL</p>

<p>output data:
 hyphens:   hyphenation vector (hyphenation points signed with odd numbers)
 hyphenated_word: hyphenated input word (hyphens signed with <code>='),
                  optional (NULL input)
 rep:       NULL (only standard hyph.), or replacements (hyphenation points
            signed with</code>=' in replacements);
 pos:       NULL, or difference of the actual position and the beginning
            positions of the change in input words;
 cut:       NULL, or counts of the removed characters of the original words
            at hyphenation,</p>

<p>Note: rep, pos, cut are complementary arrays to the hyphens, indexed with the
       character positions of the input word.</p>

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

<p>Note: hnj_hyphen_hyphenate2() can allocate rep, pos, cut (word_size
       length arrays):</p>

<p>char ** rep = NULL;
 int * pos = NULL;
 int * cut = NULL;
 char hyphens[MAXWORDLEN];
 hnj_hyphen_hyphenate2(dict, "example", 7, hyphens, NULL, &rep, &pos, &cut);</p>

<p>See example in the source distribution.</p>

<p>*/</p>

<p>int hnj_hyphen_hyphenate2 (HyphenDict *dict,
        const char *word, int word_size, char * hyphens,
        char *hyphenated_word, char <em>*</em> rep, int ** pos, int ** cut);

1 Ответ

3 голосов
/ 12 ноября 2010

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

// 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»), был опущен в случае, если гласный следует («Schifffahrt» было написано как «Schiffahrt»), но пропущенное письмо все еще было написано при переносе слов.

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

Значение параметров поэтому будет:

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

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

...