Ejemplo n.º 1
0
        void ShowSearchRes(SrchResult res)
        {
            var    data     = convJsData(res);
            var    jsTxt    = genJsTxt(data);
            string htmlTxt  = genHtmlTxt(jsTxt);
            string filename = string.Format(@"{0}{1}", Path.GetTempPath(), "page.htm");

            File.WriteAllText(filename, htmlTxt);
#if use_chromium
            //create json data [title, texthtml]
            m_wb.Load(filename);
#elif use_gecko
            m_wb.Navigate(filename);
            m_wb.AddMessageEventListener("openTitle", OnOpenTitle);
#else
            var listView1 = m_lstV;
            listView1.Clear();
            listView1.Columns.Add("content");
            listView1.Columns.Add("title");
            listView1.Columns.Add("paragraph");
            listView1.Columns.Add("pos");
            listView1.Columns.Add("diff");
            listView1.Columns.Add("detail");
            listView1.GridLines = true;
            foreach (var rec in res.recs)
            {
                //var tempTxt = string.Format("{0} {1} {2} {3}",
                //    string.Join(" ", rec.path.Select((v)=>v.content).ToArray()),
                //    rec.d, rec.w.titleId, rec.w.parId);
                var li      = listView1.Items.Add(string.Join(" ", rec.detail.Select((v) => v.content)));
                var titleId = rec.detail[0].titleId;
                var sub     = li.SubItems.Add(res.titles.Find((t) => t.ID == titleId).zTitle);
                sub.Tag = rec.detail[0].titleId;
                li.SubItems.Add(string.Join(" ", rec.detail.Select(v => v.parId)));
                li.SubItems.Add(string.Join(" ", rec.detail.Select(v => v.pos)));
                li.SubItems.Add(rec.d.ToString());
                var w      = rec.detail[0];
                var parId  = w.parId;
                var parTxt = res.paragraphs.Find((t) => t.ID == parId).content;
                var txt    = parTxt.Substring(0, w.pos) + "[" + w.content + "]" + parTxt.Substring(w.pos + w.content.Length);
                li.SubItems.Add(parTxt);
            }
#endif
        }
Ejemplo n.º 2
0
        List <MarkedTitle> convJsData(SrchResult res)
        {
            var tmr = new MyTimer("convJsData");
            var lst = new List <MarkedTitle>();

            foreach (var rec in res.recs)
            {
                var mt = new MarkedTitle();
                mt.titleId = rec.detail[0].titleId;
                mt.title   = res.titles.Find((t) => t.ID == mt.titleId).title;
                //<par,[point]>
                var tDict  = new Dictionary <UInt64, List <int[]> >();
                var parLst = new List <MyParagraph>();
                foreach (var w in rec.detail)
                {
                    var par = res.paragraphs.Find(p => p.ID == w.parId);
                    if (tDict.ContainsKey(par.ID))
                    {
                        tDict[par.ID].Add(new int[] { w.pos, w.content.Length });
                        tDict[par.ID].Sort((v1, v2) => v1[0] - v2[0]);
                    }
                    else
                    {
                        tDict[par.ID] = new List <int[]>
                        {
                            new int[] { w.pos, w.content.Length }
                        };
                        parLst.Add(par);
                    }
                }
                //split
                mt.txtLst = new List <MarkedTxt>();
                foreach (var p in tDict)
                {
                    string txt = parLst.Find(par => par.ID == p.Key).content;
                    //find before [.]
                    //find after [.]
                    var points = p.Value;
                    var b      = txt.LastIndexOf('.', points[0][0]);
                    b = b == -1 ? 0 : b + 1;
                    var e = txt.IndexOf('.', points[points.Count - 1][0]);
                    e = e == -1 ? txt.Length - 1 : e;
                    int cur = b;
                    int n;
                    foreach (var point in p.Value)
                    {
                        // txt before [point]
                        var offset = point[0];
                        var len    = point[1];

                        if (offset > cur)
                        {
                            n = offset - cur;
                            if (n > 0)
                            {
                                n = adjBegin(txt, offset, Math.Min(n, 50));
                            }

                            mt.txtLst.Add(new MarkedTxt()
                            {
                                txt = txt.Substring(offset - n, n)
                            });
                        }
                        mt.txtLst.Add(new MarkedTxt()
                        {
                            txt   = txt.Substring(offset, len) + " ",
                            style = 1
                        });
                        cur = offset + len;
                    }
                    //[point] txt after
                    n = e - cur;
                    if (n > 0)
                    {
                        n = adjEnd(txt, cur, Math.Min(n, 50));
                        mt.txtLst.Add(new MarkedTxt()
                        {
                            txt = txt.Substring(cur, n) + "\v"
                        });
                    }
                }

                lst.Add(mt);
            }
            return(lst);
        }