Allow brackets in download buttons

This commit is contained in:
Christoph Hagen 2023-02-20 15:34:26 +01:00
parent 89245f2553
commit 87d54788db
2 changed files with 13 additions and 2 deletions

View File

@ -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 {

View File

@ -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