private void ApplyMultiSnippetInfo(XPathNavigator navigator, SnippetInfo[] arrayInfo, string input) { CodeHighlightMode highlightMode = this.Mode; CodeController codeController = CodeController.GetInstance("conceptual"); if (codeController == null) { return; } IList <SnippetItem> listItems = null; int infoCount = arrayInfo.Length; Dictionary <string, List <SnippetItem> > dicLangItems = new Dictionary <string, List <SnippetItem> >(); // We group the various snippets by the languages... for (int i = 0; i < infoCount; i++) { SnippetInfo snippetInfo = arrayInfo[i]; listItems = _codeRefProvider[snippetInfo]; if (listItems != null) { int itemCount = listItems.Count; for (int j = 0; j < itemCount; j++) { SnippetItem snippet = listItems[j]; List <SnippetItem> list; if (!dicLangItems.TryGetValue(snippet.Language, out list)) { list = new List <SnippetItem>(); dicLangItems.Add(snippet.Language, list); } list.Add(snippet); } } } XmlWriter xmlWriter = navigator.InsertAfter(); xmlWriter.WriteStartElement("snippets"); xmlWriter.WriteAttributeString("reference", input); foreach (KeyValuePair <string, List <SnippetItem> > pair in dicLangItems) { listItems = pair.Value; int itemCount = listItems.Count; xmlWriter.WriteStartElement("snippet"); string codeLang = pair.Key; Highlighter highlighter = codeController.ApplyLanguage( xmlWriter, codeLang); if (highlightMode == CodeHighlightMode.None) { for (int j = 0; j < itemCount; j++) { if (j > 0) { xmlWriter.WriteString(_codeRefSeparator); } xmlWriter.WriteString(listItems[j].Text); } } else if (highlightMode == CodeHighlightMode.IndirectIris) { xmlWriter.WriteStartElement("span"); xmlWriter.WriteAttributeString("name", "SandAssist"); xmlWriter.WriteAttributeString("class", "tgtSentence"); xmlWriter.WriteString(codeLang); xmlWriter.WriteEndElement(); for (int j = 0; j < itemCount; j++) { if (j > 0) { xmlWriter.WriteString(_codeRefSeparator); } xmlWriter.WriteStartElement("span"); xmlWriter.WriteAttributeString("name", "SandAssist"); xmlWriter.WriteAttributeString("class", "srcSentence"); xmlWriter.WriteValue(codeController.Count); xmlWriter.WriteEndElement(); codeController.Register(listItems[j]); } } else { if (highlighter != null) { xmlWriter.WriteStartElement("markup"); // start - markup for (int j = 0; j < listItems.Count; j++) { if (j > 0) { xmlWriter.WriteString(_codeRefSeparator); } StringReader textReader = new StringReader(listItems[j].Text); highlighter.Highlight(textReader, xmlWriter); } xmlWriter.WriteEndElement(); // end - markup } else { for (int j = 0; j < listItems.Count; j++) { if (j > 0) { xmlWriter.WriteString(_codeRefSeparator); } xmlWriter.WriteString(listItems[j].Text); } } } xmlWriter.WriteEndElement(); } xmlWriter.WriteEndElement(); xmlWriter.Close(); navigator.DeleteSelf(); }