diff --git a/src/Bloc-Serialization-Stash/BlSvgPath.extension.st b/src/Bloc-Serialization-Stash/BlSvgPath.extension.st new file mode 100644 index 0000000..77d0697 --- /dev/null +++ b/src/Bloc-Serialization-Stash/BlSvgPath.extension.st @@ -0,0 +1,15 @@ +Extension { #name : #BlSvgPath } + +{ #category : #'*Bloc-Serialization-Stash' } +BlSvgPath >> stashAccessors [ + + + | accessors | + accessors := OrderedCollection new. + fillRule = EvenOdd ifTrue: [ + accessors add: (#useEvenOddFillRule -> self) onlySetOnStash ]. + accessors add: + ([ :e | 'pathString: (<1p>)' expandMacrosWith: pathString ] -> self) + onlySetOnStash. + ^ accessors +] diff --git a/src/Bloc-Serialization/BlElement.extension.st b/src/Bloc-Serialization/BlElement.extension.st index f9a5923..32f8d96 100644 --- a/src/Bloc-Serialization/BlElement.extension.st +++ b/src/Bloc-Serialization/BlElement.extension.st @@ -1,5 +1,11 @@ Extension { #name : #BlElement } +{ #category : #'*Bloc-Serialization' } +BlElement >> materializeAsBlElement [ + + ^ self +] + { #category : #'*Bloc-Serialization' } BlElement >> serialize [ diff --git a/src/Bloc-Serialization/BlSerializer.class.st b/src/Bloc-Serialization/BlSerializer.class.st index a2f5319..c14ec8e 100644 --- a/src/Bloc-Serialization/BlSerializer.class.st +++ b/src/Bloc-Serialization/BlSerializer.class.st @@ -4,7 +4,6 @@ Serailizer class for Bloc Class { #name : #BlSerializer, #superclass : #Object, - #traits : 'TBlSerializer', #classTraits : 'TBlSerializer classTrait', #classInstVars : [ 'serializer' @@ -12,18 +11,28 @@ Class { #category : #'Bloc-Serialization-Core' } +{ #category : #'as yet unclassified' } +BlSerializer class >> allSerializer [ + + ^ TBlSerializer users +] + { #category : #serialization } -BlSerializer class >> materialize: aString [ - "Materialize a String into a BlElement and return it. Default materializer is STON." +BlSerializer class >> materialize: anObject [ | serializerClassName serializerClass | - aString ifEmpty: [ ^ BlocMaterializationError new signal ]. - aString first = $" ifFalse: [ - ^ BlStonSerializer materialize: aString ]. - serializerClassName := aString lines first allButFirst allButLast. + (anObject isKindOf: BlElement) ifTrue: [ ^ anObject ]. + anObject ifEmpty: [ ^ BlocMaterializationError new signal ]. + + anObject first = $" ifFalse: [ + ^ self unknownMaterializerFor: anObject ]. + + serializerClassName := anObject lines first allButFirst allButLast. serializerClass := Smalltalk environment classNamed: serializerClassName. - ^ serializerClass materialize: ('' join: aString lines allButFirst) + serializerClass ifNil: [ ^ self unknownMaterializerFor: anObject ]. + + ^ serializerClass materialize: ('' join: anObject lines allButFirst) ] { #category : #initialization } @@ -57,6 +66,16 @@ BlSerializer class >> serializer [ ^ serializer ] +{ #category : #serialization } +BlSerializer class >> unknownMaterializerFor: aString [ + + self allSerializer do: [ :each | + [ ^ each materialize: aString ] + on: BlocMaterializationError + do: [ ] ]. + BlocMaterializationError signal: 'Could not find a Serializer.' +] + { #category : #'see class side' } BlSerializer >> seeClassSide [ ] diff --git a/src/Bloc-Serialization/BlocMaterializationError.class.st b/src/Bloc-Serialization/BlocMaterializationError.class.st index fb1f5c4..7691757 100644 --- a/src/Bloc-Serialization/BlocMaterializationError.class.st +++ b/src/Bloc-Serialization/BlocMaterializationError.class.st @@ -1,5 +1,5 @@ Class { #name : #BlocMaterializationError, #superclass : #BlocSerializerError, - #category : #'Bloc-Serialization-Exception' + #category : #'Bloc-Serialization-Core' } diff --git a/src/Bloc-Serialization/BlocSerializationError.class.st b/src/Bloc-Serialization/BlocSerializationError.class.st index d9a3897..51faa2a 100644 --- a/src/Bloc-Serialization/BlocSerializationError.class.st +++ b/src/Bloc-Serialization/BlocSerializationError.class.st @@ -1,5 +1,5 @@ Class { #name : #BlocSerializationError, #superclass : #BlocSerializerError, - #category : #'Bloc-Serialization-Exception' + #category : #'Bloc-Serialization-Core' } diff --git a/src/Bloc-Serialization/BlocSerializerError.class.st b/src/Bloc-Serialization/BlocSerializerError.class.st index 1ea7aa5..26d4c76 100644 --- a/src/Bloc-Serialization/BlocSerializerError.class.st +++ b/src/Bloc-Serialization/BlocSerializerError.class.st @@ -1,5 +1,5 @@ Class { #name : #BlocSerializerError, #superclass : #Error, - #category : #'Bloc-Serialization-Exception' + #category : #'Bloc-Serialization-Core' }