package commonmark4cj.strikethrough

class StrikethroughHtmlNodeRenderer <: StrikethroughNodeRenderer {
    private let context: HtmlNodeRendererContext
    private let html: HtmlWriter

    public init(context: HtmlNodeRendererContext) {
        this.context = context
        this.html = context.getWriter()
    }

    public override func render(node: Node): Unit {
        let attributes: HashMap<String, String> = context.extendAttributes(node, "del", HashMap<String, String>())
        html.tag("del", attributes)
        renderChildren(node)
        html.tag("/del")
    }

    private func renderChildren(parent: Node): Unit {
        var node: ?Node = parent.getFirstChild()
        while (let Some(v) <- node) {
            node = v.getNext()
            context.render(v)
        }
    }
}

class StrikethroughTextContentNodeRenderer <: StrikethroughNodeRenderer {
    private let context: TextContentNodeRendererContext
    private let textContent: TextContentWriter

    public init(context: TextContentNodeRendererContext) {
        this.context = context
        this.textContent = context.getWriter()
    }

    public override func render(node: Node): Unit {
        textContent.write("/")
        renderChildren(node)
        textContent.write("/")
    }

    private func renderChildren(parent: Node): Unit {
        var node: ?Node = parent.getFirstChild()
        while (let Some(v) <- node) {
            node = v.getNext()
            context.render(v)
        }
    }
}