Разметка базы позволяет связывать словарные списки друг с другом, т.е. записи одного могут ссылаться на не текст статей, а на записи другого. Связь списков регулируется параметром LinkType, входящим в блоки LinkOptions и FullTextSEarchOptions, которые описаны здесь.

Это актуально не только для списков полнотекста, которые ссылаются на список с контекстом поиска (этот вариант в статье не рассматривается), но и для любых других типов списков, в т.ч. отображаемых.

  • наиболее распространенным вариантом линковки являются ссылки с записи списка с контекстом поиска на оригинальную запись словарного списка (что позволяет приложению перейти из результатов поиска к словарному списку с сохранением выбранного слова)
  • другим примером могут являться списки WordOfTheDay и PreloadedFavourites – они являются тематическим набором слов и для удобства работы их записи ссылаются на слова оригинального списка

Рассмотрим пример получения ссылки на оригинальное слово на примере полнотекстового поиска, в котором после поиска список с результатами указывает на eWordListType_FullTextAuxiliary, а он, в свою очередь, на eWordListType_Dictionary:

error = dict->DoFullTextSearch((UInt16*)L"абонемент", 512);
if (error != eOK)
    return 0;
 
Int32 listIndex;
// в реальном приложении интересен цикл по всем результатам, но мы возьмем один из них, чтобы не раздувать пример
Int32 globalIndex = 2;
 
while (true)
{
    // выбираем нужные нам список и слово
    error = dict->SetCurrentWordlist(listIndex);
    if (error != eOK)
        return 0;
 
    error = dict->GetWordByIndex(globalIndex);
    if (error != eOK)
        return 0;
 
    // получаем информацию о том, куда эта запись ссылается
    Int32 realListIndex = SLD_DEFAULT_LIST_INDEX;
    dict->GetRealListIndex(globalIndex, &realListIndex);
    if (error != eOK)
        return 0;
 
    Int32 realGlobalIndex = SLD_DEFAULT_WORD_INDEX;
    dict->GetRealGlobalIndex(globalIndex, &realGlobalIndex);
    if (error != eOK)
        return 0;
 
    // в случае, если ссылка на другой список не нашлась (характеризуется тем, что GetReal-функции возвращают дефолтные индексы),
    // прекращаем цикл - мы пришли к последней записи в цепочке
    if (realListIndex == SLD_DEFAULT_LIST_INDEX || realGlobalIndex == SLD_DEFAULT_WORD_INDEX)
        break;
 
    listIndex = realListIndex;
    globalIndex = realGlobalIndex;
}

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.