From 71baf499c76e3ad9ce7131a8c317e6a35e8c01f1 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Thu, 10 Aug 2023 19:45:58 -0700 Subject: [PATCH] fencedCodeBlock and removed h1 when matches link title --- Helpers/HelperMarkdown.cs | 51 +++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/Helpers/HelperMarkdown.cs b/Helpers/HelperMarkdown.cs index 525047c..b73db84 100644 --- a/Helpers/HelperMarkdown.cs +++ b/Helpers/HelperMarkdown.cs @@ -286,10 +286,10 @@ internal static partial class HelperMarkdown segments = afterTrim.Split(": "); if (segments.Length != 2) { - if (results.Last()[^1] == '[') + if (results[^1][^1] == '[') { _ = stringBuilder.Clear(); - _ = stringBuilder.Append(results.Last()); + _ = stringBuilder.Append(results[^1]); results.RemoveAt(results.Count - 1); for (int j = i; j < parsedLines.Length; j++) { @@ -325,7 +325,7 @@ internal static partial class HelperMarkdown string? result; List results; Dictionary? keyValuePairs; - string jsonLinesLast = jsonLines.Last(); + string jsonLinesLast = jsonLines[^1]; jsonLines.RemoveAt(jsonLines.Count - 1); jsonLines.Add(jsonLinesLast[..^1]); jsonLines.Insert(0, "{"); @@ -365,23 +365,23 @@ internal static partial class HelperMarkdown jsonLines.Clear(); break; } - segmentsLast = segments.Last().Trim(); + segmentsLast = segments[^1].Trim(); segmentsFirst = segments[0].Trim(); if (string.IsNullOrEmpty(segmentsLast)) continue; - if (segmentsFirst[0] == '"' && segmentsFirst.Last() == '"') + if (segmentsFirst[0] == '"' && segmentsFirst[^1] == '"') jsonLines.Add($"{segmentsFirst}: "); - else if (segmentsFirst[0] == '\'' && segmentsFirst.Last() == '\'') + else if (segmentsFirst[0] == '\'' && segmentsFirst[^1] == '\'') jsonLines.Add($"\"{segmentsFirst[1..^1]}\": "); else jsonLines.Add($"\"{segmentsFirst}\": "); if (segmentsLast == "[]") jsonLines.RemoveAt(jsonLines.Count - 1); - else if (segmentsLast.Length > 4 && segmentsLast[0] == '[' && segmentsLast.Last() == ']' && segmentsLast[1] == '"' && segmentsLast[^2] == '"') + else if (segmentsLast.Length > 4 && segmentsLast[0] == '[' && segmentsLast[^1] == ']' && segmentsLast[1] == '"' && segmentsLast[^2] == '"') jsonLines.Add($"{segmentsLast},"); - else if (segmentsLast[0] == '"' && segmentsLast.Last() == '"') + else if (segmentsLast[0] == '"' && segmentsLast[^1] == '"') jsonLines.Add($"{segmentsLast},"); - else if (segmentsLast[0] == '"' && segmentsLast.Last() == '"') + else if (segmentsLast[0] == '"' && segmentsLast[^1] == '"') jsonLines.Add($"\"{segmentsLast[1..^1]}\""); else if (!segmentsLast.Contains('"') && !segmentsLast.Contains('\'')) { @@ -394,7 +394,7 @@ internal static partial class HelperMarkdown else { segmentsB = segmentsLast.Split('.'); - if (segmentsB.Length == 2 && segmentsB[0].Length < 7 && segmentsB.Last().Length < 7 && segmentsB[0].All(l => char.IsNumber(l)) && segmentsB.Last().All(l => char.IsNumber(l))) + if (segmentsB.Length == 2 && segmentsB[0].Length < 7 && segmentsB[^1].Length < 7 && segmentsB[0].All(l => char.IsNumber(l)) && segmentsB[^1].All(l => char.IsNumber(l))) jsonLines.Add($"{segmentsLast},"); else if (!segmentsLast.Contains('[') && !segmentsLast.Contains('{')) jsonLines.Add($"\"{segmentsLast}\","); @@ -771,14 +771,14 @@ internal static partial class HelperMarkdown segmentsB = segmentsA[0].Split("[["); if (segmentsB.Length is not 2 or 3) continue; - segmentsC = segmentsB.Last().Split('|'); + segmentsC = segmentsB[^1].Split('|'); markdownFileH1AndRelativePath = GetRelativePath(keyValuePairs, markdownFile, segmentsC[0]); if (markdownFileH1AndRelativePath.MarkdownFile is null || markdownFileH1AndRelativePath.H1 is null || markdownFileH1AndRelativePath.RelativePath is null) { logger.LogInformation("Didn't find {line} in <{file}>", lines[i], markdownFile.FileNameWithoutExtension); continue; } - line = $"{segmentsB[0]}[{markdownFileH1AndRelativePath.H1}]({markdownFileH1AndRelativePath.RelativePath.Replace('\\', '/')}){segmentsA.Last()}"; + line = $"{segmentsB[0]}[{markdownFileH1AndRelativePath.H1}]({markdownFileH1AndRelativePath.RelativePath.Replace('\\', '/')}){segmentsA[^1]}"; if (lines[i] == line) continue; lines[i] = line; @@ -872,7 +872,7 @@ internal static partial class HelperMarkdown segmentsA = lines[i].Split("]("); if (segmentsA.Length != 2) continue; - segmentsALast = segmentsA.Last(); + segmentsALast = segmentsA[^1]; if (appSettings.ExcludeSchemes.Any(l => segmentsALast.StartsWith(l))) continue; segmentsB = segmentsALast.Split(")"); @@ -893,7 +893,7 @@ internal static partial class HelperMarkdown logger.LogInformation("Didn't find {line} in <{file}>", lines[i], markdownFile.FileNameWithoutExtension); continue; } - line = $"{string.Join('[', segmentsC, 0, segmentsC.Length - 1)}[{markdownFileH1AndRelativePath.H1}]({markdownFileH1AndRelativePath.RelativePath.Replace('\\', '/')}){segmentsB.Last()}"; + line = $"{string.Join('[', segmentsC, 0, segmentsC.Length - 1)}[{markdownFileH1AndRelativePath.H1}]({markdownFileH1AndRelativePath.RelativePath.Replace('\\', '/')}){segmentsB[^1]}"; if (lines[i] == line) continue; if (fileName.Contains(' ') || fileName.Contains("%20")) @@ -934,7 +934,7 @@ internal static partial class HelperMarkdown return result; } - private static void SetRecursiveLines(AppSettings appSettings, ILogger logger, ReadOnlyDictionary> keyValuePairs, MarkdownFile markdownFile, string[] lines, List indentations, List recursiveLines) + private static void SetRecursiveLines(AppSettings appSettings, ILogger logger, ReadOnlyDictionary> keyValuePairs, string linkTitle, MarkdownFile markdownFile, string[] lines, List indentations, List recursiveLines) { if (recursiveLines is null) throw new Exception(); @@ -942,7 +942,7 @@ internal static partial class HelperMarkdown string[] segmentsA; string[] segmentsB; string segmentsALast; - string segmentsBFirst; + bool fencedCodeBlock = false; string indentation = new(indentations.ToArray()); MarkdownFileH1AndRelativePath markdownFileH1AndRelativePath; for (int i = 0; i < lines.Length; i++) @@ -954,22 +954,27 @@ internal static partial class HelperMarkdown } if (lines[i].Length < 1) continue; + if (lines[i].Length > 4 && lines[i][..3] == "```") + fencedCodeBlock = !fencedCodeBlock; + if (fencedCodeBlock) + continue; if (lines[i][0] == '#') { + if (lines[i] == $"# {linkTitle}") + continue; recursiveLines.Add($"{indentation}{lines[i]}"); continue; } segmentsA = lines[i].Split("]("); if (segmentsA.Length != 2) continue; - segmentsALast = segmentsA.Last(); + segmentsALast = segmentsA[^1]; if (appSettings.ExcludeSchemes.Any(l => segmentsALast.StartsWith(l))) continue; segmentsB = segmentsALast.Split(")"); if (segmentsB.Length != 2) continue; - segmentsBFirst = segmentsB[0]; - file = Path.GetFullPath(Path.Combine(markdownFile.Directory, segmentsBFirst)); + file = Path.GetFullPath(Path.Combine(markdownFile.Directory, segmentsB[0])); markdownFileH1AndRelativePath = GetRelativePath(keyValuePairs, markdownFile, file); if (markdownFileH1AndRelativePath.MarkdownFile is null || markdownFileH1AndRelativePath.H1 is null || markdownFileH1AndRelativePath.RelativePath is null) { @@ -981,7 +986,7 @@ internal static partial class HelperMarkdown continue; indentations.Add('\t'); recursiveLines.Add($"{indentation}{lines[i]}"); - SetRecursiveLines(appSettings, logger, keyValuePairs, markdownFileH1AndRelativePath.MarkdownFile, markdownFileH1AndRelativePath.Lines, indentations, recursiveLines); + SetRecursiveLines(appSettings, logger, keyValuePairs, segmentsA[0].Split('[')[^1], markdownFileH1AndRelativePath.MarkdownFile, markdownFileH1AndRelativePath.Lines, indentations, recursiveLines); } if (indentations.Count > 0) indentations.RemoveAt(0); @@ -1005,7 +1010,7 @@ internal static partial class HelperMarkdown recursiveLines = new(); lines = relativeTo.Value.Lines; markdownFile = relativeTo.Value.MarkdownFile; - SetRecursiveLines(appSettings, logger, keyValuePairs, markdownFile, lines, indentations, recursiveLines); + SetRecursiveLines(appSettings, logger, keyValuePairs, markdownFile.FileNameWithoutExtension, markdownFile, lines, indentations, recursiveLines); results.Add(new(relativeTo.Value.MarkdownFile, recursiveLines.ToArray())); } return results; @@ -1121,7 +1126,7 @@ internal static partial class HelperMarkdown segmentsA = lines[i].Split("]("); if (segmentsA.Length != 2) continue; - segmentsALast = segmentsA.Last(); + segmentsALast = segmentsA[^1]; if (appSettings.ExcludeSchemes.Any(l => segmentsALast.StartsWith(l))) continue; segmentsB = segmentsALast.Split(")"); @@ -1133,7 +1138,7 @@ internal static partial class HelperMarkdown else file = Path.GetFullPath(Path.Combine(markdownFile.Directory, segmentsBFirst[..^3])); relativeFile = Path.GetRelativePath(record.Source, file).Replace('\\', '/'); - line = $"{segmentsA[0]}]({relativeFile}){segmentsB.Last()}"; + line = $"{segmentsA[0]}]({relativeFile}){segmentsB[^1]}"; if (lines[i] == line) throw new NotSupportedException($"Line {i} shouldn't match with {line}"); lines[i] = line;