Esempio n. 1
0
        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);
                    }
                }
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Creates an instance.
 /// </summary>
 public ServicePart(ServicePartKind kind, ServiceDefinitionPosition position, ServiceDefinitionPosition endPosition = null)
 {
     Kind        = kind;
     Position    = position;
     EndPosition = endPosition ?? position;
 }
Esempio n. 3
0
        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>();
                }
            }
        }
Esempio n. 4
0
 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;
 }