- I want to make a code browser for RubyLanguage.
- I want it to include most of the good features of the SmalltalkLanguage code browser.
- 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