| code out key | code := 'gtgtsgipgttptinggipsppaigsesgpetgstpatetisiesagaeaigttetepitiatsegssieeeeatepaaiagtpieataatppiitgiapsteitatiiatpetetetttgpetpaasipttssstpeeeggtiagtttegtiipestsasgpsepaasapttgattgiatppegitiatpasgatgepttggapesaeetaeissttggieietgspagesiipestipggstttpateptitiaetottissgggtttaipappgstsptttgtpispattgegstltiappseisapgistaiagteeiptptpisaieisagstapeteietgteiisgtiptstgtstasspeatspptitttatteastsgtptgtasggpniaaeteaisett' readStream. key := 'neapolitan' readStream. out := String new writeStream. [key atEnd] whileFalse: [ out nextPutAll: (code upTo: key peek). (code skip: -1; next) ~= key peek ifTrue: [self error: 'not complete']. out nextPutAll: '[', key next asString, ']' ]. out nextPutAll: code upToEnd. ^out contents
code skip: -1; next あたりがイマイチ。^^;