/// <summary> /// Parse a markdown document /// </summary> /// <param name="content">The markdown text</param> /// <returns></returns> public RequirementSpecification Parse(string content) { _document.Parse(content); status = UsdmScope.None; var data = new RequirementSpecification(); foreach (var element in _document.Blocks) { switch (element.Type) { case MarkdownBlockType.Header: AnalyzeHeader(element, data); break; case MarkdownBlockType.Paragraph: AnalyzeParagraph(element, data); break; case MarkdownBlockType.List: AnalyzeList(element, data); break; default: Console.WriteLine($"Type: {element.Type}"); Console.WriteLine(element.ToString()); break; } } return(data); }
private void AnalyzeHeader(MarkdownBlock element, RequirementSpecification data) { var header = element as HeaderBlock; if (header != null) { var text = header.ToString().Trim(); switch (header.HeaderLevel) { case 1: data.Title = text; break; case 2: { var info = ParseUtility.DecomposeHeading(header); data.Requirements.Add( new UpperRequirement { ID = info.id, Summary = info.summary } ); } break; case 3: if (text.Equals("理由")) { status = UsdmScope.UpperRequiremetReason; } else if (text.Equals("説明")) { status = UsdmScope.UpperRequiremetDescription; } else { var info = ParseUtility.DecomposeHeading(header); data.Requirements.Last().Requirements.Add( new LowerRequirement { ID = info.id, Summary = info.summary } ); } break; case 4: if (text.Equals("理由")) { status = UsdmScope.LowerRequiremetReason; } else if (text.Equals("説明")) { status = UsdmScope.LowerRequiremetDescription; } else if (text.Equals("仕様")) { status = UsdmScope.Specification; } break; default: Console.WriteLine($"Text: {text}"); Console.WriteLine($"Level: {header.HeaderLevel}"); Console.WriteLine(element.ToString()); status = UsdmScope.None; break; } } }