コード例 #1
0
        private void ArrangeSection(XNodeSection section, CsProjArrange.ArrangeOptions options)
        {
            CombineRootElementsAndSort(section, options);

            if (options.HasFlag(CsProjArrange.ArrangeOptions.SplitItemGroups))
            {
                SplitItemGroups(section, _stickyElementNames);
            }

            if (options.HasFlag(CsProjArrange.ArrangeOptions.SortRootElements))
            {
                SortRootElements(section);
            }
        }
コード例 #2
0
        private void CombineRootElementsAndSort(XNodeSection section, CsProjArrange.ArrangeOptions options)
        {
            var combineGroups =
                section.Nodes
                .Where(x => x is XElement)
                .Cast <XElement>()
                .GroupBy(
                    x =>
            {
                var combGroup = new CombineGroups
                {
                    Name       = x.Name.Namespace.ToString() + ":" + x.Name.LocalName,
                    Attributes =
                        string.Join(Environment.NewLine,
                                    x.Attributes()
                                    .Select(y => y.Name.Namespace.ToString() + ":" + y.Name.LocalName + ":" + y.Value)),
                };

                combGroup.Name += this.TryAddSubNodeSuffix(x, "PropertyGroup", "VSToolsPath");
                combGroup.Name += this.TryAddSubNodeSuffix(x, "PropertyGroup", "PostBuildEvent");
                combGroup.Name += this.TryAddSubNodeSuffix(x, "ItemGroup", "Folder");

                return(combGroup);
            });

            foreach (var elementGroup in combineGroups)
            {
                if (options.HasFlag(CsProjArrange.ArrangeOptions.CombineRootElements))
                {
                    CombineIdenticalRootElements(section, elementGroup);
                }

                ArrangeAllElementsInGroup(elementGroup);
            }
        }
コード例 #3
0
        private void CombineRootElementsAndSort(XNodeSection section, CsProjArrange.ArrangeOptions options)
        {
            var combineGroups =
                section.Nodes
                .Where(x => x is XElement)
                .Cast <XElement>()
                .GroupBy(
                    x =>
                    new CombineGroups
            {
                Name       = x.Name.Namespace.ToString() + ":" + x.Name.LocalName,
                Attributes =
                    string.Join(Environment.NewLine,
                                x.Attributes()
                                .Select(y => y.Name.Namespace.ToString() + ":" + y.Name.LocalName + ":" + y.Value)),
            }
                    );

            foreach (var elementGroup in combineGroups)
            {
                if (options.HasFlag(CsProjArrange.ArrangeOptions.CombineRootElements))
                {
                    CombineIdenticalRootElements(section, elementGroup);
                }

                ArrangeAllElementsInGroup(elementGroup);
            }
        }
コード例 #4
0
 private void SortRootElements(XNodeSection section)
 {
     // Sort the elements in root.
     if (_options.HasFlag(CsProjArrange.ArrangeOptions.KeepCommentWithNext))
     {
         section.Nodes =
             UnfoldComments(
                 FoldComments(section.Nodes)
                 .OrderBy(x => x.Element, _nodeNameComparer)
                 .ThenBy(x => x.Element.NodeType == XmlNodeType.Element ? x.Element.Attributes() : null, _attributeKeyComparer)
                 )
             .ToList();
     }
     else
     {
         section.Nodes =
             section.Nodes
             .OrderBy(x => x, _nodeNameComparer)
             .ThenBy(x => x.NodeType == XmlNodeType.Element ? ((XElement)x).Attributes() : null,
                     _attributeKeyComparer)
             .ToList();
     }
 }