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(); }
private void ApplySnippetInfo(XPathNavigator navigator, SnippetInfo snippetInfo, string input) { CodeHighlightMode highlightMode = this.Mode; CodeController codeController = CodeController.GetInstance("conceptual"); if (codeController == null) { return; } IList <SnippetItem> listItems = _codeRefProvider[snippetInfo]; if (listItems != null) { XmlWriter xmlWriter = navigator.InsertAfter(); xmlWriter.WriteStartElement("snippets"); // start - snippets xmlWriter.WriteAttributeString("reference", input); int itemCount = listItems.Count; for (int i = 0; i < itemCount; i++) { SnippetItem snippet = listItems[i]; xmlWriter.WriteStartElement("snippet"); // start - snippet Highlighter highlighter = codeController.ApplyLanguage( xmlWriter, snippet.Language); if (highlightMode == CodeHighlightMode.None) { xmlWriter.WriteString(snippet.Text); } else if (highlightMode == CodeHighlightMode.IndirectIris) { xmlWriter.WriteStartElement("span"); xmlWriter.WriteAttributeString("name", "SandAssist"); xmlWriter.WriteAttributeString("class", "tgtSentence"); xmlWriter.WriteString(snippet.Language); xmlWriter.WriteEndElement(); xmlWriter.WriteString(snippet.Text); } else { if (highlighter != null) { xmlWriter.WriteStartElement("markup"); // start - markup StringReader textReader = new StringReader( snippet.Text); highlighter.Highlight(textReader, xmlWriter); xmlWriter.WriteEndElement(); // end - markup } else { xmlWriter.WriteString(snippet.Text); } } xmlWriter.WriteEndElement(); // end - snippet } xmlWriter.WriteEndElement(); // end - snippets xmlWriter.Close(); navigator.DeleteSelf(); } else { base.WriteMessage(MessageLevel.Warn, String.Format( "The snippet with identifier '{0}' is was found.", snippetInfo)); } }
private void ApplyCodes(XmlDocument document, string key) { CodeHighlightMode highlightMode = this.Mode; CodeController codeController = CodeController.GetInstance("conceptual"); if (codeController == null) { return; } XPathNavigator docNavigator = document.CreateNavigator(); XPathNodeIterator iterator = docNavigator.Select(_codeSelector); XPathNavigator navigator = null; XPathNavigator[] arrNavigator = BuildComponentUtilities.ConvertNodeIteratorToArray(iterator); if (arrNavigator == null || arrNavigator.Length == 0) { return; } int tabSize = this.TabSize; int itemCount = arrNavigator.Length; for (int i = 0; i < itemCount; i++) { navigator = arrNavigator[i]; if (navigator == null) // not likely! { continue; } string codeText = navigator.Value; if (String.IsNullOrEmpty(codeText)) { this.WriteMessage(MessageLevel.Warn, "CodeHighlightComponent: source code is null/empty."); continue; } StringBuilder inputText = CodeFormatter.StripLeadingSpaces( codeText, tabSize); if (inputText == null || inputText.Length == 0) { continue; } string codeLang = navigator.GetAttribute("language", String.Empty); if (String.IsNullOrEmpty(codeLang)) { navigator.SetValue(inputText.ToString()); continue; } inputText.Replace("<codeFeaturedElement>", String.Empty); inputText.Replace("<codeFeaturedElement/>", String.Empty); inputText.Replace("<placeholder>", String.Empty); inputText.Replace("<placeholder/>", String.Empty); inputText.Replace("<comment>", String.Empty); inputText.Replace("<comment/>", String.Empty); inputText.Replace("<legacyItalic>", String.Empty); inputText.Replace("<legacyItalic/>", String.Empty); _codeCount++; XmlWriter xmlWriter = navigator.InsertAfter(); xmlWriter.WriteStartElement("snippets"); // start - snippets xmlWriter.WriteAttributeString("reference", _codeCount.ToString()); xmlWriter.WriteStartElement("snippet"); // start - snippet Highlighter highlighter = codeController.ApplyLanguage( xmlWriter, codeLang); if (highlightMode == CodeHighlightMode.None) { xmlWriter.WriteString(inputText.ToString()); } else if (highlightMode == CodeHighlightMode.IndirectIris) { xmlWriter.WriteStartElement("span"); xmlWriter.WriteAttributeString("name", "SandAssist"); xmlWriter.WriteAttributeString("class", "tgtSentence"); xmlWriter.WriteString(codeLang); xmlWriter.WriteEndElement(); xmlWriter.WriteString(inputText.ToString()); } else { if (highlighter != null) { if (highlightMode == CodeHighlightMode.DirectIris) { xmlWriter.WriteStartElement("markup"); // start - markup } StringReader textReader = new StringReader( inputText.ToString()); highlighter.Highlight(textReader, xmlWriter); if (highlightMode == CodeHighlightMode.DirectIris) { xmlWriter.WriteEndElement(); // end - markup } } else { xmlWriter.WriteString(inputText.ToString()); } } xmlWriter.WriteEndElement(); // end - snippet xmlWriter.WriteEndElement(); // end - snippets xmlWriter.Close(); navigator.DeleteSelf(); } }
private void ApplyCode(XPathNavigator docNavigator) { CodeController codeController = CodeController.GetInstance("reference"); if (codeController == null || codeController.Mode != CodeHighlightMode.IndirectIris) { return; } XPathNodeIterator iterator = docNavigator.Select(_codeSelector); if (iterator == null || iterator.Count == 0) { return; } XPathNavigator navigator = null; XPathNavigator[] arrNavigator = BuildComponentUtilities.ConvertNodeIteratorToArray(iterator); int itemCount = arrNavigator.Length; for (int i = 0; i < itemCount; i++) { navigator = arrNavigator[i]; if (navigator == null) { continue; } string codeLang = navigator.Value; if (navigator.MoveToParent() && String.Equals(navigator.Name, "pre")) { XPathNavigator placeHolder = navigator.SelectSingleNode( "span[@name='SandAssist' and @class='tgtSentence']"); if (placeHolder != null) { placeHolder.DeleteSelf(); } Highlighter highlighter = codeController.ApplyLanguage( null, codeLang); XPathNodeIterator snipIterator = navigator.Select( "span[@name='SandAssist' and @class='srcSentence']"); XPathNavigator[] arrSnipNavigator = BuildComponentUtilities.ConvertNodeIteratorToArray(snipIterator); if (arrSnipNavigator == null || arrSnipNavigator.Length == 0) { string codeText = navigator.Value; if (String.IsNullOrEmpty(codeText) == false) { if (highlighter != null) { XmlWriter xmlWriter = navigator.InsertAfter(); StringReader textReader = new StringReader(codeText); highlighter.Highlight(textReader, xmlWriter); // For the two-part or indirect, we add extra line-break // since this process delete the last extra line. xmlWriter.WriteStartElement("br"); // start - br xmlWriter.WriteEndElement(); // end - br xmlWriter.Close(); navigator.DeleteSelf(); } } } else { XPathNavigator snipNavigator = null; int snipCount = arrSnipNavigator.Length; for (int j = 0; j < snipCount; j++) { snipNavigator = arrSnipNavigator[j]; if (snipNavigator == null) { continue; } int snipIndex = snipNavigator.ValueAsInt; SnippetItem item = codeController[snipIndex]; if (item == null) { this.WriteMessage(MessageLevel.Warn, "A code snippet specified could not be found. See next message for details."); snipNavigator.DeleteSelf(); continue; } string codeText = item.Text; if (String.IsNullOrEmpty(codeText) == false) { XmlWriter xmlWriter = snipNavigator.InsertAfter(); if (highlighter != null) { StringReader textReader = new StringReader(codeText); highlighter.Highlight(textReader, xmlWriter); } else { xmlWriter.WriteString(codeText); } xmlWriter.Close(); snipNavigator.DeleteSelf(); } } } } } }
private void ApplyCode(XPathNavigator docNavigator, XPathExpression codeSelector) { CodeController codeController = CodeController.GetInstance("conceptual"); if (codeController == null || codeController.Mode != CodeHighlightMode.IndirectIris) { return; } XPathNodeIterator iterator = docNavigator.Select(codeSelector); if (iterator == null || iterator.Count == 0) { return; } XPathNavigator navigator = null; XPathNavigator[] arrNavigator = BuildComponentUtilities.ConvertNodeIteratorToArray(iterator); int itemCount = arrNavigator.Length; string spanNamespace = "http://ddue.schemas.microsoft.com/authoring/2003/5"; string attrName = String.Empty; string attrClass = String.Empty; for (int i = 0; i < itemCount; i++) { navigator = arrNavigator[i]; if (navigator == null) { continue; } string codeLang = null; XPathNodeIterator nodeIterator = navigator.SelectChildren("span", spanNamespace); XPathNavigator placeHolder = null; if (nodeIterator == null || nodeIterator.Count == 0) { continue; } XPathNavigator[] arrSnipNavigator = BuildComponentUtilities.ConvertNodeIteratorToArray(nodeIterator); int nodeCount = arrSnipNavigator.Length; XPathNavigator tempHolder = arrSnipNavigator[0]; attrName = tempHolder.GetAttribute("name", String.Empty); attrClass = tempHolder.GetAttribute("class", String.Empty); if (String.Equals(attrName, "SandAssist") && String.Equals(attrClass, "tgtSentence")) { placeHolder = tempHolder; } if (placeHolder != null) { codeLang = placeHolder.Value; placeHolder.DeleteSelf(); } else { base.WriteMessage(MessageLevel.Info, "No code language found."); continue; } Highlighter highlighter = codeController.ApplyLanguage( null, codeLang); if (nodeCount == 1) { string codeText = navigator.Value; if (!String.IsNullOrEmpty(codeText)) { codeText = codeText.Trim(); XmlWriter xmlWriter = navigator.InsertAfter(); if (highlighter != null) { StringReader textReader = new StringReader(codeText); highlighter.Highlight(textReader, xmlWriter); // For the two-part or indirect, we add extra line-break // since this process delete the last extra line. xmlWriter.WriteStartElement("br"); // start - br xmlWriter.WriteEndElement(); // end - br } else { xmlWriter.WriteString(codeText); } xmlWriter.Close(); navigator.DeleteSelf(); } } else { XPathNavigator snipNavigator = null; for (int j = 1; j < nodeCount; j++) { snipNavigator = arrSnipNavigator[j]; if (snipNavigator == null) { base.WriteMessage(MessageLevel.Warn, "Null navigator!"); continue; } attrName = snipNavigator.GetAttribute("name", String.Empty); attrClass = snipNavigator.GetAttribute("class", String.Empty); if (String.Equals(attrName, "SandAssist") == false || String.Equals(attrClass, "srcSentence") == false) { base.WriteMessage(MessageLevel.Warn, attrName); base.WriteMessage(MessageLevel.Warn, attrClass); continue; } int snipIndex = snipNavigator.ValueAsInt; SnippetItem item = codeController[snipIndex]; string codeText = item.Text; if (!String.IsNullOrEmpty(codeText)) { codeText = codeText.Trim(); XmlWriter xmlWriter = snipNavigator.InsertAfter(); if (highlighter != null) { StringReader textReader = new StringReader(codeText); highlighter.Highlight(textReader, xmlWriter); } else { xmlWriter.WriteString(codeText); } xmlWriter.Close(); snipNavigator.DeleteSelf(); } } } } }
private void ApplySnippetInfo(XPathNavigator navigator, SnippetInfo snippetInfo, string input) { CodeHighlightMode highlightMode = this.Mode; CodeController codeController = CodeController.GetInstance("reference"); if (codeController == null) { return; } IList <SnippetItem> listItems = _codeRefProvider[snippetInfo]; if (listItems != null) { XmlWriter xmlWriter = navigator.InsertAfter(); int itemCount = listItems.Count; for (int i = 0; i < itemCount; i++) { SnippetItem snippet = listItems[i]; string codeLang = snippet.Language; if (highlightMode == CodeHighlightMode.None) { xmlWriter.WriteStartElement("code"); // start - code xmlWriter.WriteAttributeString("language", CodeController.GetCodeAttribute(codeLang)); xmlWriter.WriteString(snippet.Text); xmlWriter.WriteEndElement(); // end - code } else if (highlightMode == CodeHighlightMode.DirectIris) { Highlighter highlighter = codeController.ApplyLanguage( null, codeLang); codeController.BeginDirect(xmlWriter, codeLang); if (highlighter != null) { StringReader textReader = new StringReader(snippet.Text); highlighter.Highlight(textReader, xmlWriter); } else { xmlWriter.WriteString(snippet.Text); } codeController.EndDirect(xmlWriter, codeLang); } else if (highlightMode == CodeHighlightMode.IndirectIris) { xmlWriter.WriteStartElement("code"); // start - code xmlWriter.WriteAttributeString("language", CodeController.GetCodeAttribute(codeLang)); // <xsl:when test="@class='tgtSentence' or @class='srcSentence'"> xmlWriter.WriteStartElement("span"); xmlWriter.WriteAttributeString("name", "SandAssist"); xmlWriter.WriteAttributeString("class", "tgtSentence"); xmlWriter.WriteString(snippet.Language); xmlWriter.WriteEndElement(); xmlWriter.WriteString(snippet.Text); xmlWriter.WriteEndElement(); // end - code } else { Highlighter highlighter = codeController.ApplyLanguage( xmlWriter, snippet.Language); if (highlighter != null) { StringReader textReader = new StringReader( snippet.Text); highlighter.Highlight(textReader, xmlWriter); } else { xmlWriter.WriteString(snippet.Text); } } } xmlWriter.Close(); navigator.DeleteSelf(); } else { base.WriteMessage(MessageLevel.Warn, String.Format( "The snippet with identifier '{0}' is was found.", snippetInfo)); } }