MiniDocs/src/MiniDocs/XMLElement.extension.st

57 lines
1.9 KiB
Smalltalk

Extension { #name : #XMLElement }
{ #category : #'*MiniDocs' }
XMLElement >> asSnippetDictionary [
| response |
response := STON fromString: (self attributes at: 'st-data').
response at: 'className' put: (self attributes at: 'st-class').
response at: 'content' put: self sanitizedContent.
^ response
]
{ #category : #'*MiniDocs' }
XMLElement >> sanitizedContent [
| className sanitizedText |
className := self attributes at: 'st-class'.
(className = 'LeTextSnippet')
ifTrue: [
sanitizedText := self contentString.
sanitizedText := sanitizedText allButFirst.
sanitizedText := sanitizedText allButLast.
].
(className = 'LePharoSnippet') ifTrue: [ | joinedText |
sanitizedText := self contentString lines.
sanitizedText := sanitizedText copyFrom: 4 to: sanitizedText size -2.
joinedText := '' writeStream.
sanitizedText do: [ :line | joinedText nextPutAll: line; nextPut: Character lf ].
sanitizedText := joinedText contents allButLast.
].
(className = 'LePictureSnippet')
ifTrue: [ | linkParser linkParserNodes|
linkParser := (PPCommonMarkBlockParser parse: self contentString allButFirst)
accept: CMBlockVisitor new.
linkParserNodes := linkParser children first children.
linkParserNodes size = 1
ifTrue: [
linkParserNodes first className = 'PPCMLink'
ifTrue: [ sanitizedText := linkParserNodes first label text]
ifFalse: [
sanitizedText := (linkParserNodes first text splitOn: '](') first.
sanitizedText := sanitizedText copyReplaceAll: '![' with: ''
]
]
ifFalse: [
sanitizedText := '' writeStream.
linkParserNodes allButLast do: [:each |
each className = 'PPCMText'
ifTrue: [ sanitizedText nextPutAll: each text allButFirst ].
each className = 'PPCMLink'
ifTrue: [ sanitizedText nextPutAll: each printString ]
].
sanitizedText := sanitizedText contents
]
].
^ sanitizedText
]