HyperTalk How to?

If a new document type instead of HTML is used
Write a new parser! Make sure it is a subclass of StreamFilter. The root of the parse tree should be HyperComposite. Also, make sure StreamManager can assign the new parser.

If a new type of link is needed
Make sure it has a default protocol to access HyperComponents and there exists a subclass of LinkResolver that can retrieve this new link type.

If a new Protocol is needed
Make sure its Request object has all the information needed.

If HyperComponents are rendered in a different way
Make a new subclass of RenderPolicy first. Then, modify the HyperRenderer class method #initialize to use the new RenderPolicy. Then, do a HyperRender initialize to install the change.

If a new user action is considered meaningful, say instead of a click, a drag meaningful to the program...
Make modifications to the Command object of HyperApp or the WebController so that it can compose a WebGUIAction( or other Command object[ralph]) that contains all the information needed by the LinkResolvers. You also need to return a unique #actionType for this parameter object. Actually, the current design of Command, WebGUIAction and WebController is quite limited. It is enough for a Web browser. However, more complex design may be needed.

If different emphasis or textStyles are needed to format the text...
Modify your concrete subclass method #initStyleMap of your concrete subclass of HyperApp to put the new emphasis or textStyles in.

If the user's action in HyperApp affects other objects... For example, if a user selects a word on the window of NetFish, an English Dictionary would then display the definition of that word.
In the #initialize method of NetFish, the English Dictionary model is subscribed as a dependent of the WebClient of NetFish by the instance method #registerSubscriber:. Then, you need to register a LinkResolver to WebClient by #registerLinkResolver:. Make sure the aspectSymbol of the LinkResolver is recognized in the #update:with: of the English Dictionary model, say #spelling in this case. While NetFish is running, if the LinkResolver can retrieve the spelling of the word the user just clicked, WebClient then broadcasts the spelling through the dependency mechanism with the aspectSymbol, #spelling in this case. When English Dictionary model receives this update, it updates its own window to display the definition of the word.

If a new Viewer or Filter is written
Modify the initialization of the class instance variable TypeMap of the concrete subclass of SMWeb.

If a new HTML tag is defined
Add an entry to class instance variable Elements in the class method #initElements of HtmlDtd. Each entry contains (name, content, attributes, parents, mappedObjectClass hTextFlag). Name is the symbol of the new tag. Content and attributes are defined in the official definition of Dtd. Parents are tags that can be the parent of this tag. If you set parent to nil, then any tags can be a parent of this new tag. MappedObject is the class symbol of the object generated by the parser when this new tag is parsed. hTextFlag specifies whether,during rendering by the RenderPolicy, the content of this tag, if it can be rendered into a ComposedText, can be combined with other tags into the same paragraph. A RenderPolicy can overwrite this.