private static void ReadRemarksAfterDefinition(ServiceDefinitionText source, List <string> definitionLines, Dictionary <string, FsdRemarksSection> remarksSections, List <ServiceDefinitionError> errorList) { using (var reader = new StringReader(source.Text)) { string name = null; var lines = new List <string>(); int lineNumber = 0; int headingLineNumber = 0; while (true) { string line = reader.ReadLine(); lineNumber++; Match match = line == null ? null : s_markdownHeading.Match(line); if (match == null || match.Success) { if (name == null) { definitionLines.AddRange(lines); } else { while (lines.Count != 0 && string.IsNullOrWhiteSpace(lines[0])) { lines.RemoveAt(0); } while (lines.Count != 0 && string.IsNullOrWhiteSpace(lines[lines.Count - 1])) { lines.RemoveAt(lines.Count - 1); } var position = new ServiceDefinitionPosition(source.Name, headingLineNumber, 1); if (remarksSections.ContainsKey(name)) { errorList.Add(new ServiceDefinitionError("Duplicate remarks heading: " + name, position)); } else { remarksSections.Add(name, new FsdRemarksSection(lines, position)); } } if (match == null) { break; } name = line.Substring(match.Index + match.Length).Trim(); lines = new List <string>(); headingLineNumber = lineNumber; } else { lines.Add(line); } } } }
/// <summary> /// Creates an instance. /// </summary> public ServicePart(ServicePartKind kind, ServiceDefinitionPosition position, ServiceDefinitionPosition endPosition = null) { Kind = kind; Position = position; EndPosition = endPosition ?? position; }
private static void ReadInterleavedRemarks(ServiceDefinitionText source, List <string> definitionLines, List <FsdRemarksSection> remarksSections) { using var reader = new StringReader(source.Text); var remarksLines = new List <string>(); var inFsdCode = false; while (true) { var line = reader.ReadLine(); if (line == null) { AddRemarksSection(); break; } if (inFsdCode) { if (line.StartsWith("```", StringComparison.Ordinal)) { inFsdCode = false; definitionLines.Add(""); } else { definitionLines.Add(line); } } else { if (s_interleavedMarkdown.IsMatch(line)) { AddRemarksSection(); inFsdCode = true; } else { remarksLines.Add(line); } definitionLines.Add(""); } } void AddRemarksSection() { while (remarksLines.Count != 0 && string.IsNullOrWhiteSpace(remarksLines[0])) { remarksLines.RemoveAt(0); } var remarksLineNumber = definitionLines.Count - remarksLines.Count; while (remarksLines.Count != 0 && string.IsNullOrWhiteSpace(remarksLines[remarksLines.Count - 1])) { remarksLines.RemoveAt(remarksLines.Count - 1); } if (remarksLines.Count != 0) { var position = new ServiceDefinitionPosition(source.Name, remarksLineNumber, 1); remarksSections.Add(new FsdRemarksSection(remarksLines, position)); remarksLines = new List <string>(); } } }
public FsdRemarksSection(IReadOnlyList <string> lines, ServiceDefinitionPosition position) { Lines = lines; Position = position; }
public void SourceNameOnly() { var position = new ServiceDefinitionPosition("source"); position.ToString().Should().Be("source"); }
public void FullPosition() { var position = new ServiceDefinitionPosition("source", 3, 14); position.ToString().Should().Be("source(3,14)"); }
public void LineNumberOnly() { var position = new ServiceDefinitionPosition("source", 3); position.ToString().Should().Be("source(3)"); }
public Position(ServiceDefinitionPosition position) { Line = position.LineNumber - 1; Character = position.ColumnNumber - 1; }