package com.scrivenvar.processors.markdown;
import com.vladsch.flexmark.ast.BlockQuote;
import com.vladsch.flexmark.html.AttributeProvider;
import com.vladsch.flexmark.html.AttributeProviderFactory;
import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.html.IndependentAttributeProviderFactory;
import com.vladsch.flexmark.html.renderer.AttributablePart;
import com.vladsch.flexmark.html.renderer.LinkResolverContext;
import com.vladsch.flexmark.util.ast.Block;
import com.vladsch.flexmark.util.ast.Node;
import com.vladsch.flexmark.util.data.MutableDataHolder;
import com.vladsch.flexmark.util.html.MutableAttributes;
import org.jetbrains.annotations.NotNull;
import static com.scrivenvar.Constants.PARAGRAPH_ID_PREFIX;
public class BlockExtension implements HtmlRenderer.HtmlRendererExtension {
public static class IdAttributeProvider implements AttributeProvider {
private int mCount;
private static AttributeProviderFactory createFactory() {
return new IndependentAttributeProviderFactory() {
@Override
public @NotNull AttributeProvider apply(
@NotNull final LinkResolverContext context ) {
return new IdAttributeProvider();
}
};
}
@Override
public void setAttributes( @NotNull Node node,
@NotNull AttributablePart part,
@NotNull MutableAttributes attributes ) {
if( node instanceof Block && !(node instanceof BlockQuote) ) {
attributes.addValue( "id", PARAGRAPH_ID_PREFIX + mCount++ );
}
}
}
private BlockExtension() {
}
@Override
public void rendererOptions( @NotNull final MutableDataHolder options ) {
}
@Override
public void extend( final HtmlRenderer.Builder rendererBuilder,
@NotNull final String rendererType ) {
rendererBuilder.attributeProviderFactory(
IdAttributeProvider.createFactory()
);
}
public static BlockExtension create() {
return new BlockExtension();
}
}