コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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));
                }