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