diff --git a/src/MiniDocs/Markdown.class.st b/src/MiniDocs/Markdown.class.st index aca0e1d..9db6cd5 100644 --- a/src/MiniDocs/Markdown.class.st +++ b/src/MiniDocs/Markdown.class.st @@ -20,12 +20,6 @@ Markdown class >> fromFile: aFileReference [ ^ self new fromFile: aFileReference ] -{ #category : #utilities } -Markdown class >> yamlMetadataDelimiter [ - ^ '---' - -] - { #category : #accessing } Markdown >> asMarkdeep [ ^ Markdeep new @@ -74,8 +68,8 @@ Markdown >> contents [ ] { #category : #accessing } -Markdown >> contents: anObject [ - body := anObject +Markdown >> contents: aString [ + body := aString ] { #category : #accessing } @@ -88,26 +82,6 @@ Markdown >> contentsWithoutYAMLMetadata [ ^ newContents contents. ] -{ #category : #operation } -Markdown >> deleteYAMLMetadata [ - | newContents | - self detectYAMLMetadata ifFalse: [ ^ self ]. - newContents := '' writeStream. - (self lines copyFrom: self yamlMetadataClosingLineNumber + 1 to: self lines size) do: [ :line | - newContents nextPutAll: line; lf;lf ]. - ^ newContents contents. -] - -{ #category : #utilities } -Markdown >> detectYAMLMetadata [ - | lines | - lines := self lines. - ^ self startsWithYAMLMetadataDelimiter - and: [ lines allButFirst - detect: [ :currentLine | currentLine beginsWith: self class yamlMetadataDelimiter ] - ifFound: [ ^ true ] ifNone: [ ^ false ] ] -] - { #category : #accessing } Markdown >> documentTree [ | parser| @@ -181,14 +155,14 @@ Markdown >> file: aFileReference [ Markdown >> fromFile: aFileReference [ self contents: aFileReference contents. self file: aFileReference. - self populateMetadata. + self yamlMetadata. self body: self contentsWithoutYAMLMetadata ] { #category : #'instance creation' } Markdown >> fromString: markdownString [ self contents: markdownString. - self populateMetadata. + self yamlMetadata. self contents: self contentsWithoutYAMLMetadata ] @@ -245,11 +219,6 @@ Markdown >> options [ ^ self metadata at: 'options' ifAbsentPut: [ self defaultOptions] ] -{ #category : #accessing } -Markdown >> populateMetadata [ - self metadata: (YAML2JSON fromString: self yamlMetadataString) -] - { #category : #accessing } Markdown >> printOn: aStream [ super printOn: aStream. @@ -257,48 +226,7 @@ Markdown >> printOn: aStream [ nextPutAll: '( ', self title , ' )' ] -{ #category : #utilities } -Markdown >> startsWithYAMLMetadataDelimiter [ - self lines ifEmpty: [^false]. - ^ self lines first beginsWith: self class yamlMetadataDelimiter - -] - { #category : #accessing } Markdown >> title [ ^ self metadata at: 'title' ifAbsentPut: [ self headerAsTitle] ] - -{ #category : #utilities } -Markdown >> yamlMetadataClosingLineNumber [ - "I return the line where the closing of the YAML metadata occurs or 0 if no closing is found." - self startsWithYAMLMetadataDelimiter ifFalse: [ ^ self ]. - self lines allButFirst doWithIndex: [ :currentLine :i | - (currentLine beginsWith: self class yamlMetadataDelimiter) ifTrue: [ ^ i + 1 ]] - -] - -{ #category : #operation } -Markdown >> yamlMetadataString [ - | output yamlLines | - self detectYAMLMetadata ifFalse: [ ^nil ]. - self lines ifEmpty: [ ^nil ]. - yamlLines := self lines copyFrom: 2 to: self yamlMetadataClosingLineNumber - 1. - output := '' writeStream. - yamlLines do: [ :line | - output - nextPutAll: line; - nextPut: Character lf. ]. - ^ output contents -] - -{ #category : #utilities } -Markdown >> yamlMetadataStringWithDelimiters [ - | output | - self yamlMetadataString ifNil: [ ^ nil ]. - output := String new writeStream. - output nextPutAll: self class yamlMetadataDelimiter; cr. - output nextPutAll: self yamlMetadataString. - output nextPutAll: self class yamlMetadataDelimiter; cr. - ^ output contents. -] diff --git a/src/MiniDocs/MarkupFile.class.st b/src/MiniDocs/MarkupFile.class.st index cea9145..63b6016 100644 --- a/src/MiniDocs/MarkupFile.class.st +++ b/src/MiniDocs/MarkupFile.class.st @@ -11,13 +11,16 @@ Class { } { #category : #persistence } -MarkupFile class >> exportAsFileOn: aFileReferenceOrFileName containing: aString [ - | file | +MarkupFile class >> exportAsFileOn: aFileReferenceOrFileName containing: anObject [ + | file preprocessed | file := aFileReferenceOrFileName asFileReference. file ensureDelete. file exists ifFalse: [ file ensureCreateFile ]. + anObject className = String + ifTrue: [ preprocessed := anObject withInternetLineEndings ] + ifFalse: [preprocessed := STON toStringPretty: anObject ]. file writeStreamDo: [ :stream | - stream nextPutAll: ( aString ) withInternetLineEndings]. + stream nextPutAll: preprocessed ]. self inform: 'Exported as: ', String cr, file fullName. ^ file ] diff --git a/src/MiniDocs/String.extension.st b/src/MiniDocs/String.extension.st index 2a45029..de321c9 100644 --- a/src/MiniDocs/String.extension.st +++ b/src/MiniDocs/String.extension.st @@ -20,6 +20,26 @@ String >> asDashedLowercase [ ^ '-' join: (self substrings collect: [:each | each asLowercase ]) ] +{ #category : #'*MiniDocs' } +String >> deleteYAMLMetadata [ + | newContents | + self detectYAMLMetadata ifFalse: [ ^ self ]. + newContents := '' writeStream. + (self lines copyFrom: self yamlMetadataClosingLineNumber + 1 to: self lines size) do: [ :line | + newContents nextPutAll: line; lf;lf ]. + ^ newContents contents. +] + +{ #category : #'*MiniDocs' } +String >> detectYAMLMetadata [ + | lines | + lines := self lines. + ^ self startsWithYAMLMetadataDelimiter + and: [ lines allButFirst + detect: [ :currentLine | currentLine beginsWith: self class yamlMetadataDelimiter ] + ifFound: [ ^ true ] ifNone: [ ^ false ] ] +] + { #category : #'*MiniDocs' } String >> romanizeAccents [ | modified corrections | @@ -33,7 +53,59 @@ String >> romanizeAccents [ ^ modified ] +{ #category : #'*MiniDocs' } +String >> startsWithYAMLMetadataDelimiter [ + self lines ifEmpty: [^false]. + ^ self lines first beginsWith: self class yamlMetadataDelimiter + +] + { #category : #'*MiniDocs' } String >> withoutXMLTagDelimiters [ ^ self copyWithoutAll: #($< $>) ] + +{ #category : #'*MiniDocs' } +String >> yamlMetadata [ + ^ (YAML2JSON fromString: self yamlMetadataString) +] + +{ #category : #'*MiniDocs' } +String >> yamlMetadataClosingLineNumber [ + "I return the line where the closing of the YAML metadata occurs or 0 if no closing is found." + self startsWithYAMLMetadataDelimiter ifFalse: [ ^ self ]. + self lines allButFirst doWithIndex: [ :currentLine :i | + (currentLine beginsWith: self class yamlMetadataDelimiter) ifTrue: [ ^ i + 1 ]] + +] + +{ #category : #'*MiniDocs' } +String class >> yamlMetadataDelimiter [ + ^ '---' + +] + +{ #category : #'*MiniDocs' } +String >> yamlMetadataString [ + | output yamlLines | + self detectYAMLMetadata ifFalse: [ ^nil ]. + self lines ifEmpty: [ ^nil ]. + yamlLines := self lines copyFrom: 2 to: self yamlMetadataClosingLineNumber - 1. + output := '' writeStream. + yamlLines do: [ :line | + output + nextPutAll: line; + nextPut: Character lf. ]. + ^ output contents +] + +{ #category : #'*MiniDocs' } +String >> yamlMetadataStringWithDelimiters [ + | output | + self yamlMetadataString ifNil: [ ^ nil ]. + output := String new writeStream. + output nextPutAll: self class yamlMetadataDelimiter; cr. + output nextPutAll: self yamlMetadataString. + output nextPutAll: self class yamlMetadataDelimiter; cr. + ^ output contents. +]