示例#1
0
        //Filter all the CodeSnippeds by the asigned Values
        public void FilterCodeSnippeds()
        {
            var bc = new BrushConverter();

            //Give all filter values and recieve a list with Items
            List <SnippetInfo> snippets = DbSnippets.GetFilteredSnippeds(
                SearchBox.Text,
                Language.SelectedItem.ToString(),
                Converter.StringToDateFilter(DateType.SelectedItem.ToString()),
                Converter.StringToTypefilter(SearchType.SelectedItem.ToString())
                );

            List <SnippetUI> items = new List <SnippetUI>();

            for (int i = 0; i < snippets.Count; i++)
            {
                items.Add(new SnippetUI(snippets[i]._Name, DbCodeLanguage.ToString(snippets[i]._LanguageID)));
            }


            Page.Containerr.Children.Clear();
            foreach (SnippetInfo i in snippets)
            {
                SnippetItem item = new SnippetItem(i, Page, this)
                {
                    Width = Page.Containerr.Width
                };
                Page.Containerr.Children.Add(item);
            }
            Page.ViewMode = false;
        }
示例#2
0
        public void Register(SnippetItem item)
        {
            if (_listSnippets == null)
            {
                _listSnippets = new List <SnippetItem>();
            }

            _listSnippets.Add(item);
        }
示例#3
0
        /// <summary>
        /// The creates the configuration information or settings required by the
        /// target component for the build process.
        /// </summary>
        /// <param name="group">
        /// A build group, <see cref="BuildGroup"/>, representing the documentation
        /// target for configuration.
        /// </param>
        /// <param name="writer">
        /// An <see cref="XmlWriter"/> object used to create one or more new
        /// child nodes at the end of the list of child nodes of the current node.
        /// </param>
        /// <returns>
        /// Returns <see langword="true"/> for a successful configuration;
        /// otherwise, it returns <see langword="false"/>.
        /// </returns>
        /// <remarks>
        /// The <see cref="XmlWriter"/> writer passed to this configuration object
        /// may be passed on to other configuration objects, so do not close or
        /// dispose it.
        /// </remarks>
        public override bool Configure(BuildGroup group, XmlWriter writer)
        {
            BuildExceptions.NotNull(group, "group");
            BuildExceptions.NotNull(writer, "writer");

            if (!this.Enabled || !this.IsInitialized)
            {
                return(false);
            }

            Debug.Assert(_settings != null, "The settings object is required.");
            if (_settings == null || _context == null)
            {
                return(false);
            }
            BuildStyle buildStyle = _settings.Style;

            Debug.Assert(buildStyle != null, "The style object cannot be null (or Nothing).");
            if (buildStyle == null)
            {
                return(false);
            }

            //<component type="Sandcastle.Components.ReferenceCodeComponent" assembly="$(SandAssistComponent)">
            //    <options mode="IndirectIris" tabSize="4" lineNumbers="true" outlining="false" storage="Sqlite" separator="..."/>
            //
            //    <!--The following options are for processing codeReference tags in the
            //    reference help.
            //    It is a replacement of the ExampleComponent, providing better coloring,
            //    minimum memory usage etc.
            //
            //    $codeSnippets
            //      @storage: * Indicates where the code snippets should be stored after loading
            //                * Possible values are
            //                     - Memory: the snippets are stored in memory similar to
            //                               the ExampleComponent.
            //                     - Database: the snippets are stored in Sqlite database.
            //                * Default: Database
            //      @separator: * For multi-parts snippets, this defines the separator...
            //                  * Default: ...-->
            //
            //    <!--<codeSnippets>
            //        <codeSnippet source=".\CodeSnippetSample.xml" format="Sandcastle" />
            //    </codeSnippets>-->
            //    <SandcastleItem name="%CodeSnippets%" />
            //</component>

            writer.WriteStartElement("options");  //start: options
            writer.WriteAttributeString("mode", _highlightMode);
            writer.WriteAttributeString("tabSize", _tabSize.ToString());
            writer.WriteAttributeString("lineNumbers", _showLineNumbers.ToString());
            writer.WriteAttributeString("outlining", _showOutlining.ToString());
            writer.WriteAttributeString("storage", _snippetStorage.ToString());
            writer.WriteAttributeString("separator", _snippetSeparator);
            writer.WriteEndElement();             //end: options

            IList <CodeSnippetContent> listSnippets = group.SnippetContents;

            if (listSnippets != null && listSnippets.Count != 0)
            {
                writer.WriteStartElement("codeSnippets");  // start - codeSnippets

                int contentCount = listSnippets.Count;
                for (int i = 0; i < contentCount; i++)
                {
                    CodeSnippetContent snippetContent = listSnippets[i];
                    if (snippetContent == null || snippetContent.IsEmpty)
                    {
                        continue;
                    }
                    writer.WriteStartElement("codeSnippet"); // start - codeSnippet
                    writer.WriteAttributeString("source", snippetContent.ContentFile);
                    writer.WriteAttributeString("format", "Sandcastle");
                    writer.WriteEndElement();                // end - codeSnippet
                }

                writer.WriteEndElement();                  // end - codeSnippets
            }

            SnippetContent snippets = buildStyle.Snippets;

            if (snippets != null && snippets.Count != 0)
            {
                writer.WriteStartElement("codeSources");  // start - codeSources

                for (int i = 0; i < snippets.Count; i++)
                {
                    SnippetItem snippetItem = snippets[i];
                    if (snippetItem == null || snippetItem.IsEmpty)
                    {
                        continue;
                    }
                    writer.WriteStartElement("codeSource"); // start - codeSource
                    writer.WriteAttributeString("source", snippetItem.Source);
                    writer.WriteAttributeString("format", "Sandcastle");
                    writer.WriteEndElement();                // end - codeSource
                }

                // The excludedUnits is required by the SnippetComponent,
                // we maintain that...
                writer.WriteStartElement("excludedUnits"); // start - excludedUnits
                IList <string> excludedUnits = snippets.ExcludedUnitFolders;
                if (excludedUnits != null && excludedUnits.Count != 0)
                {
                    for (int i = 0; i < excludedUnits.Count; i++)
                    {
                        string unitFolder = excludedUnits[i];
                        if (String.IsNullOrEmpty(unitFolder))
                        {
                            continue;
                        }
                        writer.WriteStartElement("unitFolder"); // start - unitFolder
                        writer.WriteAttributeString("name", unitFolder);
                        writer.WriteEndElement();               // end - unitFolder
                    }
                }
                writer.WriteEndElement();              // end - excludedUnits

                writer.WriteStartElement("languages"); // start - languages
                IList <SnippetLanguage> languages = snippets.Languages;
                if (languages != null && languages.Count != 0)
                {
                    for (int i = 0; i < languages.Count; i++)
                    {
                        SnippetLanguage language = languages[i];
                        if (!language.IsValid)
                        {
                            continue;
                        }
                        writer.WriteStartElement("language"); // start - language
                        writer.WriteAttributeString("unit", language.Unit);
                        writer.WriteAttributeString("languageId", language.LanguageId);
                        writer.WriteAttributeString("extension", language.Extension);
                        writer.WriteEndElement();               // end - language
                    }
                }
                writer.WriteEndElement();              // end - languages

                writer.WriteEndElement();              // end - codeSources
            }

            return(true);
        }
        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 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();
                        }
                    }
                }
            }
        }
示例#8
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));
            }
        }