virtual nsresult HandleStartToken(  nsCParserNode* aNode,
nsresult CElement::HandleStartToken(  nsCParserNode* aNode,
  virtual nsresult HandleStartToken(  nsCParserNode* aNode,                                      eHTMLTags aTag,                                      nsDTDContext* aContext,                                      nsIHTMLContentSink* aSink) {    nsresult result=NS_OK;    switch(aTag) {      case eHTMLTag_doctypeDecl:        result=HandleDoctypeDecl(aNode,aTag,aContext,aSink);        break;      case eHTMLTag_frameset:        result=aSink->OpenFrameset(*aNode);         result=OpenContext(aNode,aTag,aContext,aSink);        aContext->mFlags.mHadFrameset=PR_TRUE;        break;      case eHTMLTag_base: //nothing to do for these empty tags...            case eHTMLTag_isindex:      case eHTMLTag_link:      case eHTMLTag_meta:        {          CElement* theHead=GetElement(eHTMLTag_head);          if(theHead) {            result=theHead->OpenContext(aNode,aTag,aContext,aSink);            if(NS_SUCCEEDED(result)) {              result=aSink->AddLeaf(*aNode);              if(NS_SUCCEEDED(result)) {                result=theHead->CloseContext(aNode,aTag,aContext,aSink);              }            }          }        }        break;      case eHTMLTag_object:        {          CElement* theHead=GetElement(eHTMLTag_head);          if(theHead) {            result=theHead->OpenContext(aNode,aTag,aContext,aSink);            if(NS_SUCCEEDED(result)) {              result=OpenContainerInContext(aNode,aTag,aContext,aSink);            }          }        }        break;      case eHTMLTag_script:      case eHTMLTag_style:      case eHTMLTag_title:        result=OpenContext(aNode,aTag,aContext,aSink);  //force the title onto the context stack        break;      case eHTMLTag_newline:      case eHTMLTag_whitespace:      case eHTMLTag_comment:        break;      default:        CElement* theBody=GetElement(eHTMLTag_body);        if(theBody) {          CElement *theChildElement=GetElement(aTag);          if(theBody->CanContain(theChildElement,aContext)) {            //let's auto open the body                                    CToken* theToken=(CStartToken*)aContext->mTokenAllocator->CreateTokenOfType(eToken_start,eHTMLTag_body);            nsCParserNode* theNode=aContext->mNodeAllocator->CreateNode(theToken,0,0);            result=theBody->HandleStartToken(theNode,eHTMLTag_body,aContext,aSink);            if(NS_SUCCEEDED(result)) {              if(eHTMLTag_body==aContext->Last()) {                result=theBody->HandleStartToken(aNode,aTag,aContext,aSink);              }            }          }        }        //for now, let's drop other elements onto the floor.        break;    }//switch    return result;  }