Thank you, Sven. That was a much better place for internalizing after reconstituting. I now have bi-directional substitutions working with STON. I’m grateful.
Sent from ProtonMail Mobile On Tue, Nov 14, 2017 at 09:24, Sven Van Caekenberghe <s...@stfx.eu> wrote: > Henry, > On 14 Nov 2017, at 15:02, henry wrote: > > Hello, I am trying to > extend STON to allow for substitutions as data is written out or read in. On > the write side I got it working as #nextPut: is recursively called, so that > is the perfect place to substitute before an object is written. I have tested > and my changes work well, where I have an arbitrary object as a subObject and > it gets substituted out for my Descriptor object. OK good. > I am having > difficult on the read side identifying where a substitution lookup should > occur after decoding the object on the input stream. I want to inflate the > Descritpor object, with its data, and call for a possible substitution. As it > is a Descriptor, it should get substituted with the right bits on the read > side. I chose to try and do this in the method #setReference:to: and put the > substitute into the objects list. This did not work. Where is a good place to > look within STON to do a read-side post-substitution? In > STONReader>>#parseObject | targetClass reference object | [ reference := self > newReference. targetClass := self parseClass. object := targetClass fromSton: > self. self setReference: reference to: object ] ... I would try just > re-assigning object with your custom substitute. Like this > MySTONReader>>#parseObject | targetClass reference object | [ reference := > self newReference. targetClass := self parseClass. object := targetClass > fromSton: self. object := object resolveSubstitution. self setReference: > reference to: object ] ... The references are used if the same (#==) object > is used twice, then you get something like STON fromString: > '[Point[1,2],@2]'. which is an 2 element Array where the exact same object is > in both positions (structure sharing). This works with circular references > too (but be careful because the inspector might loop). HTH, Sven > Thank you. > > > - HH > > @callistohouse.club>