Microdown icon indicating copy to clipboard operation
Microdown copied to clipboard

Introduce support for MicRawParagraph

Open Ducasse opened this issue 1 year ago • 2 comments


<a>

jlkjlklkj
</a>

so we should match

<label>

jlkjlklkj
</label>

Ducasse avatar Aug 20 '24 13:08 Ducasse

We do not need to have regexp for each HTML element. We can do

initialize

	super initialize.
	dispatchTable := Dictionary new.
	dispatchTable at: AnchorMarkup put: MicAnchorBlock.
	dispatchTable at: HeaderMarkup put: MicHeaderBlock.
	dispatchTable at: CodeblockMarkup put: MicAbstractCodeBlock.
	dispatchTable at: AnnotatedParagraphMarkup put: MicAnnotatedParagraph.
	dispatchTable at: CommentedLineMarkup put: MicCommentBlock.
	dispatchTable at: HorizontalLineMarkup put: MicHorizontalLineBlock.
	dispatchTable at: MathOpeningBlockMarkup put: MicMathBlock.
	dispatchTable at: EnvironmentOpeningBlockMarkup put: MicEnvironmentBlock.
	dispatchTable at: MetaDataOpeningBlockMarkup put: MicMetaDataBlock.
	dispatchTable at: UnorderedListPlusMarkup put: MicUnorderedListBlock.
	dispatchTable at: UnorderedListMarkup put: MicUnorderedListBlock.
	dispatchTable at: UnorderedListStarMarkup put: MicUnorderedListBlock.
	dispatchTable at: PreformattedMarkup put: MicBlockQuoteBlock.
	dispatchTable at: TableCellMarkup put: MicTableBlock.

         "we should pass via the shared poll"

        dispatchTable at: 'abb' put: MicRawParagraphBlock.
        dispatchTable at: 'add' put: MicRawParagraphBlock.

Then

blockStarterClassFrom: line
	"return the class of a block which can start with line, or nil if none"

	line ifEmpty: [ ^ nil ].
	(self matchOrdered: line)
		ifTrue: [ ^ self orderedListBlockClass ]
		ifFalse: [
			"the max significant length of a markup is 3"
			(3 to: 1 by: -1) do: [:i | | prefix |
				prefix := (line truncateTo: i).
                                
"we could remove the first trailing '<' if there is one, we should pay attention 
that <! is in the shared pool so we should probably modify the shared pool to have ! as a opener"

				"If we have a inline starter, it takes precedence"
				(Delimiters includes: prefix) 
					ifTrue: [ ^ self delimiterBlockClassFor: prefix ].
  				dispatchTable
    		 		at: prefix
      				ifPresent: [ :blockClass | ^ blockClass ] ] ].
	
	^ self nonMatchedBlockClassFor: line

Ducasse avatar Aug 20 '24 14:08 Ducasse

We should pay attention to idetnfiy when to close the block. This is typically inside the canConsumeLine: method which should return false when facing

The startAndStop does it like that

canConsumeLine: line
	"As soon as a line closes a code block, it does not accept anymore any line.
	Indeed imagine 
	
	<
	a line 
	>
	The first line was accepted by its parent (a root block and the code block got created.
	then a line was accepted...
	then the closing line was reached and the code block got closed.)	
	"

	isClosed
		ifTrue: [ ^ false ].
	isClosed := self doesLineStartWithStopMarkup: line.
	^ true
doesLineStartWithStopMarkup: line

	"return if the line starts with a stop markup"
	^ line beginsWith: self lineStopMarkup

Ducasse avatar Aug 20 '24 14:08 Ducasse

Done

Ducasse avatar Oct 17 '24 15:10 Ducasse