diff --git a/Sources/CliDoc/NodeModifier.swift b/Sources/CliDoc/NodeModifier.swift index 2e5fbbd..e2f6935 100644 --- a/Sources/CliDoc/NodeModifier.swift +++ b/Sources/CliDoc/NodeModifier.swift @@ -9,10 +9,10 @@ public protocol NodeModifier { } public extension NodeModifier { - func modifier( + func concat( _ modifier: T - ) -> ModifiedNode where T.Content == Body { - .init(content: self, modifier: modifier) + ) -> ConcatModifier { + ConcatModifier(first: self, second: modifier) } } @@ -23,6 +23,19 @@ public extension Node { } } +public struct ConcatModifier: NodeModifier where Content: Node, + Modifier1: NodeModifier, Modifier2: NodeModifier, + Modifier1.Content == Content, Modifier1.Body == Modifier2.Content +{ + let first: Modifier1 + let second: Modifier2 + + public func render(content: Content) -> some Node { + second.render(content: first.render(content: content)) + } + +} + public struct ModifiedNode { var content: Content var modifier: Modifier @@ -57,3 +70,11 @@ extension ModifiedNode: NodeModifier where return modifier.render(content: body).render() } } + +extension ModifiedNode where Modifier: NodeModifier { + + func modifier(_ modifier: T) -> ModifiedNode> { + .init(content: content, modifier: self.modifier.concat(modifier)) + } + +}