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); }
public void MissingSpaces() { string key; SnippetKeyReader.TryExtractKeyFromLine("snippet:snippet", out key); Assert.AreEqual("snippet", key); }
public void WithDashes() { string key; SnippetKeyReader.TryExtractKeyFromLine("snippet:my-code-snippet", out key); Assert.AreEqual("my-code-snippet", key); }
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); }
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."); }
public void ExtraSpace() { SnippetKeyReader.TryExtractKeyFromLine("snippet: snippet ", out var key); Assert.Equal("snippet", key); }
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)); }
public void Simple() { SnippetKeyReader.TryExtractKeyFromLine(new Line("snippet: snippet", "path", 1), out var key); Assert.Equal("snippet", key); }