/*
* Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved.
*/
package commonmark4cj.commonmark
public interface Renderer {
/**
* Render the tree of nodes to output.
*
* @param node the root node
* @param output output for rendering
*/
func render(node: Node, output: StringBuilder): Unit
/**
* Render the tree of nodes to string.
*
* @param node the root node
* @return the rendered string
*/
func render(node: Node): String
}
/**
* A renderer for a set of node types.
*/
public interface NodeRenderer {
/**
* @return the types of nodes that this renderer handles
*/
func getNodeTypes(): HashSet<NodeType>
/**
* Render the specified node.
*
* @param node the node to render, will be an instance of one of {@link #getNodeTypes()}
*/
func render(node: Node): Unit
}
class NodeRendererMap {
private let renderers: HashMap<NodeType, NodeRenderer> = HashMap<NodeType, NodeRenderer>()
public func add(nodeRenderer: NodeRenderer): Unit {
for (nodeType in nodeRenderer.getNodeTypes()) {
// Overwrite existing renderer
renderers.add(nodeType, nodeRenderer)
}
}
public func render(node: Node): Unit {
let nodeRenderer: ?NodeRenderer = renderers.get(node.getNodeType())
if (nodeRenderer.isSome()) {
nodeRenderer?.render(node)
}
}
}