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 }
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); }