Add code block info prop
This commit is contained in:
parent
1b7fbfb77f
commit
1ab1b8b87a
@ -328,6 +328,9 @@ public class CorePlugin extends AbstractMarkwonPlugin {
|
|||||||
|
|
||||||
visitor.builder().append('\u00a0');
|
visitor.builder().append('\u00a0');
|
||||||
|
|
||||||
|
// @since 4.1.1-SNAPSHOT
|
||||||
|
CoreProps.CODE_BLOCK_INFO.set(visitor.renderProps(), info);
|
||||||
|
|
||||||
visitor.setSpansForNodeOptional(node, length);
|
visitor.setSpansForNodeOptional(node, length);
|
||||||
|
|
||||||
if (visitor.hasNext(node)) {
|
if (visitor.hasNext(node)) {
|
||||||
|
@ -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");
|
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 {
|
public enum ListItemType {
|
||||||
BULLET,
|
BULLET,
|
||||||
ORDERED
|
ORDERED
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package io.noties.markwon.core;
|
package io.noties.markwon.core;
|
||||||
|
|
||||||
|
import android.text.method.MovementMethod;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
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.BlockQuote;
|
||||||
import org.commonmark.node.BulletList;
|
import org.commonmark.node.BulletList;
|
||||||
@ -38,15 +38,15 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import ix.Ix;
|
|
||||||
import ix.IxFunction;
|
|
||||||
import ix.IxPredicate;
|
|
||||||
import io.noties.markwon.MarkwonConfiguration;
|
import io.noties.markwon.MarkwonConfiguration;
|
||||||
import io.noties.markwon.MarkwonSpansFactory;
|
import io.noties.markwon.MarkwonSpansFactory;
|
||||||
import io.noties.markwon.MarkwonVisitor;
|
import io.noties.markwon.MarkwonVisitor;
|
||||||
import io.noties.markwon.RenderProps;
|
import io.noties.markwon.RenderProps;
|
||||||
import io.noties.markwon.SpanFactory;
|
import io.noties.markwon.SpanFactory;
|
||||||
import io.noties.markwon.SpannableBuilder;
|
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.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
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.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
|
import static org.mockito.Mockito.RETURNS_MOCKS;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
@ -300,4 +301,45 @@ public class CorePluginTest {
|
|||||||
|
|
||||||
verify(textView, times(0)).setMovementMethod(any(MovementMethod.class));
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user