diff --git a/Sources/MarkdownView/Components/DoxygenAbstractView.swift b/Sources/MarkdownView/Components/DoxygenAbstractView.swift new file mode 100644 index 0000000..f819f4a --- /dev/null +++ b/Sources/MarkdownView/Components/DoxygenAbstractView.swift @@ -0,0 +1,39 @@ +// +// DoxygenAbstractView.swift +// + +import Markdown +import SwiftUI + +public struct DoxygenAbstractView: View { + public let children: [MarkupContent] + + public init( + children: [MarkupContent] + ) { + self.children = children + } + + public var body: some View { + ForEach(children, id: \.self) { child in + MarkupContentView(content: child) + } + } +} + +#Preview { + let source = """ + \\abstract This object can give other objects in your program magical powers. + """ + + let document = Document( + parsing: source, + options: [.parseBlockDirectives, .parseMinimalDoxygen] + ) + + return ScrollView { + LazyVStack(alignment: .leading) { + MarkdownView(document: document) + } + } +} diff --git a/Sources/MarkdownView/Contents/MarkupContent.swift b/Sources/MarkdownView/Contents/MarkupContent.swift index acccb17..0ef6cd5 100644 --- a/Sources/MarkdownView/Contents/MarkupContent.swift +++ b/Sources/MarkdownView/Contents/MarkupContent.swift @@ -19,6 +19,7 @@ public enum MarkupContent: Hashable, Sendable { case htmlBlock(text: String) case thematicBreak case blockDirective(name: String, arguments: [Substring], children: [MarkupContent]) + case doxygenAbstract(children: [MarkupContent]) case doxygenParameter(name: String, children: [MarkupContent]) case doxygenReturns(children: [MarkupContent]) case doxygenNote(children: [MarkupContent]) diff --git a/Sources/MarkdownView/MarkdownView.swift b/Sources/MarkdownView/MarkdownView.swift index 9a9c2b2..7e8858c 100644 --- a/Sources/MarkdownView/MarkdownView.swift +++ b/Sources/MarkdownView/MarkdownView.swift @@ -78,6 +78,8 @@ public struct MarkdownView: View { ## Doxygen Documentation + \\abstract This object can give other objects in your program magical powers. + ### Parameters \\param string The input Markdown text to parse. diff --git a/Sources/MarkdownView/MarkupContentView.swift b/Sources/MarkdownView/MarkupContentView.swift index 428f7c3..79efe0b 100644 --- a/Sources/MarkdownView/MarkupContentView.swift +++ b/Sources/MarkdownView/MarkupContentView.swift @@ -30,6 +30,8 @@ public struct MarkupContentView: View { case .emphasis(let children): InlineMarkupContentView(inlineContents: children) .italic() + case .doxygenAbstract(let children): + DoxygenAbstractView(children: children) case .doxygenParameter(let name, let children): DoxygenParameterView(name: name, children: children) case .doxygenReturns(let children): diff --git a/Sources/MarkdownView/Parse/MarkdownViewParser.swift b/Sources/MarkdownView/Parse/MarkdownViewParser.swift index 8c21642..d8ca1ef 100644 --- a/Sources/MarkdownView/Parse/MarkdownViewParser.swift +++ b/Sources/MarkdownView/Parse/MarkdownViewParser.swift @@ -70,6 +70,9 @@ public enum MarkdownViewParser { case let link as Markdown.Link: let children = link.inlineChildren.map { inlineMarkupContent(markup: $0) } return .link(destination: link.destination, title: link.title, children: Array(children)) + case let doxygenAbstract as Markdown.DoxygenAbstract: + let children = doxygenAbstract.children.map { markupContent(markup: $0) } + return .doxygenAbstract(children: children) case let doxygenParameter as Markdown.DoxygenParameter: let children = doxygenParameter.children.map { markupContent(markup: $0) } return .doxygenParameter(name: doxygenParameter.name, children: children) diff --git a/Tests/MarkdownViewTests/MarkdownViewParserTests.swift b/Tests/MarkdownViewTests/MarkdownViewParserTests.swift index ce555ae..6dde03e 100644 --- a/Tests/MarkdownViewTests/MarkdownViewParserTests.swift +++ b/Tests/MarkdownViewTests/MarkdownViewParserTests.swift @@ -149,6 +149,11 @@ func printMarkupContent(content: MarkupContent, depth: Int) { } case .inlineCode(let code): print("\(String(repeating: "\t", count: depth * 2))InlineCode \(code)") + case .doxygenAbstract(let children): + print("\(String(repeating: "\t", count: depth * 2))DoxygenAbstract") + for child in children { + printMarkupContent(content: child, depth: depth + 1) + } case .doxygenNote(let children): print("\(String(repeating: "\t", count: depth * 2))DoxygenNote") for child in children {