Skip to content

Commit

Permalink
Merge 7d5f5e0 into 4bb83c5
Browse files Browse the repository at this point in the history
  • Loading branch information
HenokLachmann committed May 25, 2020
2 parents 4bb83c5 + 7d5f5e0 commit a633dc4
Show file tree
Hide file tree
Showing 160 changed files with 972 additions and 105 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
I am a token for links. I listen to closing square brackets.

Instance Variables
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
mayBeginWith: aCharacter

^ aCharacter = $]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
isCloser

^ true
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
isDelimiter

^ true
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
isExtendableWith: aCharacter

^ aCharacter = $]
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
isOpener

^ false
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
attribute
linkFrom: start to: end

^ MarkdownLink from: start to: end
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
attribute
linkStartingAt: openingLinkDelimiter

| start end |
start := openingLinkDelimiter endPosition.
end := self startPosition.
^ self linkFrom: start to: end

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
matches: aMarkdownOpeningDelimiter

^ aMarkdownOpeningDelimiter class = MarkdownOpeningLinkDelimiter
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
initialize-release
setPreceding: precedingCharacter following: followingCharacter

^ self
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"class" : {
"mayBeginWith:" : "hsl 5/17/2020 12:48" },
"instance" : {
"isCloser" : "hsl 5/17/2020 13:26",
"isDelimiter" : "hsl 5/17/2020 13:03",
"isExtendableWith:" : "hsl 5/19/2020 11:58",
"isOpener" : "hsl 5/17/2020 13:27",
"linkFrom:to:" : "hsl 5/17/2020 16:05",
"linkStartingAt:" : "hsl 5/17/2020 16:03",
"matches:" : "hsl 5/17/2020 18:10",
"setPreceding:following:" : "hsl 5/17/2020 13:16" } }
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"category" : "MarkdownEditor-Core",
"classinstvars" : [
],
"classvars" : [
],
"commentStamp" : "hsl 5/19/2020 11:07",
"instvars" : [
],
"name" : "MarkdownClosingLinkDelimiter",
"pools" : [
],
"super" : "MarkdownToken",
"type" : "normal" }
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
I am a token for links. I listen to closing brackets.

Instance Variables
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
mayBeginWith: aCharacter

^ aCharacter = $)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
isCloser

^ true
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
isDelimiter

^ true
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
isExtendableWith: aCharacter

^ aCharacter = $)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
isOpener

^ false
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
testing
matches: aMarkdownOpeningDelimiter

^ aMarkdownOpeningDelimiter class = MarkdownOpeningURLDelimiter
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
initialize-release
setPreceding: precedingCharacter following: followingCharacter

^ self
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"class" : {
"mayBeginWith:" : "hsl 5/19/2020 10:59" },
"instance" : {
"isCloser" : "hsl 5/19/2020 11:11",
"isDelimiter" : "hsl 5/19/2020 11:17",
"isExtendableWith:" : "hsl 5/19/2020 11:17",
"isOpener" : "hsl 5/19/2020 11:16",
"matches:" : "hsl 5/19/2020 11:20",
"setPreceding:following:" : "hsl 5/19/2020 11:25" } }
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"category" : "MarkdownEditor-Core",
"classinstvars" : [
],
"classvars" : [
],
"commentStamp" : "hsl 5/19/2020 11:05",
"instvars" : [
],
"name" : "MarkdownClosingURLDelimiter",
"pools" : [
],
"super" : "MarkdownToken",
"type" : "normal" }
Original file line number Diff line number Diff line change
@@ -1 +1 @@
I represent a Markdown emphasis over a range of characters. The applied styling is expressed through my textAttribute.
I represent a Markdown emphasis over a range of characters. The applied styling is expressed through my textAttribute and colorAttribute.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
colorAttribute: aColorAttribute

colorAttribute := aColorAttribute
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
colorAttribute

^ colorAttribute
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
initialize-release
initialize

