Ejemplo n.º 1
0
        bool TryProcessSnippetLine(TextWriter writer, IndexReader reader, string line, List <MissingSnippet> missings, List <Snippet> used)
        {
            string key;

            if (!SnippetKeyReader.TryExtractKeyFromLine(line, out key))
            {
                return(false);
            }
            writer.WriteLine($"<!-- snippet: {key} -->");

            IReadOnlyList <Snippet> group;

            if (!snippets.TryGetValue(key, out group))
            {
                var missing = new MissingSnippet(
                    key: key,
                    line: reader.Index);
                missings.Add(missing);
                var message = $"** Could not find snippet '{key}' **";
                writer.WriteLine(message);
                return(true);
            }

            appendSnippetGroup(key, group, writer);
            used.AddRange(group);
            return(true);
        }
Ejemplo n.º 2
0
    public void MissingSpaces()
    {
        string key;

        SnippetKeyReader.TryExtractKeyFromLine("snippet:snippet", out key);
        Assert.AreEqual("snippet", key);
    }
Ejemplo n.º 3
0
    public void WithDashes()
    {
        string key;

        SnippetKeyReader.TryExtractKeyFromLine("snippet:my-code-snippet", out key);
        Assert.AreEqual("my-code-snippet", key);
    }
Ejemplo n.º 4
0
        bool TryProcessSnippetLine(TextWriter writer, IndexReader reader, string line, List <MissingSnippet> missings, List <Snippet> used)
        {
            if (!SnippetKeyReader.TryExtractKeyFromLine(line, out var key))
            {
                return(false);
            }

            writer.WriteLine($"<!-- snippet: {key} -->");

            if (TryGetFromFiles(key, out var snippetFromFiles))
            {
                appendSnippetGroup(key, snippetFromFiles, writer);
                writer.WriteLine($"<!-- endsnippet -->");
                used.AddRange(snippetFromFiles);
                return(true);
            }

            var missing = new MissingSnippet(
                key: key,
                line: reader.Index);

            missings.Add(missing);
            var message = $"** Could not find snippet '{key}' **";

            writer.WriteLine(message);
            return(true);
        }
Ejemplo n.º 5
0
    public void MissingSpaces()
    {
        var exception = Assert.Throws <MarkdownProcessingException>(() => SnippetKeyReader.TryExtractKeyFromLine("snippet:snippet", out var key));

        Assert.True(exception.Message == "Invalid syntax for the snippet 'snippet': There must be a space before the start of the key.");
    }
Ejemplo n.º 6
0
 public void ExtraSpace()
 {
     SnippetKeyReader.TryExtractKeyFromLine("snippet:  snippet   ", out var key);
     Assert.Equal("snippet", key);
 }
Ejemplo n.º 7
0
 public void WithDashes()
 {
     SnippetKeyReader.TryExtractKeyFromLine("snippet: my-code-snippet", out var key);
     Assert.Equal("my-code-snippet", key);
 }
        internal ProcessResult Apply(List <Line> lines, string newLine, string?relativePath)
        {
            var  missingSnippets  = new List <MissingSnippet>();
            var  validationErrors = new List <ValidationError>();
            var  missingIncludes  = new List <MissingInclude>();
            var  usedSnippets     = new List <Snippet>();
            var  usedIncludes     = new List <Include>();
            var  builder          = new StringBuilder();
            Line?tocLine          = null;
            var  headerLines      = new List <Line>();

            for (var index = 0; index < lines.Count; index++)
            {
                var line = lines[index];

                if (validateContent)
                {
                    var errors = ContentValidation.Verify(line.Original).ToList();
                    if (errors.Any())
                    {
                        validationErrors.AddRange(errors.Select(error => new ValidationError(error.error, line.LineNumber, error.column, line.Path)));
                        continue;
                    }
                }

                if (includeProcessor.TryProcessInclude(lines, line, usedIncludes, index, missingIncludes))
                {
                    continue;
                }

                if (line.Current.StartsWith("#"))
                {
                    if (tocLine != null)
                    {
                        headerLines.Add(line);
                    }

                    continue;
                }

                if (line.Current == "toc")
                {
                    tocLine = line;
                    continue;
                }

                if (SnippetKeyReader.TryExtractKeyFromLine(line, out var key))
                {
                    builder.Clear();

                    void AppendLine(string s)
                    {
                        builder.Append(s);
                        builder.Append(newLine);
                    }

                    ProcessSnippetLine(AppendLine, missingSnippets, usedSnippets, key, line);
                    builder.TrimEnd();
                    line.Current = builder.ToString();
                }
            }

            if (writeHeader)
            {
                lines.Insert(0, new Line(HeaderWriter.WriteHeader(relativePath !, header, newLine), "", 0));
            }

            if (tocLine != null)
            {
                tocLine.Current = TocBuilder.BuildToc(headerLines, tocLevel, tocExcludes, newLine);
            }

            return(new ProcessResult(
                       missingSnippets: missingSnippets,
                       usedSnippets: usedSnippets.Distinct().ToList(),
                       usedIncludes: usedIncludes.Distinct().ToList(),
                       missingIncludes: missingIncludes,
                       validationErrors: validationErrors));
        }
Ejemplo n.º 9
0
 public void Simple()
 {
     SnippetKeyReader.TryExtractKeyFromLine(new Line("snippet: snippet", "path", 1), out var key);
     Assert.Equal("snippet", key);
 }