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'); | ||||
| 
 | ||||
|         // @since 4.1.1-SNAPSHOT | ||||
|         CoreProps.CODE_BLOCK_INFO.set(visitor.renderProps(), info); | ||||
| 
 | ||||
|         visitor.setSpansForNodeOptional(node, length); | ||||
| 
 | ||||
|         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"); | ||||
| 
 | ||||
|     /** | ||||
|      * @since 4.1.1-SNAPSHOT | ||||
|      */ | ||||
|     public static final Prop<String> CODE_BLOCK_INFO = Prop.of("code-block-info"); | ||||
| 
 | ||||
|     public enum ListItemType { | ||||
|         BULLET, | ||||
|         ORDERED | ||||
|  | ||||
| @ -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)); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Dimitry Ivanov
						Dimitry Ivanov