colorAttribute := TextColor black
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
{
"class" : {
"from:to:" : "kgr 7/23/2019 11:27",
"from:to:" : "hsl 5/17/2020 17:33",
"strongFrom:to:" : "kgr 7/23/2019 11:19" },
"instance" : {
"colorAttribute" : "hsl 5/17/2020 18:41",
"colorAttribute:" : "hsl 5/17/2020 18:42",
"endPosition" : "fgo 5/21/2019 15:36",
"initialize" : "hsl 5/17/2020 18:46",
"setFrom:to:" : "fgo 7/10/2019 15:16",
"startPosition" : "fgo 5/21/2019 15:36",
"textAttribute" : "fgo 7/10/2019 14:39",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@
],
"classvars" : [
],
"commentStamp" : "fgo 7/11/2019 15:37",
"commentStamp" : "hsl 5/17/2020 22:59",
"instvars" : [
"startPosition",
"endPosition",
"textAttribute" ],
"textAttribute",
"colorAttribute" ],
"name" : "MarkdownEmphasis",
"pools" : [
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
"mayBeginWith:" : "jst 6/26/2019 14:35" },
"instance" : {
"boldLength" : "fgo 5/10/2019 15:54",
"cutFromEnd:" : "fgo 5/21/2019 15:22",
"cutFromStart:" : "fgo 5/21/2019 15:20",
"decideLeftFlankingForPreceding:following:" : "jst 6/28/2019 14:30",
"decideRightFlankingForPreceding:following:" : "jst 6/28/2019 14:35",
"delimiterLengthForEmphasisWith:" : "jst 7/25/2019 14:28",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
styling
add: aCollectionOfMarkdownEmphases to: aText
add: aCollectionOfMarkdownInlineElements to: aText

aCollectionOfMarkdownEmphases do: [:emphasis |
aCollectionOfMarkdownInlineElements do: [:element |
aText
addAttribute: emphasis textAttribute
from: emphasis startPosition
to: emphasis endPosition]
addAttribute: element textAttribute
from: element startPosition
to: element endPosition.

aText
addAttribute: element colorAttribute
from: element startPosition
to: element endPosition]
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ initialize-release
clean

self
emphases: OrderedCollection new;
inlineElements: OrderedCollection new;
tokens: OrderedCollection new
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
content: aString

content := aString
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
content

^ content
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ createTokensFrom: aString
aString withIndexDo: [:character :position |
(self tokens notEmpty and: [self tokens last isExtendableWith: character])
ifTrue: [self tokens last append: character]
ifFalse: [self tokens add: (self tokenFor: character at: position)]]
ifFalse: [self tokens add: (self tokenFor: character at: position)]].

self content: aString
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
parsing
cutCloser: closingMarkdownEmphasisDelimiter to: aLength
cutCloser: closingMarkdownDelimiter to: aLength

closingMarkdownEmphasisDelimiter length > aLength
closingMarkdownDelimiter length > aLength
ifTrue: [^ self tokens
add: (closingMarkdownEmphasisDelimiter cutFromStart: aLength) asStringToken
before: closingMarkdownEmphasisDelimiter]
add: (closingMarkdownDelimiter cutFromStart: aLength) asStringToken
before: closingMarkdownDelimiter]
ifFalse: [^ self tokens
at: (self tokens indexOf: closingMarkdownEmphasisDelimiter)
put: closingMarkdownEmphasisDelimiter asStringToken]
at: (self tokens indexOf: closingMarkdownDelimiter)
put: closingMarkdownDelimiter asStringToken]

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
parsing
findCloserFor: anOpener ifFound: foundBlock

| nextTokens startIndex |
startIndex := (self tokens indexOf: anOpener).
nextTokens := self tokens copyFrom: startIndex to: self tokens size.
nextTokens detect: [:token |
token isDelimiter
and: [token isCloser]
and: [token matches: anOpener]]
ifFound: [:match | ^ foundBlock value: match]
ifNone: []
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
parsing - tokenization
followingTokenOf: aMarkdownToken

| token |
token := self tokens after: aMarkdownToken ifAbsent: [^ MarkdownString new].
^ token
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
inlineElements: anObject
inlineElements := anObject
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
accessing
inlineElements
^ inlineElements
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
links: aCollectionOfMarkdownLinks

links := aCollectionOfMarkdownLinks
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
accessing
links

^ links
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,6 @@ parse: aString
clean;
tokenize: aString;
interpretTokens.
^ self emphases

^ self inlineElements

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
parsing - tokenization
precedingTokenOf: aMarkdownToken

| token |
token := self tokens before: aMarkdownToken ifAbsent: [^ MarkdownString new].
^ token
Original file line number Diff line number Diff line change
@@ -1,9 +1,24 @@
parsing
process: opener and: closer

| length |
self emphases add: (closer emphasisStartingAt: opener).
self removeDelimitersBetween: opener and: closer.
length := closer delimiterLengthForEmphasisWith: opener.
self cutOpener: opener to: length.
^ self cutCloser: closer to: length
| length nextToken urlCloser |
(opener class = MarkdownOpeningLinkDelimiter and: [closer class = MarkdownClosingLinkDelimiter])
ifTrue: [self inlineElements add: (closer linkStartingAt: opener).
length := 1.
nextToken := self followingTokenOf: closer.
nextToken class = MarkdownOpeningURLDelimiter
ifTrue: [urlCloser := self findCloserFor: nextToken ifFound: [:closingBracket | closingBracket].
(urlCloser = self or: [urlCloser isNil])
ifFalse: [self inlineElements last url: (self content copyFrom: nextToken startPosition + nextToken length to: urlCloser endPosition - urlCloser length).
(self tokens copyFrom: (self tokens indexOf: nextToken) to: (self tokens indexOf: urlCloser))
select: [: token | token isDelimiter]
thenDo: [:delimiter |
self tokens at: (self tokens indexOf: delimiter) put: delimiter asStringToken]]].
self cutOpener: opener to: length.
^ self cutCloser: closer to: length.]
ifFalse: [ (opener class = MarkdownEmphasisDelimiter and: [closer class = MarkdownEmphasisDelimiter])
ifTrue: [ self inlineElements add: (closer emphasisStartingAt: opener).
self removeDelimitersBetween: opener and: closer.
length := closer delimiterLengthForEmphasisWith: opener.
self cutOpener: opener to: length.
^ self cutCloser: closer to: length]]
Loading

0 comments on commit a633dc4

Please sign in to comment.