diff --git a/honoka/libhonoka/resultlist.cpp b/honoka/libhonoka/resultlist.cpp index b86e623..3c38084 100644 --- a/honoka/libhonoka/resultlist.cpp +++ b/honoka/libhonoka/resultlist.cpp @@ -36,3 +36,18 @@ { return kouho.size(); } + + +/*! + \fn ResultList::find(WideString str) + */ +int ResultList::find(WideString str) +{ + for(unsigned int i = 0;i < kouho.size();i ++) { + if (str == kouho[i].kanji) { + return i; + } + } + return -1; +} + diff --git a/honoka/libhonoka/resultlist.h b/honoka/libhonoka/resultlist.h index ed9cd53..d6af158 100644 --- a/honoka/libhonoka/resultlist.h +++ b/honoka/libhonoka/resultlist.h @@ -53,6 +53,7 @@ WideString Title; int pos; int count(); + int find(WideString str); ResultType kType; vector kouho; }; diff --git a/honoka/src/multiconvertor.cpp b/honoka/src/multiconvertor.cpp index cb70530..ed5e8ae 100644 --- a/honoka/src/multiconvertor.cpp +++ b/honoka/src/multiconvertor.cpp @@ -119,30 +119,65 @@ ResultList MultiConvertor::getResultList(int p,ResultType kt){ results.clear(); result.kouho.clear(); - ResultList l = instance->m_def_convertor->getResultList(p,kt); - for(unsigned int i = 0;i < l.kouho.size();i ++) { - l.kouho[i].label = l.kouho[i].kanji + utf8_mbstowcs(String(" (")) + - utf8_mbstowcs(instance->m_def_convertor->getPropertyName()) + utf8_mbstowcs(String(")")); - } + ResultList l; MultiResultList m; - m.list = l; + // �ᥤ���Convertor����ޤ������� + ResultList t = instance->m_def_convertor->getResultList(p,kt); + m.list.Title = t.Title; + m.list.Yomi = t.Yomi; + m.list.kType = t.kType; + m.list.pos = 0; + m.list.kouho.clear(); m.convertor = instance->m_def_convertor; + // ��ʣ���򡣥ᥤ���Convertor�˴ؤ��Ƥ����פ��⡣ + set d; + for(unsigned int j = 0;j < t.count();j ++) { + if (d.find(t.kouho[j].kanji) == d.end()) { + d.insert(t.kouho[j].kanji); + m.list.kouho.push_back(t.kouho[j]); + } + } results.push_back(m); + // ����¾��Convertor��������� for(unsigned int i = 0;i < instance->convertors.size();i ++) { if (nuc.find(instance->convertors[i]) != nuc.end()) continue; if (instance->convertors[i] != instance->m_def_convertor) { - m.list = instance->convertors[i]->getResultList(instance->m_def_convertor->getPos(),kt); + m.list.Title = t.Title; + m.list.Yomi = t.Yomi; + m.list.kType = t.kType; + m.list.pos = 0; m.convertor = instance->convertors[i]; + m.list.kouho.clear(); + t = instance->convertors[i]->getResultList(instance->m_def_convertor->getPos(),kt); + // ��ʣ���� + d.clear(); + for(unsigned int j = 0;j < t.count();j ++) { + if (d.find(t.kouho[j].kanji) == d.end()) { + d.insert(t.kouho[j].kanji); + m.list.kouho.push_back(t.kouho[j]); + } + } results.push_back(m); } } - for(unsigned int i = 1;i < results.size();i ++) { - for(unsigned int j = 0;j < results[i].list.kouho.size();j ++) { - l.kouho.push_back(ResultEntry(results[i].list.kouho[j].kanji, - results[i].list.kouho[j].kanji + utf8_mbstowcs(String(" (")) + - utf8_mbstowcs(results[i].convertor->getPropertyName()) + utf8_mbstowcs(String(")")))); + // �ꥹ�������� + for(unsigned int i = 0;i < results.size();i ++) { + for(unsigned int j = 0;j < results[i].list.count();j ++) { + int rp = l.find(results[i].list.kouho[j].kanji); + if (rp != -1) { + l.kouho[rp].label = l.kouho[rp].label + utf8_mbstowcs(String(",")) + + utf8_mbstowcs(results[i].convertor->getPropertyName()); + } else { + l.kouho.push_back(ResultEntry(results[i].list.kouho[j].kanji, + results[i].list.kouho[j].kanji + utf8_mbstowcs(String(" (")) + + utf8_mbstowcs(results[i].convertor->getPropertyName()))); + } } } + for(unsigned int i = 0;i < l.count();i ++) { + l.kouho[i].label = l.kouho[i].label + utf8_mbstowcs(String(")")); + } + result = l; return l; }