protected string GetToolTip(RichTextBox rtb) { string str = rtb.SelectedText; TextExample te = (TextExample)rtb.Tag; string[] astrSelectedWords = str.Split(caSplitChars, StringSplitOptions.RemoveEmptyEntries); string strToolTip = Environment.NewLine; int nIndex = 0; foreach (string strSelectedWord in astrSelectedWords) { nIndex--; // back up one so our pre-increment starts at the next word while (++nIndex < te.Count) { WordExample we = te[nIndex]; if (we.Word == strSelectedWord) { strToolTip += we.InnerXml + Environment.NewLine + Environment.NewLine; break; } } } return(strToolTip); }
protected RichTextBox InitializeRTB(TextExample te) { RichTextBox rtb = new RichTextBox(); rtb.Multiline = false; rtb.Text = te.Text; rtb.ReadOnly = true; rtb.AutoWordSelection = true; rtb.BorderStyle = BorderStyle.FixedSingle; rtb.Font = m_fontExamples; rtb.WordWrap = false; if (m_g == null) { m_g = Graphics.FromHwnd(this.Handle); } Size sz = TextRenderer.MeasureText(m_g, te.Text, m_fontExamples); sz.Height += m_nPadFactor; sz.Width += m_nIndentFactor; rtb.Size = sz; rtb.Margin = m_paddingRTF; rtb.SelectionIndent = m_nIndentFactor; rtb.Tag = te; rtb.MouseUp += new MouseEventHandler(rtb_MouseUp); return(rtb); }
protected void AddMapToTeList(string strMorphname, TextExample te) { List <TextExample> teList = null; if (!m_mapTextExamples.TryGetValue(strMorphname, out teList)) { teList = new List <TextExample>(); } if (!teList.Contains(te)) { teList.Add(te); } else { return; } m_mapTextExamples[strMorphname] = teList; }
protected void LoadXmlFile(string strTbxAnaXmlFilename) { string strAnaXmlFileContents = null; try { strAnaXmlFileContents = File.ReadAllText(strTbxAnaXmlFilename); } catch (Exception ex) { string strError = String.Format("Unable to read the XML file:{0}{0}'{1}'{0}{0}cause: {2}", Environment.NewLine, strTbxAnaXmlFilename, ex.Message); if (ex.InnerException != null) { strError += String.Format("{0}{0}cause: {1}", Environment.NewLine, ex.InnerException.Message); } MessageBox.Show(strError, cstrCaption); return; } #if !UseDataSet XmlDocument doc = new XmlDocument(); try { doc.LoadXml(strAnaXmlFileContents); XPathNavigator navigator = doc.CreateNavigator(); XPathNodeIterator nodeTextExamples = navigator.Select("/shoebox/t"); XPathExpression xpeTextExampleValue = navigator.Compile("@value"); XPathExpression xpeWords = navigator.Compile("w"); XPathExpression xpeAnalysis = navigator.Compile("a"); XPathExpression xpeCategory = navigator.Compile("cat"); while (nodeTextExamples.MoveNext()) { string strTextExampleValue = GetExpressionValue(nodeTextExamples, xpeTextExampleValue); string strTextExampleXML = nodeTextExamples.Current.OuterXml; TextExample te = new TextExample(strTextExampleValue, strTextExampleXML); XPathNodeIterator nodeWords = nodeTextExamples.Current.Select(xpeWords); while (nodeWords.MoveNext()) { string strWordValue = GetExpressionValue(nodeWords, xpeTextExampleValue); string strAnalysis = GetExpressionValue(nodeWords, xpeAnalysis); string strCategory = GetExpressionValue(nodeWords, xpeCategory); string strWordXML = nodeWords.Current.OuterXml; WordExample we = new WordExample(strWordValue, strAnalysis, strCategory, strWordXML); te.Add(we); // probably expand this, but for now, get an indexing mechanism to these examples // split the analysis content to get the list of morphenames int nIndex = 0; if (strAnalysis[0] == '%') { nIndex = strAnalysis.IndexOf('%', 2); System.Diagnostics.Debug.Assert(nIndex != -1); strAnalysis = strAnalysis.Substring(nIndex + 1); } string[] astrAmbiguities = strAnalysis.Split(caSplitAmbsChars, StringSplitOptions.RemoveEmptyEntries); foreach (string strAmbiguity in astrAmbiguities) { string strType = cstrPOS; string[] astrMorphnames = strAmbiguity.Split(caSplitChars, StringSplitOptions.RemoveEmptyEntries); foreach (string strMorphname in astrMorphnames) { // save the type of the token in one map (so we can trigger tooltips on the full list m_mapTokensToType[strMorphname] = strType; strType = cstrMorphname; // put the list of TextExamples into another map keyed on the token (but it may // already exist) AddMapToTeList(strMorphname, te); } } } } } catch (Exception ex) { string strError = String.Format("Unable to Serialize the XML file:{0}{0}'{1}'{0}{0}cause: {2}", Environment.NewLine, strTbxAnaXmlFilename, ex.Message); if (ex.InnerException != null) { strError += String.Format("{0}{0}cause: {1}", Environment.NewLine, ex.InnerException.Message); } strError += String.Format("{0}{0}It looks like it contains something unexpected...{0}send the file '{1}' to [email protected] along with this error message", Environment.NewLine, strTbxAnaXmlFilename); MessageBox.Show(strError, cstrCaption); return; } #else if (strAnaXmlFileContents.IndexOf("xmlns=\"http://www.sil.org/computing/schemas/AnaTextExamples.xsd\"") == -1) { strAnaXmlFileContents = strAnaXmlFileContents.Replace( "shoebox type=\"CarlaStudioANA\"", "shoebox type=\"CarlaStudioANA\" xmlns=\"http://www.sil.org/computing/schemas/AnaTextExamples.xsd\""); } MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strAnaXmlFileContents)); AnaTextExamplesXML xmlFile = new AnaTextExamplesXML(); try { xmlFile.ReadXml(ms); } catch (Exception ex) { string strError = String.Format("Unable to Serialize the XML file:{0}{0}'{1}'{0}{0}cause: {2}", Environment.NewLine, strTbxAnaXmlFilename, ex.Message); if (ex.InnerException != null) { strError += String.Format("{0}{0}cause: {1}", Environment.NewLine, ex.InnerException.Message); } strError += String.Format("{0}{0}It looks like it contains something unexpected...{0}send the file '{1}' to [email protected] along with this error message", Environment.NewLine, strTbxAnaXmlFilename); MessageBox.Show(strError, cstrCaption); return; } /* * AnaTextExamplesXML.shoeboxRow aSbxRow = null; * if (xmlFileCorpus != null) * { * System.Diagnostics.Debug.Assert(xmlFileCorpus.shoebox.Count > 0); * aSbxRow = xmlFileCorpus.shoebox[0]; * } */ foreach (AnaTextExamplesXML.tRow aTRow in xmlFile.t) { /* * if (xmlFileCorpus != null) * xmlFileCorpus.t.AddtRow(aTRow.value, aSbxRow); */ TextExample te = new TextExample(aTRow.value, aTRow.value); foreach (AnaTextExamplesXML.wRow aWRow in aTRow.GetwRows()) { /* * if (xmlFileCorpus != null) * xmlFileCorpus.w.AddwRow(aWRow.value, aWRow.a, aWRow.d, aWRow.cat, aWRow.u, * ((aWRow.IspNull()) ? null : aWRow.p), * ((aWRow.IsnNull()) ? null : aWRow.n), * ((aWRow.IsfNull()) ? null : aWRow.f), aTRow); */ string strAnalysis = aWRow.a; WordExample we = new WordExample(aWRow.value, strAnalysis, aWRow.cat); te.Add(we); // probably expand this, but for now, get an indexing mechanism to these examples // split the analysis content to get the list of morphenames int nIndex = 0; if (strAnalysis[0] == '%') { nIndex = strAnalysis.IndexOf('%', 2); System.Diagnostics.Debug.Assert(nIndex != -1); strAnalysis = strAnalysis.Substring(nIndex + 1); } string[] astrAmbiguities = strAnalysis.Split(caSplitAmbsChars, StringSplitOptions.RemoveEmptyEntries); foreach (string strAmbiguity in astrAmbiguities) { string strType = cstrPOS; string[] astrMorphnames = strAmbiguity.Split(caSplitChars, StringSplitOptions.RemoveEmptyEntries); foreach (string strMorphname in astrMorphnames) { // save the type of the token in one map (so we can trigger tooltips on the full list m_mapTokensToType[strMorphname] = strType; strType = cstrMorphname; // put the list of TextExamples into another map keyed on the token (but it may // already exist) AddMapToTeList(strMorphname, te); } } } } #endif }