Add code block info prop

This commit is contained in:
Dimitry Ivanov 2019-08-26 14:28:48 +03:00
parent 1b7fbfb77f
commit 1ab1b8b87a
3 changed files with 56 additions and 6 deletions

View File

@ -328,6 +328,9 @@ public class CorePlugin extends AbstractMarkwonPlugin {
visitor.builder().append('\u00a0');
// @since 4.1.1-SNAPSHOT
CoreProps.CODE_BLOCK_INFO.set(visitor.renderProps(), info);
visitor.setSpansForNodeOptional(node, length);
if (visitor.hasNext(node)) {

View File

@ -19,6 +19,11 @@ public abstract class CoreProps {
public static final Prop<Boolean> PARAGRAPH_IS_IN_TIGHT_LIST = Prop.of("paragraph-is-in-tight-list");
/**
* @since 4.1.1-SNAPSHOT
*/
public static final Prop<String> CODE_BLOCK_INFO = Prop.of("code-block-info");
public enum ListItemType {
BULLET,
ORDERED

View File

@ -1,10 +1,10 @@
package io.noties.markwon.core;
import android.text.method.MovementMethod;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.method.MovementMethod;
import android.widget.ImageView;
import android.widget.TextView;
import org.commonmark.node.BlockQuote;
import org.commonmark.node.BulletList;
@ -38,15 +38,15 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import ix.Ix;
import ix.IxFunction;
import ix.IxPredicate;
import io.noties.markwon.MarkwonConfiguration;
import io.noties.markwon.MarkwonSpansFactory;
import io.noties.markwon.MarkwonVisitor;
import io.noties.markwon.RenderProps;
import io.noties.markwon.SpanFactory;
import io.noties.markwon.SpannableBuilder;
import ix.Ix;
import ix.IxFunction;
import ix.IxPredicate;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@ -54,6 +54,7 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.RETURNS_MOCKS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@ -300,4 +301,45 @@ public class CorePluginTest {
verify(textView, times(0)).setMovementMethod(any(MovementMethod.class));
}
@Test
public void code_block_info_prop() {
final CorePlugin plugin = CorePlugin.create();
final MarkwonVisitor.Builder builder = mock(MarkwonVisitor.Builder.class);
plugin.configureVisitor(builder);
final ArgumentCaptor<MarkwonVisitor.NodeVisitor> fencedCaptor =
ArgumentCaptor.forClass(MarkwonVisitor.NodeVisitor.class);
final ArgumentCaptor<MarkwonVisitor.NodeVisitor> indendedCaptor =
ArgumentCaptor.forClass(MarkwonVisitor.NodeVisitor.class);
//noinspection unchecked
verify(builder, times(1)).on(eq(FencedCodeBlock.class), fencedCaptor.capture());
//noinspection unchecked
verify(builder, times(1)).on(eq(IndentedCodeBlock.class), indendedCaptor.capture());
final RenderProps renderProps = mock(RenderProps.class);
final MarkwonVisitor visitor = mock(MarkwonVisitor.class, RETURNS_MOCKS);
when(visitor.renderProps()).thenReturn(renderProps);
// fenced
{
final FencedCodeBlock block = new FencedCodeBlock();
block.setInfo("testing-fenced");
//noinspection unchecked
fencedCaptor.getValue().visit(visitor, block);
verify(renderProps, times(1)).set(eq(CoreProps.CODE_BLOCK_INFO), eq("testing-fenced"));
}
// indended
{
final IndentedCodeBlock block = new IndentedCodeBlock();
//noinspection unchecked
indendedCaptor.getValue().visit(visitor, block);
verify(renderProps, times(1)).set(eq(CoreProps.CODE_BLOCK_INFO), eq((String) null));
}
}
}