| 
					
				 | 
			
			
				@@ -425,6 +425,11 @@ import: aStream 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Object subclass: #MethodCategory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	instanceVariableNames: 'methods name theClass' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	package: 'Importer-Exporter'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!MethodCategory commentStamp! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I am an abstraction for a method category in a class / metaclass. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I know of my class, name and methods. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I am used when exporting a package.! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 !MethodCategory methodsFor: 'accessing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -636,6 +641,34 @@ loadPackages: aCollection prefix: aString 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Object subclass: #PluggableExporter 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	instanceVariableNames: 'recipe' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	package: 'Importer-Exporter'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+!PluggableExporter commentStamp! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I am an engine for exporting structured data on a Stream. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+My instances are created using 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  PluggableExporter newUsing: recipe, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+where recipe is structured description of the exporting algorithm, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Then actual exporting is done using 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  aPluggableExporter export: data usingRecipe: recipe on: stream 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Recipe is an array, which can contain two kinds of elements: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ - an assocation where key is the receiver and value is two-arg selector 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    In this case, `receiver perform: selector withArguments: { data. stream }` is called. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	This essentially defines one step of export process. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	The key (eg. receiver) is presumed to be some kind of 'repository' of the exporting methods 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	that just format appropriate aspect of data into a stream; like a class or a singleton, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	so you can make the recipe itself decoupled from data. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ - a subarray (sa), where first element is special and the rest is recursive recipe 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    `sa first` must be an association similar to one above, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	with key being the 'repository' receiver, but value is one-arg selector. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	In this case, `receiver perform: selector withArguments: { data }` should create a collection. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Then, the sub-recipe (`sa allButFirst`) is applied to every element of a collection, eg. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  collection do: [ :each | self export: each using: sa allButFirst on: stream ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+I am used to export amber packages, so I have convenience method 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+exportPackage: aPackage on: aStream 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+which exports aPackage using recipe you passed on newUsing: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(it is otherwise no special, so it may be renamed to export:on:)! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 !PluggableExporter methodsFor: 'accessing'! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |