From 87d54788db5105b3a698c16d043b52ea30c8be86 Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Mon, 20 Feb 2023 15:34:26 +0100 Subject: [PATCH] Allow brackets in download buttons --- Sources/Generator/Extensions/String+Extensions.swift | 11 +++++++++++ .../Generator/Generators/PageContentGenerator.swift | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Sources/Generator/Extensions/String+Extensions.swift b/Sources/Generator/Extensions/String+Extensions.swift index 9bcdde0..f85d707 100644 --- a/Sources/Generator/Extensions/String+Extensions.swift +++ b/Sources/Generator/Extensions/String+Extensions.swift @@ -67,10 +67,21 @@ extension String { extension Substring { + func dropBeforeFirst(_ separator: String) -> String { + guard contains(separator) else { + return String(self) + } + return components(separatedBy: separator).dropFirst().joined(separator: separator) + } + func between(_ start: String, and end: String) -> String { components(separatedBy: start).last! .components(separatedBy: end).first! } + + func between(first: String, andLast last: String) -> String { + dropBeforeFirst(first).dropAfterLast(last) + } } extension String { diff --git a/Sources/Generator/Generators/PageContentGenerator.swift b/Sources/Generator/Generators/PageContentGenerator.swift index 6f7fc8b..957eaf8 100644 --- a/Sources/Generator/Generators/PageContentGenerator.swift +++ b/Sources/Generator/Generators/PageContentGenerator.swift @@ -87,7 +87,7 @@ struct PageContentGenerator { // For a simple boxes: ![box](title;body) // A fancy page link: ![page](page_id) // External pages: ![external](url1, text1; url2, text2, ...) - let fileAndTitle = markdown.between("(", and: ")") + let fileAndTitle = markdown.between(first: "](", andLast: ")") let alt = markdown.between("[", and: "]").nonEmpty if let alt = alt, let command = ShorthandMarkdownKey(rawValue: alt) { return handleShortHandCommand(command, page: page, language: language, content: fileAndTitle) @@ -250,7 +250,7 @@ struct PageContentGenerator { .compactMap { button -> (file: String, text: String, downloadName: String?)? in let parts = button.components(separatedBy: ",") guard parts.count == 2 || parts.count == 3 else { - results.warning("Invalid button definition", source: page.path) + results.warning("Invalid download definition with \(parts)", source: page.path) return nil } let file = parts[0].trimmed