myWord removeDuplicate(List <myKanji> kanjis, string w, List <myWord> words) { var tHash = new HashSet <string>(); myWord found = null; words.RemoveAll(word => { if (tHash.Contains(word.term)) { return(true); } tHash.Add(word.term); if (kanjis.Exists(kanji => (word.term.Length == 1) && (kanji.val == word.term[0]))) { return(true); } if (w == word.hn || w == word.term) { found = word; return(true); } return(false); }); return(found); }
Span crtWdBlck(myWord wd, bool showBrift) { var s = new Span(); if (showBrift) { #if dict_dist if (!wd.definitions[0].bFormated) #endif { #if sepate_kanji foreach (var kj in wd.term) { s.Inlines.Add(crtBlck(kj)); } #else s.Inlines.Add(crtHb(wd.term)); #endif //s.Inlines.Add(new Run { Text = string.Format(" {0}", wd.hn) }); s.Inlines.Add(new LineBreak()); } s.Inlines.Add(crtDefBlck(wd.definitions[0], 1)); } return(s); }
Span crtWdBlck(myWord wd) { var s = new Span(); #if dict_dist if (!wd.definitions[0].bFormated) #endif if (true) { #if sepate_kanji foreach (var kj in wd.term) { s.Inlines.Add(crtBlck(kj)); } #else s.Inlines.Add(crtHb(wd.term)); #endif s.Inlines.Add(new Run { Text = string.Format(" {0}", wd.hn) }); s.Inlines.Add(new LineBreak()); } if (wd.definitions.Count > 0) { //hv_org error missing define "首相" s.Inlines.Add(crtDefBlck(wd.definitions[0])); } return(s); }
void search(srchCallback callback, string txt) { //= m_preTxt; var ret = dict.Search(txt); List <myWord> words = new List <myWord>(); List <myWord> verbs = new List <myWord>(); //Span s = new Span(); foreach (var kanji in ret) { //display kanji with link callback(myFgTask.qryType.hyperlink, kanji.val); if (kanji.decomposite != "") { callback(myFgTask.qryType.run, kanji.decomposite); callback(myFgTask.qryType.linebreak, null); } //display japanese define callback(myFgTask.qryType.define, kanji.definitions[0]); kanji.definitions.RemoveAt(0); //find kanji define - formated txt var foundKanji = kanji.relatedWords.Find((w) => { return(w.term == kanji.val.ToString()); }); if (foundKanji != null) { //display kanji define (in formated txt) callback(myFgTask.qryType.define, (foundKanji.definitions[0])); } else { //display radical info var rdInfo = dict.Search(kanji.radical.zRadical.ToString()); string zRad = string.Format("Bộ {0} {1} {2} [{3}, {4}] {5}", kanji.radical.iRadical, kanji.radical.zRadical, kanji.radical.hn, kanji.radical.nStrokes, kanji.totalStrokes, kanji.val); { if (kanji.hn != null) { zRad += string.Format(" ({0})", kanji.hn); } if (kanji.simple != '\0') { zRad += string.Format(" simple {0}", kanji.simple); } } callback(myFgTask.qryType.run, zRad); //display other kanji define foreach (var def in kanji.definitions) { callback(myFgTask.qryType.define, (def)); break; } callback(myFgTask.qryType.linebreak, null); } words.AddRange(kanji.relatedWords); verbs.AddRange(kanji.relateVerbs); callback(myFgTask.qryType.linebreak, null); } callback(myFgTask.qryType.linebreak, null); //found word myWord found = null; if (ret.Count > 1) { found = words.Find((w) => { return(w.term == txt); }); } //var sFound = new Span(); if (found != null) { callback(myFgTask.qryType.word, found); callback(myFgTask.qryType.linebreak, null); //remove from list words.Remove(found); } //related word //if (found != null) bg_qryDisplay(sFound); //bg_qryDisplay(new Run { Text = "related word:" }); //bg_qryDisplay(new LineBreak()); int count = 0; foreach (var rWd in words) { if (txt.Contains(rWd.term)) { continue; } #if !show_brift //m_limitContentCnt // (-1) no limit if ((count++) == m_limitContentCnt) { break; } #else { bg_qryDisplay(crtWdBlck(rWd, true)); }