1. I want to make a code browser for RubyLanguage.
	1. I want it to include most of the good features of the SmalltalkLanguage code browser.
	1. I want the code browser to be WebBrowser-based (i.e., to use a web browser as its WindowingSystems [singular]).

So what is the big deal?  Well, in addition to the above, I want to discover a simple building block, or SystemMetaphor, that allows me to construct the browser using a bunch of similar, simple pieces.

Why don't I just start doing ExtremeProgramming, and DoTheSimplestThingThatCouldPossiblyWork?  Well, I am confused.  I am my own customer, and the (researchy) customer part of me wants the browser to emerge from loosely-coupled pieces.  No central logic (although perhaps a central dispatcher).

Given this constraint, I want to do XP.

----

Code browser metaphors I have seen used in the past:

	* Each pane registers for events from, and sends events to, a central event processor

principles / patterns / concepts that may be of use:

	* Headless application - the application should work without its interface - in other words the application should be able to be run from the interpreter window
	* StateMachine - the response to events depends on the current state
	* Ping Pong processing - two, three, or more objects act together to determine the response to an event - usually by sending gradually more specific messages back and forth to each other like a multi-person Ping Pong volley.  AKA DoubleDispatch.
	* Explicit object ranking - give objects rank, and have the higher ranking object do the processing (used with VisualWorksSmalltalk DoubleDispatch) 
	* Blackboard - agents work independently (either asynchronously, or one at a time) on a common data structure.

----

I just went to the couch to think about this for ten minutes.  Here is my current candidate SystemMetaphor: CollectionPlateState

---------------

This sounds like BrowserAbuseSyndrome. What about complex text features such as auto-indent, auto-fill, hiliting keywords, etc? And web browsers lack standardized widgets such as tree browsers, grids, tabs, etc.

----
See also ClassBrowser
----
CategoryMetaphor