RenderProps 3.0.0
RenderProps encapsulates passing arguments from a node visitor to a node renderer.
Without hardcoding arguments into an API method calls.
RenderProps is the state collection for Props that are set by a node visitor and
retrieved by a node renderer.
public class Prop<T> {
@NonNull
public static <T> Prop<T> of(@NonNull String name) {
return new Prop<>(name);
}
/* ... */
}
For example CorePlugin defines a Heading level prop (inside CoreProps class):
public static final Prop<Integer> HEADING_LEVEL = Prop.of("heading-level");
Then CorePlugin registers a Heading node visitor and applies heading value:
@Override
public void configureVisitor(@NonNull MarkwonVisitor.Builder builder) {
builder.on(Heading.class, new MarkwonVisitor.NodeVisitor<Heading>() {
@Override
public void visit(@NonNull MarkwonVisitor visitor, @NonNull Heading heading) {
/* Heading node handling logic */
// set heading level
CoreProps.HEADING_LEVEL.set(visitor.renderProps(), heading.getLevel());
// a helper method to apply span(s) for a node
// (internally obtains a SpanFactory for Heading or silently ignores
// this call if no factory for a Heading is registered)
visitor.setSpansForNodeOptional(heading, start);
/* Heading node handling logic */
}
});
}
And finally HeadingSpanFactory (which is also registered by CorePlugin):
public class HeadingSpanFactory implements SpanFactory {
@Nullable
@Override
public Object getSpans(@NonNull MarkwonConfiguration configuration, @NonNull RenderProps props) {
return new HeadingSpan(
configuration.theme(),
CoreProps.HEADING_LEVEL.require(props)
);
}
}
Prop<T> has these methods:
@Nullable T get(RenderProps)- returns value stored in RenderProps ornullif none is present@NonNull T get(RenderProps, @NonNull T defValue)- returns value stored in RenderProps or default value (this method always return non-null value)@NonNull T require(RenderProps)- returns value stored in RenderProps or throws an exception if none is presentvoid set(RenderProps, @Nullable T value)- updates value stored in RenderProps, passingnullas value is the same as callingclearvoid clear(RenderProps)- clears value stored in RenderProps