private CodeController(string buildType, CodeHighlightMode mode) { _buildType = buildType; _highlightMode = mode; // We create highlighters for the most used languages: C# and VB.NET _csHighlighter = new Highlighter("cs", new CodeFormatter(_highlightMode)); _vbHighlighter = new Highlighter("vbnet", new CodeFormatter( _highlightMode)); }
public CodeFormatter() { _isFullPage = false; _pageTitle = String.Empty; _xhtmlOptions = new XhtmlOptions(); _highlightMode = CodeHighlightMode.Snippets; _xhtmlOptions.EmitLineNumbers = false; _xhtmlOptions.MarkNthLineNumber = false; _xhtmlOptions.EmitStyleTag = false; }
public static void Create(string buildType, CodeHighlightMode mode) { if (String.Equals(buildType, "conceptual", StringComparison.OrdinalIgnoreCase)) { if (_conceptualHighlighter == null || _conceptualHighlighter._highlightMode != mode) { _conceptualHighlighter = new CodeController(buildType, mode); } } else if (String.Equals(buildType, "reference", StringComparison.OrdinalIgnoreCase)) { if (_referenceHighlighter == null || _referenceHighlighter._highlightMode != mode) { _referenceHighlighter = new CodeController(buildType, mode); } } }
public CodeFormatter(CodeHighlightMode highlightMode) : this() { _highlightMode = highlightMode; }
public CodeController() { _highlightMode = CodeHighlightMode.None; }
protected CodeComponent(BuildAssembler assembler, XPathNavigator configuration, bool isConceptual) : base(assembler, configuration) { try { _tabSize = 4; // this is our default _highlightMode = CodeHighlightMode.IndirectIris; // <options mode="snippets" tabSize="4" // lineNumbers="false" outlining="false" // storage="Memory" separator="..."/> XPathNavigator navigator = configuration.SelectSingleNode("options"); if (navigator != null) { string attribute = navigator.GetAttribute("mode", String.Empty); if (String.IsNullOrEmpty(attribute) == false) { _highlightMode = (CodeHighlightMode)Enum.Parse( typeof(CodeHighlightMode), attribute, true); } attribute = navigator.GetAttribute("tabSize", String.Empty); if (String.IsNullOrEmpty(attribute) == false) { _tabSize = Convert.ToInt32(attribute); } attribute = navigator.GetAttribute("lineNumbers", String.Empty); if (String.IsNullOrEmpty(attribute) == false) { _numberLines = Convert.ToBoolean(attribute); } attribute = navigator.GetAttribute("outlining", String.Empty); if (String.IsNullOrEmpty(attribute) == false) { _outlining = Convert.ToBoolean(attribute); } attribute = navigator.GetAttribute("storage", String.Empty); if (!String.IsNullOrEmpty(attribute)) { _codeRefStorage = (SnippetStorage)Enum.Parse( typeof(SnippetStorage), attribute, true); } attribute = navigator.GetAttribute("separator", String.Empty); if (attribute != null) // it could be empty... { if (isConceptual) { _codeRefSeparator = String.Format("\n{0}\n\n", attribute); } else { if (_highlightMode == CodeHighlightMode.IndirectIris) { _codeRefSeparator = String.Format("\n{0}\n\n", attribute); } else { _codeRefSeparator = String.Format("\n{0}\n", attribute); } } } } } catch (Exception ex) { this.WriteMessage(MessageLevel.Error, ex); } }
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 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)); } }