" I model a Mardeep file as described in https://casual-effects.com/markdeep/ " Class { #name : #Markdeep, #superclass : #Object, #instVars : [ 'title', 'body', 'tocStyle', 'comments', 'tail', 'language', 'config', 'metadata', 'head' ], #category : #'Grafoscopio-Utils-Core' } { #category : #'as yet unclassified' } Markdeep class >> fromMarkdownFile: aFileReference [ ^ self new fromMarkdownFile: aFileReference. ] { #category : #'instance creation' } Markdeep >> authors [ self metadata at: 'authors' ifPresent: [:k | ^ '**', k, '**' ]. ^ ''. ] { #category : #accessing } Markdeep >> body [ ^ body ] { #category : #accessing } Markdeep >> body: anObject [ body := anObject ] { #category : #accessing } Markdeep >> comments [ ^ comments ifNil: [ ^ comments := true ] ] { #category : #accessing } Markdeep >> comments: aBoolean [ "I tell if comments are enabled by default or not." comments := aBoolean ] { #category : #utilities } Markdeep >> commentsProvider [ "I return the url of the default service that provides annotation support. I am used to add such support in the contents of the Markdeep page." ^ 'https://hypothes.is' ] { #category : #utilities } Markdeep >> commentsProviderStrings [ "I associate a comments service provider with the string that is required to be added to the document to enable such provider." | providers | providers := Dictionary new. providers at: 'https://hypothes.is' put: ' '. ^ providers ] { #category : #utilities } Markdeep >> commentsSupport [ "I enable comments of the page." self comments ifFalse: [ ^ self ]. ^ self commentsProviderStrings at: self commentsProvider ] { #category : #accessing } Markdeep >> config [ ^ config ] { #category : #accessing } Markdeep >> config: aDictionary [ config := aDictionary ] { #category : #'instance creation' } Markdeep >> contents [ | output | output := '' writeStream. output nextPutAll: self headContents; lf; lf; nextPutAll: ' **', self title, '**'; lf; nextPutAll: ' ', self authors ; lf; nextPutAll: ' ', self version; lf; lf; nextPutAll: self body; lf; lf; nextPutAll: self tail; lf; lf; lf; lf; nextPutAll: self commentsSupport. ^ output contents. ] { #category : #persistence } Markdeep >> exportAsFile [ | newFile | self markdownFile ifNil: [ self inform: 'Define an input Markdown file or use #exportAsFileOn: instead.' ]. newFile := (self markdownFile fullName, '.html') asFileReference. self exportAsFileOn: newFile. ] { #category : #persistence } Markdeep >> exportAsFileOn: aFileReference [ aFileReference ensureDelete. aFileReference exists ifFalse: [ aFileReference ensureCreateFile ]. aFileReference writeStreamDo: [ :stream | stream nextPutAll: self contents ]. self inform: 'Exported as: ', String cr, aFileReference fullName. ^ aFileReference ] { #category : #utilities } Markdeep >> fontAwesomeHeader [ "I enable the font awesome support in the document header" ^ '' ] { #category : #'instance creation' } Markdeep >> fromMarkdownFile: aFileReference [ "I create a Markdeep document from a given Markdown file." self processMarkdownFor: aFileReference. ^ self. ] { #category : #accessing } Markdeep >> gtTextFor: aView [ ^ aView textEditor title: 'Text'; text: [ self contents ] ] { #category : #accessing } Markdeep >> head [ ^ head ifNil: [ head := OrderedCollection new. head add: self fontAwesomeHeader; yourself ] ] { #category : #accessing } Markdeep >> head: anOrderedCollection [ head := anOrderedCollection ] { #category : #'instance creation' } Markdeep >> headContents [ ^ String streamContents: [ :stream | stream nextPutAll: ''; nextPut: Character lf. self head do: [ :line | stream nextPutAll: ' '; nextPutAll: line; nextPut: Character lf ]. stream nextPutAll: ''; nextPut: Character lf. ]. ] { #category : #accessing } Markdeep >> language [ ^ language ] { #category : #accessing } Markdeep >> language: anObject [ language := anObject ] { #category : #accessing } Markdeep >> markdeepScriptTag [ ^ ' ' ] { #category : #accessing } Markdeep >> markdownFile [ ^ self config at: 'markdownFile' ] { #category : #accessing } Markdeep >> markdownFile: aFileReference [ "Where the Mardown file associated with me is stored. Used for sync. and import/export purposes." self config at: 'markdownFile' put: aFileReference ] { #category : #'instance creation' } Markdeep >> metadata [ ^ metadata ifNil: [ metadata := OrderedDictionary new ] ] { #category : #utilities } Markdeep >> metadataFromXML: aXMLDocument [ | metaDict | metaDict := OrderedDictionary new. (aXMLDocument xpath: '//meta') do: [ :each | metaDict at: (each @ 'name') stringValue put: (each @ 'content') stringValue ]. ^ metaDict ] { #category : #printing } Markdeep >> printOn: aStream [ super printOn: aStream. aStream nextPutAll: '( ', self title, ' )' ] { #category : #'instance creation' } Markdeep >> processMarkdownFor: aFileReference [ "comment stating purpose of message" | markdownContent | self markdownFile: aFileReference. markdownContent := Markdown fromFile: aFileReference. self body: (markdownContent commentYAMLMetadata contents). ] { #category : #accessing } Markdeep >> tail [ "I enable the document tail, which, in turn, enables a Markdeep document" | output | output := '' writeStream. output nextPutAll: ''; lf; lf; nextPutAll: ''; lf; nextPutAll: ''; lf; nextPutAll: self markdeepScriptTag; lf; nextPutAll: ''. ^ output contents ] { #category : #accessing } Markdeep >> tail: anObject [ tail := anObject ] { #category : #accessing } Markdeep >> title [ ^ title ] { #category : #accessing } Markdeep >> title: anObject [ title := anObject ] { #category : #accessing } Markdeep >> tocStyle [ ^ tocStyle ifNil: [ tocStyle := 'short' ] ] { #category : #accessing } Markdeep >> tocStyle: anObject [ tocStyle := anObject ] { #category : #'instance creation' } Markdeep >> version [ self metadata at: 'version' ifPresent: [:value | ^ 'v',value ]. ^ '' ]