Skip to content

Commit

Permalink
Merge pull request #891 from pillar-markup/IntroducingInlineSpace
Browse files Browse the repository at this point in the history
Introducing inline space
  • Loading branch information
Ducasse authored Oct 6, 2024
2 parents 5ab3b9e + ba59b45 commit 27a8787
Show file tree
Hide file tree
Showing 14 changed files with 183 additions and 13 deletions.
1 change: 1 addition & 0 deletions src/Microdown-Tests/MicInlineBlockTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Class {

{ #category : 'tests' }
MicInlineBlockTest >> testAllTerminalNodesImplementsAccept [

(MicInlineElement allSubclasses select: [ :cl | cl allSubclasses isEmpty ])
do: [ :class | self assert: (class includesSelector: #accept:) ]

Expand Down
9 changes: 6 additions & 3 deletions src/Microdown-Tests/MicInlineDelimiterTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,12 @@ MicInlineDelimiterTest >> testMarkupAsRegex [
{ #category : 'tests' }
MicInlineDelimiterTest >> testRawEvaluatedConsistency [
"this test is only for evaluated delimiters"
(MicInlineDelimiter all select: #isOpener) do: [ :del |
self assert: (del isEvaluated ~= del isRawkind )
]
"apparently <br> does not fit in the invariant. I could not find how to make all the other tests
pass in addition to this invariant. My impression is that the invariant is not true for <br>"

(( MicInlineDelimiter all select: [:each | each isOpener] ) reject: [ :each | each class = MicInlineSpaceDelimiter ])

do: [ :del | self assert: (del isEvaluated ~= del isRawkind ) ]
]

{ #category : 'tests' }
Expand Down
31 changes: 31 additions & 0 deletions src/Microdown-Tests/MicInlineSpaceBlockTest.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Class {
#name : 'MicInlineSpaceBlockTest',
#superclass : 'MicBlockTest',
#category : 'Microdown-Tests-Parser',
#package : 'Microdown-Tests',
#tag : 'Parser'
}

{ #category : 'tests' }
MicInlineSpaceBlockTest >> subjectClass [
^ MicInlineSpaceBlock
]

{ #category : 'tests' }
MicInlineSpaceBlockTest >> testParagraphWithInlineSpace [

| root |
root := self parser parse: 'a paragraph with an inline space here <br> it continues after here.'.
self assert: root children size equals: 1.
self assert: root children first children size equals: 3.
self assert: root children first children second class equals: MicInlineSpaceBlock
]

{ #category : 'tests' }
MicInlineSpaceBlockTest >> testParagraphWithInlineSpaceAndOthers [

| root |
root := self parser parse: '_a paragraph_ with an *inline* space here <br> it continues after here.'.
self assert: root children size equals: 1.
self assert: root children first children size equals: 6
]
18 changes: 18 additions & 0 deletions src/Microdown-Tests/MicInlineTokenStreamTest.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,24 @@ MicInlineTokenStreamTest >> testTokenize_FigureWithURL [

]

{ #category : 'tests' }
MicInlineTokenStreamTest >> testTokenize_InlineSpace [

| tokens |
tokens := (MicInlineTokenStream on: 'aa', InlineSpace ,'bbb') contents.
self assert: tokens second string equals: InlineSpace.
self assert: tokens second delimiter equals: (MicInlineDelimiter at: InlineSpace)
]

{ #category : 'tests' }
MicInlineTokenStreamTest >> testTokenize_InlineSpaceWithSpaceAround [

| tokens |
tokens := (MicInlineTokenStream on: 'aa ', InlineSpace ,' bbb') contents.
self assert: tokens second string equals: InlineSpace.
self assert: tokens second delimiter equals: (MicInlineDelimiter at: InlineSpace)
]

{ #category : 'tests' }
MicInlineTokenStreamTest >> testTokenize_Text [
| tokens |
Expand Down
11 changes: 10 additions & 1 deletion src/Microdown/MicInlineDelimiter.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,16 @@ Class {

{ #category : 'accessing' }
MicInlineDelimiter class >> all [
"self all"

DelimiterDictionary ifNil: [ self initializeDelimiters ].
^ DelimiterDictionary values
]

{ #category : 'private utilities' }
MicInlineDelimiter class >> allRegex [

"self allRegex"

Regex ifNil: [ self initializeRegex ].
^ Regex
]
Expand Down Expand Up @@ -71,6 +74,7 @@ MicInlineDelimiter class >> noteCompilationOf: aSelector meta: isMeta [
{ #category : 'private utilities' }
MicInlineDelimiter class >> regexNot: markup [
"return a regular expression (string), which is recognizing anything but markup"

| str prefix|
str := WriteStream on: ''.
str nextPut: $(.
Expand Down Expand Up @@ -127,6 +131,11 @@ MicInlineDelimiter >> markupAsRegex [
self subclassResponsibility
]

{ #category : 'printing' }
MicInlineDelimiter >> printOn: stream [
stream << $« << self markup <<
]

{ #category : 'adding' }
MicInlineDelimiter >> storeRegex [

Expand Down
3 changes: 2 additions & 1 deletion src/Microdown/MicInlineParser.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ MicInlineParser >> joinTextNodesOf: children [

{ #category : 'parsing' }
MicInlineParser >> parse: aString [
"I return an array of inline blocks"
"Returns an array of inline blocks"

| tokenStream |
tokenStream := MicInlineTokenStream on: aString.
^ (self parseChildrenIn: tokenStream) asArray
Expand Down
19 changes: 19 additions & 0 deletions src/Microdown/MicInlineSpaceBlock.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Class {
#name : 'MicInlineSpaceBlock',
#superclass : 'MicUnEvaluatedBlock',
#category : 'Microdown-InlineParser',
#package : 'Microdown',
#tag : 'InlineParser'
}

{ #category : 'parsing' }
MicInlineSpaceBlock class >> parse: delimiter stream: aTokenStream for: aParser [

^ self new
]

{ #category : 'visiting' }
MicInlineSpaceBlock >> accept: aVisitor [

aVisitor visitInlineSpace: self
]
55 changes: 55 additions & 0 deletions src/Microdown/MicInlineSpaceDelimiter.class.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
Class {
#name : 'MicInlineSpaceDelimiter',
#superclass : 'MicInlineDelimiter',
#pools : [
'MicSharedPool'
],
#category : 'Microdown-InlineParser',
#package : 'Microdown',
#tag : 'InlineParser'
}

{ #category : 'initialization' }
MicInlineSpaceDelimiter class >> initializeDelimiters [

"line break"
self new addMe



]

{ #category : 'accessing' }
MicInlineSpaceDelimiter >> blockClass [

^ MicInlineSpaceBlock
]

{ #category : 'accessing' }
MicInlineSpaceDelimiter >> isEvaluated [

^ false
]

{ #category : 'accessing' }
MicInlineSpaceDelimiter >> isOpener [

^ true
]

{ #category : 'accessing' }
MicInlineSpaceDelimiter >> isRawkind [

^ false
]

{ #category : 'accessing' }
MicInlineSpaceDelimiter >> markup [
^ InlineSpace
]

{ #category : 'accessing' }
MicInlineSpaceDelimiter >> markupAsRegex [

^ InlineSpace
]
9 changes: 3 additions & 6 deletions src/Microdown/MicInlineStandardDelimiter.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ MicInlineStandardDelimiter class >> initializeDelimiters [
self new markup: LinkNameOpenerMarkup; blockClass: MicLinkBlock; closer: NameCloserUrlOpener; addMe.
self new markup: FigureNameOpenerMarkup; blockClass: MicFigureBlock; closer: NameCloserUrlOpener; addMe.
self new markup: NameCloserUrlOpener; blockClass: MicRawBlock ; closer: URLCloserMarkup; addMe.
self new markup: URLCloserMarkup; blockClass: nil ; closer: nil; addMe
self new markup: URLCloserMarkup; blockClass: nil ; closer: nil; addMe.



]

Expand Down Expand Up @@ -100,8 +102,3 @@ MicInlineStandardDelimiter >> markupAsRegex [
ifFalse: [ markup do: [ :char| str nextPut: $\; nextPut: char ] ].
^ str contents
]

{ #category : 'printing' }
MicInlineStandardDelimiter >> printOn: stream [
stream << $« << markup <<
]
2 changes: 2 additions & 0 deletions src/Microdown/MicInlineTokenStream.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@ MicInlineTokenStream >> addText: matchedString [

{ #category : 'initialization' }
MicInlineTokenStream >> initialize [

super initialize.
tokens := OrderedCollection new
]

Expand Down
6 changes: 6 additions & 0 deletions src/Microdown/MicRawParagraphBlock.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ Class {
#tag : 'Extensions'
}

{ #category : 'visiting' }
MicRawParagraphBlock >> accept: aVisitor [

aVisitor visitRawParagraph: self
]

{ #category : 'handle' }
MicRawParagraphBlock >> bodyFromLine: line [

Expand Down
21 changes: 19 additions & 2 deletions src/Microdown/MicSharedPool.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -69,31 +69,47 @@ MicSharedPool class >> initialize [
"self initialize"

AnchorMarkup := '@'.

AnnotatedParagraphBackwardCompatibleMarkup := '!!'.
"we keep it to avoid breaking existing text but we should favor one that is compatible with github eg the next one"
AnnotatedParagraphOpeningMarkup := '>[!'.
AnnotatedParagraphClosingMarkup := ']'.
PreformattedMarkup := '> '.

CodeblockMarkup := '```'.

CommentedLineMarkup := '%'.

EnvironmentClosingBlockMarkup := '!>'.
EnvironmentOpeningBlockMarkup := '<!'.

HeaderMarkup := '#'.

HorizontalLineMarkup := '***'.

MathClosingBlockMarkup := '$$'.
MathOpeningBlockMarkup := '$$'.

MetaDataClosingBlockMarkup := '}'.
MetaDataOpeningBlockMarkup := '{'.

OrderedListSemiMarkup := '. '.
PreformattedMarkup := '> '.

TableCellMarkup := '|'.
UnorderedListMarkup := '- '.
UnorderedListPlusMarkup := '+ '.
UnorderedListStarMarkup := '* '.

self initializeRawParagraph.

"Argument list"

ArgumentListDelimiter := '&'.
ArgumentListEqualsDelimiter := '='.
ArgumentListOfFigureStartDelimiter := '?'.
ArgumentListStartDelimiter := '|'.

"In paragraph!"

AnchorReferenceCloserMarkup := '@*'.
AnchorReferenceOpenerMarkup := '*@'.
Expand All @@ -117,7 +133,7 @@ MicSharedPool class >> initialize [
NameCloserUrlOpener := ']('.
FixiousTextDelimiter := 0 asCharacter asString.

self initializeRawParagraph.



Delimiters := { AnchorReferenceCloserMarkup .
Expand All @@ -127,6 +143,7 @@ MicSharedPool class >> initialize [
BoldMarkup .
FigureNameOpenerMarkup .
ItalicMarkup .
InlineSpace .
LinkNameCloserMarkup .
LinkNameOpenerMarkup .
MathMarkup .
Expand Down
1 change: 1 addition & 0 deletions src/Microdown/MicrodownParser.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ MicrodownParser class >> builder [
{ #category : 'examples' }
MicrodownParser class >> example [
<sampleInstance>

^ self parse: self comment
]

Expand Down
10 changes: 10 additions & 0 deletions src/Microdown/MicrodownVisitor.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,10 @@ MicrodownVisitor >> visitHeader: aHeader [
MicrodownVisitor >> visitHorizontalLine: anHorizontalLineBlock [
]

{ #category : 'visiting - html extensions' }
MicrodownVisitor >> visitInlineSpace: anInlineSpace [
]

{ #category : 'visiting' }
MicrodownVisitor >> visitInputFile: anInputfile [
"subclassResponsibility"
Expand Down Expand Up @@ -208,6 +212,12 @@ MicrodownVisitor >> visitQuote: aQuote [
MicrodownVisitor >> visitRaw: aRawFormat [


]

{ #category : 'visiting - html extensions' }
MicrodownVisitor >> visitRawParagraph: aRawParagraph [


]

{ #category : 'visiting' }
Expand Down

0 comments on commit 27a8787

Please sign in to comment.