Beispiel #1
0
        private static ManualParameter ParseBullet(Range range, ref ManualParameter currentParameter)
        {
            var text       = range.Text.Trim();
            var colonIndex = text.IndexOf(":", StringComparison.InvariantCultureIgnoreCase);

            var name        = colonIndex >= 0 ? text.Substring(0, colonIndex) : text;
            var description = colonIndex >= 0 ? text.Substring(colonIndex + 1).Trim() : string.Empty;

            var manualParameter = new ManualParameter {
                Name = name, Description = description
            };

            if (IsBullet(range, 1))
            {
                currentParameter = manualParameter;
                Console.WriteLine($"  {name}");
            }
            else
            {
                currentParameter.SubParameters.Add(manualParameter);
                Console.WriteLine($"    {name}");
            }

            return(manualParameter);
        }
Beispiel #2
0
        private static ManualEntry ParseManualEntry(Document document, ref int index, string currentCategory)
        {
            var entryName   = document.Paragraphs[index].Range.Text.Trim().ToPascalCase();
            var description = document.Paragraphs[++index].Range.Text.Trim();

            if (description.StartsWith("When written:", StringComparison.InvariantCultureIgnoreCase))
            {
                description = description.Substring(13).Trim();
                if (!string.IsNullOrWhiteSpace(description))
                {
                    description = description.First().ToString().ToLowerInvariant() + description.Substring(1);
                    var spaceIndex = description.IndexOf(" ", StringComparison.Ordinal);
                    var addWhen    = true;
                    if (spaceIndex > 0)
                    {
                        switch (description.Substring(0, spaceIndex))
                        {
                        case "at":
                        case "if":
                        case "when":
                            addWhen = false;
                            break;
                        }
                    }

                    description = $"Triggers {(addWhen ? "when " : null)}{description}";
                }
            }

            var manualEntry =
                new ManualEntry {
                Category = currentCategory, Name = entryName, Description = description
            };

            ManualParameter currentParameter = null;

            var range = document.Paragraphs[++index].Range;

            while (index < document.Paragraphs.Count && !IsOutlining(range))
            {
                if (IsBullet(range))
                {
                    var maualParameter = ParseBullet(range, ref currentParameter);
                    manualEntry.Parameters.Add(maualParameter);
                }
                else if (range.Text.Trim().StartsWith("example", StringComparison.InvariantCultureIgnoreCase))
                {
                    range = document.Paragraphs[++index].Range;
                    manualEntry.Example = range.Text.Trim();
                }
                else
                {
                    var text = range.Text.Trim();
                    var matchingParameters = manualEntry.Parameters.Where(p => text.Contains(p.Name)).ToList();
                    if (matchingParameters.Count == 1)
                    {
                        matchingParameters[0].Description += Environment.NewLine + text;
                    }
                }

                range = document.Paragraphs[++index].Range;
            }

            return(manualEntry);
        }