diff --git a/repository/Grafoscopio-Utils/Markdown.class.st b/repository/Grafoscopio-Utils/Markdown.class.st index a5c9cc4..b0866db 100644 --- a/repository/Grafoscopio-Utils/Markdown.class.st +++ b/repository/Grafoscopio-Utils/Markdown.class.st @@ -18,6 +18,12 @@ Markdown class >> fromFile: aFileReference [ ^ self new fromFile: aFileReference ] +{ #category : #utilities } +Markdown class >> yamlMetadataDelimiter [ + ^ '---' + +] + { #category : #operation } Markdown >> commentYAMLMetadata [ | newContents | @@ -34,7 +40,7 @@ Markdown >> commentYAMLMetadata [ ^ self contents ] -{ #category : #utility } +{ #category : #utilities } Markdown >> containsYAMLMetadataClosing [ ^ self locateYAMLMetadataClosing > 0 ] @@ -49,13 +55,13 @@ Markdown >> contents: anObject [ contents := anObject ] -{ #category : #utility } +{ #category : #utilities } Markdown >> detectYAMLMetadata [ | lines | lines := self lines. ^ self startsWithYAMLMetadataDelimiter and: [ lines allButFirst - detect: [ :currentLine | currentLine beginsWith: '---' ] + detect: [ :currentLine | currentLine beginsWith: self class yamlMetadataDelimiter ] ifFound: [ ^ true ] ifNone: [ ^ false ] ] ] @@ -70,24 +76,38 @@ Markdown >> fromFile: aFileReference [ self contents: aFileReference contents. ] -{ #category : #utility } +{ #category : #utilities } Markdown >> lines [ ^ self contents lines. ] -{ #category : #utility } +{ #category : #utilities } Markdown >> locateYAMLMetadataClosing [ "I return the line where the closing of the YAML metadata occurs or 0 if no closing is found." | result | self startsWithYAMLMetadataDelimiter ifFalse: [ ^ self ]. result := 0. self lines allButFirst doWithIndex: [ :currentLine :i | - (currentLine beginsWith: '---') ifTrue: [ result := i ] ]. + (currentLine beginsWith: self class yamlMetadataDelimiter) ifTrue: [ result := i ]]. ^ result + ] -{ #category : #utility } +{ #category : #utilities } Markdown >> startsWithYAMLMetadataDelimiter [ - ^ self lines first beginsWith: '---' + ^ self lines first beginsWith: self class yamlMetadataDelimiter ] + +{ #category : #utilities } +Markdown >> yamlMetadataAsString [ + | output | + self extractYAMLMetadata ifNil: [ ^ nil ]. + output := String new writeStream. + output nextPutAll: self class yamlMetadataDelimiter; cr. + self extractYAMLMetadata do: [ :line | + output nextPutAll: line; cr. + ]. + output nextPutAll: self class yamlMetadataDelimiter; cr. + ^ output contents. +] diff --git a/repository/Grafoscopio-Utils/MarkupFile.class.st b/repository/Grafoscopio-Utils/MarkupFile.class.st index 05f5131..53b3393 100644 --- a/repository/Grafoscopio-Utils/MarkupFile.class.st +++ b/repository/Grafoscopio-Utils/MarkupFile.class.st @@ -1,3 +1,6 @@ +" +I model common operations made with several markup files. +" Class { #name : #MarkupFile, #superclass : #Object, @@ -8,11 +11,11 @@ Class { } { #category : #persistence } -MarkupFile class >> exportAsFileOn: aFileReferenceOrFileName containing: contents [ +MarkupFile class >> exportAsFileOn: aFileReferenceOrFileName containing: text [ | file | file := aFileReferenceOrFileName asFileReference. file exists ifFalse: [ file ensureCreateFile ]. file writeStreamDo: [ :stream | - stream nextPutAll: contents ]. + stream nextPutAll: text withInternetLineEndings]. self inform: 'Exported as: ', String cr, file fullName ]