nsresult nsLoggingSink::OpenNode(const char* aKind, const nsIParserNode& aNode) { WriteTabs(mOutput,++mLevel); PR_fprintf(mOutput,"<open container="); nsHTMLTag nodeType = nsHTMLTag(aNode.GetNodeType()); if ((nodeType >= eHTMLTag_unknown) && (nodeType <= nsHTMLTag(NS_HTML_TAG_MAX))) { const PRUnichar* tag = nsHTMLTags::GetStringValue(nodeType); PR_fprintf(mOutput, "\"%s\"", NS_ConvertUTF16toUTF8(tag).get()); } else { char* text = nsnull; GetNewCString(aNode.GetText(), &text); if(text) { PR_fprintf(mOutput, "\"%s\"", text); nsMemory::Free(text); } } if (WillWriteAttributes(aNode)) { PR_fprintf(mOutput, ">\n"); WriteAttributes(aNode); PR_fprintf(mOutput, "</open>\n"); } else { PR_fprintf(mOutput, ">\n"); } return NS_OK; }
nsresult nsLoggingSink::LeafNode(const nsIParserNode& aNode) { WriteTabs(mOutput,1+mLevel); nsHTMLTag nodeType = nsHTMLTag(aNode.GetNodeType()); if ((nodeType >= eHTMLTag_unknown) && (nodeType <= nsHTMLTag(NS_HTML_TAG_MAX))) { const PRUnichar* tag = nsHTMLTags::GetStringValue(nodeType); if(tag) PR_fprintf(mOutput, "<leaf tag=\"%s\"", NS_ConvertUTF16toUTF8(tag).get()); else PR_fprintf(mOutput, "<leaf tag=\"???\""); if (WillWriteAttributes(aNode)) { PR_fprintf(mOutput, ">\n"); WriteAttributes(aNode); PR_fprintf(mOutput, "</leaf>\n"); } else { PR_fprintf(mOutput, "/>\n"); } } else { PRInt32 pos; nsAutoString tmp; char* str = nsnull; switch (nodeType) { case eHTMLTag_whitespace: case eHTMLTag_text: GetNewCString(aNode.GetText(), &str); if(str) { PR_fprintf(mOutput, "<text value=\"%s\"/>\n", str); nsMemory::Free(str); } break; case eHTMLTag_newline: PR_fprintf(mOutput, "<newline/>\n"); break; case eHTMLTag_entity: tmp.Append(aNode.GetText()); tmp.Cut(0, 1); pos = tmp.Length() - 1; if (pos >= 0) { tmp.Cut(pos, 1); } PR_fprintf(mOutput, "<entity value=\"%s\"/>\n", NS_LossyConvertUTF16toASCII(tmp).get()); break; default: NS_NOTREACHED("unsupported leaf node type"); }//switch } return NS_OK; }
NS_IMETHODIMP nsLoggingSink::CloseContainer(const nsHTMLTag aTag) { nsresult theResult=NS_OK; nsHTMLTag nodeType = nsHTMLTag(aTag); if ((nodeType >= eHTMLTag_unknown) && (nodeType <= nsHTMLTag(NS_HTML_TAG_MAX))) { const PRUnichar* tag = nsHTMLTags::GetStringValue(nodeType); theResult = CloseNode(NS_ConvertUTF16toUTF8(tag).get()); } else theResult= CloseNode("???"); //then proxy the call to the real sink if you have one. if(mSink) { theResult=mSink->CloseContainer(aTag); } return theResult; }
void nsCParserStartNode::GetSource(nsString& aString) const { aString.Assign(PRUnichar('<')); const PRUnichar* theTagName = nsHTMLTags::GetStringValue(nsHTMLTag(mToken->GetTypeID())); if (theTagName) { aString.Append(theTagName); } PRInt32 index; PRInt32 size = mAttributes.GetSize(); for (index = 0 ; index < size; ++index) { CAttributeToken *theToken = static_cast<CAttributeToken*>(mAttributes.ObjectAt(index)); if (theToken) { theToken->AppendSourceTo(aString); aString.Append(PRUnichar(' ')); //this will get removed... } } aString.Append(PRUnichar('>')); }