Exemplo n.º 1
0
        private static IEnumerable<ReleaseSection> GetReleaseSections(List<string> content)
        {
            bool IsReleaseHead(string str)
                => str.StartsWith("## ");

            bool IsReleaseContent(string str)
                => str.StartsWith("###") || str.Trim().StartsWith("-");

            string GetCaption(string str)
                => str
                    .TrimStart('#', ' ', '[')
                    .Split(' ')
                    .First()
                    .TrimEnd(']');

            int GetTrimmedEndIndex(int endIndex)
            {
                for (var i = endIndex; !IsReleaseHead(content[i]); i--)
                {
                    if (!string.IsNullOrWhiteSpace(content[i]))
                        return i;
                }

                return endIndex - 1;
            }

            var index = content.FindIndex(IsReleaseHead);
            while (index < content.Count)
            {
                var line = content[index];
                if (!IsReleaseHead(line))
                {
                    index++;
                    continue;
                }

                var caption = GetCaption(line);
                var endIndex = content.FindIndex(index + 1, x => IsReleaseHead(x) || !IsReleaseContent(x));
                if (endIndex == -1)
                    endIndex = content.Count - 1;

                var releaseData =
                    new ReleaseSection
                    {
                        Caption = caption,
                        StartIndex = index,
                        EndIndex = GetTrimmedEndIndex(endIndex)
                    };

                yield return releaseData;
                Logger.Trace($"Found section '{caption}' [{index}-{releaseData.EndIndex}].");

                index = releaseData.EndIndex + 1;
            }
        }
Exemplo n.º 2
0
        private static IEnumerable <ReleaseSection> GetReleaseSections(List <string> content)
        {
            bool IsReleaseHead(string str)
            => str.StartsWith("## ");

            bool IsReleaseContent(string str)
            => str.StartsWith("###") || str.Trim().StartsWith("-");

            string GetCaption(string str)
            => str
            .TrimStart('#', ' ', '[')
            .Split(' ')
            .First()
            .TrimEnd(']');

            var index = content.FindIndex(IsReleaseHead);

            while (index < content.Count)
            {
                var line = content[index];
                if (!IsReleaseHead(line))
                {
                    index++;
                    continue;
                }

                var caption = GetCaption(line);
                var nextNonReleaseContentIndex = content.FindIndex(index + 1, x => IsReleaseHead(x) || !IsReleaseContent(x));

                var releaseData =
                    new ReleaseSection
                {
                    Caption    = caption,
                    StartIndex = index,
                    EndIndex   = nextNonReleaseContentIndex != -1
                            ? nextNonReleaseContentIndex - 1
                            : content.Count - 1
                };

                yield return(releaseData);

                Logger.Trace($"Found section '{caption}' [{index}-{releaseData.EndIndex}].");

                index = releaseData.EndIndex + 1;
            }
        }