Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        private void ApplyMultiSnippetInfo(XPathNavigator navigator,
                                           SnippetInfo[] arrayInfo, string input)
        {
            CodeHighlightMode highlightMode  = this.Mode;
            CodeController    codeController = CodeController.GetInstance("reference");

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

            foreach (KeyValuePair <string, List <SnippetItem> > pair in dicLangItems)
            {
                listItems = pair.Value;
                int    itemCount = listItems.Count;
                string codeLang  = pair.Key;

                if (highlightMode == CodeHighlightMode.None)
                {
                    xmlWriter.WriteStartElement("code");      // start - code
                    xmlWriter.WriteAttributeString("language",
                                                   CodeController.GetCodeAttribute(codeLang));

                    for (int j = 0; j < itemCount; j++)
                    {
                        if (j > 0)
                        {
                            xmlWriter.WriteStartElement("pre");
                            xmlWriter.WriteString(_codeRefSeparator);
                            xmlWriter.WriteEndElement();
                        }
                        xmlWriter.WriteString(listItems[j].Text);
                    }

                    xmlWriter.WriteEndElement();              // end - code
                }
                else if (highlightMode == CodeHighlightMode.DirectIris)
                {
                    Highlighter highlighter = codeController.ApplyLanguage(
                        null, codeLang);

                    codeController.BeginDirect(xmlWriter, codeLang);

                    if (highlighter != null)
                    {
                        for (int j = 0; j < itemCount; j++)
                        {
                            if (j > 0)
                            {
                                xmlWriter.WriteStartElement("pre");
                                xmlWriter.WriteString(_codeRefSeparator);
                                xmlWriter.WriteEndElement();
                            }

                            StringReader textReader = new StringReader(
                                listItems[j].Text);
                            highlighter.Highlight(textReader, xmlWriter);
                        }
                    }
                    else
                    {
                        for (int j = 0; j < itemCount; j++)
                        {
                            if (j > 0)
                            {
                                xmlWriter.WriteStartElement("pre");
                                xmlWriter.WriteString(_codeRefSeparator);
                                xmlWriter.WriteEndElement();
                            }
                            xmlWriter.WriteString(listItems[j].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(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]);
                    }

                    xmlWriter.WriteEndElement();              // end - code
                }
                else
                {
                    Highlighter highlighter = codeController.ApplyLanguage(
                        xmlWriter, codeLang);

                    if (highlighter != null)
                    {
                        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);
                        }
                    }
                    else
                    {
                        for (int j = 0; j < listItems.Count; j++)
                        {
                            if (j > 0)
                            {
                                xmlWriter.WriteString(_codeRefSeparator);
                            }
                            xmlWriter.WriteString(listItems[j].Text);
                        }
                    }
                }
            }

            xmlWriter.Close();

            navigator.DeleteSelf();
        }
Esempio n. 3
0
        private void ApplyCodes(XmlDocument document, string key)
        {
            CodeHighlightMode highlightMode  = this.Mode;
            CodeController    codeController = CodeController.GetInstance("reference");

            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))
                {
                    codeLang = navigator.GetAttribute("lang", String.Empty);
                }
                if (String.IsNullOrEmpty(codeLang))
                {
                    navigator.SetValue(inputText.ToString());

                    continue;
                }

                XmlWriter xmlWriter = navigator.InsertAfter();

                if (highlightMode == CodeHighlightMode.None)
                {
                    xmlWriter.WriteString(inputText.ToString());
                }
                else if (highlightMode == CodeHighlightMode.DirectIris)
                {
                    Highlighter highlighter = codeController.ApplyLanguage(
                        null, codeLang);

                    codeController.BeginDirect(xmlWriter, codeLang);

                    if (highlighter != null)
                    {
                        StringReader textReader = new StringReader(
                            inputText.ToString());
                        highlighter.Highlight(textReader, xmlWriter);
                    }
                    else
                    {
                        xmlWriter.WriteString(inputText.ToString());
                    }

                    codeController.EndDirect(xmlWriter, codeLang);
                }
                else if (highlightMode == CodeHighlightMode.IndirectIris)
                {
                    xmlWriter.WriteStartElement("code");    // start - code
                    xmlWriter.WriteAttributeString("language", codeLang);

                    // <xsl:when test="@class='tgtSentence' or @class='srcSentence'">
                    xmlWriter.WriteStartElement("span");
                    xmlWriter.WriteAttributeString("name", "SandAssist");
                    xmlWriter.WriteAttributeString("class", "tgtSentence");
                    xmlWriter.WriteString(codeLang);
                    xmlWriter.WriteEndElement();

                    xmlWriter.WriteString(inputText.ToString());

                    xmlWriter.WriteEndElement();               // end - code
                }
                else
                {
                    xmlWriter.WriteStartElement("code");    // start - code
                    Highlighter highlighter = codeController.ApplyLanguage(
                        xmlWriter, codeLang);

                    if (highlighter != null)
                    {
                        StringReader textReader = new StringReader(
                            inputText.ToString());
                        highlighter.Highlight(textReader, xmlWriter);
                    }
                    else
                    {
                        xmlWriter.WriteString(inputText.ToString());
                    }

                    xmlWriter.WriteEndElement();               // end - code
                }

                xmlWriter.Close();

                navigator.DeleteSelf();
            }
        }