class AttributesNodeRenderer implements NodeRenderer {

    final private AttributesOptions myOptions;

    public AttributesNodeRenderer(DataHolder options) {
        myOptions = new AttributesOptions(options);
    }

    // only registered if assignTextAttributes is enabled
    @Override
    public Set<NodeRenderingHandler<?>> getNodeRenderingHandlers() {<FILL_FUNCTION_BODY>}

    public static class Factory implements NodeRendererFactory {
        @NotNull
        @Override
        public NodeRenderer apply(@NotNull DataHolder options) {
            return new AttributesNodeRenderer(options);
        }
    }
}

        HashSet<NodeRenderingHandler<?>> set = new HashSet<>();
        set.add(new NodeRenderingHandler<>(AttributesNode.class, (node, context, html) -> {

        }));
        set.add(new NodeRenderingHandler<>(TextBase.class, (node, context, html) -> {
            if (myOptions.assignTextAttributes) {
                Attributes nodeAttributes = context.extendRenderingNodeAttributes(AttributablePart.NODE, null);
                if (!nodeAttributes.isEmpty()) {
                    // has attributes then we wrap it in a span
                    html.setAttributes(nodeAttributes).withAttr().tag("span");
                    context.delegateRender();
                    html.closeTag("span");
                    return;
                }
            }
            context.delegateRender();
        }));
        return set;
    
<no_super_class>